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];
}

C语言输入一个数组后将数组里的数相加,为什么输出结果不对?_百度知 ...
程序当中一共有三个错误。第一,定义的浮点数变量sum没有初始值,应该在定义的时候给他赋初始值为0。第二,循环体没有加花括号,导致只有读入语句是执行循环的,而下面的累加到sum的语句则要到循环结束以后才执行一次,起不到累加的作用。第三,格式化输入语句scanf在给float类型输入时是不能指定小数...

c语言中对数组求和为什么小数部分总是不对
这个很好说,因为很多编程语言都是这样的,比如java。因为计算机时2进制,而我们一般用十进制,所以他们都是把数字转换为2进制,然后通过与或非的逻辑实现,来计算2进制结果,再换回10进制。但是整数还好说,但是小数就有难处了。比如0.06就不能完全转化为10进制,那么就必须舍去一部分尾巴。所以以Java为...

求助,c语言新手,我想给数组挨个赋值然后输出,为什么出错了?
你的reserve函数错了,你给这个函数定义的形参,有数组(iArray[ ])和整型(iCount)但是你在main函数中却没有给它传递这个参数进去。你的意思应该是把所有数组的reserve写在那个函数里,你应该这么写。include <cstdio>void ReverseArray(){ int iCount; printf("请输入数据个数:"); scanf(...

如图,C语言输出的原数组显示为什么与输入的值不同啊?
第一个printf里的输出的内容不对 printf("%7d",a[i]);你要输出的是数组元素,不是元素的地址

C语言,一维数组已经赋值,然后再赋值的话,为什么就报错了呢?附图如下...
你第一次赋值就不对,这种赋值方式只能在声明初始化时,不能这样,数组是不能整体赋值的。int a[3]={1,2,3};这样是可以的,而像你那样不对。下面的for循环才是正确的赋值方式。

c语言 结构体数组输入后无法输出正确数据,float数据总是0.0000...
你的struct定义里是这么写的float score[3]; 这是数组的意思,应该是float score;因为代码太乱,也没法给你验证了,你把[3]删掉试试看

在我编写的C语言中,数组输出的结果为什么都为0?望大神求解!
你要是输出元素地址,就把%lf改成%d 、%x、%p 你要是输出元素的值,就把&去掉 看你是输出元素值,那么就把&取地址符去掉

C语言数组的输入问题,同时输入字符,和数字,却输出不了?
第二个scanf不要加\\n 另外 getchar放到循环外.\/*Zhangfen 93 91 89Qiudong 60.5 72 75Ningqiu 50 60.5 63Baoshi 85 91.5 50Yulu 80 81 82.5*\/#include<stdio.h>int main(){char name[5][20];double a[5][3];\/\/三个分数, 定义a 5 3for(int i=0;i<=4;i++){scanf("%s...

c语言对数组执行加法?
就能得到正确的结果。你说的“arr指向数组的首地址”是正确的,但“对arr+5后不是相当于arr[6]了吧”是错误的,因为arr+5是元素arr[5]的地址。但即使这样,如果自定义函数不加arr[5](像上面的例子),程序是能够得到正确的结果的。但是,如果不这样写,可能会造成这样数组下标越界。这取决于函数...

C语言 往数组插入一个数后数组长度加1并输出数组
void Scan_Data(SqList L){\/\/输入数据 int i=0; do{ scanf("%d",&L->elem[i]); \/\/\/ (L->last)++; (L->length)++; }while(L->elem[i++]!='#'); \/\/\/}

相似回答