为什么按照这个样例去输入会有问题啊
#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% 浮点型数据转int型时会直接去掉小数点后面的数据,不会四舍五入。要四舍五入,给最后算出的数据+0.5再转int就行,如下:
d=1.0*ct2*100/a*1.0+0.5; 本帖最后由 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 ++
jackz007 发表于 2022-12-25 19:46
这个逻辑条件设置有问题,条件分支应该排它!!!
你得这样写:
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。
题目是这个不需要排它吧 建议数据全部用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;
} 焦糖橙子 发表于 2022-12-26 22:47
建议数据全部用float类型,因为int类型在计算时小数点后面的位数全部会舍去,你看我写的就知道了
但这个要只显示整数,后面小数点要四舍五入的 2207122216 发表于 2022-12-27 14:57
但这个要只显示整数,后面小数点要四舍五入的
(int)(data*10)%10>4?(int)(data+1):(int)(data) 2207122216 发表于 2022-12-27 14:57
但这个要只显示整数,后面小数点要四舍五入的
18行修改成
printf("%.0f%c\n%.0f%c",c,'%',d,'%');
就可以了
页:
[1]