小学数学题100以内的加减乘除

小编将会使用C语言编写

背景

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

问题分析

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<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
//1.测试功能的实现 
int test(){
	int x=0;
	int begin, end;
    begin = time(NULL);
	for(int i=1;i<=10;i++){
		srand((int)time(0));
		int one=rand()%11;
		int two=rand()%11;
		int sign=rand()%3;
		int three;
		int num;
		printf("第%d道题:",i);
		switch(sign){
			//加法 
			case 0:
				while(floor((one+two) + 0.5) != (one+two))
				{
					two=rand()%11;
					one=rand()%11;
				}
				three=one+two;
				printf("%d + %d =",one,two);
				scanf("%d",&num);
				if(three==num){
					x=x+1;
					printf("\t\t答对了!!!\n");
				}
				else{
					printf("\t\t!!请认真对考试!!\n");
				} 
				break;
			//-减法 
			case 1:
				while(floor((one-two) + 0.5) != (one-two))
				{
					two=rand()%11;
					one=rand()%11;
				}
				three=one-two;
				printf("%d - %d =",one,two);
				scanf("%d",&num);
				if(three==num){
					x=x+1;
					printf("\t\t答对了!!!\n");
				}
				else{
					printf("\t\t!!请认真对考试!!\n");
				}
				break;
			//*乘法 
			case 2:
				while(floor((one*two) + 0.5) != (one*two))
				{
					two=rand()%11;
					one=rand()%11;
				}
				three=one*two;
				printf("%d * %d =",one,two);
				scanf("%d",&num);
				if(three==num){
					x=x+1;
					printf("\t\t答对了!!!\n");
				}
				else{
					printf("\t\t!!请认真对考试!!\n");
				}
				break;
			//除法
			case 3:
				while(floor((one/two) + 0.5) != (one/two))
				{
					two=rand()%11;
					one=rand()%11;
				}
				three=one/two;
				printf("%d / %d =",one,two);
				scanf("%d",&num);
				if(three==num){
					x=x+1;
					printf("\t\t答对了!!!\n");
				}
				else{
					printf("\t\t!!请认真对考试!!\n");
				}
				break;
		}
	
		
	}
	end = time(NULL);
	int out= end - begin;
	printf("*****————*******\n");
    printf("用时为:%d秒\n",out);
	printf("成绩为:%d分\n",x);
	printf("*****————*******\n");
	FILE *fp;//文件指针
    int i, d;
    /*文件的打开*/
    fp=fopen("record.txt","a+");//fopen打开文件,这个文件可以是当前不存在的。“w”以写入的形式打开,“r”以读的形式打开
    if(fp==NULL) //判断如果文件指针为空
    {
        printf("File cannot open! " );
        exit(0);//在以0的形式退出,必须在文件开头有#include <stdlib.h>,stdlib 头文件即standard library标准库头文件
    }
 
    //写入东西
    fprintf(fp,"\t用时:%d秒\t得分:%d分\n",out,x);//写入指针fp,写入的东西就是刚才的用户输入的d,注意这里的fp和d没有引号
    
 
    //关闭文件
    fclose(fp);
	return 0;
}

//2.检查功能的实现
int check(){  
	char c;
	int p; 
    FILE*fp=NULL;//需要注意
    fp=fopen("record.txt","r");
    if(NULL==fp) return -1;//要返回错误代码
    while(fscanf(fp,"%c",&c)!=EOF) printf("%c",c); //从文本中读入并在控制台打印出来
    fclose(fp);
    fp=NULL;//需要指向空,否则会指向原打开文件地址  
	printf("——检查完毕——\n");
	printf("*****————*******\n"); 
    return 0;
} 

//功能的分类 
int function(int p){
	switch(p){
		case(1):
			test();
			break;
		case(2):
			check();
			break;
		case(3):
			printf("Thank you very much!!!!\n*****————*****");
			exit(0);
		
	}
		
}

int main()
{
	char a,b;
	int c,p;
	//输入ID
	int loop;
	loop:printf("请输入ID(2个大写字母和4个数字):\n");
	scanf("%c%c%d",&a,&b,&c);
	getchar();
	if(a<='Z'&&a>='A'&&b<='Z'&&b>='A'&&c>=0&&c<=9999) 
	{	
		 
		FILE *fp;//文件指针
    	int i, d;
		/*文件的打开*/
    	fp=fopen("record.txt","a+");//fopen打开文件,这个文件可以是当前不存在的。“w”以写入的形式打开,“r”以读的形式打开
    	if(fp==NULL) //判断如果文件指针为空
    	{
        	printf("File cannot open! " );
        	exit(0);//在以0的形式退出,必须在文件开头有#include <stdlib.h>,stdlib 头文件即standard library标准库头文件
    	}
 
    	//写入东西
    	fprintf(fp,"姓名:%c%c%d\t",a,b,c);//写入指针fp,写入的东西就是刚才的用户输入的d,注意这里的fp和d没有引号
    	//关闭文件
    	fclose(fp);
		while(1)
		{
			int p;
			printf("****——主界面——****\n菜单:\n->1.开始测试\n->2.检查分数\n->3.退出\n请输入你的选择:**");
			scanf("%d",&p);
			getchar();
			printf("****——————******\n"); 
			function(p);
			getchar(); 
		}
		
	} 
	else{
		printf("输入错误!\n");
		goto loop; 
	}
	return 0;
}

总结

以上,是小编的第一次的自主编写,若是有不足的地方,欢迎提问小编。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值