計算機在教育中的應用常被稱為計算機輔助教學(Computer-Assisted Instruction, CAI)。請編寫一個程序來幫助小學生學習四則運算,按下列任務要求以循序漸進的方式編程。
(1)程序首先隨機產生兩個1~10之間的正整數,在屏幕上打印出問題,例如:
6*7=
然后讓學生輸入答案。程序檢查學生輸入的答案是否正確。若正確,則打印“Right”,然后問下一個問題;否則打印“Wrong! Please try again.”,然后提示學生重做,直到答對為止。
(2)在上述功能實現的基礎之上,當學生回答錯誤時,最多給三次重做的機會,三次仍未做對,則提示“Wrong! You have tried three times! Test over!”,程序結束。
(3)在任務1的基礎之上,連續做10道乘法運算題,不給機會重做,若學生回答正確,則顯示“Right!”,否則顯示“Wrong!”。10道題全部做完后,按每題10分統計並輸出總分,同時為了記錄學生能力提高的過程,再輸出學生的回答正確率(即錯題數除以總題數的百分比)。
(4)在任務3的基礎上,通過計算機隨機產生10道四則運算題,兩個操作數為1~10之間的隨機數,運算類型為隨機產生的加、減、乘、整除中的任意一種,不給機會重做,如果學生回答正確,則顯示“Right!”,否則顯示“Wrong!”。10道題全部做完后,按每題10分統計總得分,然后打印出總分和學生的回答正確率。
(5)在任務4的基礎上,為使學生通過反復練習熟練掌握所學內容,在學生完成10道運算題后,若學生回答正確率低於75%,則重新做10道題,直到回答正確率高於75%時才退出程序。
(6)開發一個CAI系統所要解決的另一個問題是學生疲勞的問題。消除學生疲勞的一種辦法就是通過改變人機對話界面來吸引學生的注意力。在任務5的基礎上,使用隨機數產生函數產生一個1~4之間的隨機數,配合使用switch語句和printf()函數調用,來為學生輸入的每一個正確或者錯誤的答案輸出不同的評價。
對於正確答案,可以在以下4種提示信息中選擇一個進行顯示:
Very good!
Excellent!
Nice work!
Keep up the good work!
對於錯誤答案,可在以下4種提示信息中選擇一個進行顯示:
No. Please try again.
Wrong. Try once more.
Don’t give up!
Not correct. Keep trying.
1 #include <stdio.h> 2 #include <time.h> 3 #include <stdlib.h> 4 int GetAnswer (void); 5 int Input (int answer,int m); 6 int main (void) 7 { 8 int answer,m,count,ret,score; 9 do{ 10 score=0; 11 count=0; 12 do{ 13 answer=GetAnswer(); 14 count++; 15 scanf("%d",&m); 16 ret=Input(answer,m); 17 score+=ret; 18 }while (count<10); 19 printf("%d\n",score); 20 printf("%d%%\n",score); 21 if (score<75) 22 { 23 printf("Do it again.\n"); 24 } 25 }while(score<75); 26 return 0; 27 } 28 int GetAnswer (void) 29 { 30 int a,b,op,answer; 31 srand(time(NULL)); 32 a=rand()%10+1; 33 b=rand()%10+1; 34 op=rand()%4+1; 35 switch (op) 36 { 37 case 1: 38 printf("%d+%d=?\n",a,b); 39 answer=a+b; 40 break; 41 case 2: 42 printf("%d-%d=?\n",a,b); 43 answer=a-b; 44 break; 45 case 3: 46 printf("%d*%d=?\n",a,b); 47 answer=a*b; 48 break; 49 case 4: 50 printf("%d/%d=?\n",a,b); 51 answer=a/b; 52 break; 53 } 54 return answer; 55 } 56 int Input (int answer,int m) 57 { 58 int c; 59 srand(time(NULL)); 60 c=rand()%4+1; 61 if (answer==m) 62 { 63 switch (c) 64 { 65 case 1: 66 printf("Very good!\n"); 67 break; 68 case 2: 69 printf("Excellent!\n"); 70 break; 71 case 3: 72 printf("Nice work!\n"); 73 break; 74 case 4: 75 printf("Keep up the good work!\n"); 76 break; 77 } 78 return 10; 79 } 80 else 81 { 82 switch (c) 83 { 84 case 1: 85 printf("No.Please try again.\n"); 86 break; 87 case 2: 88 printf("Wrong.Try once more.\n"); 89 break; 90 case 3: 91 printf("Don't give up!\n"); 92 break; 93 case 4: 94 printf("Not correct.Keep trying.\n"); 95 break; 96 } 97 return 0; 98 } 99 }