c - C中求数组到0为止的最大、最小、总和、平均值

标签 c arrays

所以基本上我必须找到零终止数组的最大、最小、总和、平均值。

我已经得到了平均值和总和,但没有找到最大的最小值,即正数和负数的平均值。当输入 0 时,数组停止。

#include <stdio.h>

int main() {
    int c = 0, n, array[100], large, small;
    float sum = 0;
    //for (c = 0; c < n; n++) {
    do {
        c++;
        printf("\nEnter number:");
        scanf("%d", &array[c]);
        sum += array[c];
    } while (array[c] != 0);

    if (array[c] > large) { large = array[c]; }
    if (array[c] < small) { small = array[c]; }
    if (array[c] == 0) {
        printf("\n Sum = %.2f\n", sum);
        printf("\n Average = %.2f", sum / (c - 1));
        printf("\n Largest %d", large);
    }
    return 0;
}

最佳答案

您的代码中存在多个问题:

  • 在 C 中,数组索引从 0 开始,在存储值之前不应递增 c
  • 你实际上并不需要存储一个值,只需计算它们就足够了
  • 您应该从读取的第一个值开始初始化 largesmall
  • 您应该测试 scanf() 的返回值以检测无效输入并避免未定义的行为

这是更正后的版本:

#include <stdio.h>

int main() {
    int c, n, large, small;
    double sum = 0;
    for (c = 0;; c++) {
        printf("Enter number: ");
        if (scanf("%d", &n) != 1 || n == 0)
            break;
        sum += n;
        if (c == 0 || n > large) {
            large = n;
        }
        if (c == 0 || n < small) {
            small = n;
        }
    }
    if (c == 0) {
        printf("no numbers\n");
    } else {
        printf("Smallest: %d\n", small);
        printf("Largest: %d\n", large);
        printf("Sum = %f\n", sum);
        printf("Average = %.2f\n", sum / c);
    }
    return 0;
}

为了说明上述代码在没有本地数组的情况下如何工作,这里是一个带有数组和注释的中间版本:

#include <stdio.h>

int main() {
    int c, n, i, array[100], large, small;
    double sum;
    for (c = 0; c < 100; c++) {     // loop reading into array, stop at array size
        printf("Enter number: ");
        if (scanf("%d", &n) != 1)   // read a number, stop on failure
            break;
        if (n == 0)                 // stop when reading a 0
            break;
        array[c] = n;
    }
    if (c == 0) {
        printf("no numbers\n");
        return 0;
    }
    // initialize variables from first entry
    sum = array[0];
    large = small = array[0];
    // loop over remaining entries and update variables
    for (i = 1; i < c; i++) {
        sum += array[i];
        if (large < array[i]) {
            large = array[i];
        }
        if (small > array[i]) {
            small = array[i];
        }
    }
    printf("Smallest: %d\n", small);
    printf("Largest: %d\n", large);
    printf("Sum = %f\n", sum);
    printf("Average = %.2f\n", sum / c);
    return 0;
}

关于c - C中求数组到0为止的最大、最小、总和、平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56621991/

相关文章:

php - 如何根据特定值从关联数组中删除重复值?

c - 通过函数调用向数组添加元素

c# - 多维数组中值的快速求和 (C#)

c - 在简单程序中使用 ferror() 时出现段错误。为什么?

c - 如何添加静态断言来检查变量是否是静态的?

python - For loop in 2 arrays of same size 给出 ValueError

arrays - 将多个值附加到结构中的数组?

c# - 将字节数组复制到 C# 中的另一个字节数组

c - popen 在进程之间传递二进制数据

objective-c - 示例的编码 wav 文件