2016-09-10 21 views
-1

我創建了兩個if語句進入鏈表,並檢查有多少數字高於平均數,並查看有多少數字低於平均數。當我運行程序時,我的理解是if語句只計算一個數字。另外,程序運行時,只調用一個if語句,而不是兩個。也許我忽略了一些東西?'CalAverage'函數中if語句的問題

double CalAverage (NewNumber *start){ 

int res; 
double average = 0; 
double total = 0; 
int n = 1; 
int x = 1; 
int y = 1; 

/*if (res != 1){ 
    fprintf(stderr, "Something bad happened in CalAverage()\n"); 
    return add; 
}*/ 
while (start->next){ 
    average += start->newNum; 
    start = start->next; 
    ++n; 
} 
average += start->newNum; 
total = average/n; 
if(total < start->newNum){ 
     ++x; 
     printf("Numbers greater than average: %d\n",x); 
    }else if(total > start->newNum){ 
     ++y; 
     printf("Numbers less than average: %d\n", y); 
    } 
printf("The average is: %lf\n",total); 
return total; 
return x; 
return y; 

} 
+0

你有太多的return語句;你只能從函數返回一個值。只有一個if語句可以是true(或者none,如果total == start-> newNum),所以你只能看到其中一個輸出。你錯過了另一個循環;首先計算平均值,然後您需要再次遍歷列表併爲每個數字打印,如果它高於或低於平均值。 – Robert

回答

1

第一,你通過在while循環中重寫它,正在丟失指向列表開始的指針。在開始循環之前將它複製到一邊。

秒,將if語句放在另一個循環中(在重新分配列表的開始之後)來計算低於/高於平均值。

double CalAverage (NewNumber *start){ 

    double average = 0; 
    double sum = 0; 
    int n = 0; 
    int x = 0; 
    int y = 0; 

    NewNumber *temp = start; 

    while (temp){ 
     sum += temp->newNum; 
     temp = temp->next; 
     ++n; 
    } 

    average = sum/n; 

    temp = start; 

    while (temp){ 

     if(average < temp->newNum){ 
      ++x; 
     }else if(average > temp->newNum){ 
      ++y; 
     } 

     temp = temp->next; 
    } 

    printf("The average is: %lf\n",average); 
    printf("Numbers greater than average: %d\n",x); 
    printf("Numbers less than average: %d\n", y); 
    return average; 
} 
+0

謝謝,我在想它是否會創建另一個指針變量並將其卡在while循環中,以致它會創建另一個無限循環。 –

0

的if語句不在while循環,因此函數開始,while循環完成,然後只有一個if語句調用,因爲它是如果,ELSEIF

+0

我打算把它們放在while循環中,但是在while循環中總共不存在。我把它們放到一個單獨的while循環中,並且導致了無限的while循環。有什麼建議麼? –

+0

我不知道爲什麼第二個while循環是無限的,它和第一個循環一樣。幕後一定有些奇怪的事情發生。 解決它的一種方法是在第一個循環中計數一個索引,以便知道第二個循環應該是多長時間 編輯:您已經有'n'作爲大小,它可以是第二個退出條件循環。 –