求解一道编程题~~~~急~~~~~有高手吗
计算机在教育中的应用常被称为计算机辅助教学(Computer-Assisted Instruction, CAI)。请编写一个程序来帮助小学生学习乘法。参考本章介绍的猜数游戏(例6.7、例6.11和例6.12)程序,按下列任务要求以循序渐进的方式编程。
任务1:程序首先随机产生两个1~10之间的正整数,在屏幕上打印出问题,例如:
6 * 7 = ?
然后让学生输入答案。程序检查学生输入的答案是否正确。若正确,则打印"Right!",然后问下一个问题;否则打印"Wrong! Please try again.",然后提示学生重做,直到答对为止。
任务2:在任务1的基础上,当学生回答错误时,最多给三次重做的机会,三次仍未做对,则显示"Wrong! You have tried three times! Test over!",程序结束。
任务3:在任务1的基础上,连续做10道乘法运算题,不给机会重做,若学生回答正确,则显示"Right!",否则显示"Wrong!"。10道题全部做完后,按每题10分统计并输出总分,同时为了记录学生能力提高的过程,再输出学生的回答正确率(即错题数除以总题数的百分比)。
任务4:在任务3的基础上,通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,不给机会重做,如果学生回答正确,则显示"Right!",否则显示"Wrong!"。10道题全部做完后,按每题10分统计总得分,然后打印出总分和学生的回答正确率。
任务5:在任务4基础上,为使学生通过反复练习熟练掌握所学内容,在学生完成10道运算题后,若学生回答正确率低于75%,则重新做10道题,直到回答正确率高于75%时才退出程序。
任务6:开发一个CAI系统所要解决的另一个问题是学生疲劳的问题。消除学生疲劳的一种办法就是通过改变人机对话界面来吸引学生的注意力。在任务5的基础上,使用随机数产生函数产生一个1~4之间的随机数,配合使用switch语句和printf()函数调用,来为学生输入的每一个正确或者错误的答案输出不同的评价。
对于正确答案,可在以下4种提示信息中选择一个进行显示:
Very good!
Excellent!
Nice work!
Keep up the good work!
对于错误答案,可在以下4种提示信息中选择一个进行显示:
No. Please try again.
Wrong. Try once more.
Don’t give up!
Not correct. Keep trying. 展开
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
void eval1(int );//对正确答案的评价
void eval2(int );//对错误答案的评价
int main()
{
int a,b;
int answer1, answer2;//记录+、-、*的答案
float answer3, answer4;//记录/的答案
int flags = 1;
int select, evaluate;
int count1 = 0, count2 = 0;//记录总题数、及正确答案的题目数
int temp;
int scores = 0;//记录分数
float rate;//记录正确率
srand((unsigned)time(NULL));
while(flags)
{
count1++;
a = rand() % 10 + 1;
b = rand() % 10 + 1;
evaluate = rand() % 4 + 1;
select = rand() % 4 + 1;
//加法运算
if(select == 1)
{
answer1 = a + b;
printf("%d + %d = ?\n",a,b);
printf("Please input the answer:");
scanf("%d",&answer2);
if(answer1 == answer2)
{
count2++;
scores += 10;
printf("Right\n");
}
else
{
printf("Wrong\n");
}
}
//减法运算
else if(select == 2)
{
if(b > a)
{
temp = a;
a = b;
b = temp;
}
answer1 = a - b;
printf("%d - %d = ?\n",a,b);
printf("Please input the answer:");
scanf("%d",&answer2);
if(answer1 == answer2)
{
printf("Right\n");
count2++;
scores += 10;
}
else
{
printf("Wrong\n");
}
}
//乘法运算
else if(select == 3)
{
answer1 = a * b;
printf("%d * %d = ?\n",a,b);
printf("Please input the answer:");
scanf("%d",&answer2);
if(answer1 == answer2)
{
printf("Right\n");
count2++;
scores +=10;
}
else
{
printf("Wrong\n");
}
}
//除法运算
else
{
//保证分母不为0
if( b == 0)
b++;
answer3 = (float)a / b;
printf("%d / %d = ?\n",a,b);
printf("Please input the answer:");
scanf("%f",&answer4);
if(fabs(answer3 - answer4) < 0.001)
{
printf("Right\n");
count2++;
scores += 10;
}
else
{
printf("Wrong\n");
}
}
//判断正确率
if(count1 == 10)
{
rate = (float)count2 / count1;
if( rate > 0.75)
{
flags = 0;
printf("Scores: %d Rate: %%%.0f\n",scores,rate*100);
eval1(evaluate);
}
else
{
printf("Scores: %d Rate: %%%.0f\n",scores,rate*100);
printf("Please make the rate greater than %75\n");
eval2(evaluate);
}
}
}
return 0;
}
void eval1(int a)
{
switch(a)
{
case 1:printf("Very good!\n");break;
case 2:printf("Excellent!\n");break;
case 3:printf("Nice work!\n");break;
default:printf("Keep up the good work!\n");break;
}
}
void eval2(int a)
{
switch(a)
{
case 1:printf("No. Please try again.\n");break;
case 2:printf("Wrong. Try once more.\n");break;
case 3:printf("Don’t give up!\n");break;
default:printf("Not correct. Keep trying.\n");break;
}
}
大概做了下任务6,其它的自己实践一下吧
哪里不会的,赶紧问
晚上有课,七点前,十点后才能答复