问 | 答 |
---|---|
这个作业属于那个课程 | 2019级计算机4班 |
这个作业要求在哪里 | C语言寒假大作战04 |
这个作业的目标 | 学会编写随机生成计算题并得出答案的程序 |
作文正文 | |
其它参考文献 | https://zhidao.baidu.com/question/271899014.html |
1.1 设计思路和遇到的问题
设计思路:
在之前的基础上算出答案来,看似比较简单,实际还是有一些小复杂的,一二年级题目很平常用正常思维去编写就可,三年级题目我是通过给字符赋值然后把16种所有符号情况都用if语句连贯起来,得出不同情况下的计算题答案。注意一些需要使用%g的地方。
遇到的问题:
一二年级题目较简单没有什么问题,主要就是三年级题目有些难度,我之前是建立了数组,把四种符号放了进去,这样虽然很容易就把题目随机生成出来了,但是答案确比较难得出,想了挺久实在没有想到什么简便得方法,只好通过给字符赋值然后用if语句把所有符号组合的情况都列出来了。最后的一个问题是得不出小数点后面的数字,那是由于没有给除号后面的数乘1.0。
1.2 程序结果截图
1.3 程序代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<string.h>
void menu();
void help();
void A();
void B();
void C();
void error();
int main()
{
int n=1,x;
printf("==========口算生成表==========
");
printf("欢迎使用口算生成器
");
printf("
");
help();
printf("
");
while(n!=0)
{
menu();
printf("请输入操作>");
scanf("%d",&x);
printf("<执行操作:)
");
printf("
");
printf("
");
switch(x)
{
case 1:A();break;
case 2:B();break;
case 3:C();break;
case 4:help();break;
case 5:
n=0;
printf("程序结束, 欢迎下次使用
");
printf("请按任意键继续...
");
break;
default:error();break;
}
}
return 0;
}
void menu()
{
printf("操作列表:
");
printf("1)一年级 2)二年级 3)三年级
");
printf("4)帮助 5)退出程序
");
}
void help()
{
printf("帮助信息
");
printf("您需要输入命令代号来进行操作, 且
");
printf("一年级题目为不超过十位的加减法;
");
printf("二年级题目为不超过百位的乘除法;
");
printf("三年级题目为不超过百位的加减乘除混合题目.
");
}
void A()
{
int o,a,b,c,D;
time_t t;
srand((unsigned) time(&t));
printf("现在是一年级题目:
");
printf("请输入生成个数>
");
scanf("%d",&o);
printf("<执行操作:)
");
for (int i=0;i<o;i++)
{
a=rand() % 10;
b=rand() % 10;
c=rand() % 2;
if (c==0)
{
D=a+b;
printf("%d + %d = %d
",a,b,D);
}
else
{
D=a-b;
printf("%d - %d = %d
",a,b,D);
}
}
}
void B()
{
int o,a,b,c;
float D;
time_t t;
srand((unsigned) time(&t));
printf("现在是二年级题目:
");
printf("请输入生成个数>
");
scanf("%d",&o);
printf("<执行操作:)
");
for (int i=0;i<o;i++)
{
a=rand() % 10;
b=rand() % 10;
c=rand() % 2;
if (c==0)
{
D=a*b;
printf("%d * %d = %g
",a,b,D);
}
else{
while(b==0)
{
b=rand() % 10;
}
D=a/(b*1.0);
printf("%d / %d = %g
",a,b,D);
}
}
}
void C()
{
int o,d,i,a,b,c;
float z;
char fh1[2],fh2[2];
time_t t;
srand((unsigned) time(&t));
printf("现在是三年级题目:
");
printf("请输入生成个数>
");
scanf("%d",&o);
printf("<执行操作:)
");
char fh[4][6] = {"*","/","+","-"};
for (int i=0; i<o; i++)
{
a=rand() % 100;
b=rand() % 100;
c=rand() % 100;
while (a==0||b==0||c==0)
{
a=rand() % 100;b=rand() % 100;c=rand() % 100;
}
strcpy(fh1,fh[rand() % 3]);
strcpy(fh2,fh[rand() % 3]);
if(strcmp(fh1,"*")==0&&strcmp(fh2,"*")==0)
{
z = a * b * c;
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"*")==0&&strcmp(fh2,"/")==0)
{
z = a * b / (c*1.0);
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"*")==0&&strcmp(fh2,"+")==0)
{
z = a * b + c;
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"*")==0&&strcmp(fh2,"-")==0)
{
z = a * b - c;
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"/")==0&&strcmp(fh2,"+")==0)
{
z = a / (b*1.0) + c;
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"/")==0&&strcmp(fh2,"-")==0)
{
z = a / (b*1.0) - c;
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"/")==0&&strcmp(fh2,"/")==0)
{
z = a / (b*1.0) / (c*1.0);
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"+")==0&&strcmp(fh2,"-")==0)
{
z = a + b - c;
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"+")==0&&strcmp(fh2,"+")==0)
{
z = a + b + c;
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"-")==0&&strcmp(fh2,"-")==0)
{
z = a - b - c;
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"/")==0&&strcmp(fh2,"*")==0)
{
z = a / (b*1.0) * c;
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"+")==0&&strcmp(fh2,"/")==0)
{
z = a + b / (c*1.0);
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"+")==0&&strcmp(fh2,"*")==0)
{
z = a + b * c;
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"-")==0&&strcmp(fh2,"/")==0)
{
z = a - b / (c*1.0);
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"-")==0&&strcmp(fh2,"+")==0)
{
z = a - b + c;
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
else if(strcmp(fh1,"-")==0&&strcmp(fh2,"*")==0)
{
z = a - b * c;
printf("%2d %s %2d %s %2d = %g
",a,fh1,b,fh2,c,z);
}
}
}
void error()
{
printf("Error!!!
");
printf("错误操作指令, 请重新输入
");
printf("
");
printf("
");
}