#include
#include
#include
void main()
{
int add(int a,int b);//对函数add的声明。如果函数体位于调用它的函数体后面,就要进行函数声明。
int sub(int a,int b);//减法
int mul(int a,int b);//乘法
int divi(int a,int b);//除法
int x,y;
int i,s;
int a[10][4];
srand((int)time(0));
printf("即将开始数学测试,你准备好了吗? \n");
for(i=0;i<10;i++)
{
printf("进行第%d题\n",i+1);
printf("请输入: 1、加法运算(+),2、减法运算(-),3、乘法运算(*),4、除法运算(/),5、退出(exit) \n");
scanf("%d",&s);
x=(int)(1+(10.0*rand()/(RAND_MAX+1.0)));
a[i][0]=x;
y=(int)(1+(10.0*rand()/(RAND_MAX+1.0)));
a[i][2]=y;
switch( s )
{
case 1:
printf("加法运算!!\n");a[i][1]='+';
a[i][3]=add(x,y);break;
case 2:
printf("减法运算!!\n");a[i][1]='-';a[i][3]=sub(x,y);break;
case 3:
printf("乘法运算!!\n");a[i][1]='*';a[i][3]=mul(x ,y);break;
case 4:
printf("除法运算!!\n");a[i][1]='/';a[i][3]=divi(x ,y);break;
case 5:
printf("不想做了,退出!!\n");break;
default:printf("输入错误,请重新输入!!\n");i--;break;
}
if (s==5)break;
}
if(s!=5)
{
printf("\n\n 刚刚做的题目如下,请再次检查! \n");
for(i=0;i<10;i++)
printf("%d%c%d=%d\n",a[i][0],a[i][1],a[i][2],a[i][3]);
printf("按任意键结束,本次测试!!! \n");
}
}
int add(int a,int b)
{
int c;
printf("%d+%d=",a,b);
scanf("%d",&c);
if(a+b==c)
printf("做对了!继续努力! \n");
else
printf("很遗憾!你做错了!还需加油!!\n");
return(c);
}
int sub(int a,int b)
{
int c;
printf("%d-%d=",a,b);
scanf("%d",&c);
if(a-b==c)
{
printf("做对了!继续努力! \n");
}
else
printf("很遗憾!你做错了!还需加油!!\n");
return(c);
}
int mul(int a,int b)//乘法
{
int c;
printf("%d*%d=",a,b);
scanf("%d",&c);
if(a*b==c)
{
printf("做对了!继续努力! \n");
}
else
printf("很遗憾!你做错了!还需加油!!\n");
return(c);
}
int divi( int a,int b)//除法!
{
int c;
printf("%d/%d=",a,b);
scanf("%d",&c);
if((int)a/b==c)
{
printf("做对了!继续努力! \n");
}
else
printf("很遗憾!你做错了!还需加油!!\n");
return(c);
}
你的程序如果是int型的,那么在做除法时会有BUG,5/3则不能正确计算,程序只会去整数部分,即1作为判断,也就是说如果你输入是1那么就是对的,但是显然结果不是1,该程序不能做带有余数的除法,如果要改的话,就把所有的变量都改成float型的!
涉及到类型转换!