任务1.程序首先随机产生两个1--10之间的正整数,在屏幕上打印出问题。
任务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%时才退出程序。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include <windows.h>
int one();
int two();
int three();
int four();
int five();
int six();
int rightCount = 0;
/*函数功能:判断两个数是否相等*/
int Pending(int s, int flag)
{
if (s == flag)
{
printf("Right\n");
rightCount++;
}
else
printf("Wrong\n");
return 0;
}
/*判断被除数是否为零*/
int Division(char b, double c)
{
int temp;
temp = 0;
if (b == '/' && c == 0)
{
printf("被除数为零");
temp = 1;
}
return temp;
}
/*产生随机数*/
int Srand1()//产生1~9
/*
函数功能:产生随机数
函数入口:无
函数返回值:随机数
*/
{
srand((unsigned int)time(NULL));
Sleep(10);
int i;
i= rand() % 9 + 1;
return i;
}
/*函数功能:产生随机数
函数传参:无
函数返回值:随机数*/
int Srand2()//产生1~9
{
Sleep(10);
int i;
i = rand() % 9 + 1;
return i;
}
int StatisticScore(int c)
/*
* 功能:传入算对的题数
入口参数:c
返回值:答题的分数
*/
{
int x;
x = c * 10;
return x;
}
double StatisticRate(double c)
/*
功能:算正确率
入口参数:c
返回值:答题的正确率*/
{
double y;
y = c/10;
return y;
}
int one()
/*任务一
* 无传参
* 无返回值*/
{
int a, c, d,m;
do
{
a = Srand1();
c = Srand2();
d = a * c;
printf("%d*%d=", a, c);
scanf_s("%d", &m);
Pending(d, m);
} while (m != d);
return 0;
}
/*任务二
无传参
无返回值*/
int two()
{
srand((unsigned)time(NULL));
int flag,count,temp;
flag = 0;
count = 0;
double a, c, s, e;
int b;
char p;
p = '/';
do
{
a = Srand1();
b = rand() % 4;
c = Srand2();
switch (b)
{
case 0:
temp = Division(p, c);
if (temp == 1)
break;
printf("%.2f/%.2f=", a, c);
s = a / c;
break;
case 1:
printf("%.2f*%.2f=", a, c);
s = a * c;
break;
case 2:
s = a + c;
printf("%.2f+%.2f=", a, c);
break;
default:
printf("%.2f-%.2f=", a, c);
s = a - c;
}
scanf_s("%lf", &e);
if (s == e){
flag++;
printf("Right\n");
}
else{
count++;
if (count != 4)
printf("Wrong ! Please try again.\n");
else{
printf("Wrong! You have tried three times! Test over!\n");
break;
}
}
} while (flag != 1);
flag = count = 0;
return 0;
}
int three()
/*任务三
无传参
无返回值*/
{
int a, c, d, m, flag;
flag = 0;
rightCount = 0;
do{
flag++;
a = Srand1();
c = Srand2();
d = a * c;
printf("%d*%d=", a, c);
scanf_s("%d", &m);
Pending(d, m);
} while (flag != 10);
int score= StatisticScore(rightCount);
double rate = StatisticRate(rightCount);
printf("得分: %d , 正确率:%.2f\n", score, rate);
return 0;
}
int four()
/*
任务四*/
{
int b, flag, parameter , s, x, temp;
double y;
double a, c;
flag = 0;
int score;
rightCount = 0;
double m, rate;
char p;
do{
flag++;
a = Srand1();
a = a * 1.0;
c = Srand2();
c = c * 1.0;
b = rand() % 4;
switch (b){
case 0:
p = '/';
temp = Division(p, c);
if (temp == 1)
break;
printf("%.2f/%.2f=", a, c);
s = a / c;
break;
case 1:
printf("%.2f*%.2f=", a, c);
s = a * c;
break;
case 2:
s = a + c;
printf("%.2f+%.2f=", a, c);
break;
default:
printf("%.2f-%.2f=", a, c);
s = a - c;
}
scanf_s("%lf", &m);
Pending(s, m);
} while (flag != 10);
score = StatisticScore(rightCount);
rate = StatisticRate(rightCount);
printf("得分为: %d ,正确率为: %.2f ", score, rate);
printf("\n");
return 0;
}
int five()
/*任务五
无传参
无返回值*/
{
int b, flag, x, temp;
double a, c;
rightCount = 0;
double rate = 0;
double y, s;
do {
flag = 0;
double m;
char p;
do {
a = Srand1();
a = (double)a;
c = Srand2();
c = (double)c;
b = rand() % 4;
switch (b) {
case 0:
p = '/';
temp = Division(p, c);
if (temp == 1)
{
continue;
}
printf("%.2f/%.2f=", a, c);
s = a / c;
break;
case 1:
printf("%.2f*%.2f=", a, c);
s = a * c;
break;
case 2:
s = a + c;
printf("%.2f+%.2f=", a, c);
break;
default:
printf("%.2f-%.2f=", a, c);
s = a - c;
}
scanf_s("%lf", &m);
flag++;
Pending(s, m);
} while (flag % 10 != 0);
int score = StatisticScore(rightCount);
// score = 1.0 * rightCount;
rate = StatisticRate(rightCount);
printf("%d %.2f", score, rate);
printf("\n");
} while (rate <= 0.75);
return 0;
}
int main()
{
int a,flag;
flag = 0;
printf("******************************************************************************\n");
printf(" * 1. 任务 1:随机产生 1 - 10 之间正整数,出乘法问题,直到学生答对为止。\n");
printf(" * 2. 任务 2:在任务 1 基础上,当学生答错时,最多给三次机会。 \n");
printf(" * 3. 任务 3:在任务 1 基础上,连做 10 道乘法题,不给机会重做,统计总分、正确率。\n");
printf(" * 4. 任务 4:在任务 3 基础上,随机产生 10 道四则运算题,不给机会重做,统计总分、正确率。 \n");
printf(" * 5. 任务 5:在任务 4 基础上,若回答正确率低于 75 % ,则再做 10 道题,直到正确率高于 75 % 为止。\n");
printf(" * 6. 退出 \n");
printf("***************************************************************************** \n");
while (scanf_s("%d", &a) != EOF){
if (a == 6) {
printf("程序已结束");
break;
}
switch (a){
case 1:
one();
break;
case 2:
two();
break;
case 3:
three();
break;
case 4:
four();
break;
case 5:
five();
break;
default:
printf("命令错误,程序已结束");
break;
}
if (flag == 1)
break;
printf("*********************************************************************************\n");
printf(" * 1. 任务 1:随机产生 1 - 10 之间正整数,出乘法问题,直到学生答对为止。\n");
printf(" * 2. 任务 2:在任务 1 基础上,当学生答错时,最多给三次机会。 \n");
printf(" * 3. 任务 3:在任务 1 基础上,连做 10 道乘法题,不给机会重做,统计总分、正确率。\n");
printf(" * 4. 任务 4:在任务 3 基础上,随机产生 10 道四则运算题,不给机会重做,统计总分、正确率。 *\n");
printf(" * 5. 任务 5:在任务 4 基础上,若回答正确率低于 75 % ,则再做 10 道题,直到正确率高于 75 % 为止。\n");
printf(" * 6. 退出 *\n");
printf("********************************************************************************** \n");
}
return 0;
}