这个作业属于哪个课程 | 班级链接 |
---|---|
这个作业要求在哪里 | C语言寒假大作战03 |
这个作业的目标 | 使用上次作业的菜单框架,并在其基础上增加各年级题目操作函数 |
作业正文 | 如下所示 |
参考文献 | 随机数rand还有很多比如百度百科之类的 |
设计思路和遇到的问题
思路
我们先把头文件加上去,然后再使用rand()函数。先从最简单的一年级开始,然后再写二年级,三年级然后作业就完成了。
问题
问题啥的还真挺多,但是也都解决了不然也完成不了这个作业。
1,刚开始我代码是这样的
for (int i = 0; i < num; i++) { int rand(void); { int a, b, c; srand((unsigned)time(NULL)); for (int i = 0; i < num; i++) { a = rand() % 10; b = rand() % 10; c = rand() % 2; if (c == 0) { printf("%d + %d = \n", a, b); } else { printf("%d - %d = \n", a, b); } } }
错误倒是没有,就是运行出来变成了n*n个题,比如我输个3他会出来3个题然后重复三遍...然后发现for (int i = 0; i < num; i++)
重复了,然后修改完之后听取学长的建议,简化了一下代码
2,写二年级的时候,还是要用到随机数,然后题目说要两位数的乘除法,然后还要考虑除数不能为0的情况,想了好久不知道怎么改,高人的指点下顺利改好了,把printf("%d / %d = \n", a, b +);
改成printf("%d / %d = \n", a, b + 1);
就好了。
3,三年级就一二年级的结合版,然后我发现事情并没有那么简单。在做完之后多试了几次发现又出现了除数为0的情况。太南了。
程序结果截图
程序代码
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <conio.h> #include<stdlib.h> #include<time.h> void help(); int menu(); void error(); void grade_1(); void grade_2(); void grade_3(); int main() { int grade = 1; printf("========== 口算生成器 ==========\n"); printf("欢迎使用口算生成器 :)\n"); printf("\n\n"); help(); while (grade) { grade = menu(); switch (grade) { case 1: grade_1(); break; case 2: grade_2(); break; case 3: grade_3(); break; case 4: help(); break; case 5: grade = 0; break; default: error(); grade = 1; break; } } printf("程序结束, 欢迎下次使用\n"); printf("任意键结束……"); _getch(); return 0; } void help() { printf("帮助信息:\n"); printf("您需要输入命令代号来进行操作, 且\n"); printf("一年级题目为不超过十位的加减法;\n"); printf("二年级题目为不超过百位的乘除法;\n"); printf("三年级题目为不超过百位的加减乘除混合题目.\n"); printf("\n\n"); } int menu() { int a = 0; printf("操作列表:\n"); printf("1)一年级 2)二年级 3)三年级\n"); printf("4)帮助 5)退出程序\n"); printf("请输入操作> "); scanf("%d", &a); printf("< 执行操作 :)\n"); printf("\n\n"); return a; } void error() { printf("Error!!!报错了哦乖乖别乱按哦\n"); printf("错误操作指令, 请重新输入\n"); printf("\n\n"); } void grade_1() { printf("现在是一年级题目\n"); int num = 0; printf("请输入所需要的题目个数>"); scanf("%d", &num); printf("< 执行操作 :)\n\n"); int a, b, c; srand((unsigned)time(NULL)); printf("/*----- 一年级 -----*/\n\n"); for (int i = 0; i < num; i++) { a = rand() % 10; b = rand() % 10; c = rand() % 2; if (c == 0) { printf("%d + %d = ___\n", a, b); } else { printf("%d - %d = ___\n", a, b); } } } void grade_2() { printf("现在是二年级题目:\n"); int num = 0; printf("请输入所需要的题目个数"); scanf("%d", &num); printf("< 执行操作 :)\n\n"); int a, b, c; srand((unsigned)time(NULL)); printf("/*----- 二年级 -----*/\n\n"); for (int i = 0; i < num; i++) { a = rand() % 100; b = rand() % 100; c = rand() % 2; if (c == 0) { printf("%d * %d = ___\n", a, b); } else { printf("%d / %d = ___\n", a, b + 1); } } } int num_dividend() { for (int i = 0; true; i++) { if (i = rand() % 100) return i; } } char four_arithmetic(int num) { switch (num) { case 1: return '+'; case 2: return '-'; case 3: return '*'; case 0: return '/'; } } void grade_3() { printf("现在是三年级题目:\n"); int num = 0; printf("请输入所需要的题目个数"); scanf("%d", &num); printf("< 执行操作 :)\n\n"); printf("/*----- 三年级 -----*/\n\n"); for (int i = 0; i < num; i++) { printf("%2d %c %2d %c %2d = ___\n", num_dividend(), four_arithmetic(rand() % 4), num_dividend(), four_arithmetic(rand() % 4), num_dividend()); } }
Gitee上传截图与链接
https://gitee.com/li_han_lin/LHL20199433
来源:https://www.cnblogs.com/yulbo/p/12300008.html