10.29C语言程序设计实验题
小学生计算机辅助教学系统(第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;
}