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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM