C语言寒假大作战03
2.1.1C语言寒假大作战03
这个作业属于哪个课程 | 2019级软件工程4班 (中南林业科技大学涉外学院) |
---|---|
这个作业要求在哪里 | C语言寒假大作战03 |
这个作业的目标 | 学会函数的基本操作 形参实参的使用 尝试编写一个功能性强的程序 |
参考资料 | C 库函数 - rand() |
2.1.2 程序截图:
2.2.2 设计思路和遇到的问题
我最初提交的代码是缺少一步检验过程,就是程序输出的式子不能“a/b 而b=0”这样的情况出现。而我则偷懒,干脆将b的随机数范围改为1到99,则
即
b=rand()%99+1;
但会这样会缺少"a*b 且 b=0 "的情况,这样的程序对题目的要求来说是不完善的。
我所以就重新更改代码。将void zifu改为char zifu 。这样就可以返回符号。
我利用if语句,判断这个式子对题目要求来说应不应该成立。
if(symbol!='/'||b!=0)
{
i++;
printf("%2d %c%2d",a,symbol,b);
printf(" = ___\n");
}
2.2.3 程序结果截图
2.2.4 程序代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu();
void help();
void error();
void operation1();
void rand1();
void operation2();
void rand2();
void operation3();
void rand3();
char zifu1();
char zifu2();
char zifu3();
int main(void)
{
printf("========== 口算生成器 ==========\n");
printf("欢迎使用口算生成器 :\n\n");
help();
int i=1;
while (i)
{
menu();
int grade;
scanf("%d", &grade);
printf("<执行操作 :)");
printf("\n\n");
switch (grade)
{
case 1:
operation1();
break;
case 2:
operation2();
break;
case 3:
operation3();
break;
case 4:
help();
break;
case 5:
printf("程序结束, 欢迎下次使用\n");
printf("任意键结束……\n\n");
i = 0;
break;
default:
error();
break;
}
}
return 0;
}
void help()
{
printf("帮助信息\n");
printf("您需要输入命令代号来进行操作, 且\n");
printf("一年级题目为不超过十位的加减法;\n");
printf("二年级题目为不超过百位的乘除法;\n");
printf("三年级题目为不超过百位的加减乘除混合题目.\n\n\n");
}
void menu()
{
printf("操作列表:\n");
printf("1)一年级 2)二年级 3)三年级\n");
printf("4)帮助 5)退出程序\n");
printf("请输入操作 >");
}
void error()
{
printf("Error!!!\n");
printf("错误操作指令, 请重新输入\n\n");
}
void operation1()
{
printf("现在是一年级题目:\n");
printf("请输入生成个数 ");
rand1();
}
void operation2()
{
printf("现在是二年级题目:\n");
printf("请输入生成个数 ");
rand2();
}
void operation3()
{
int i,w;
printf("现在是三年级题目:\n");
printf("请输入生成个数 ");
rand3();
}
void rand1()
{
int w,i;
scanf("%d",&w);
printf("\n");
printf("<执行操作 :)\n\n");
for(i=0;i<w;i++)
{
char symbol;
time_t t,a,b;
a=rand()%10;
symbol = zifu1();
b=rand()%10;
printf("%2d %c%2d",a,symbol,b);
printf(" = ___\n");
}
printf("\n\n");
}
void rand2()
{
int w,i;
scanf("%d",&w);
printf("\n");
printf("<执行操作 :)\n\n");
for(i=0;i<w;)
{
char symbol;
time_t t,a,b;
a=rand()%10;
symbol = zifu2();
b=rand()%10;
if(symbol!='/'||b!=0)
{
i++;
printf("%2d %c%2d",a,symbol,b);
printf(" = ___\n");
}
}
printf("\n\n");
}
void rand3()
{
int w,i;
scanf("%d",&w);
printf("\n");
printf("<执行操作 :)\n\n");
for(i=0;i<w;)
{
char symbol_1,symbol_2;
time_t t,a,b,c;
a=rand()%10;
symbol_1 = zifu3();
symbol_2 = zifu3();
b=rand()%10;
c=rand()%10;
if(symbol_1!='/'&&b!=0&&symbol_2!='/'&&c!=0)
{
i++;
printf("%2d %c%2d %c%2d",a,symbol_1,b,symbol_2,c);
printf(" = ___\n");
}
}
printf("\n\n");
}
char zifu3()
{
time_t t;
char symbol;
int s;
s=rand()%4+1;
switch(s)
{
case 1:
symbol='+';
break;
case 2:
symbol='-';
break;
case 3:
symbol='x';
break;
case 4:
symbol='/';
break;
}
return symbol;
}
char zifu2()
{
time_t t;
char symbol;
int s;
s=rand()%2+1;
switch(s)
{
case 1:
symbol='x';
break;
case 2:
symbol='/';
break;
}
return symbol;
}
char zifu1()
{
char symbol;
time_t t;
int s;
s=rand()%2+1;
switch(s)
{
case 1:
symbol='+';
break;
case 2:
symbol='-';
break;
}
return symbol;
}
2.2.5 Gitee上传截图
D.va
2.2.6小结
因为我没有好好学习函数的知识,导致我第一次写这道题绕了很大的弯,换了两次结构,只是因为我不会熟练使用实参形参,然后返回值。
从而导致我的每个计算部分的函数都功能性很差。相互之间的沟通很少,重复量大,没能很好的整合,比其他同学的函数差距甚远。
这让我意识到了差距,也会更加激励我学习。毕竟我也希望自己能有个好的作品。