【问题标题】:Average of Numbers in a Loop循环中数字的平均值
【发布时间】:2021-02-12 14:01:44
【问题描述】:

在我的 C 程序中,我想获得输入数字总和的平均值,直到程序停止。我应该添加什么来检查平均值?谢谢!

#include <stdio.h>
int main (void)
{
    int x;
    int sum = 0;
    int average;
    int testEOF;

    //Statements
    printf("Enter your numbers: <EOF> to stop.\n");
    do
    {
        testEOF = scanf("%d", &x);
        if (testEOF !=EOF)
            sum +=x;

    } while (testEOF !=EOF);

    printf ("\nTotal: %d\n", sum);
    printf ("\nAverage: %d\n", average);
    return 0;
    //main
}

【问题讨论】:

  • 记录输入值的数量。将总和除以计数。
  • 你最后一个 printf 没有 ; ,你会得到错误,更正
  • 最好将average 声明为floatdouble
  • 如果用户输入"twenty-three"会发生什么? (保持 Ctrl + c 方便)
  • @DavidC.Rankin,那为什么只有"twenty-three",我可以看到任何随机的"abcd"

标签: c loops if-statement while-loop do-while


【解决方案1】:
  1. 正如其他人解释的那样,您必须初始化sumcount,它们永远不会被赋予初始值。无需初始化averagex,因为您将sum/count 分配给average,用户将为x 分配任何值。
  2. 您必须将您希望if 语句执行的所有操作都放在{...} 中。但你没有。您的 if 语句仅适用于 sum +=x,不适用于 count++average = sum / count。因此,即使在 EOF 之后,您的程序也会增加 count 的值。所以你找到了14/6,而不是14/5
  3. 您检查了testEOF != EOF 两次。一个在if 语句中,另一个在do-while 中。

我把代码放在下面:

#include <stdio.h>

int main (void){
    float x;
    float sum = 0;
    float count = 0;
    float average;
    float testEOF;
    printf("Enter your numbers: <EOF> to stop.\n");
    while(1){
        testEOF = scanf("%f", &x);
        if (testEOF ==EOF){
            break;
        }
        sum +=x;
        count++;
        average = sum / count;
    }

    printf ("\nTotal: %f\n", sum);
    printf ("\nAverage: %.2f\n", average);
    return 0;
}

【讨论】:

  • 嗨!如何将数字限制为仅正数?谢谢!
  • 你可以在scanf 之后使用if(x&lt;=0.0) {printf(“Not a positive number”); continue;} 。如果我的回答解决了您的问题,请接受我的回答。 :)
  • 你能不能在if (testEOF == EOF){break;}之后写if(x &lt;= 0.0) {printf("Not a positive number\n");continue;}。所以你必须在EOF check语句之前而不是EOF check语句之后检查数字的符号。
【解决方案2】:

如果您希望输出带有小数点,您可以执行以下操作,在这种情况下

对于像0, 1, 1 这样的输入,输出将是0.666667,否则它将只是0,忽略小数部分。

while 部分可以按照@David C. Rankin 的建议进行优化

double sum = 0;
double average = 0;
unsigned int count = 0;
//Statements
printf("Enter your numbers: <EOF> to stop.\n");
do
{
    testEOF = scanf("%d", &x);
    if (testEOF != EOF)
    {
        sum += x;
        count++;
    }
} while (testEOF != EOF);

printf ("\nTotal: %f\n", sum);
average = sum / count;
printf ("\nAverage: %f\n", average);

【讨论】:

  • 整数除法,如果用户输入 0, 1, 1 将不起作用。
  • 我看不到average的类型,只是添加了代码来划分
  • @TanveerBadar - 所以你说的是最初的提问者无意int average;(虽然我可能同意,这是在否决之前要澄清的事情)
  • 如果您更新您的答案并解释int average; 造成的限制以及您将如何解决它 - 我会投票赞成。您可能还想将循环重构为while (scanf ("%d", &amp;x) == 1) { /* do the count and sum * }(您不想尝试sumcount 用户输入"cow" 的结果)
【解决方案3】:
#include <stdio.h>

int main (void)
{
float x;
float sum;
float count;
float average;
float testEOF;

    //Statements
    printf("Enter your numbers: <EOF> to stop.\n");
    do
        {
        testEOF = scanf("%f", &x);
        if (testEOF !=EOF)
            sum +=x;
            count++;
            average = sum / count;
            } while (testEOF !=EOF);

        printf ("\nTotal: %f\n", sum);
        printf ("\nAverage: %.2f\n", average);
        return 0;
}

现在这几乎是正确的。唯一的问题是该数字没有除以输入的值的数量。 例子: 2 3 3 3 3

总和是 14 平均:2.3(应该是2.8)

这似乎每次我得到平均值时计数都会加 1。

【讨论】:

  • 您忘记将sumcount 初始化为0,因此它们的值未定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2016-12-22
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多