C语言寒假大作战03
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上传截图与链接


浙公网安备 33010602011771号