鱼C论坛

 找回密码
 立即注册
查看: 2326|回复: 7

[已解决]为什么按照这个样例去输入会有问题啊

[复制链接]
发表于 2022-12-25 17:18:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
#include <stdlib.h>

int main()
{
  int a,ct1,ct2;
  int b,c,d;
  scanf("%d",&a);
  ct1=ct2=0;
  for(int i=0;i<a;i++)
  {
    scanf("%d",&b);
    if(b>=60) ct1++;
    if(b>=85) ct2++;
  }
  c=1.0*ct1*100/a*1.0;
  d=1.0*ct2*100/a*1.0;
  printf("%d%c\n%.1d%c",c,'%',d,'%');
  return 0;
}


输入
7
80
92
56
74
88
100
0
输出
71%
43%

但是我 的第二个输出怎么是42%
最佳答案
2022-12-27 18:16:18
2207122216 发表于 2022-12-27 14:57
但这个要只显示整数,后面小数点要四舍五入的

18行修改成
printf("%.0f%c\n%.0f%c",c,'%',d,'%');
就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-25 19:14:26 | 显示全部楼层
浮点型数据转int型时会直接去掉小数点后面的数据,不会四舍五入。要四舍五入,给最后算出的数据+0.5再转int就行,如下:
d=1.0*ct2*100/a*1.0+0.5;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-25 19:46:34 | 显示全部楼层
本帖最后由 jackz007 于 2022-12-25 19:48 编辑

        这个逻辑条件设置有问题,条件分支应该排它!!!
    if(b>=60) ct1++;
    if(b>=85) ct2++;
        你得这样写:
        if(b >= 85) ct2 ++      ;  // 只要执行了 ct2 ++ 就不会再执行 ct1 ++ 
        else if(b >= 60) ct1 ++ ;  // 只要执行了 ct1 ++ 就不会再执行 ct2 ++ 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-26 09:07:46 | 显示全部楼层
jackz007 发表于 2022-12-25 19:46
这个逻辑条件设置有问题,条件分支应该排它!!!

        你得这样写:

小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。

如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。

请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。

题目是这个不需要排它吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-26 22:47:42 | 显示全部楼层
建议数据全部用float类型,因为int类型在计算时小数点后面的位数全部会舍去,你看我写的就知道了
#include <stdio.h>
#include <stdlib.h>

int main()
{
  float a,ct1,ct2;
  float b,c,d;
  scanf("%f",&a);
  ct1=ct2=0;
  for(int i=0;i<a;i++)
  {
    scanf("%f",&b);
    if(b>=60) ct1++;
    if(b>=85) ct2++;
  }
  c=1.0*ct1*100/a*1.0;
  d=1.0*ct2*100/a*1.0;
  printf("%.1f%c\n%.1f%c",c,'%',d,'%');
  return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-12-27 14:57:53 | 显示全部楼层
焦糖橙子 发表于 2022-12-26 22:47
建议数据全部用float类型,因为int类型在计算时小数点后面的位数全部会舍去,你看我写的就知道了

但这个要只显示整数,后面小数点要四舍五入的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-27 15:19:25 | 显示全部楼层
2207122216 发表于 2022-12-27 14:57
但这个要只显示整数,后面小数点要四舍五入的
(int)(data*10)%10>4?(int)(data+1):(int)(data)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-27 18:16:18 | 显示全部楼层    本楼为最佳答案   
2207122216 发表于 2022-12-27 14:57
但这个要只显示整数,后面小数点要四舍五入的

18行修改成
printf("%.0f%c\n%.0f%c",c,'%',d,'%');
就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 16:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表