题目
功能:
四则运算(+-×÷)各出2题,除法每题20分,其他每题10分。每题通过计算机随机产生两个1~100之间的整数作为运算数据(除法要能整除)。学生根据题目输入输入答案,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,然后显示下一题,不给机会重做。测试结束后,统计总得分和错误题数并输出。
编程要求
- 写一个子函数,跟据传入的两个运算数据及运算符并实现运算。同时,在子函数中提示学生输入答案,答案对比运算结果进行判断,返回判断结果(正确1、不正确0);
- 主函数中按题数要求随机产生运算数据,调用Test函数后根据返回值进行输出提示和统计结果;
- 较好的用户输入输出提示。
解决问题
分析:
1.在主函数中,先种下随机数的种子。
2.再定义整型变量随机数x,y在1-100之间,用于提供算数的两个数字;又定义一个整型变量随机数op在1~4之间,用分别匹配加减乘除四种运算符。定义整型变量cnt=1,用来记录总题数并控制其最后等于8。定义四个整型变量a,b,c,d并初始化为0,分别记录加法,减法,乘法,除法的题数并控制其最后都为2。定义整型变量wrong并初始化为0,用于记录错误的题数,便于最后输出;定义整型变量score并初始化为0,用于记录分数。
3.在cnt<=8的循环内,对于随机数op,若其数字对应的运算类型的次数(a,b,c,d)<2,则调用测试测试函数,根据对错,为变量score加分,若错误,则wrong++,对应的(a,b,c,d)++,cnt++,进入下一轮循环,直到结束。
4.测试子函数需要的参数有三个,分别是两个参与运算的整型变量,和一个字符变量。通过字符变量分类出题,若正确则返回1,若错误则返回0。
答案:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int Test(int x,int y,char op)
{
int ret,answer;
if(op=='+')
{
printf("%d + %d =",x,y);
scanf("%d",&answer);
if(answer==x+y)
{
ret =1;
}
else
{
ret=0;
}
}
if(op=='-')
{
printf("%d - %d =",x,y);
scanf("%d",&answer);
if(answer==x - y)
{
ret =1;
}
else
{
ret=0;
}
}
if(op=='*')
{
printf("%d * %d =",x,y);
scanf("%d",&answer);
if(answer==x * y)
{
ret =1;
}
else
{
ret=0;
}
}
if(op=='/')
{
printf("%d / %d =",x,y);
scanf("%d",&answer);
if(answer==x / y)
{
ret =1;
}
else
{
ret=0;
}
}
return ret;
}
int main()
{
srand((unsigned)time(NULL));
int cnt=1;
int score=0; int wrong=0;
int a=0,b=0,c=0,d=0;
while(cnt<=8)
{
int x=rand()%99+1;
int y=rand()%99+1;
int op=rand()%4+1;
if(op==1&&a<2)
{
if(Test(x,y,'+'))
{
printf("Right !\n");
score+=10;
}
else
{
printf("Not correct !\n");
wrong++;
}
a++;cnt++;
}
if(op==2&&b<2)
{
if(Test(x,y,'-'))
{
printf("Right !\n");
score+=10;
}
else
{
printf("Not correct !\n");
wrong++;
}
b++;cnt++;
}
if(op==3&&c<2)
{
if(Test(x,y,'*'))
{
printf("Right !\n");
score+=10;
}
else
{
printf("Not correct !\n");
wrong++;
}
c++;cnt++;
}
if(op==4&&d<2)
{
if(x%y==0)
{
if(Test(x,y,'/'))
{
printf("Right !\n");
score+=20;
}
else
{
printf("Not correct !\n");
wrong++;
}
d++;cnt++;
}
}
}
printf("总得分:%d,错了%d题。",score,wrong);
return 0;
}