2016-10-01 74 views
-2

我正在編寫計算標記平均值的C代碼。它要求用戶輸入3到40之間的標記數。如果用戶沒有在3和40之間輸入,它會再次詢問。然後它會要求標記百分比,並將其加起來計算平均值。這裏是我的代碼:編程C循環錯誤計算

#include<stdio.h> 
int main() 
{ 
int number_marks,i, a=1; 
float grade, total, average; 

    printf("Please enter the number of marks (between 3 and 40): "); 
    scanf("%d", &number_marks); 

if(number_marks>3 || number_marks<40) 
{ 
    do{ 
    printf("Invalid number, enter a number between 3 and 40 inclusive: "); 
    scanf("%d",&number_marks); 
    }while(number_marks<3 || number_marks>40); 
    for(i=0;i<number_marks;i++) 
    { 
     printf("%d>",a++); 
     scanf("%f",&grade); 
    total=grade+grade+grade+grade+grade; 
    average= (total/number_marks); 
    } 
} 
printf("The average of all marks in this group is %.1f\n",average); 
printf("Program Ended."); 
return 0; 
} 

問題是計算的輸出。它似乎輸出最終成績,並不計算平均值。有輸出:

Please enter the number of marks (between 3 and 40): 2 
Invalid number, enter a number between 3 and 40 inclusive: 41 
Invalid number, enter a number between 3 and 40 inclusive: 5 
1>45 
2>90 
3>57 
4>89 
5>32 
The average of all marks in this group is 32.0 
Program Ended. 
+2

'如果(number_marks> 3個|| number_marks <40)'是總是如此。 (也許你想'&&'?) – wildplasser

+0

你的代碼中有太多邏輯錯誤... –

回答

0

首先是錯誤的,因爲你必須檢查數量爲3-40範圍以外,你需要使用<>向相反的方向。在部分地方你計算平均

if(number_marks<3 || number_marks>40) 
{ 
    do{ 
    printf("Invalid number, enter a number between 3 and 40 inclusive: "); 
    scanf("%d",&number_marks); 
    } 
    while(number_marks<3 || number_marks>40); 
} 

然後:所以要糾正這種

1)爲什麼你甚至可以使用a++ ????只需使用i變量。這是常見的,適當的和合乎邏輯的

2)total=grade+grade+grade+grade+grade;坡度總是與相同的變量一個的值無論你做什麼。所以在這裏它只會添加最後一次存儲的值五次,然後將它除以5.這就是爲什麼你總是會得到最後一個等級的原因。正確的做法是更新total變量。

3)最後average= (total/number_marks);應該在循環之外。我也用(float)number_marks來確保這個計算的結果總是一個浮點數。

這裏是它應該如何看等的例子:

for(i=0;i<number_marks;i++) 
{ 
    printf("%d>",(i+1)); 
    scanf("%f",&grade); 
    total+=grade; 
} 
average = (total/(float)number_marks); 
printf("The average of all marks in this group is %.1f\n",average); 
printf("Program Ended."); 
0

錯誤是,你正在計算循環內部的錯誤總數和平均值。它應該是

total=0; 
for(i=0;i<number_marks;i++) 
{ 
    printf("%d>",a++); 
    scanf("%f",&grade); 
    total=total+grade; 
}  
average= (total/number_marks); 

您每次都有效地找到5 *等級併除以5,這導致輸出是等級本身的最後一個實例。

0
total = 0; 
for(i=0;i<number_marks;i++) 
{ 
     printf("%d>",a++); 
     scanf("%f",&grade); 
     total += grade; 

} 
average= (total/number_marks); 

將平均值=(total/number_marks)放在for循環之外。年級應該每次只增加一次。

通過添加您獲得的每個標記作爲輸入,然後找到平均值將始終最終獲得最後輸入的標記作爲平均值。

0

平均顯示上一年級的原因是因爲變量總量的公式不正確。每次將當前等級添加5次並分配給總數時,將導致最後輸入的等級* 5被分配給總數。而且平均值也必須在循環之外。所有if聲明

total = 0; 
    for(i=0;i<number_marks;i++) 
    { 
     printf("%d>",a++); 
     scanf("%f",&grade); 
     total=total+grade; 
    } 
    average = (total/number_marks);