我似乎无法做对。问题是“使用数组计算5个整数的平均值”
#include<stdio.h>
#include<stdlib.h>
int main()
{
int avg[5],i,total;
int average;
printf("Enter the marks entered in 5 subjects");
for (i=0; i<5; ++i){
scanf("%d",&avg[i]);
}
for(i=0; i<5; ++i){
total = total + avg[i];
}
average= (float)total/5;
printf("The average of 5 marks is %d",average);
return 0;
}
答案 0 :(得分:4)
1)您的答案可以是十进制数,但是您将其存储在忽略小数点的整数中。
变量average
应声明为float average;
打印结果的行应更改为printf("The average of 5 marks is %f",average);
2)将变量total
初始化为int total = 0;
答案 1 :(得分:3)
total
应初始化为0
:
int avg[5],i,total=0;
答案 2 :(得分:3)
在for循环的第一次迭代中,变量total
未初始化使用,因此结果是错误的,因为如果没有显式初始化,它将自动获取垃圾值。拿这一切:
#include <stdio.h>
int main() {
int avg[5], i, total = 0, average;
printf("Enter the marks entered in 5 subjects");
for (i = 0; i < 5; ++i) {
scanf("%d", &avg[i]);
total += avg[i];
}
average = total / 5;
printf("The average of 5 marks is %d", average);
return 0;
}
答案 3 :(得分:3)
您刚刚声明了变量total但未初始化它。因此,total包含垃圾值。为此,如果您向总计添加任何内容,则该值将不会按预期正确。它将被添加到垃圾值。因此,将变量total初始化为0。
int total=0;
您无需使用类型转换。只需将平均变量声明为double即可。
double average=0;
average = total/5.0;
您应该打印为printf("The average of 5 marks is %lf", average);
答案 4 :(得分:2)
total
是一个局部变量,因此需要初始化。如果它在文件范围内(例如,全局变量)或静态变量,则可能不必将其初始化为0
。
初始化可能就像:
int avg[5], i, total = 0 ;
或
int avg[5], i, total;
total = 0 ;
为什么需要初始化?由于这句话:
total = total + avg[i];
此处total
使用其先前的值计算。第一次遇到此语句时,total
的前一个值是多少?它可以是任何东西,通常称为垃圾值,调用未定义的行为。因此,您需要初始化以将此起始值赋予total
。请注意,您不需要 来初始化average
,因为它的值不依赖于之前的内容。
另一个问题是typecasting
的概念。以下是声明:
average= (float)total/5;
您将total
类型转换为float
是对的(您可能已经完成了total/5.0
)。但是,您将结果存储在integer
中。这将导致第二次类型转换,从float
到int
的结果。
因此,您需要将average
声明为float
。
(注意:如果您的要求不是float
,并且您确实需要integral
答案,则可以忽略此部分)。
答案 5 :(得分:0)
在尝试向其中添加值之前,必须初始化变量。 我不是很好,因为我在Java,但变量是相同的。 向变量添加值时,必须先将其初始化 的 WRONG 强>
int anInt;
anInt += 1; //anInt hasn't a value. So, how can you increment it's value if it doesn't have one?
的 CORRECT 强>
int anInt = 0;
anInt += 1; //increment it's value by one. 0+1=1, so its new value is 1.
答案 6 :(得分:0)
在代码中使用变量之前,需要初始化变量。
代码中的错误是
int avg[5],i,total;
你还没有初始化int变量“total” 因此,此代码将使用垃圾值
for(i=0; i<5; ++i){
total = total + avg[i];
}
您需要此更正
int avg[5], i, total=0;