题目要求
.h文件的代码如下
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX_id_NUM 10
#define test_NUM 10
typedef struct student
{
char ID[MAX_id_NUM];
int score;
int time;
}student;// 定义student结构存储学生ID与对应成绩
typedef struct problem
{
int t;//区分类型||1==乘法||2==除法||3==加法||4==减法
int n1;//第一个运算数
int n2;//第二个运算数
int c_A;//正确答案
int u_A;//学生输入的答案
}problem;//定义problem结构存储问题与答案
student user;//全局变量user保存当前登录学生的ID与成绩
int quit=1;//退出的标识,当 quit==1时程序运行循环,quit==0时退出循环程序结束
void menu();//菜单函数,调出主要选择页面
int test();//算数测试函数
void W_file();//将成绩写入文档
int random1();//生成1~4的随机数
int random2(int i);//生成 0~99的随机数
int random3(int i);//生成0~10的随机数
int random4(int i);//生成0~49的随机数
void check();//查询函数,调出文档全部信息
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include"head.h"
int type=1;
problem T[10]; //10道题 10个信封
int score=0; //分数从0开始记
void funcA()
{
int i=0,j=0;
for(i=0;i<10000;i++)
for(j=0;j<10000;j++)
{
int test() //产生随机数
{
int i,flag=1; //类型:加减乘除 标志
int num1,num2,num3=100,num4;
for(i=0;i<test_NUM;i++)
{
type=random1(); //随机函数 随机产生1234
flag=1; //
switch(type)
{
case 1: //乘法
while(flag)
{
num1=random3(1);
num2=random3(9);
num3=num1*num2;
if(num3<=99&&num3>=0)flag=0; //跳出WHILE循环
}
printf("%d * %d=",num1,num2);
scanf("%d",&num4);
if(num3==num4)score+=10;
T[i].t=1;
T[i].n1=num1;
T[i].n2=num2;
T[i].c_A=num3; //正确回答
T[i].u_A=num4; //你的回答
break;
case 2:
while(flag)
{
num1=random2(1);
num2=random3(9);
if(num2==0)continue;
num3=num1/num2;
if(num3<=99&&num3>=0)flag=0;
}
printf("%d / %d=",num1,num2);
scanf("%d",&num4);
if(num3==num4)score+=10;
T[i].t=2;
T[i].n1=num1;
T[i].n2=num2;
T[i].c_A=num3;
T[i].u_A=num4;
break;
case 3:
while(flag)
{
num1=random2(1);
num2=random2(9);
num3=num1+num2;
if(num3<=99&&num3>=0)flag=0;
}
printf("%d + %d=",num1,num2);
scanf("%d",&num4);
if(num3==num4)score+=10;
T[i].t=3;
T[i].n1=num1;
T[i].n2=num2;
T[i].c_A=num3;
T[i].u_A=num4;
break;
default:
while(flag)
{
num1=random2(2);
num2=random4(1);
num3=num1-num2;
if(num3<=99&&num3>=0)flag=0;
}
printf("%d - %d=",num1,num2);
scanf("%d",&num4);
if(num3==num4)score+=10;
T[i].t=4;
T[i].n1=num1;
T[i].n2=num2;
T[i].c_A=num3;
T[i].u_A=num4;
break;
}
} }
}
int main()
{
int i=0; //计数
int error; //判断是否有错(id) 不符合标准=1
quit=1; //继续运行
char ID_NUM[MAX_id_NUM]; //临时存放ID
clock_t start,finish;
double duration;
printf("[*****Welcome into MathTest system!*****]\n");
while(quit) //不断循环 =0时循环停止
{
user.score=0; //查看分数
i=0; //确保是0
error=0 ;
printf("Please input your ID:");
fflush(stdin); //清空缓存 准备输入时 防止干扰
gets(ID_NUM); //输入字符串
while(ID_NUM[i]!='\0') //判断循环 ID是否正确 =\0时是结尾
{
if(i<2)
{
if(ID_NUM[i]>'Z'||ID_NUM[i]<'A') //反面 不在A-Z 错误
{
error=1;
break;
}
i++;
}
else
{
if(ID_NUM[i]<'0'||ID_NUM[i]>'9')
{
error=1;
break;
}
i++;
}
}
if(error==1||i!=6) //出现错误或个数错误
{
printf("error!\n") ;
continue; //跳出本次循环 下次循环继续 重新输入ID
}
strcpy(user.ID,ID_NUM); //复制函数 临时文件存储
menu(); //菜单函数 选择4个选项
}
printf("funcA() START!!\n");
start=clock();
funcA();
finish=clock();
printf("funcA() END!!\n");
duration=(double)(finish-start)/CLOCKS_PER_SEC;
printf("%.0f 毫秒\n",duration*1000);
return 0;
}
int menu()
{
int in; //
while(1) //不断循环
{
printf("(1)Start a test\n(2)Check score\n(3)Exit\n(4)New log(ID) into\n");
scanf("%d",&in);
switch(in) //多重选择判断
{
case 1:
user.score=test(); //test函数返回分数
W_file(); //调用函数形成文件
break;
case 2:
check();
break; //跳出WHILE
case 3:
quit=0; //退出
printf("Thanks for your using!\nSee you next time.\n" );
return; // 跳出MENU
case 4:
return;
default:
printf("error!\n"); //输入其他
break;
}
}
}
printf("Prob. |Correct Answ.|Ur Answ.\n");
for(i=0;i<test_NUM;i++)
{
type=T[i].t;
switch(type) //格式化输出
{
case 1:
printf("%3d *%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A);
break;
case 2:
printf("%3d /%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A);
break;
case 3:
printf("%3d +%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A);
break;
default:
printf("%3d -%5d|%13d|%8d\n",T[i].n1,T[i].n2,T[i].c_A,T[i].u_A);
break;
}
}
getch();//return score;
}
void W_file() //
{
FILE *fp;
if ((fp = fopen("score.txt", "a+")) == NULL) {
printf("File not found!\n");
return;
}
fprintf(fp,"%s %d\n",user.ID,user.score);
fclose(fp);
}
int random1()
{
srand(time(0));
return (rand()%4+1);
}
int random2(int i)
{
srand(time(0)+i);
return (rand()%100);
}
int random3(int i)
{
srand(time(0)+i);
return (rand()%11);
}
int random4(int i)
{
srand(time(0)+i);
return (rand()%50);
}
void check() //反馈信息
{
char ID[6];
int score;
FILE *fp;
if ((fp = fopen("score.txt", "r+")) == NULL) {
printf("File not found!\n");
return;
}
fscanf(fp,"%s %d",ID,&score); //调用文件
while(!feof(fp))
{
printf("ID:%s|Score:%d\n",ID,score);
fscanf(fp,"%s %d",ID,&score);
}
fclose(fp);
}