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;
}
posted @ 2020-10-30 20:49  快乐永恒  阅读(816)  评论(3编辑  收藏  举报