鱼C论坛

 找回密码
 立即注册
查看: 613|回复: 6

[已解决]C语言程序出错

[复制链接]
发表于 2020-3-25 15:41:46 | 显示全部楼层 |阅读模式

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

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

x
  1. //输入一个正整数n,再输入n个学生的成绩,计算平均分,并统计不及格成绩的人数
  2. #include<stdio.h>

  3. int main()
  4. {
  5.     int i,fail = 0;
  6.     double sum = 0,n,grade;
  7.     printf("Enter n:");
  8.     scanf("%d",&n);
  9.     for(i = 0; i<=n; i++)
  10.     {
  11.         printf("第%d位成绩为:",i+1);
  12.         scanf("%lf",&grade);
  13.         sum += grade;
  14.         if(grade < 60)
  15.         {
  16.             fail++;
  17.         }
  18.     }
  19.     printf("平均成绩为%lf\n",sum / n);
  20.     printf("不及格的人数为%d",fail);
  21. }
复制代码



以上程序哪里错了?
最佳答案
2020-3-25 15:51:44
本帖最后由 sunrise085 于 2020-3-25 15:52 编辑

有两处错误:
1、n定义错了,应该是int
2、for循环终止条件错了应该是 i<n
  1. //输入一个正整数n,再输入n个学生的成绩,计算平均分,并统计不及格成绩的人数
  2. #include<stdio.h>

  3. int main()
  4. {
  5.     int i,n,fail = 0;
  6.     double sum = 0,grade;
  7.     printf("Enter n:");
  8.     scanf("%d",&n);
  9.     for(i = 0; i<n; i++)
  10.     {
  11.         printf("第%d位成绩为:",i+1);
  12.         scanf("%lf",&grade);
  13.         sum += grade;
  14.         if(grade < 60)
  15.         {
  16.             fail++;
  17.         }
  18.     }
  19.     printf("平均成绩为%lf\n",sum / n);
  20.     printf("不及格的人数为%d",fail);
  21. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-25 15:46:55 | 显示全部楼层
为什么输入的成绩一定要是浮点?
整数不好吗?
  1. //输入一个正整数n,再输入n个学生的成绩,计算平均分,并统计不及格成绩的人数
  2. #include<stdio.h>

  3. int main()
  4. {
  5.     int i,fail = 0;
  6.     int sum = 0,n,grade;
  7.     printf("Enter n:");
  8.     scanf("%d",&n);
  9.     for(i = 0; i<n; i++)
  10.     {
  11.         printf("第%d位成绩为:",i+1);
  12.         scanf("%d",&grade);
  13.         sum += grade;
  14.         if(grade < 60)
  15.         {
  16.             fail++;
  17.         }
  18.     }
  19.     float avg = sum / n;
  20.     printf("平均成绩为%lf\n",avg);
  21.     printf("不及格的人数为%d",fail);
  22. }
复制代码

给你改了改输入格式和变量类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-25 15:47:22 | 显示全部楼层
n应该定义为int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-25 15:51:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sunrise085 于 2020-3-25 15:52 编辑

有两处错误:
1、n定义错了,应该是int
2、for循环终止条件错了应该是 i<n
  1. //输入一个正整数n,再输入n个学生的成绩,计算平均分,并统计不及格成绩的人数
  2. #include<stdio.h>

  3. int main()
  4. {
  5.     int i,n,fail = 0;
  6.     double sum = 0,grade;
  7.     printf("Enter n:");
  8.     scanf("%d",&n);
  9.     for(i = 0; i<n; i++)
  10.     {
  11.         printf("第%d位成绩为:",i+1);
  12.         scanf("%lf",&grade);
  13.         sum += grade;
  14.         if(grade < 60)
  15.         {
  16.             fail++;
  17.         }
  18.     }
  19.     printf("平均成绩为%lf\n",sum / n);
  20.     printf("不及格的人数为%d",fail);
  21. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-25 15:55:24 | 显示全部楼层
qiuyouzhi 发表于 2020-3-25 15:46
为什么输入的成绩一定要是浮点?
整数不好吗?

第一,没人规定成绩必须是整数
第二,你这种算法,平均成绩多半是会出错的!因为一般情况下平均数会是小数,你的这种算法平均数只能是整数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-25 15:56:45 | 显示全部楼层
sunrise085 发表于 2020-3-25 15:51
有两处错误:
1、n定义错了,应该是int
2、for循环终止条件错了应该是 i

请问是因为这个关系运算符两边类型不一致,所以出错的吗。
这个不一致,运行程序到这之后会发生什么呢,稍微具体一点,感谢!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-25 16:10:00 | 显示全部楼层
老牛来学习 发表于 2020-3-25 15:56
请问是因为这个关系运算符两边类型不一致,所以出错的吗。
这个不一致,运行程序到这之后会发生什么呢, ...

两个int类型做除法,结果会是整数,向下取整,
例如:sum=242,n=3,那样sum/n结果是80
在他写的这个程序中,float avg = sum / n;会先进行除法运算,然后赋值的时候在进行强制类型转换,最后得到的是80.00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 00:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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