小学生数学加减乘除四则运算测试系统

设计人:湖南第一师范学院数理系10信科一班 马宗立 学号:10402050116
完成时间:2012年1月22日
#include
#include
#include
#include
#include
#include
int fzhe[4]={5,4,4,4}; //fzhe[0]、fzhe[1]、fzhe[2]、fzhe[3]分别表示加、减、乘、除四种运算法则的出题数
int x, y; //x,y为各个出题函数所需的十进制数据

//产生符合要求的随机数的函数
suiji(int k,int i)
{time_t t;
srand((unsigned)time(&t));
int j;
int m[3][3]={{11,31,300},{11,31,300},{11,100,200}};
int n[3][3]={{0,69,1000},{0,69,1000},{2,21,101}};
j=i%3;
int a,b;
if(k==3)
{int e[3][2]={{82,2},{10001,500},{26000,10000}};
int f[3][2]={{82,2},{100,20},{199,101}};
do

{a=abs(rand())%e[j][0]+e[j][1];
b=abs(rand())%f[j][0]+f[j][1];
}while(a%b!=0||a==b);}
else
{a=abs(rand())%m[k][j]+n[k][j];
b=abs(rand())%m[k][j]+n[k][j];}
x=a;y=b;
}

//防止输入字符时,程序出错
srpduan()
{int i,j,k[20]={0},shuzi=0,length;
char str[20];
do
{do
{gets(str); //先将输入的答案看成字符串
length=strlen(str);
if(length>20)
printf("输入有误,请重新输入。\n");
}while(length>20);
for(i=0;i{
k[i]=isdigit(str[i]); //判断输入的答案中是否存在字符
j=i+1;
if(k[i]==0){j=0;break;}
}
if(j==length&&j>5){shuzi=-1;break;} //由于答案不可能是5位数和负数,当答案为5位数时直接使shuzi=-1
for(i=0;i{
if(k[i]!=0)j=1;
else {j=0;break;}}
if(j==0)printf("输入有误,请重新输入。\n");
if(j==1)
{
int a[5]={0};
for(i=0;i{
a[i]=((int)(str[i])-48)*pow(10,length-i-1); //输入的答案中不存在字符时,将答案重新转化为十进制数
shuzi=shuzi+a[i];}}
}while(j==0||length==0);
return (shuzi);
}

//加法出题函数
jiafa(int k,int i)
{int p,c;
suiji(k,i);
printf("%d+%d=",x,y);
c=srpduan();
printf("正确答案为:%d\t",x+y);
if(c==x+y){printf("答案正确\n");p=1;}
else{printf("答案错误\n");p=0;}
return (p);
}

//减法出题函数
jianfa(int k,int i)
{int temp, p,c;
suiji(k,i);
if(xprintf("%d-%d=",x,y);
c=srpduan();
printf("正确答案为:%d\t",x-y);
if(c==x-y){printf("答案正确\n");p=1;}
else{printf("答案错误\n");p=0;}
return (p);
}

//乘法出题函数
chengfa(int k,int i)
{int p,c;
suiji(k,i);
printf("%d*%d=",x,y);
c=srpduan();
printf("正确答案为:%d\t",x*y);
if(c==x*y){printf("答案正确\n");p=1;}
else{printf("答案错误\n");p=0;}
return (p);
}

//除法出题函数
chufa(int k,int i)
{int p,c;
suiji(k,i);
printf("%d/%d=",x,y);
c=srpduan();
printf("正确答案为:%d\t",x/y);
if(c==x/y){printf("答案

正确\n");p=1;}
else{printf("答案错误\n");p=0;}
return (p);
}


int main()
{int i,j,k,p,count[4]={0};
float score[5]={0};
for(k=0;k<4;k++)
{
{if(k==0)printf("\n一、加法测试:\n");
else if(k==1)printf("\n二、减法测试:\n");
else if(k==2)printf("\n三、乘法测试:\n");
else printf("\n四、除法测试:\n");
}
for(i=0;i{
{ printf("%d. ",i+1);}
switch(k)
{case 0: {p=jiafa(k,i);count[0]=count[0]+p; }break;
case 1: {p=jianfa(k,i);count[1]=count[1]+p; }break;
case 2: {p=chengfa(k,i);count[2]=count[2]+p;}break;
case 3: {p=chufa(k,i);count[3]=count[3]+p; }break;
default: break;}
}}
//根据学生水平出题
printf("\n五、附加题:\n");
for(k=0;k<4;k++)
{score[k]=(float)(count[k])/fzhe[k]*100;
if(score[k]<60)i=0;
else if(score[k]>=60&&score[k]<80)i=1;
else i=2;
switch(k)
{case 0: {p=jiafa(k,i);count[0]=count[0]+p; }break;
case 1: {p=jianfa(k,i);count[1]=count[1]+p; }break;
case 2: {p=chengfa(k,i);count[2]=count[2]+p;}break;
case 3: {p=chufa(k,i);count[3]=count[3]+p; }break;
default: break;}
}
//计算各项评分
for(k=0;k<4;k++)
{score[k]=(float)(count[k])/(fzhe[k]+1)*100;

printf("您的");
if(k==0)printf("加");
else if(k==1)printf("减");
else if(k==2)printf("乘");
else printf("除");
printf("法测试评分为:%3.1f\n",score[k]);
score[4]=(score[4]+score[k]);}
printf("您的综合评分为:%3.1f\n",score[4]/4);

return 0;
}

相关文档
最新文档