C语言输入一个数组后将数组里的数相加,为什么输出结果不对?

如题所述

程序当中一共有三个错误。第一,定义的浮点数变量sum没有初始值,应该在定义的时候给他赋初始值为0。第二,循环体没有加花括号,导致只有读入语句是执行循环的,而下面的累加到sum的语句则要到循环结束以后才执行一次,起不到累加的作用。第三,格式化输入语句scanf在给float类型输入时是不能指定小数位数的(最多只能限定总位数),应该使用%f格式符。追答

程序当中一共有三个错误。第一,定义的浮点数变量sum没有初始值,应该在定义的时候给他赋初始值为0。第二,循环体没有加花括号,导致只有读入语句是执行循环的,而下面的累加到sum的语句则要到循环结束以后才执行一次,起不到累加的作用。第三,格式化输入语句scanf在给float类型输入时是不能指定小数位数的(最多只能限定总位数),应该使用%f格式符。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-10-12
在执行完 for (i = 0; i <= 9; i++) 语句后,i = 10
然后再执行 sum += a[i] 一次的时候就是加上 a[10],当然结果就是默认的 浮点数 0.00 了!
估计你想要的过程应该是在执行 For 循环每次的时候就累加一次,那你就应该把 sum += a[i] 语句放在 for 语句块({}) 中才合适。追问

还是不行啊大佬

追答

sum 没有初始化赋值!

第2个回答  2021-10-12
#include <stdio.h>

int main(void) {
int i;
float a[10], avg, sum;
sum = 0;//初始化sum
printf("请输入10位学生的分数\n");
for (i = 0; i <= 9; i++) {
scanf("%f", &a[i]); //你%.2f应该在输出时使用
sum += a[i];
}
printf("sum:%.2f", sum);
return 0;
}追问

我改成了这个样子,运行了一下是对的,请问接下来该怎么求平均分呢,要求平均分就必须要知道数组有几个数满足90分的条件,我该如何知道呢,求大神帮我解答一下

追答

int i,count = 0;//添加一个变量计数

float a[10], avg = 0, sum = 0;//avg初始化,未初始化的话如果全是低于90分结果会溢出

printf("请输入10位学生的分数\n");

for (i = 0; i <= 9; i++) {

scanf("%f", &a[i]);
if(a[i]<90)
continue;
sum += a[i];
count++;
}
avg = sum / count;//计算平均值
printf("sum:%.2f,avg:%.2f", sum,avg);

return 0;

本回答被提问者采纳
第3个回答  2021-12-07
代码中这个语句"sum+=a[i];"应放在for循环体里面,这时因为语句数量是2,所以应该用大括号将它们括起来。
第4个回答  2021-12-09
有两个小问题:
1
sum应该初始化为0,像
sum=0;
2
for循环写错了,改成
for(i=0;i<=9;i++)
{
scanf("%f",&a[i]);
sum+=a[i];
}
相似回答