C语言寒假大作战04
2.1.1C语言寒假大作战04
这个作业属于哪个课程 | 2019级软件工程4班(中南林业科技大学涉外学院) |
---|---|
这个作业要求在哪里 | C语言寒假大作战04 |
这个作业的目标 | 学会函数的基本操作 形参实参的使用 尝试编写一个功能性强的程序 |
参考资料 | c语言中%g是什么意思? C语言基础知识:C语言函数调用怎么返回两个值 |
2.2.2 设计思路和遇到的问题
我发现我写的代码无法调用变量中从函数中的返回的符号,从而计算出结果。
所以我用if语句通过判断变量中的符号来再来列出相对应计算符号式子来对结果分两次计算。
一开始我打算在三年级那块分两步进行,先算a与b,再算result-1和c,发现如果a/b,结果如果是无限小数会导致以下结果
也就是数据错误。
所以我想到了助教和吴佳柳同学的相似的方法,再用switch结构嵌套分两次类,然后一次性计算result,这样就可以避免数据错误。
(中间连续使用两次switch结构没有在case 结尾加上break,浪费了好多到多的时间,甚至还以为自己采用的新办法是错误的,真的太粗心了)
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;
double result;
scanf("%d",&w);
printf("\n");
printf("<执行操作 :)\n\n");
for(i=0;i<w;i++)
{
int result;
char symbol;
time_t t,a,b;
a=rand()%10;
symbol = zifu1();
b=rand()%10;
if(symbol == '+')
{
result = a+b;
}
else if(symbol=='-')
{
result = a-b;
}
printf("%2d %c%2d = %2d\n",a,symbol,b,result);
}
printf("\n\n");
}
void rand2()
{
int w,i;
scanf("%d",&w);
printf("\n");
printf("<执行操作 :)\n\n");
for(i=0;i<w;)
{
double result;
char symbol;
time_t t,a,b;
a=rand()%10;
b=rand()%10;
symbol = zifu2();
switch(symbol)
{
case '*':
{
result = a*1.0*b;
break;
}
case '/':
{
result = a*1.0/b;
break;
}
}
if(symbol!='/'||b!=0)
{
i++;
printf("%2d %c%2d =%g \n",a,symbol,b,result);
}
}
printf("\n\n");
}
void rand3()
{
int w,i;
scanf("%d",&w);
printf("\n");
printf("<执行操作 :)\n\n");
for(i=0;i<w;)
{
double result = 0;
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;
int w=0;
if(symbol_1=='/'&&b==0||symbol_2=='/'&&c==0)
w=0;
else
{
switch(symbol_1)
{
case '+':
{
switch(symbol_2)
{
case '+':result=a*1.0+b+c;break;
case '-':result=a*1.0+b-c;break;
case '*':result=a*1.0+b*c;break;
case '/':result=a*1.0+b/c;break;
}
break;
}
case '-':
{
switch(symbol_2)
{
case '+':result=a*1.0-b+c;break;
case '-':result=a*1.0-b-c;break;
case '*':result=a*1.0-b*c;break;
case '/':result=a*1.0-b/c;break;
}
break;
}
case '*':
{
switch(symbol_2)
{
case '+':result=a*1.0*b+c;break;
case '-':result=a*1.0*b-c;break;
case '*':result=a*1.0*b*c;break;
case '/':result=a*1.0*b/c;break;
}
break;
}
case '/':
{
switch(symbol_2)
{
case '+':result=a*1.0/b+c;break;
case '-':result=a*1.0/b-c;break;
case '*':result=a*1.0/b*c;break;
case '/':result=a*1.0/b/c;break;
}
break;
}
}
i++;
printf("%2d %c%2d %c%2d = %g\n",a,symbol_1,b,symbol_2,c,result);
}
}
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='*';
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='*';
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上传截图与链接