首页 > 解决方案 > 编写一个 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;
 }

标签: c

解决方案


虽然重复的代码行没有错,但它肯定不是文学作品。如果你面临做同样的事情 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

如果您还有其他问题,请仔细查看并告诉我。


推荐阅读