【C】小学一二年级数学能力测试错题回显计时自动打分

#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");
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值