#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#define N 50 //测试题目数量
int ErrNo[N]={0}; //错题题号
int ErrCnt=0; //错题总数
int Erri[N]={0},Errj[N]={0},ErrAns[N]={0}; //顺次为错题的两个加数和错误答案
char ErrFlag[N]={0}; //错题的运算符
int start=0,end=0;
int n=0; //指定测试题目数量
int op();
void test_jj(int);
void test_j();
void score();
void test_cc();
main()
{int i;
i=op();
switch(i)
{case 1:test_j();break; //10以内随机加法测试
case 2:test_jj(10);break; //10以内随机加减法测试
case 3:test_jj(100);break; //100以内随机加减法测试
case 4:test_jj(1000);break; //1000以内随机加减法测试
case 5:test_cc();break; //乘法口诀测试
default:printf("输入错误,程序结束\n");system("pause");return;
}
score();
}
int op() //欢迎界面
{int i;
printf("===============================================\n");
printf("= =\n");
printf("= 算数题测试 =\n");
printf("= =\n");
printf("===============================================\n");
printf("\n");
printf("\t1:0~10随机加法测试\n");
printf("\t2:0~10随机加减法测试\n");
printf("\t3:0~100随机加减法测试\n");
printf("\t4:0~1000随机加减法测试\n");
printf("\t5:乘法口诀随机测试\n");
scanf("%d",&i);
//system("pause");
return i;
}
void test_j() //10以内随机加法测试
{
int i,j,cnt,answer; //i加数,j加数,cnt统计目前题号,answer为输入的答案
srand((unsigned)time(NULL)); //初始化随机数种子
system("cls");
start=time(NULL);
printf("\n\n\t按任意键,开始测试并计时\n\t");
system("pause");
cnt=0;
while(cnt<N) //N道随机算数题
{i=rand()%10;
j=rand()%10;
if(i+j>=10)
continue;
system("cls");
printf("\n\t第%d题:\n",++cnt);
printf("\t%2d+%-2d=",i,j);
scanf("%d",&answer);
if(i+j!=answer)
{ErrNo[ErrCnt]=cnt+1;
Erri[ErrCnt]=i;
Errj[ErrCnt]=j;
ErrFlag[ErrCnt]='+';
ErrAns[ErrCnt]=answer;
ErrCnt++;
}
}
system("cls");
end=time(NULL);
printf("\n\n\t本次测试结束,按任意键开始评分\n\n");
system("pause");
}
void test_jj(int n) //加减测试,形参n决定答案数值范围
{
int i,j,flag,cnt,answer; //i加数,j加数,flag为1则加为0则减,cnt统计目前题号,answer为输入的答案
srand((unsigned)time(NULL)); //初始化随机数种子
system("cls");
start=time(NULL);
printf("\n\n\t按任意键,开始测试并计时\n");
system("pause");
cnt=0;
while(cnt<N) //N道随机算数题
{i=rand()%n;
j=rand()%n;
flag=rand()%2;
if(flag&&i+j>=n)
continue;
if(!flag&&i-j<0)
continue;
system("cls");
printf("\n\t第%d题:\n",++cnt);
printf("\t%2d%c%-2d=",i,flag?'+':'-',j);
scanf("%d",&answer);
if(flag&&i+j!=answer || !flag&&i-j!=answer)
{ErrNo[ErrCnt]=cnt+1;
Erri[ErrCnt]=i;
Errj[ErrCnt]=j;
ErrFlag[ErrCnt]=flag?'+':'-';
ErrAns[ErrCnt]=answer;
ErrCnt++;
}
}
system("cls");
end=time(NULL);
printf("\n\n\t本次测试结束,按任意键开始评分\n\n");
system("pause");
}
void test_cc() //乘法口诀测试
{
int i,j,cnt,answer; //i加数,j加数,flag为1则加为0则减,cnt统计目前题号,answer为输入的答案
srand((unsigned)time(NULL)); //初始化随机数种子
system("cls");
start=time(NULL);
printf("\n\n\t按任意键,开始测试并计时\n");
system("pause");
cnt=0;
while(cnt<N) //N道随机算数题
{i=rand()%10;
j=rand()%10;
if(i==0||j==0)
continue;
system("cls");
printf("\n\t第%d题:\n",++cnt);
printf("\t%d×%d=",i,j);
scanf("%d",&answer);
if(i*j!=answer)
{ErrNo[ErrCnt]=cnt+1;
Erri[ErrCnt]=i;
Errj[ErrCnt]=j;
ErrFlag[ErrCnt]='*';
ErrAns[ErrCnt]=answer;
ErrCnt++;
}
}
system("cls");
end=time(NULL);
printf("\n\n\t本次测试结束,按任意键开始评分\n\n");
system("pause");
}
void score()
{
int i;
FILE *fp;
if( (fp=fopen("score.txt","w")) ==NULL)
printf("\n\n\t\t文件无法打开或创建,得分情况将仅在屏幕上显示\n");
else
printf("本次测试结果将同步输出到score.txt中,此文件在本程序隔壁\n");
printf("本次测试共耗时%d分%d秒\n",(end-start)/60,(end-start)%60);
fprintf(fp,"本次测试共耗时%d分%d秒\n",(end-start)/60,(end-start)%60);
if(ErrCnt==0)
{printf("\n\t恭喜你,所有题目全部正确,100分!\n");
fprintf(fp,"\n\t恭喜你,所有题目全部正确,100分!\n");
}
else
{printf("\n\t本次测试共%d题,答对%d题,得分%d分\n",N,N-ErrCnt,100*(N-ErrCnt)/N);
fprintf(fp,"\n\t本次测试共%d题,答对%d题,得分%d分\n",N,N-ErrCnt,100*(N-ErrCnt)/N);
printf("\n\t答错的题目如下\n");
fprintf(fp,"\n\t答错的题目如下\n");
for(i=0;i<ErrCnt;i++)
{printf("\t\t第%2d题:%2d%c%2d=%2d\n",ErrNo[i],Erri[i],ErrFlag[i],Errj[i],ErrAns[i]);
fprintf(fp,"\t\t第%2d题:%2d%c%2d=%2d\n",ErrNo[i],Erri[i],ErrFlag[i],Errj[i],ErrAns[i]);
}
}
system("pause");
}
【C】小学一二年级数学能力测试错题回显计时自动打分
最新推荐文章于 2022-09-25 15:50:14 发布