首页 > 编程知识 正文

编程c语言给小学生出计算题,小学生数学选题系统c语言

时间:2023-05-06 00:23:30 阅读:285559 作者:2541

小学数学练习
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];//定义字符数组用来接收用户输入的IDint 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("答对了,正确答案为:%dn", getResult(num1, signal, num2)); score += 10; } else { printf("答错了,正确答案为:%dn", 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%dt", 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%dt%dt%dn", 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];//定义字符数组用来接收用户输入的ID while (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;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。