小学数学练习

小学数学练习

实验内容
编写一个帮助小学生练习数学的程序,帮助小学生练习 100 以内的四种数学运算:加、减、乘、除。
实验要求
a) 程序应先询问用户的 ID 号(ID 号包括两个大写字母和 4 位数字),例如:
请输入 用户 ID
号 :AB1234
程序应对输入的 ID 号验证,符合 ID 号要求的格式,然后程序提示三种选择:
(1)开始测试
(2)检查分数
(3)退出
b) 测试:该程序将给出 10 道数学题,例如: 12 * 3 =36 48 + 32 =80 „56 / 28 =2
主要仪器设备-台式或笔记本电脑
实验记录(写出实验内容中程序代码和运行结果)(可分栏或加页)
程序代码:

/*1. 小学数学练习
1.1【问题描述】
编写一个帮助小学生练习数学的程序,帮助小学生练习 100 以内的四种数学运算:加、减、乘、除。
1.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<string.h>
#include <stdio.h>
#include <ctype.h>
#include <time.h>
#include <stdlib.h>
#include <stdbool.h>
#include <windows.h>
#define IDNO_LENGTH 6
#define CALC_KIND 4
#define CALC_NUM 10
bool checkNo(char idCS[]);//验证ID 
char getSignal();//获取运算符 
int getResult(int,int,char);//结果 
void takeTest();//列出题目
char str[100];
//main函数
int main(){while(1){printf("请输入用户ID号:");char idCS[IDNO_LENGTH];do{scanf("%s",&idCS);fflush(stdin);} while(checkNo(idCS)==false);printf("(1)开始测试\t\n(2)检查分数\n(3)退出\n");int choose;do{printf("请选择:");scanf("%d",&choose);fflush(stdin);} while(choose!=1 && choose!=2 && choose!=3);if(choose==1){FILE *fp=fopen("record.txt","a");fprintf(fp,"%s",idCS);fclose(fp);fflush(stdin);takeTest();}else if(choose==2){   //选择2 FILE *fp;char ch;if((fp=fopen("record.txt","rt+"))==NULL){  //打开文件并判断文件是否为空 printf("\n你还没做过题目测试");getchar();exit(1);}while(!feof(fp)){fgets(str,100,fp);if(feof(fp)){break;}char tmp[7];for(int i = 0;i<6;i++){tmp[i] = str[i];}if(!strcmp(tmp,idCS)){printf("%s",str);}}fclose(fp);}else{exit(0);}}
}
//获取随机运算符 
char getSignal(){char signal[CALC_KIND]={'+','-','*','/'};srand((unsigned)time(NULL));return signal[rand()%4];
}//获取随机数 
int random(double start, double end){return (int)(start+(end-start)*rand()/(RAND_MAX+ 1.0));
}
//运算 
int getResult(int num1,int num2,char signal){int res;switch(signal){case '+':res=num1+num2;break;case '-':res=num1-num2;break;case '*':res=num1*num2;break;case '/':res=int(num1/num2);break;default:res=0;printf("运算符不符合规则\n");}return res;
}
//列出10道题 
void takeTest(){int shu1[10];char fuhao[10];int shu2[10];int jieguo[10];int zhengjie[10];printf("开始答题,每道题10分,总共100分\n");clock_t startTime;startTime=clock();int index;int giveRes;int num1;int num2;int score=0;char signal;for(index=0;index<CALC_NUM;index++){srand((unsigned)time(NULL));if(index>=1){do{signal=getSignal();fuhao[index] = signal;}while(fuhao[index-1]==signal);}else{signal=getSignal();fuhao[index] = signal;}do{num1=random(0,100);num2=random(1,100);if(num1<num2&&(signal=='-'||signal=='/')){int d=num1;num1=num2;num2=d;}if(signal=='/')num1=(num1/num2)*num2;}while((num1+num2)>=100||num1*num2>=100);printf("%d%c%d=",num1,signal,num2);scanf("%d",&giveRes);fflush(stdin);shu1[index] = num1;shu2[index] = num2;jieguo[index] = giveRes;zhengjie[index] = getResult(num1,num2,signal);if(getResult(num1,num2,signal)==giveRes){printf("答案正确\n");score+=10;}else{printf("答案错误,正确答案为%d\n",getResult(num1,num2,signal));}}printf("总得分为%d\n",score);printf("解10道题用了%lf秒\n\n",(double)(clock()- startTime)/CLOCKS_PER_SEC);//遍历数组中的记录 printf("题目记录如下|您的答案|正确答案\n");for(int i=0;i<10;i++){printf("%3d%3c%3d=%7d%7d\n",shu1[i],fuhao[i],shu2[i],jieguo[i],zhengjie[i]);}FILE *fp = fopen("record.txt","a");fprintf(fp,"     分数为%d",score);fprintf(fp,"     时间为%lf秒\n",(double)(clock()- startTime)/CLOCKS_PER_SEC);fclose(fp);fflush(stdin);
}
//检测idCS是否合规则,合规则返回true
bool checkNo(char idCS[]){int index;bool flag;flag=true;for(index=0;index<IDNO_LENGTH;index++){if(index<2){if(isalpha(idCS[index])!=1){flag=false;printf("ID不符合规则,重新输入:");break;}}else{if(!isdigit(idCS[index]) || strlen(idCS) != 6){flag=false;printf("ID不符合规则,重新输入:");break;}}}return flag;
}

实验结果:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

**

遇到的问题和解决方法

**
1. 如何验证账号是否符合规则?
由于题目要求的格式为AB1234这种前两个为大写英文字母,后为四个数字,在这里采用数组的方式,先将用户输入的账号传入指定的数组中。
这里可以用到的函数有isalpha,isdigit,strlen函数
isalpha是一种函数:判断字符是否为英文字母,若为英文字母,返回非0(小写字母为2,大写字母为1)。若不是字母,返回0。这里先判断前两个字符是否为大写字母。利用if语句,如果前两个字符不是大写的英文字母,则直接否定。
isdigit是计算机C(C++)语言中的一个函数,主要用于检查后四位参数是否为十进制数字字符。
Strlen函数用于计算给定字符串长度,只有当长度为6并且是标准格式时才会通过
用三个函数分别判断前两个字符与后4个数字是否合规
2. 如何保证相邻两次算数运算法则不同?
/* 初始化随机数发生器 */
用时间作为种子

char signal[CALC_KIND]={'+','-','*','/'};srand((unsigned)time(NULL));return signal[rand()%4];

在这段程序中,以时间参数为种子,随机在四个计算符号中选择,但是由于只有四个待选项,所以有时还是会出现这种情况,添加一个判断语句看他相邻两个符号是否相同,如果不同的话重新输入。
3. 如何确保运算结果及参数小于100?
因为100之内的数据之间的加减乘除中,只有加和乘才有可能使结果大于100,所以只需要控制加和乘的结果即可。故使用do{}while((num1+num2)>=100||num1*num2>=100);来循环判断,直到输出合适的数字
4. 如何将结果导入文件?
fflush会强迫将缓冲区内的数据写回参数stream 指定的文件中。
C 库函数 int fprintf(FILE *stream, const char *format, …) 发送格式化输出到流 stream 中

   FILE *fp=fopen("record.txt","a");fprintf(fp,"用户id:%s",idCS);fclose(fp);fflush(stdin);
  1. 如何测定做题所用的时间?
   startTime=clock();(double)(clock()- startTime)/CLOCKS_PER_SEC)

clock函数返回自程序启动起,处理器时钟所使用的时间。

6. 如何实现程序运行结束后,让其返回返回到最初的输入界面?
在主函数中使用一while循环,当程序返回值时,退出程序。
7.如何在用户读取答题记录时,让程序扫描文件读出特定的行,从而不显示其他人的信息,在这里所用方法是

while(!feof(fp)){fgets(str,100,fp);if(feof(fp)){break;}char tmp[7];for(int i = 0;i<6;i++){tmp[i] = str[i];}if(!strcmp(tmp,idCS)){printf("%s",str);}
}

feof用于判断是否达到文件末尾
fgets函数用于读取特定行的数据,将所读的数据前六个账号储存到新的数组中,然后对比已经输入的账号,如果相同,则打印输出。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/54374.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Python解小学数学题(人教版二年级(上)第35页)

人教版小学数学二年级&#xff08;上&#xff09;的第35页有道思考题&#xff1a;把1~9这9个数按从小到大的顺序排列&#xff0c;中间添上一些“”“-”&#xff0c;可以使计算的结果等于100。比如&#xff1a;123-456789100。现在把9~1这9个数按从大到小的顺序排列&#xff0c…

小学数学题的Java实现

昨天&#xff0c;去朋友家一起做饭&#xff0c;刚好有小孩问我问题&#xff0c;说你不是学计算机的吗&#xff1f;那你教我做一道数学题。我刚开始看的时候愣了一下。不过&#xff0c;想了一会还是解决。 题目是这样的&#xff1a;有一袋糖果&#xff0c;每次从袋子里面拿走一…

小学数学题的python实现

昨天&#xff0c;去朋友家一起做饭&#xff0c;刚好有小孩问我问题&#xff0c;说你不是学计算机的吗&#xff1f;那你教我做一道数学题。我刚开始看的时候愣了一下。不过&#xff0c;想了一会还是解决。 题目是这样的&#xff1a;有一袋糖果&#xff0c;每次从袋子里面拿走一…

利用PYTHON出小学数学题

先看要求 小学数学老师很辛苦&#xff0c;经常为出一套数学练习题而绞尽脑汁&#xff0c;答案需反复计算&#xff0c;以免出错影响学生练习。通过python程序可以非常容易的随机出数学练习题&#xff0c;答案实时获得&#xff0c;基本无错。编写一个混合加减法出题程序&#xf…

ChatGPT 抢不走程序员饭碗的原因找到了?最新研究:它自动生成了 21 个程序,16 个有漏洞

一个好消息与一个坏消息。 好消息是&#xff0c;继 ChatGPT、GPT-4 等产品之后&#xff0c;代码生成工具的队伍再添新员。Google 近日宣布 Bard 可以辅助软件开发者完成编程和软件开发任务&#xff0c;支持代码生成、调试和代码解释等等。同时&#xff0c;Bard 支持 C、Go、Ja…

推荐五款浏览器实用插件,总有几个是你需要的

今天给大家分享几个不论是学生党还是工作党都能用到的浏览器插件&#xff0c;良心推荐。 安装了这些插件&#xff0c;你的浏览器不说好用个一百倍&#xff0c;九十九倍也是有的。 一、Adblock plus Adblock plus是一款可以拦截广告的浏览器插件&#xff0c;适用于多个浏览器…

电脑软件:推荐几款常用的浏览器

目录 1、微软官方的Edge浏览器 2、谷歌浏览器 3、华为浏览器 4、火狐浏览器 5、360极速浏览器 不知道大家在使用浏览器过程中&#xff0c;有没有遇到弹出窗口、各种广告、还有各种游戏推荐的情况&#xff1f;有的浏览器在安装的时候甚至还捆绑了其他软件。别着急&#xff…

浏览器(1):CSDN的浏览器助手使用推荐

CSDN的浏览器助手升级了&#xff0c;增加了油#猴脚本的支持。 油#猴脚本是什么&#xff1f;一种新的编程语言吗&#xff1f; 话说CSDN的浏览器助手正在测评中&#xff0c;自己之前就安装了&#xff0c;自己也发文测评一下。 好插件用户造&#xff0c;CSDN寻找最佳产品体验官 |…

《星云虚境》Chategpt人工智能对人类有哪些影响?

《星云虚境》是中国元宇宙科技有限公司研发的一款虚拟数字人平台&#xff0c;ChatGPT是一种基于自然语言处理技术的人工智能&#xff0c;它可以较为自然地理解和产生人类语言。因此&#xff0c;ChatGPT对人类的影响是多方面的&#xff1a; 1. 提高人类的生产效率&#xff1a;Ch…

金融信贷风控实战(一)

代码实战 1 数据2 特征工程 2.1 数据清洗 2.1.1 数据格式处理2.1.2 缺失值2.1.3 标签处理和选择数据 2.2 特征衍生2.3 分箱 参考资料 代码实战 1 数据 来自于lending club print (data.shape) #(39785, 25) data.info()<class pandas.core.frame.DataFrame> Range…

(信贷风控一)互联网金融业申请评分卡的介绍

互联网金融业申请评分卡的介绍 本文主要讲解以下知识点 信用违约风险的基本概念申请评分卡的重要性和特性贷款申请环节的数据介绍和描述非平衡样本问题的定义和解决方法 信用违约风险的基本概念 什么是信用违约风险&#xff1f; 交易对手未能履行约定契约中的义务而造成经…

运营商大数据:贷款客户获客:贷款行业客户怎么找

贷款行业竞争激烈&#xff0c;呈白热化状态。不论是通过线下还是线上&#xff0c;客户都是被电话营销骚扰的烦烦气气&#xff0c;是因为咱们这个行业的电销实在太猛了&#xff1b;你想找到你的客户&#xff0c;先找他们的聚集点。 在线下&#xff0c;银行、贷款机构、售楼部、…

信用贷款常见问题应对话术

1、你们的利息太高了 这个要看您跟什么贷款机构比了&#xff0c;如果您拿我们跟银行比&#xff0c;我们确实比银行高&#xff0c;但是我们的门槛要远远低于银行的要求&#xff0c;我们是无抵押无担保&#xff0c;而且办理也很简单&#xff0c;所以是没法跟银行比的&#xff1b;…

催付话术模板

开网店的商家肯定都遇过需要“催付”的客户&#xff0c;要么就是咨询未下单&#xff0c;要么就是下单未付款。如何将这部分消费者成功转化为已付款客户&#xff1f;下面小编就总结了20条常见的催付话术&#xff0c;可以随意翻牌哟&#xff0c;看是否能对大家有借鉴和帮助&#…

金融贷款行业如何高效获客,积累意向客户群体——运营商大数据

现如今贷款行业面对的运营压力日益扩大&#xff0c;顾客贮备是生存的关键&#xff0c;传统式的陌生拜访&#xff0c;一切随缘销售市场已不能满足其要求。互联网消费行为的融合与转变是在销售市场端反映&#xff0c;直接影响着广告推广广告策略的确立与运用。 可是&#xff0c;…

风控中英文术语手册(银行_消费金融信贷业务)_v3

金融风控术语字典&#xff08;中英文对照&#xff09; 1、风控系统部分 1.Blaze blaze是FICO公司产品&#xff0c;用于规则管理&#xff0c;是模型ABC卡开发的前身。信贷公司开始放贷时&#xff0c;数据量少&#xff0c;申请用户少&#xff0c;难以建立模型。因此前期一般会…

风控中英文术语手册(银行_消费金融信贷业务)

1、风控系统篇 1.Blaze blaze是FICO公司产品&#xff0c;用于规则管理&#xff0c;是模型ABC卡开发的前身。信贷公司开始放贷时&#xff0c;数据量少&#xff0c;申请用户少&#xff0c;难以建立模型。因此前期一般会用到专家经验判断好坏客户&#xff0c;然后通过风控决策管…

贷前风控流程与常见策略规则类型

编写&#xff1a;Joey 审核&#xff1a;Devin老师 在信贷领域工作当中&#xff0c;其实大多数公司的风控团队或相关模型数据团队&#xff0c;都是贷前服务工作更多一些。今天就以这贷前为例&#xff0c;一起探讨贷前需要重点去研究的相关策略规则。关注“金科应用研院”&#…

我们不会很快有GPT-5;让 ChatGPT 帮我们总结 Hacker News

&#x1f989; AI新闻 &#x1f680; OpenAI联合创始人Sam Altman&#xff1a;我们不会很快有GPT-5 摘要&#xff1a;在2023北京智源大会的“AI安全与对齐”主题论坛上&#xff0c;OpenAI联合创始人Sam Altman表示&#xff0c;目前他们没有答案&#xff0c;不会很快有GPT-5&a…

在IT行业饱和的情况下,2023年成为Android程序员还有发展前景吗?

都说IT行业不好了&#xff0c;说互联网如何内卷&#xff01; 但是你能找到哪个行业比IT好吗&#xff1f;比程序员赚的多&#xff0c;又不会被替代吗&#xff1f; 还有人说艺术家是最不会被替代的呢&#xff0c;你看ChatGPT出来&#xff0c;插画师是不是都失业了&#xff1f; …