编写一个帮助小学生练习数学的程序 (验证ID格式) (随机加减乘除) (信息存读文件)

   日期:2020-11-09     浏览:107    评论:0    
核心提示:1.【问题描述】编写一个帮助小学生练习数学的程序,帮助小学生练习 100 以内的四种数学运算:加、减、乘、除。2.【基本要求】a) 程序应先询问用户的 ID 号(ID 号包括两个大写字母和 4 位数字),例如:           请输入用户 ID 号:AB1234程序应对输入的 ID 号验证,符合 ID 号要求的格式,然后程序提示三种选择:    

2.0版,除限制结果在100以内以外,大致没有问题。

1.【问题描述】

编写一个帮助小学生练习数学的程序,帮助小学生练习 100 以内的四种数学运算:加、减、乘、除。

2.【基本要求】

a) 程序应先询问用户的 ID 号(ID 号包括两个大写字母和 4 位数字),例如:
           请输入用户 ID 号:AB1234
程序应对输入的 ID 号验证,符合 ID 号要求的格式,然后程序提示三种选择:
           (1)开始测试
           (2)检查分数
           (3)退出
b) 测试:该程序将给出 10 道数学题,例如:
           12 * 3 =36
           48 + 32 =80
           56 / 28 =2
注意:
           i)学生将依次回答每一个问题(在等于号后面给出答案),然后给出下一道题。
           ii)试题应包含四种数学运算:加、减、乘、除,它们是随机产生的。相邻的问题应该是不同的操作,
每个操作必须至少出现一次。
           iii)为每道题随机生成数字,但必须确保参与运算的数字和结果都小于 100 且大于零的整数。
           iv)十道题做完后,记录学生完成这十道题所用的时间。
           v)给每个学生一个分数。将该学生的 ID、成绩和使用时间保存到一个名为 record.txt 的文件中。
           vi)在屏幕上输出以下信息:
                      问题 | 正确答案 | 你的答案
c) 成绩检查:从文件“record.txt”中列出该学生的所有历史成绩。例如:
           你以前的记录是:
           AB1234 80 150 秒
           AB1234 50 182 秒
           AB1234 90 98 秒


代码为:

#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#include<windows.h>
#include<shlwapi.h>
int check(char ID[]) //判断输入用户名是否合法 
{ 
	int j=0,k=0;
	char *p;
	p=ID;
	while(*p!='\0') //字符串存储时后面自动补0 
	{ 
		if((*p>='A')&&(*p<='Z'))
			j++;
		else if((*p>='0')&&(*p<='9'))
			k++;
		p++; 
	}
	return (j==2&&k==4?1:0);
}
void store(char ID[],int score,int time){  //存储ID、成绩、答题时间 
	FILE *fp;
    fp=fopen("record.txt","a+");  //a+只打开,不新建新的文件 
    if(fp==NULL) 
    { 
    	fp=fopen("record.txt","w");
    }
 	fprintf(fp,"%s\t%d\t%d秒\n",ID,score,time);
    fclose(fp); 
}
void read_file(char new_ID[]){  //读取以前的记录 
	char ID[100];
	int score,time;
	FILE *fp;
    fp=fopen("record.txt","r");
    if(fp==NULL) 
    { 
    	printf("新玩家,没有做题记录\n");
    	exit(1);
    }
     while(!feof(fp)){ 	
    	fscanf(fp,"%s\t%d\t%d秒\n",ID,&score,&time);
       	if(strcmp(new_ID,ID)==0){ 
    		printf("%s\t%d\t%d秒\n",ID,score,time);
		} 
	}
    fclose(fp); 
}
int main()
{ 
	char ID[100];
	srand((unsigned long)time(0));	
	clock_t start,end;  
	int w=0,j=0,k=0;
	char t;
	int a,b,c,d,score,i;
	while(!k){ 
		printf("请输入用户ID号:");
		gets(ID);
		k=check(ID);
		if(k==0)
			printf("ID不规范,Input again\n");
	}
	printf("ID:%s通过检查\n请玩家请做好准备,即将开始旅程\n",&ID);
	printf("输入提示:\n(1)开始测试\n(2)检查分数\n(3)退出\n");
	LOOP: 
	scanf("%d",&w);
	switch(w){ 
		case 3:
			printf("游戏结束\n");
			printf("等待下次见面\n");
			exit(1);
			break;
		case 2:
			printf("你以前的记录是:\n");
			read_file(ID);
			printf("输入提示:\n(1)继续测试\n(2)检查分数\n(3)退出\n");
			goto LOOP; 
			break;	
		case 1:
			char answer[10][100];
			j=0;  //必须重新复制为0,要不第二次时会因判断跳过做题循环 
			start=0;
			end=0;
			start = clock(); //计时开始 
			while(w==1&&j<10){ 	//10道加减乘除题目 
				a=rand()%101;
				b=rand()%101;
				c=rand()%4;
				switch(c)    
				{ 
					case 3:t='/',d=a/b;break;
					case 2:t='*',d=a*b;break;	
					case 1:t='-',d=a-b;break;
					case 0:t='+',d=a+b;break;
				}
				printf("%d%c%d=",a,t,b);
				scanf("%d",&c);
				sprintf(answer[j],"%d%c%d|%d|%d",a,t,b,d,c); //直接输入数组一行 
				if(c==d)
				{ 
					printf("正确!+10分\n");
					score+=10;
				}else
					printf("错啦~\n");
				j++; 
			}
			end = clock();  //计时结束 
			int time=(int)(end-start)/CLOCKS_PER_SEC;
			printf("答题结束\n");
			printf("玩家分数为:%d,所用时间为%ds\n",score,time);
			printf("输出:问题 | 正确答案 | 你的答案\n");
			for(int i=0;i<10;i++){ 
				puts(answer[i]);
			}
			store(ID,score,time);
			printf("输入提示:\n(1)继续测试\n(2)检查分数\n(3)退出\n");
			goto LOOP;
			break;
	}
	
}

其他实现:
         1. 读取以往信息:

void read_file(char new_ID[]){ 
	 	FILE *fp;
	 	char ch;
	 	if((fp=fopen("record.txt","rt+"))==NULL)
		 { 
		 	printf("您还未做题\n");
		 	system("pause");
		 	return 0;
		 	exit(1);
		 }
		 ch=fgetc(fp); //从文件里获取一个字符,赋值给ch 
		 while(ch!=EOF) //判断文件是否结束 
		 { 
		 	putchar(ch); //输出一个字符 
		 	ch=fgetc(fp);
		 }
		 fclose(fp);
	 }

这里是平平无奇的77,妄想优秀 ▇ ▇ ▇ ▇ ▇ ▇ ▇ ▇ ▇ … 0%,若想转载请注明原链接,欢迎下次再来!!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服