2.2.1 作业头:
2.2.2 设计思路和遇到的问题
在上次作业的基础上加了一个题目输出,这次作业的难点就是随机数和符号的变换,学习完rand函数后明白了随机数的产生,那接下来就是符号变换。
思路:先调用三个函数分别实现三种不同的题目类型,通过for函数实现每种题目十个,定义字符,产生随机符号,然后组合输出,接着大功告成。
问题:(1)在定义字符的时候我把rand()%2也当成一个符号,其实是一个数,所以每次输出的时候符号都是白的。
(2)在产生混合符号的时候我发现每次输出的俩个符号都相同,这显然不符合题目要求,这个时候我发现我只定义了一个字符op。
(3)在我改正第二个问题后,我又发现俩个符号很多次都是同种种类,不能实现混合。
(4)最后我发现我输出的随机数都是一个样,也就是伪随机数。
2.2.3 程序结果截图
2.2.4 程序代码
#include <stdio.h> #include <stdlib.h> #include <time.h> int fen1 () { char ops[2]={'+','-'}; int i, n=10, op; for(i=0; i<n; i++) { op= rand()%2; printf("%d %c %d=___\n", rand()%10, ops[op], rand()%10); } } int fen2 () { char ops[2]={'*','/'}; int i, n=10, op; for(i=0; i<n; i++) { op= rand()%2; printf("%d %c %d=___\n", rand()%100, ops[op], rand()%100); } } int fen3 () { char ops1[3]={'+','*'}, ops2[3]={'-','/'}; int i, n=10, op1, op2; for(i=0; i<n; i++) { op1= rand()%2; op2= rand()%2; printf("%d %c %d %c %d=___\n", rand()%100, ops1[op1], rand()%100, ops2[op2], rand()%100); } } int help(int a) { printf("欢迎使用口算生成器 :\n \n \n帮助信息\n您需要输入命令代号来进行操作, 且\n"); printf("一年级题目为不超过十位的加减法;\n二年级题目为不超过百位的乘除法;\n三年级题目为不超过百位的加减乘除混合题目.\n\n\n"); printf("操作列表:\n1)一年级 2)二年级 3)三年级\n4)帮助 5)退出程序\n "); return 0; } int main() { printf("========== 口算生成器 ==========\n"); printf("欢迎使用口算生成器 :\n \n \n帮助信息\n您需要输入命令代号来进行操作, 且\n"); printf("一年级题目为不超过十位的加减法;\n二年级题目为不超过百位的乘除法;\n三年级题目为不超过百位的加减乘除混合题目.\n\n\n"); printf("操作列表:\n1)一年级 2)二年级 3)三年级\n4)帮助 5)退出程序\n "); sr:printf("请输入操作 >\n\n"); int a; time_t t; srand((unsigned) time(&t)); scanf("%d", &a); printf("开始执行%d命令\n", a); switch (a) { case 1:fen1();goto sr; case 2:fen2();goto sr; case 3:fen3(); goto sr; case 4:help(a); goto sr; case 5:printf("程序结束, 欢迎下次使用\n任意键结束……"); return 0; default:printf("Error!!!\n错误操作指令, 请重新输入"); goto sr; } }
2.2.5 Gitee上传截图与链接
https://gitee.com/he_bridge/xq
来源:https://www.cnblogs.com/hql201661/p/12296694.html