C语言寒假大作战04
问题 | 回答 |
---|---|
这个作业属于哪个课程 | 班级链接 |
这个作业要求在哪里 | 作业要求链接 |
这个作业的目标 | 编写各年级题目操作函数并有答案,了解%g的含义 |
作业正文 | 正文链接 |
其他参考文献 | 《%g资料》 |
1. 设计思路和遇到的问题
1.1 设计思路
-
菜单程序函数调用图:
-
思路:自定义函数年级的题目的程序,用rand随机数来表示题目要求的数和标点符号,标点符号定义字符型变量,把结果也用程序表示出来,有些结果是%g型的,比前几次作业多了几步运算结果的代码。
1.2 遇到的问题
- 写完代码后编译出错,它提示我的一步else找不到if前提,我觉得应该是我用分号就表明那句程序结束了,所以加了大括号把if的实行句和else的分别括了起来,然后就可以识别了。
2. 程序结果截图
3. 程序代码
#include<stdio.h>
#include<stdlib.h>
void operation1(){
int a,b,i,c;
printf("现在是一年级题目:\n请输入生成个数>");
scanf("%d",&a);
for(i=0;i<a;i++){
int shu1=rand()%11;
int shu2=rand()%11;
char fh[2]={'+','-'};
b=rand()%2;
if(fh[b]=='+') c=shu1+shu2;
else c=shu1-shu2;
printf("%2d %c %2d = %2d\n",shu1,fh[b],shu2,c);
}
printf("\n\n");
}
void operation2(){
int a,b,i;
double c;
printf("现在是二年级题目:\n请输入生成个数>");
scanf("%d",&a);
for(i=0;i<a;i++){
int shu1=rand()%101;
int shu2=rand()%101;
int shu3=rand()%100+1;
char fh[2]={'*','/'};
b=rand()%2;
if(fh[b]=='/'){
c=shu1*0.1/shu3;
printf("%2d %c %2d = %2g\n",shu1,fh[b],shu3,c);}
else{ c=shu1*shu2;
printf("%2d %c %2d = %2g\n",shu1,fh[b],shu2,c);}
}
printf("\n\n");
}
void operation3(){
int a,b,c,d,i,b1;
double answer;
printf("现在是三年级题目:\n请输入生成个数>");
scanf("%d",&a);
for(i=0;i<a;i++){
int shu1=rand()%101;
int shu2=rand()%101;
int shu3=rand()%101;
int shu4=rand()%100+1;
char fh[4]={'+','-','*','/'};
b=rand()%4;
b1=rand()%4;
if(fh[b]=='/'&&shu2==0) shu2=shu4;
if(fh[b1]=='/'&&shu3==0) shu3=shu4;
switch(fh[b])
{
case '+':c=1;break;
case '-':c=2;break;
case '*':c=3;break;
case '/':c=4;break;
}
switch(fh[b1])
{
case '+':d=1;break;
case '-':d=2;break;
case '*':d=3;break;
case '/':d=4;break;
}
switch(c)
{
case 1:
if(d==1) answer=shu1+shu2+shu3;
else if(d==2) answer=shu1+shu2-shu3;
else if(d==3) answer=shu1+shu2*shu3;
else answer=shu1+shu2*0.1/shu3;
case 2:
if(d==1) answer=shu1-shu2+shu3;
else if(d==2) answer=shu1-shu2-shu3;
else if(d==3) answer=shu1-shu2*shu3;
else answer=shu1-shu2*0.1/shu3;
case 3:
if(d==1) answer=shu1*shu2+shu3;
else if(d==2) answer=shu1*shu2-shu3;
else if(d==3) answer=shu1*shu2*shu3;
else answer=shu1*shu2*0.1/shu3;
case 4:
if(d==1) answer=shu1*0.1/shu2+shu3;
else if(d==2) answer=shu1*0.1/shu2-shu3;
else if(d==3) answer=shu1*0.1/shu2*shu3;
else answer=shu1*0.1/shu2*0.1/shu3;
}
printf("%2d %c %2d %c %2d = %2g\n",shu1,fh[b],shu2,fh[b1],shu3,answer);
}
printf("\n\n");
}
void menu(){
printf("操作列表:\n1)一年级 2)二年级 3)三年级\n4)帮助 5)退出程序\n请输入操作>");
}
void help(){
printf("帮助信息:\n您需要输入命令代号来进行操作,且\n一年级题目为不超过十位的加减法;\n二年级题目为不超过百位的乘除法;\n三年级题目为不超过百位的加减乘除混合题目.\n\n");
}
void error(){
printf("Error!!!\n错误操作指令,请重新输入\n\n");
}
int main(){
int Grade=1;
printf("========口算生成器========\n欢迎使用口算生成器:)\n\n");
help();
menu();
while(Grade!=5){
scanf("%d",&Grade);
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");break;
default:error();break;
}if(Grade!=5) menu();
}
return 0;
}