第6章实验 循环控制结构
- 题目1:小学生数学CAI系统
任务1:
程序首先随机产生1-10之间的正整数,在屏幕上打印出问题。例如 6*7=? 然后让学生输入答案。程序检查学生输入的答案是否正确。若正确,则打印“Right!”,然后问下一个问题;否则打印“Wrong! Please try again.”,然后提示学生重做,直到答对为止。
1、解题思路:
使用rand随机函数产生两个随机整数。使用do-while循环结构,回答正确回答下一个问题。If else条件结构,回答错误打印“Wrong! Please try again.”。
2、源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int answear,i, a,b;
srand(time(NULL));
a = rand() % 10 + 1;
b = rand() % 10 + 1;
printf("%d * %d = ?",a,b,a * b);
i=1;
do
{
scanf("%d",&answear);
if(a * b == answear)
{
printf("Right!");
}
else
{
printf("Wrong!Please try again.");
}
}while(a * b != answear);
return 0;
}
3、程序运行效果截图:
任务2:
小学生数学CAI系统任务2:在任务1的基础上,当学生回答错误时,最多给三次重做的机会,三次仍未做对,则显示“Wrong!You have tried three times! Test over!”,程序结束。
1、解题思路:
Do-while循环结构,while中给出条件最多循环三次。三次之后仍为做对,循环结束打印“Wrong!You have tried three times! Test over!”
- 源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int answear,i, a,b;
srand(time(NULL));
a = rand() % 10 + 1;
b = rand() % 10 + 1;
printf("%d * %d = ?",a,b,a * b);
i=1;
do
{
scanf("%d",&answear);
if(a * b == answear)
{
printf("Right!");
}
else
{
printf("Wrong!Please try again.");
}
i++;
}while(a * b != answear && i <= 3);
printf("Wrong!You have tried three times! Test over");
return 0;
}
3、程序运行效果截图:
任务3:
在任务1的基础上,连续做10道乘法运算题,不给机会重做,若学生回答正确,则显示“Right!”,否则显示“Wrong!”。10道题全部做完后,按每题10分统计并出输总分,同时为了记录学生能力提高的过程,在输出学生的回答正确率(即答对题述除以总题数的百分比)。
1、解题思路:
使用for循环,条件控制中循环次数i<=10。回答错误时,将“Wrong! Please try again.”改为“Wrong!”。对做对的题目进行计数,10乘以做对题数为总分。对于百分比,使用%%,对百分制成绩直接加百分号。定义counter,用于计数。
2 源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int answear,j, a,b,counter=0,percent,scoal;
char op;
srand(time(NULL));
for(j=1;j<=10;j++)
{
a = rand() % 10 + 1;
b = rand() % 10 + 1;
printf("%d * %d = ?",a,b,a * b);
scanf("%d",&answear);
if(a * b == answear)
{
counter = ++counter;
printf("Right!");
}
else
{
printf("Wrong!");
}
}
printf("%d",counter);
scoal = percent = (10 * counter);
printf("%d,%d%%",scoal,percent);
return 0;
}
- 程序运行效果截图:
任务4:
在任务3的基础上通过计算机随机产生10道四则运算题,两个操作数为1-10之间的随机数,运算类型为随机产生的加,减,乘,整除中的任意一种,不给机会重做,如果学生回答正确,则显示“Right!”,否则显示“Wrong!”。10道题全部做完后,按每题10分统计总分,然后打印出总分和学生的回答正确率。
1、解题思路:
对于随机产生四道运算题,定义type为0-4,使用switch,进行随机选择。对于做对题数进行counter计数,每一个运算分别判断正确。
2源代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int answear,i, a,b,counter=0,percent,scoal,type;
srand(time(NULL));
for(i=1;i<=10;i++)
{
a = rand() % 10 + 1;
b = rand() % 10 + 1;
type = rand() % 4 + 1;
switch(type)
{
case 1:
printf("%d * %d = ?",a,b,a * b);
scanf("%d",&answear);
if(a * b == answear)
{
counter = ++counter;
printf("Right!");
}
else
{
printf("Wrong!");
}
break;
case 2:
printf("%d + %d = ?",a,b,a + b);
scanf("%d",&answear);
if(a + b == answear)
{
counter = ++counter;
printf("Right!");
}
else
{
printf("Wrong!");
}
break;
case 3:
printf("%d - %d = ?",a,b,a - b);
scanf("%d",&answear);
if(a - b == answear)
{
counter = ++counter;
printf("Right!");
}
else
{
printf("Wrong!");
}
break;
case 4:
printf("%d / %d = ?",a,b,a / b);
scanf("%d",&answear);
if(a / b == answear)
{
counter = ++counter;
printf("Right!");
}
else
{
printf("Wrong!");
}
break;
default:
printf("");
}
}
printf("%d",counter);
scoal = percent = (10 * counter);
printf("%d,%d%%",scoal,percent);
return 0;
}
3 程序运行效果截图:
五、MOOC网课程测试结果
1、测试1:
2、测试2: