c - 编写一个 C 程序,读取 5 个数字并计算正数的个数并打印所有正数的平均值
问题描述
我输入了第一个数字:14,第二个数字:63,第三个数字:78,第四个数字:45,第五个数字:21,我得到了 44.00 而不是 44.20。我哪里出错了?
#include<stdio.h>
int main() {
int i,numbers[5],total=0,count=0;
float average ;
printf("\nInput the first number:");
scanf("%d", &numbers[0]);
printf("\nInput the second number:");
scanf("%d", &numbers[1]);
printf("\nInput the third number:");
scanf("%d", &numbers[2]);
printf("\nInput the fourth number:");
scanf("%d", &numbers[3]);
printf("\nInput the fifth number:");
scanf("%d", &numbers[4]);
for (i = 0; i < 5; i++) {
if (numbers[i] > 0) {
count++;
total += numbers[i];
}
}
average = total / count;
printf("\n The number of positive numbers:%d\n", count);
printf("\n The average of all positive value is %.2f\n", average);
return 0;
}
解决方案
虽然重复的代码行没有错,但它肯定不是文学作品。如果你面临做同样的事情 5 次,而唯一改变的是输出中的一个或两个索引 - 你应该考虑循环。在这里,您可以扩展必须包含输入提示以及处理正数求和的循环,并且无需将输入值存储在数组中即可完成所有操作。
您需要在循环中维护的是sum
正值。退出循环后,您可以根据输入的正值数量计算平均值。
总而言之,你可以做类似的事情:
#include <stdio.h>
#define NNUM 5 /* if you need a constant, #define one (or more) */
int main (void) {
int n = 0, /* no. of positive value counter */
sum = 0, /* sum of all positive values */
val; /* each input value */
double avg; /* floating-point number to hold average */
for (int i = 0; i < NNUM; i++) { /* loop NNUM times */
printf ("enter no. %d: ", i+1); /* prompt for input */
if (scanf ("%d", &val) != 1) { /* validate EVERY user input */
fputs ("error: invalid integer input.\n", stderr);
return 1;
}
if (val > 0) { /* check if val is positive */
sum += val; /* add val to sum */
n++; /* increment pos value count */
}
}
avg = (double)sum / n; /* compute average (note cast) */
printf ("\nThe number of positive numbers : %d\n"
"The average of all positive value is : %.2f\n", n, avg);
}
示例使用/输出
$ ./bin/avgposnum
enter no. 1: 14
enter no. 2: 63
enter no. 3: 78
enter no. 4: 45
enter no. 5: 21
The number of positive numbers : 5
The average of all positive value is : 44.20
或带有一些负值:
$ ./bin/avgposnum
enter no. 1: -10
enter no. 2: 10
enter no. 3: 0
enter no. 4: 20
enter no. 5: -20
The number of positive numbers : 2
The average of all positive value is : 15.00
如果您还有其他问题,请仔细查看并告诉我。