老牛来学习 发表于 2020-3-25 15:41:46

C语言程序出错

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

int main()
{
    int i,fail = 0;
    double sum = 0,n,grade;
    printf("Enter n:");
    scanf("%d",&n);
    for(i = 0; i<=n; i++)
    {
      printf("第%d位成绩为:",i+1);
      scanf("%lf",&grade);
      sum += grade;
      if(grade < 60)
      {
            fail++;
      }
    }
    printf("平均成绩为%lf\n",sum / n);
    printf("不及格的人数为%d",fail);
}



以上程序哪里错了?

qiuyouzhi 发表于 2020-3-25 15:46:55

为什么输入的成绩一定要是浮点?
整数不好吗?
//输入一个正整数n,再输入n个学生的成绩,计算平均分,并统计不及格成绩的人数
#include<stdio.h>

int main()
{
    int i,fail = 0;
    int sum = 0,n,grade;
    printf("Enter n:");
    scanf("%d",&n);
    for(i = 0; i<n; i++)
    {
      printf("第%d位成绩为:",i+1);
      scanf("%d",&grade);
      sum += grade;
      if(grade < 60)
      {
            fail++;
      }
    }
    float avg = sum / n;
    printf("平均成绩为%lf\n",avg);
    printf("不及格的人数为%d",fail);
}
给你改了改输入格式和变量类型

BngThea 发表于 2020-3-25 15:47:22

n应该定义为int

sunrise085 发表于 2020-3-25 15:51:44

本帖最后由 sunrise085 于 2020-3-25 15:52 编辑

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

int main()
{
    int i,n,fail = 0;
    double sum = 0,grade;
    printf("Enter n:");
    scanf("%d",&n);
    for(i = 0; i<n; i++)
    {
      printf("第%d位成绩为:",i+1);
      scanf("%lf",&grade);
      sum += grade;
      if(grade < 60)
      {
            fail++;
      }
    }
    printf("平均成绩为%lf\n",sum / n);
    printf("不及格的人数为%d",fail);
}

sunrise085 发表于 2020-3-25 15:55:24

qiuyouzhi 发表于 2020-3-25 15:46
为什么输入的成绩一定要是浮点?
整数不好吗?



第一,没人规定成绩必须是整数
第二,你这种算法,平均成绩多半是会出错的!因为一般情况下平均数会是小数,你的这种算法平均数只能是整数。

老牛来学习 发表于 2020-3-25 15:56:45

sunrise085 发表于 2020-3-25 15:51
有两处错误:
1、n定义错了,应该是int
2、for循环终止条件错了应该是 i

请问是因为这个关系运算符两边类型不一致,所以出错的吗。
这个不一致,运行程序到这之后会发生什么呢,稍微具体一点,感谢!!!

sunrise085 发表于 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
页: [1]
查看完整版本: C语言程序出错