【问题标题】:Calculating the mean of part of an array计算数组部分的平均值
【发布时间】:2017-06-30 17:05:38
【问题描述】:

我正在尝试计算用户输入的高温和低温的平均值,并且可以包含的天数在 1 到 4 之间,但是我很难理解如何进行此操作。我写的代码产生了一个完全不相关的数字。这是我的代码:

#include <stdio.h>

int main (void)
{
    int i;
    int limit;
    int day[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int high[10],low[10];

    printf("---===IPC Temperature Analyzer V2.0===---\n");

    printf("Please enter the number of days between 3 and 10, inclusive: ");
    scanf("%d", &limit);
    while (limit <= 2 || limit >= 11) {
        printf("Invalid entry, please enter a number between 3 and 10,   inclusive: ");
        scanf("%d", &limit);
    }

    for(i = 0;i < limit; i++) {
        printf("Day %d - High: ", day[i]);
        scanf("%d", &high[i]);
        printf("Day %d - Low: ", day[i]);
        scanf("%d", &low[i]);
    }

    printf("\nDay Hi Low\n");
    for (i = 0; i < limit; i++) {
        printf("%d   %d    %d\n", day[i], high[i], low[i]);
    }

    int max = 0;
    int min = 0;

    for (i = 0; i < limit; i++) {
        if (high[max] < high[i])
            max = i;
        if (low[min] < low[i])
            min = i;
    }

    printf("\nHighest temperature was: %d on day %d", high[max], day[max]);
    printf("\nLowest temperature was: %d on day %d ", low[min], day[min]);

    int n;
    int avg = high[i] + low[i]/i;

    printf("\nEnter a number between 1 and 4 to see the average temperature for the entered number of days, enter a negative number to exit\n");
    scanf("%d", &n);

    while (n > 4) {
        printf("Invalid entry, please enter a number between 1 and 4, inclusive: ");
        scanf("%d", &n);
    }

    while (n < 0) {
        printf("Goodbye!\n");
        exit(0);
    }

    for (i = 0; i < n; i++) {
        printf ("The average temperature up to day %d is: %d", day[i], avg);
    }
    return 0;
}

【问题讨论】:

  • 您计算avg 的唯一位置是来自int avg = high[i] + low[i]/i; 您可能想考虑一下i 在您的程序中的值是多少。在您的最后一个循环中,这个数字也没有变化,所以它被反复报告也就不足为奇了。

标签: c arrays mean


【解决方案1】:

我想你放错了int avg = high[i] + low[i]/i的表达方式,而且我的意思似乎也不正确:

首先:我想您想在循环i : 0..n-1 中打印每个特定日期的平均值,但您只在循环外计算一次值(您可能会想到您所在位置的i 的含义。

第二:你每天只有两个值,即高和低,而不是i 值,对吧?因此,要获得特定日期的平均温度,它应该是avg = (high[i] + low[i])/2。另请注意大括号,它产生的运算符优先级与您的代码中的不同。如果你想计算一个特定日期的“总体”平均值,我会让公式明确,例如通过将averageOfDay 与overallAverage 区分开来。

第三:你确定 avg 应该是 int 吗?我建议使用浮动。

float avgSum = 0.0;
for (i = 0; i < n; i++) {
    float avgOfDay = (high[i] + low[i])/2.0;
    avgSum += avgOfDay;
}
float overallAvg = avgSum/n;
printf ("The average temperature up to day %d is: %f", day[n-1], overallAvg);

【讨论】:

  • 我实际上是在尝试获取 1 到 4 天之间的平均值,所以如果用户输入 3,它应该计算第 1 天和第 2 天的最高价和最低价的平均值, 3.
  • 啊,好的。我误解了您在循环中打印“总体”平均值的事实。查看编辑后的答案...
  • 现在可以使用了!但是,每天都出现平均值,而我只想输出最后一天。例如,如果用户想要到第 3 天的平均值,它将显示到第 1 天的平均值,到第 2 天的平均值,最后到第 3 天的平均值。您还介意解释 avgSum 和 avgOfDay 之间的 += 吗?我想我以前从未见过它。
  • 只需将 calc 和 printf 放在循环之外并使用 n 而不是 i (请参阅改编答案);进一步的运算符a += b 产生与a = a + b 相同的结果;运算符从c 早期开始就在使用,你也可以做*=, -=, ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 2014-05-14
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
相关资源
最近更新 更多