iT邦幫忙

0

成績輸入問題

1.問題敘述:想要使圖中五位同學的分數以小數點表示,並且計算五位同學的總和以及平均(總和、平均以四捨五入處理),但是失敗了,想知道如何改進

2.程式碼

#include <stdio.h>
main()
{
	float a[5];
	float Sum = 0;
	float Ave = 0;
	int j;
	
	for(j = 0; j < 5; j++)
	{
		printf("第%d位學生的成績:", j + 1);
		scanf("%4.1f", &a[j]);
		
	}
	
	for(j = 0; j < 5; j++)
		Sum += a[j];
		
	Ave += Sum / 5;
	
	printf("學習總成績:%.0f\n", Sum);
	printf("平均成績:%.0f\n", Ave); 


}

3.畫面
https://ithelp.ithome.com.tw/upload/images/20200801/20128427DQvK8zMmRQ.png

Ave += Sum / 5;
建議改Ave = sum/5;

2 個回答

0
glj8989332
iT邦新手 4 級 ‧ 2020-08-01 19:42:48

仔細看
scanf("%4.1f", &a[j]);
中間f用錯了.....在scanf不是這個的format.
比對看看其他人寫的scanf和你的差在哪~

憤怒鳥 iT邦新手 5 級 ‧ 2020-08-02 09:53:19 檢舉

好的,多謝指教

0
心原一馬
iT邦研究生 5 級 ‧ 2020-08-01 21:46:55

您好:

printf函數才可以控制小數點的位數精確度,
scanf函數不行,
可參考C語言格式輸入函數scanf()詳解所說的

scanf函數中沒有精度控制,如:scanf("%5.2f",&a);是非法的。不能企圖用此語句輸入小數為2位的實數。

如果一定要讓輸入也四捨五入的話,可以用<math.h>裡面的round函數,
它會四捨五入到整數位
修改如下:

#include <stdio.h>
#include <math.h>
int main()
{
    float a[5];
    float Sum = 0;
    float Ave = 0;
    int j;

    for(j = 0; j < 5; j++)
    {
        printf("第%d位學生的成績:", j + 1);
        scanf("%f", &a[j]);
        a[j] = round(a[j]);

    }

    for(j = 0; j < 5; j++)
        Sum += a[j];

    Ave += Sum / 5;

    printf("學習總成績:%.0f\n", Sum);
    printf("平均成績:%.0f\n", Ave);
}

憤怒鳥 iT邦新手 5 級 ‧ 2020-08-02 09:51:45 檢舉

好的,謝謝!

我要發表回答

立即登入回答