解答私信@m0_51085291 //2020-12-21

編寫一個幫助小學生練習數學的程序,幫助小學生練習100以內整數的四則運算:加、減、乘、除。

【基本要求】
(1)電腦隨機出 10 道題,每題 10 分,程序結束時顯示學生得分;
(2)試題應包含四種數學運算:加、減、乘、除,它們是隨機產生的。爲每道題隨機生成數字,但必須確保參與運算的數字和結果都是小於 100 且大於零的整數。
(3)每道題學生有三次機會輸入答案,當學生輸入錯誤答案時,提醒學生重新輸入,如果三次機會結束則輸出正確答案;
(4)對於每道題,學生第一次輸入正確答案得 10 分,第二次輸入正確答案得 7 分,第三次輸入正確答案得 5 分,否則不得分;
(5)總成績 90 以上顯示“ SMART”,80-90 顯示“ GOOD”,70-80 顯示“ OK”,60-70 顯示“ PASS”,60 以下“ TRY AGAIN ”
(6)十道題做完後,顯示學生完成這十道題所用的時間

代碼塊:

/*說明:如果程序在顯示第X題後,光標一直跳動不出題,請耐心等待,
這是由於爲了讓除法題目能夠整除,隨機函數在不斷調整數字造成的*/

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

char randOperator();
void randExpression(int *num1, int *num2, char ro);
void input(int *res);
int judgeResult(int *num1, int *num2, char ro, int *res);
void outputScore(int *fun());

char randOperator()
{
   
   
	int judgeNum;
	char oper;
	srand((unsigned)time(NULL));
	judgeNum=rand()%4;
	switch(judgeNum)
	{
   
   
	case 0: oper='+'; break;
	case 1: oper='-'; break;
	case 2: oper='*'; break;
	case 3: oper='/'; break;
	default: break;
	}
	return oper;
}//randOperator
void randExpression(int *num1, int *num2, char ro)
{
   
   
	unsigned int seed;
	seed=(unsigned)time(0);
	srand(seed);
	*num1=rand()%100+1;
	*num2=rand()%100+1;
	/*以下代碼爲了保證除法能夠整除*/
	if(ro=='/')
	{
   
   
		while(*num1%*num2!=0)
		{
   
   
			seed=(unsigned)time(0);
			srand(seed);
			*num1=rand()%100+1;
			*num2=rand()%100+1;
		}
	}
	cout<<*num1<<ro<<*num2<<"=?";
}//randExpression
void input(int *res)
{
   
   
	cin>>*res;
}//input
int judgeResult(int *num1, int *num2, char ro, int *res)
{
   
   
	int temp, correctCount, totalScore;
	switch(ro)
	{
   
   
	case '+': temp=*num1+*num2; break;
	case '-': temp=*num1-*num2; break;
	case '*': temp=*num1*(*num2); break;
	case '/': temp=*num1/(*num2); break;
	default: break;
	}
	for(correctCount=0, totalScore=10; correctCount<3; correctCount++)
	{
   
   
		if(temp!=*res)
		{
   
   
			switch(correctCount)
			{
   
   
			case 0: cout<<"     第1次錯誤,重新輸入!"; input(res); break;
			case 1: cout<<"     第2次錯誤,重新輸入!"; input(res); break;
			case 2: cout<<"     第3次錯誤!"<<endl; totalScore=0; break;
			default: break;
			}
		}
		else
		{
   
   
			switch(correctCount)
			{
   
   
			case 0: totalScore=10; break;
			case 1: totalScore=7; break;
			case 2: totalScore=5; break;
			default: totalScore=0; break;
			}
			break;
		}
	}
	return totalScore;
}//judgeResult
void outputScore(int sco)
{
   
   
	int j=sco/10;
	switch(j)
	{
   
   
	case 0:
	case 1:
	case 2:
	case 3:
	case 4:
	case 5: cout<<"TRY AGAIN"<<endl; break;
	case 6: cout<<"PASS"<<endl; break;
	case 7: cout<<"OK"<<endl; break;
	case 8: cout<<"GOOD"<<endl; break;
	case 9:
	case 10: cout<<"SMART"<<endl; break;
	default: break;
	}
}//outputScore

int main()
{
   
   
	int *number1=new int;
	int *number2=new int;
	int *result=new int;
	int score, i;
	clock_t startTime, endTime;
	startTime=clock();
	for(i=0, score=0; i<10; i++)
	{
   
   
		char oper;
		cout<<"第"<<i+1<<"題:";
		oper=randOperator();
		randExpression(number1, number2, oper);
		input(result);
		score+=judgeResult(number1, number2, oper, result);
		cout<<"Score="<<score<<endl<<endl;
	}
	outputScore(score);
	endTime=clock();
	cout<<"The run time is: "<<(double)(endTime-startTime)/CLOCKS_PER_SEC<<"s"<<endl;
	free(number1);
	free(number2);
	free(result);

	system("pause");
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章