簡體   English   中英

查找未知數量的輸入的平均值

[英]Find the average of an unknown number of inputs

我需要編寫一個C函數,該函數使用函數計算用戶輸入的成績的平均值。 輸入的成績數量未知,因此我必須使用前哨值-1。

這是我的代碼,可以很好地編譯,但是它不會告訴我平均值,並且for循環不會四次調用該函數。 我想念什么?

 #include <stdio.h>

 float calculateAverage (int sumofGrades, int numberofGrades);

 int main(void) {

 int i;
 int sumofGrades = 0;
 int numberofGrades = 0;
 int grade = 0;
 float average;

 for (i = 1; i <= 4; ++i) {

    calculateAverage(sumofGrades, numberofGrades);

 }
 return 0;
 }

float calculateAverage (int sumofGrades, int numberofGrades) {

float average;
int grade;

printf("Enter grades and -1 to stop: ");
scanf("%d", &grade);
while (grade <= 100 && grade != -1) {
    numberofGrades++;
    sumofGrades += grade;
    average = sumofGrades / numberofGrades;

}
printf("The average is %.2f", average);

return average;

}

更新

謝謝您的幫助! 但是我還沒做好。 對於作業,我需要程序要求我4次輸入未知的等級數,並且每次計算平均值。

另外,為什么不停止輸入我輸入-1的平均值?

#include <stdio.h>

float calculateAverage(int sumofGrades, int numberofGrades);

int main(void) {
    int i;
    int sumofGrades = 0;
    int numberofGrades = 0;

    for (i = 1; i <= 4; ++i) {
        calculateAverage(sumofGrades, numberofGrades);
    }
    return 0;
}

float calculateAverage (int sumofGrades, int numberofGrades) {

    float average;
    int grade = 0;

    while (grade != -1 && grade >= 0 && grade <= 100) {
        printf("Enter grades and type -1 to stop: ");
        scanf("%d", &grade);

        if (grade != -1) {
            numberofGrades++;
            sumofGrades += grade;
        }
    }

    average = sumofGrades / numberofGrades;
    printf("The average is %.2f\n", average);

    return average;
}

更新

我仍然有問題! 我無法讓程序要求我輸入四次成績並每次計算平均值! 我嘗試了,我嘗試了,真令人沮喪! 我究竟做錯了什么??

輸入一個有效成績后,您的代碼就不會嘗試讀取另一個成績:

printf("Enter grades and -1 to stop: ");
scanf("%d", &grade);
while (grade <= 100 && grade != -1) {
    numberofGrades++;
    sumofGrades += grade;
    average = sumofGrades / numberofGrades;
}

如果等級有效,它將進入無限循環。 它還可以計算每個循環的平均成績,這是不必要的。 在循環之后,一次就足夠了。

也許您應該使用:

printf("Enter grades and -1 to stop: ");
while (scanf("%d", &grade) == 1 && grade <= 100 && grade >= 0)
{
    numberofGrades++;
    sumofGrades += grade;
}
if (numberofGrades == 0)
{
    fprintf(stderr, "Error: zero valid grades entered\n");
    average = 0.0;
}
else
{
    average = sumofGrades / numberofGrades;
    printf("The average is %.2f", average);
}
return average;

請注意,這會在使用成績之前檢查輸入是否成功。

您也確實不需要將變量傳遞到函數中。 您最好使該函數不接受任何參數,並將參數作為常規局部變量正確初始化為零。

您的主程序應該捕獲平均值,因為它已經返回,而不是忽略它。 也許函數根本不應該返回平均值。

首先,您要遍歷遍歷您的calculateAverage函數4次。 您是故意這樣做嗎? 我認為您應該只執行一次。

第二,在你的while循環中

while (grade <= 100 && grade != -1) {
    numberofGrades++;
    sumofGrades += grade;
    average = sumofGrades / numberofGrades;

}

你無限循環。 如果輸入的值不是-1,則將永遠循環。 應該將其更改為if語句。

if (grade <= 100 && grade != -1)

但是有一種更好的方法來編寫此代碼(如果我猜測您實際上想要它做什么)

#include <stdio.h>

float calculateAverage (int sum, int size);

int main(void) 
{

    int input;
    int sum = 0;
    int count = 0;
    while (input != -1 && input >= 0 && input <= 100)
    {
       printf ("Enter a Grade: ");
       scanf ("%d", &input);

       if (input != -1)
       {
           sum += input;
           count++;
       }
    }

    float average = calculateAverage(sum, count);
    return 0;
}

float calculateAverage (int sum, int count) {

   // Do your average math here....
}

給定已發布的代碼,子函數無法更新main()函數中的變量。

建議將指針傳遞給變量,並修改子函數以期望(並正確處理)這些指針

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM