簡體   English   中英

以 -1 作為退出整數的 n 個數字的總和和平均值

[英]Sum and average for n numbers with -1 as exit integer

您好,我的代碼有一個小問題,我想了解一下。 我的任務是編寫一個程序,用 while 循環或嵌套的 while 循環,用 if 條件對 n 個數字求和和求平均值,當你想退出代碼時,你應該輸入 -1。 代碼在下面。 我遇到的問題是我無法從計算中排除 -1 我究竟做錯了什么。 它假設是一個簡單的代碼。

int main(void) {

    int count;
    float sum, average, number;
    sum = 0;
    count = 0;

    printf("Calculate sum and average (-1 to quit)\n");

    while (number!=-1) {
        scanf("%f", &number);
        sum = sum + number;
        count = count + 1;
    }
    average = sum / count;
    printf("Sum=%f", sum);
    printf(" Average=%f", average);
}

在 while 塊中,您讀取數字,然后將其添加到您的平均計算中,只有在重復迭代之后,您才檢查它是否不同於 -1 以停止迭代:

顯然有不同的解決方法:

一種方法是使用 while(true) 並在讀取數字后的 while 塊中添加一個 if 語句以將其與 -1 進行比較並跳出循環

while (true) {
    scanf("%f", &number);

    if (number == -1) break;

    sum = sum + number;
    count = count + 1;
}

重新排序不同的步驟可以解決這個問題:

int main(void) {

    int count;
    float sum, average, number=0.0f;
    sum = 0;
    count = -1;

    printf("Calculate sum and average (-1 to quit)\n");

    while (number!=-1) {
        sum = sum + number; // first time no effect with 0
        count = count + 1;  // first time "no effect" counting to 0
        scanf("%f", &number); // will not be counted or summed if -1
    }
    average = sum / count;
    printf("Sum=%f", sum);
    printf(" Average=%f", average);
}

立即輸入 -1 仔細考慮:

  • sum為0+0,適合沒有數字相加
  • count為-1​​+1==0,適合沒有數字
  • 應避免除以 0,但這是一個單獨的問題

用一個數字來想一想:

  • number 以 sum==0 和 count==0 讀入
  • 不是 -1,所以循環再次迭代
  • sum 和 count 被有意義地更新
  • -1 輸入
  • 循環結束而不處理 -1

順便說一下,比較浮動的身份是有風險的。 如果你可以更“慷慨地”比較,你會更安全,例如while (number>-0.5)

我認為你應該在循環的最后一個輸入,因為它會在下一次迭代中得到檢查。 當 -1 出現時,它不會被添加。

    #include <stdio.h>
    int main(){
    int count=0;
    float sum=0, average=0, number=0;
    
    
    printf("Calculate sum and average (-1 to quit)\n");
    
        while(number!=-1){
            sum = sum + number;
            count = count + 1;
            scanf("%f", &number);
        }
            average = sum / count;
            printf("Sum=%f", sum);
            printf(" Average=%f", average);
    
    }

代碼需要將number測試為 -1,然后才能將其包含在總和中。 OP 的代碼測試幾乎可以做到這一點。 甚至在分配number之前 OP 的代碼測試-1會導致未定義的行為(UB)。

float number;
while (number!=-1) {  // UB!

測試scanf()的返回碼是否成功也很好。

while (scanf("%f", &number) == 1 && number != -1) {
    sum = sum + number;
    count = count + 1;
}

暫無
暫無

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

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