小學生計算機輔助教學系統(第6章實驗題2)
設計一個計算輔助教學系統,要求首先在屏幕顯示如下6個任務提示,用戶通過輸入1-6進入其中一個任務,任務完成后繼續顯示任務提示界面,若用戶輸入Q,推出系統。
每個任務完成如下功能:
任務1:程序首先隨機產生兩個1-10之間的正整數,在屏幕上打印出問題,例如:
6*7=?
然后讓學生輸入答案。程序檢查學生的輸入的答案是否正確。若正確,顯示“Right!”,否則顯示“Wrong! Please try again.”,然后提示學生重做,直到答對為止。
任務2:在任務1的基礎上,當學生回答錯誤是,最多給3次重做的機會,三次仍未做對,則顯示“Wrong! You have tried three times! Test over!”,程序結束。
任務3:在任務1的基礎上,連續做10題乘法運算題,不給機會重做,每一題做完后,若回答正確,顯示“Right!”,否則顯示“Wrong!”。10題全部做完后,按每題10分統計並輸出總分,同時輸出學生的回答正確率(即答對題數除以總題數的百分比或答對總分除以100)。
任務4:在任務3的基礎上,通過計算機隨機產生10道4則運算題,兩個操作數為1-10之間的隨機數,運算類型為隨機產生的加減乘除中任意一種,不給機會重做,每一題做完后,若回答正確,顯示“Right!”,否則顯示“Wrong!”。10題全部做完后,按每題10分統計並輸出總分,同時輸出學生的回答正確率。
任務5:在任務4的基礎上,在學生完成10題后,若正確率低於75%,重做10題,知道回答正確率高於75%時才推出程序。
任務6:在任務5的基礎上,誰用隨機函數產生一個1-4之間的隨機數,配合使用switch語句和printf()函數條用,為學生輸入的每一個正確或錯誤的答案輸出不同的評價。
正確答案可以在以下4中提示信息中選擇一個進行提示:
Very good!
Excellent!
Nice word!
Keep up the good work!
錯誤答案可以在以下4中提示信息中選擇一個進行提示:
No,please try again.
Wrong,Try once more.
Don’t give up.
Not correct.Keep trying.
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#define EPS 1e-6
char op()
{
switch(rand()%4)
{
case 0:return '+';
case 1:return '-';
case 2:return '*';
case 3:return '/';
}
}
double calc(int a,int b,char c)
{
switch(c)
{
case '+':return a+b;
case '-':return a-b;
case '*':return a*b;
case '/':return 1.0*a/b;
}
}
void read(int *a,int *b,int c,double *ans)
{
*a=rand()%10+1,*b=rand()%10+1;
printf("%d%c%d=",*a, c,*b);
scanf("%lf",ans);
// printf("-----------------\n%lf\n",*ans);
return ;
}
void print1(int x)
{
if(!x){puts("Right!");return ;}
switch(rand()%4)
{
case 1:puts("Very good!");return ;
case 2:puts("Excellent!");return ;
case 3:puts("Nice work!");return ;
case 4:puts("Keep up the good work!");return ;
}
}
void print2(int x)
{
if(!x){puts("Wrong!");return ;}
switch(rand()%4)
{
case 1:puts("No,please try again.");return ;
case 2:puts("Wrong,try once more.");return ;
case 3:puts("Don\'t give up.");return ;
case 4:puts("Not correct.Keep trying");return ;
}
}
int work(int a,int b,char c,double ans,int in)
{
int sum=0,i;
for(i=0;i<10;++i)
{
read(&a,&b,c,&ans);
if(fabs(ans-calc(a,b,c))<=EPS)
{print1(in);++sum;}
else print2(in);
}
printf("%d0 %d0\n",sum,sum);
return sum;
}
int main()
{
int a,b,i,sum,in;
double ans;
srand(time(NULL));
do
{
printf("任務1:簡單乘法\n");
printf("任務2:3次乘法\n");
printf("任務3:10次乘法\n");
printf("任務4:10次四則運算\n");
printf("任務5:10次四則運算與通過率\n");
printf("任務6:10次四則運算與鼓勵\n");
printf("請通過輸入1-6選擇所執行的任務,輸入0退出:\n");
scanf("%d",&in);
switch(in)
{
case 0:break;
case 1:
read(&a,&b,'*',&ans);
// printf("---------%lf\n",fabs(ans-calc(a,b,'*')));
while(fabs(ans-calc(a,b,'*'))>EPS)
{
puts("Wrong!Please try again.");
scanf("%lf",&ans);
}
puts("Right!");
break;
case 2:
read(&a,&b,'*',&ans);
for(i=0;i<3;++i)
{
if(fabs(ans-calc(a,b,'*'))<=EPS)
{
puts("Right");
break;
}
printf("Wrong!");
if(i==2)
puts("You have tried three times!");
else {puts("Please try again.");scanf("%lf",&ans);}
}
break;
case 3:
work(a,b,'*',ans,0);
break;
case 4:
work(a,b,op(),ans,0);
break;
case 5:
while(work(a,b,op(),ans,0)<8);
break;
case 6:
while(work(a,b,op(),ans,1)<8);
break;
default:puts("Input error!");
}
}while(in);
return 0;
}
