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 秒

代码如下:

//
// Created by Tshaxz on 2020/10/31.
//#include <stdio.h>
#include <ctype.h> // 为了使用判断大写字母以及数字函数
#include <string.h> //为了使用strlen函数
#include <time.h>
#include <stdlib.h>
#include <math.h>
#define numLength 20  //字符数组的大小
//函数声明
int getSignal();//获取随机运算符
int random(double start, double end);//获取随机数
int getResult(int num1, char signal, int num2);//获取结果函数
void test();//出题函数
void printResult();//打印成绩函数
int IDcheck(char idnum[]);//ID格式检查函数
void gradeCheck();//成绩查询函数char idnum[numLength];//定义字符数组用来接收用户输入的ID
int num1 = 0;
int num2 = 0;
int signalIndex = 0;
int n1[10], n2[10], s[10], r1[10], r2[10];
char ch;
//生成随机运算符函数
int getSignal()
{char signal[4] = { '+','-','*','/' };signalIndex++;return signal[(signalIndex - 1) % 4];
}
//生成随机数函数
int random(double start, double end)
{return (int)(start + (end - start)*rand() / (RAND_MAX + 1.0));
}
int getResult(int num1, char signal, int num2)
{int res = 0;switch (signal){case'+':res = num1 + num2; break;case'-':res = num1 - num2; break;case'*':res = num1 * num2; break;case'/':res = num1 / num2; break;}return res;
}//测试出题函数:用于生成10道数学题
void test()
{clock_t startTime;startTime = clock();int score = 0;printf("开始答题,共10道,每道题10分,共100分\n");srand((unsigned)time(NULL));for (int i = 0; i < 10; i++){char signal = getSignal();num1 = random(0, 100);num2 = random(1, 100 - num1);if ((signal == '*') && (num1*num2 >= 100)){num2 = (int)(100 / num1);}if ((signal == '-') && (num1 < num2)){int temp = num1;num1 = num2;num2 = temp;}if ((signal == '/')){while (num1*num2 >= 100){num1 = random(0, 100);num2 = random(1, 100 - num1);}num1 = num1 * num2;}n1[i] = num1;n2[i] = num2;s[i] = signal;printf("%d%c%d=", num1, signal, num2);int giveResult;scanf("%d", &giveResult);r1[i] = getResult(num1, signal, num2);//r1用来存正确答案r2[i] = giveResult;//r2用来存我的答案if (getResult(num1, signal, num2) == giveResult){printf("答对了,正确答案为:%d\n", getResult(num1, signal, num2));score += 10;}else{printf("答错了,正确答案为:%d\n", getResult(num1, signal, num2));}}double time = (double)(clock() - startTime) / CLOCKS_PER_SEC;FILE *fp;fp = fopen("record.txt", "a+");fwrite(idnum, sizeof(char) * 6, 1, fp);fprintf(fp, "\t%d\t", score);fprintf(fp, "%lf", time);fprintf(fp, "秒\n");fclose(fp);printf("解10道题用了%lf秒\n", (double)(clock() - startTime) / CLOCKS_PER_SEC);
}void printResult()
{printf("问题 | 正确答案 | 你的答案\n");for (int i = 0; i < 10; i++){printf("%d%c%d\t%d\t%d\n", n1[i], s[i], n2[i], r1[i], r2[i]);}
}//检查ID格式函数
int IDcheck(char idnum[])
{int index;int flag = 1;int len = strlen(idnum);for (index = 0; index < len; index++){if (index < 2)//检测前两位是否是大写字母{if (!isupper(idnum[index])){flag = 0;break;}}else if (index >= 2 && index <= 5)//检测后四位是否是数字{if (!isdigit(idnum[index])){flag = 0;break;}}else{flag = 0;break;}}if (len != 6) flag = 0;return flag;
}
void gradeCheck()
{FILE *fpread = fopen("record.txt", "r+");if (fpread == NULL){printf("你还没有做过题目!\n");getchar();exit(1);}while ((ch = getc(fpread)) != EOF){putchar(ch);}fclose(fpread);
}int main()
{//char idnum[numLength];//定义字符数组用来接收用户输入的IDwhile (1){printf("请输入ID:\n");scanf("%s", &idnum);int t = IDcheck(idnum);if (t == 1){while (1){printf("1.开始测试 2.检查分数 3.退出\n");int input = 0;scanf("%d", &input);if (input == 1){test();printResult();}if (input == 2){gradeCheck();}if (input == 3){return 0;}if(input != 1 && input != 2 && input != 3){printf("只能输入1、2、3其中的一个!\n");}}break;//(这个break退出的是最外面的while循环)}else{printf("ID格式有误,请重新输入!\n");}}return 0;
}

【C语言】小学数学练习相关推荐

  1. Java语言-小学数学练习

    文章目录 励志 小学数学练习 1.1[问题描述] 1.2[基本要求] 1.3[模块划分] 1.4[算法思想] 1.5[题解] 知识总结 一.文件 1.File类的构造函数 2.File类的获取 3.文 ...

  2. c语言中把一个数缩小十倍_小学数学易错点:一个数缩小10倍?缩小到它的十分之一?哪个正确?...

    在新北师大版小学四年级数学下册<>中编者做了小改动,将旧教材的原数就缩小10倍,改为这个数就缩小到原来的1/10. 那么这个数就缩小到原来的1/10与原数就缩小10倍有什么区别? 北师大版 ...

  3. Java语言实现小学数学练习

    Java语言实现小学数学练习 题目: [问题描述] 编写一个帮助小学生练习数学的程序,帮助小学生练习100以内的四种数学运算:加.减.乘.除. [基本要求] a)程序应先询问用户的ID号(ID号包括两 ...

  4. java语言数学_Java语言实现小学数学练习

    Java语言实现小学数学练习 题目[问题描述] 编写一个帮助小学生练习数学的程序 帮助小学生练习100以内的四种数学运算 加.减.乘.除. [基本要求] a)程序应先询问用户的ID号(ID号包括两个大 ...

  5. 自动出题机c语言compute,小学数学自动出题工具下载-幼儿园小学数学自动出题机下载v2.0-西西软件下载...

    幼儿园小学数学自动出题机由西西给大家带来,这款软件也是一个非常好用的自动出题软件,并且出的题也是非常的有水准,从此再也不需要你自己来出题,需要的赶紧来下载幼儿园小学数学自动出题机试试吧! 幼儿园小学数 ...

  6. 语言速算24点的小窍门_期末备考:小学数学期末常考题型汇总+速算解题思路分析...

    今天,小编整理了小学数学期末常考题型!顺便分析了速算解题的思路!如果你正为如何辅导孩子算数,那不妨看看小编总结的内容! (一)正方体展开图 正方体有6个面,12条棱,当沿着某棱将正方体剪开,可以得到正 ...

  7. 用C语言编写绳索运动函数,福建省教师招聘考试小学数学真题试卷

    2014年福建省中小学新任教师公开招聘考试 小学数学试卷 (课程代码09202) 1. 本试卷满分150分,考试时间120分钟. 2. 本试卷分为两部分:第一部分为选择题,第二部分为非选择题. 3. ...

  8. 奔跑吧火柴人c语言开发_小学数学智力题:这两个火柴棍趣味题,你能做出来吗?...

    数学也可以很有趣,甚至还能检测和开发孩子的智力呢,今天小编跟大家分享两个数学智力题,大家一起加入我们,看看这两个经典的火柴趣味小学数学智力题吧! [题目1]错误的等式 上图这个由火柴拼出的等式是错误的 ...

  9. C语言大作业小学生数学检测系统,小学数学测试系统C语言设计.doc

    小学数学学习系统设计报告 目 录 一.设计要求 -----------2 二.设计目的 -----------2 三.设计的具体实现 1.系统概述:----------------2 2.总体设计:- ...

  10. c语言 小学生数学考试软件下载,小学数学试题练习

    小学数学试题练习app是一款轻松,好用,风格简洁的学习软件,主要适合人教版教材的小学生使用.小学数学试题练习app的宗旨是希望让做题变得更加简便容易,让学习变得更高效. 功能介绍 1.单元习题检验,阶 ...

最新文章

  1. 让我为你介绍一个神器:Chimee,一套可扩展的 H5 视频播放器解决方案
  2. python末位1的位置_用Python黑了整个学院学姐的电话和QQ,爬虫牛皮!兄弟们耗子尾之!...
  3. java application作用域_servlet三大作用域:request,session,application
  4. 如何玩转小程序+公众号?手把手教你JeeWx小程序CMS与公众号关联
  5. 吴恩达深度学习笔记(八) —— ResNets残差网络
  6. 18.外部相机校准——旋转(Rotation),R是什么样子的,绕Z轴旋转的例子,齐次坐标旋转_2
  7. 左耳朵耗子:聊聊分布式系统架构
  8. 有关Linux下的一些配置
  9. UFLDL深度学习笔记 (四)用于分类的深度网络
  10. 单片机c语言取反符号怎么打,arduino取反怎么写
  11. 一分钟搞定网页监控,实现网站链接百度自动推送
  12. 华为设备配置SEP多实例
  13. 信用卡业务愈卷愈烈,银行机构如何突围?
  14. Java快速入门笔记-02 Java基础(基本数据类型、变量和常量、运算符、数组、字符串)
  15. 计算机内存条能装几个,电脑能装几个内存条_一般电脑插几个内存条
  16. System Development Life Cycle(SDLC)系统生命周期
  17. 死亡搁浅 服务器不稳定,[收集]死亡搁浅现有bug临时解决方案
  18. 经典励志文章:一碗阳春面
  19. 陕西科技大学计算机专业课表,陕西科技大学教务管理系统入口:http://jwc.www.sust.edu.cn/...
  20. 计算机英语比赛,传亚运精神,燃英语激情——记计算机学院第八届英语演讲比赛初赛...

热门文章

  1. 【C语言程序设计】实验 2
  2. Matlab不同版本的系统需求(不同操作系统下的)、所支持的编译器查找
  3. Android实现画板功能(一)
  4. android 8.0 屏蔽首次开机弹出的‘即将完成 Android 更新’的弹窗
  5. Allegro PCB对某个网络进行高亮以及取消高亮
  6. telnet 遗失对主机的连接
  7. 你不必去一个遥远的星系去寻找这些奇怪的世界
  8. Python使用matplotlib完成绘制y1=sin(x),y=sin(cos(x^2)+x^3)的函数曲线
  9. matlab显示sig,Matlab中LSSVM参数gam和sig2寻优范围如何确定以及寻优具体程序如何实现的问题...
  10. 【资源分享】少女爱上姐姐汉化版游戏下载,附图文攻略