循环中的平均数

问题描述

在我的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
}

解决方法

  1. 正如其他人所解释的那样,您必须初始化sumcount,但它们从未被赋予初始值。无需初始化averagex,因为您将sum/count分配给average,用户将把任何值分配给x
  2. 您必须将if语句要执行的所有操作放在{...}中。但是你没有。您的if语句仅适用sum +=x,不适用于count++average = sum / count。因此,即使在count之后,您的程序也会增加EOF的值。因此,您找到了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;
}
,

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

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

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

while
,
public static PersonDatabase getInstance(Context context) {
    if (instance == null) {
        synchronized (LOCK) {
            Log.d(LOG_TAG,"Creating new database instance");
        final SupportFactory factory = new SupportFactory(passphrase);
            instance = Room.databaseBuilder(context.getApplicationContext(),PersonDatabase.class,PersonDatabase.DB_NAME)
                   .openHelperFactory(factory)
                    .build();
        }
    }
    Log.d(LOG_TAG,"Getting the database instance");
    return instance;
}
public abstract PersonDao personDao();

现在这几乎是正确的。唯一的事情是数字不会除以输入值的数量。 例: 2 3 3 3 3

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

似乎每次获得平均值时,计数都会加1。