編寫一個C語言程序,從鍵盤輸入學生成績(最多十個,但以-1為結束標誌),根據分數區間將其分類為「優」(90-100)、「良」(70-89)、「及格」(60-69)、「不及格」(0-59)並輸出對應等級。輸入超出0-100範圍時提示錯誤並重新輸入。
程序採用while(1)無限循環配合switch語句實現分類判斷,利用整數除以10的商作為case標簽,巧妙處理區間邊界。
#include <stdio.h>
int main(void) {
int score;
while (1) {
printf("請輸入成績 (0-100, -1 結束): ");
if (scanf("%d", &score) != 1) {
// 清除非法輸入緩衝區
while (getchar() != '\n');
printf("輸入格式錯誤,請重新輸入。\n");
continue;
}
if (score == -1) {
printf("程序結束。\n");
break;
}
if (score < 0 || score > 100) {
printf("輸入錯誤:分數必須在 0 到 100 之間,請重新輸入。\n");
continue;
}
// 整除 10 獲得十位數字,作為分類依據
switch (score / 10) {
case 10:
case 9:
printf("優\n");
break;
case 8:
case 7:
printf("良\n");
break;
case 6:
printf("及格\n");
break;
default: // 0-5
printf("不及格\n");
break;
}
}
return 0;
}
scanf返回值確保讀取到整數,並處理非數字輸入導致的緩衝區殘留。case 10對應100分,case 9對應90-99,合併處理「優」;同理case 8/7為「良」,case 6為「及格」,其餘default為「不及格」。break跳出循環,比return 0更利於主函數結構清晰。請輸入成績 (0-100, -1 結束): 95
優
請輸入成績 (0-100, -1 結束): 72
良
請輸入成績 (0-100, -1 結束): 105
輸入錯誤:分數必須在 0 到 100 之間,請重新輸入。
請輸入成績 (0-100, -1 結束): -1
程序結束。