关于用C语言写了程序给小学生出数学计算题的这件事

编程环境:Cygwin64
所用IDE: JetBrains CLion 2022.2.4

卷首语

写程序给小学生出几道数学题,这个想法对我来说,的确有点离谱。小学生的计算题基本上都是四则运算(加、减、乘、除)。要不就写个这样的程序给小学生出题。(小学生:楼主,我真的会谢!)

此处已经定义了几个全局变量
int a, b; //a,b分别是两个操作数
int answer; //用户输入的答案
int right = 0; //正确的题目数量
int c = 10; //出多少以内的计算题
int number; //自定义出题个数
int op; //菜单选项

目录

输出菜单

首先是打印菜单,我已经给这个菜单给了五个选项,前三个选项是固定出10道、20道和100道,第四项是自定义出题数目的,最后一项就是退出程序。不过,菜单可以设计成这样。

void nemuPrint() {// 打印菜单printf("==========菜单==========\n");printf("=1. 出10道题           =\n");printf("=2. 出20道题           =\n");printf("=3. 出100道题          =\n");printf("=4. 自定义出题数目      =\n");printf("=0. 退出程序           =\n");printf("=======================\n");
}

别问,问就是这样设计的。

出题和答题

出题

循环出题:

for (int i = 1; i <= number; i++) {switch (rand() % 4) {case 0: //加ADD();break;case 1: //减Sub();break;case 2: //乘Time();break;case 3: //除Div();break;}}

注:number是要出题的题目数量。

既然是给小学生出题,那就是随机出题目。不过,既然是电脑自己给小学生出题,两个要运算的数必须是随机的,不过我把范围地都设定成了0~30的随机整数,即rand()%31(注:x被31除的余数的范围是0~30)。不过,要是真的随机出题话,需要用srand()函数来获取随机种子。(注:这两个函数都在在stdlib.h头文件中)。
对于加法题目和乘法题目来说,基本上是没有限定的。

srand(time(NULL));
a = rand() % (c + 1);
b = rand() % (c + 1);
printf("%d+%d=", a, b);

对于乘法题目,仅需把+改成*即可。

对于减法的算式题目来说,这里要求被减数要大于或等于减数,比如15-4,而不是4-15,右边算出来的是一个负数。然而,随机数的确很随机,不知道被减数比减数谁大谁小,所以就出了个循环:当被减数大于或等于减数时,终止这个循环:

srand(time(NULL));
do {a = rand() % (c + 1);b = rand() % (c + 1);
} while (a < b);
printf("%d-%d=", a, b);

除法的题目要求就一样了:

  1. 被除数必须大于除数,且被除数必须要被除数整除,不能出现:类似7/8或14/4这样的式子;
  2. 除数不难为零,不能出现类似0/0的式子
    对此,也出了个循环:当被除数和除数满足上面的要求时,终止这个循环:
srand(time(NULL));
do {a = rand() % (c + 1);b = rand() % (c + 1);
} while (a < b || a % b != 0 || b == 0);
printf("%d/%d=", a, b);

答题

scanf("%d", &answer);
if (a + b == answer) {printf("正确\n");right++;
} else {printf("错误\n");
}

此外以加法为例:当用户输入答案时,如果答案正确,则输出正确,并right上+1;否则就输出错误。(减、乘、除同理,仅需把加号改成-*/即可。

判分

当测试结束时,输出测试结果。如果需要退出测试的时候,可以按零跳出循环以退出测试,输入非零数的时候就重新测试。

printf("本次测试结束\n");
printf("本次测试一共有%d题,你答对了%d题\n",number,right);
printf("是否重新测试?按0退出");
scanf("%d", &op);
if(op==0){printf("感谢使用");break;
} else right = 0;

总代码

以下代码仅供参考。

//
// Created by admin on 2022/10/31.
//
#include 
#include  //随机数
#include  //更改种子//全局变量
int a, b; //a,b分别是两个操作数
int answer; //用户输入的答案
int right = 0; //正确的题目数量
int c = 10; //出多少以内的计算题
int number; //自定义出题个数
int op; //菜单选项void nemuPrint() {// 打印菜单printf("==========菜单==========\n");printf("=1. 出10道题           =\n");printf("=2. 出20道题           =\n");printf("=3. 出100道题          =\n");printf("=4. 自定义出题数目      =\n");printf("=0. 退出程序           =\n");printf("=======================\n");
}// 加法题目
void ADD() {srand(time(NULL));a = rand() % (c + 1);b = rand() % (c + 1);printf("%d+%d=", a, b);scanf("%d", &answer);if (a + b == answer) {printf("正确\n");right++;} else {printf("错误\n");}
}// 减法题目
void Sub() {srand(time(NULL));do {a = rand() % (c + 1);b = rand() % (c + 1);} while (a < b);printf("%d-%d=", a, b);scanf("%d", &answer);if (a - b == answer) {printf("正确\n");right++;} else {printf("错误\n");}
}//乘法题目
void Time() {srand(time(NULL));a = rand() % (c + 1);b = rand() % (c + 1);printf("%d*%d=", a, b);scanf("%d", &answer);if (a * b == answer) {printf("正确\n");right++;} else {printf("错误\n");}
}//除法题目
void Div() {srand(time(NULL));do {a = rand() % (c + 1);b = rand() % (c + 1);} while (a < b || a % b != 0 || b == 0);printf("%d/%d=", a, b);scanf("%d", &answer);if (a / b == answer) {printf("正确\n");right++;} else {printf("错误\n");}
}//出题的,number是出题的个数
void Give(int number) {printf("本次出题数量是%d题,请按回车键开始\n", number);getchar();for (int i = 1; i <= number; i++) {switch (rand() % 4) {case 0:ADD();break;case 1:Sub();break;case 2:Time();break;case 3:Div();break;}}
}// 输出结果void fuck(){while (1) {nemuPrint();printf("请输入功能所在的序号");scanf("%d", &op);if(op == 0) {printf("感谢使用");break;}else {switch (op) {case 1:number = 10;Give(number);break;case 2:number = 20;Give(number);break;case 3:number = 100;Give(number);break;case 4:printf("请输入你要出题的个数:");scanf("%d", &number);Give(number);break;}printf("本次测试结束\n");printf("本次测试一共有%d题,你答对了%d题\n",number,right);printf("是否重新测试?按0退出");scanf("%d", &op);if(op==0){printf("感谢使用");break;} else right = 0;}}
}int main() {fuck();return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部