2207122216 发表于 2022-12-25 17:18:43

为什么按照这个样例去输入会有问题啊

#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%

lvk 发表于 2022-12-25 19:14:26

浮点型数据转int型时会直接去掉小数点后面的数据,不会四舍五入。要四舍五入,给最后算出的数据+0.5再转int就行,如下:
d=1.0*ct2*100/a*1.0+0.5;

jackz007 发表于 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 ++

2207122216 发表于 2022-12-26 09:07:46

jackz007 发表于 2022-12-25 19:46
这个逻辑条件设置有问题,条件分支应该排它!!!

      你得这样写:

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

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

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

题目是这个不需要排它吧

焦糖橙子 发表于 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;
}

2207122216 发表于 2022-12-27 14:57:53

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

但这个要只显示整数,后面小数点要四舍五入的

jhq999 发表于 2022-12-27 15:19:25

2207122216 发表于 2022-12-27 14:57
但这个要只显示整数,后面小数点要四舍五入的

(int)(data*10)%10>4?(int)(data+1):(int)(data)

焦糖橙子 发表于 2022-12-27 18:16:18

2207122216 发表于 2022-12-27 14:57
但这个要只显示整数,后面小数点要四舍五入的

18行修改成
printf("%.0f%c\n%.0f%c",c,'%',d,'%');
就可以了
页: [1]
查看完整版本: 为什么按照这个样例去输入会有问题啊