C语言寒假大作战04
这个作业属于那个课程|班级链接
---|:--😐---:
这个作业要求在哪里|链接
我在这个课程的目标是|使用rand()函数产生算术题,并附带答案
作业正文|使用上次作业的菜单框架,并在其基础上增加各年级题目操作函数
参考文献|百度,资料书
2.2.2 设计思路和遇到的问题
1.在上一次作业中,产生的随机数是直接打印出来,并未赋值给某一变量。按照上次的代码,我不能将产生的随机数直接运算,只好先定义几个变量用来存放随机数,
但是对于计算结果却有些麻烦,不过没找到更好的方法,只能这样了。
2.由于dn(用来存放答案)定义为浮点型,那么对于那些结果为整数数就有点麻烦了,也是无意中看到%g这个表示才解决。(交作业时发现在最后面居然有%g这个东西,郁闷)
3.还是除号后面不能为零的问题,设置一个条件当他是零的时候再次产生,直到非零。第三次作业没有定义变量来存放随机数因此不好这样做。
2.2.3 程序结果截图



2.2.4 程序代码
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
int i,x;
int a,b,c;
char ch,fh;
double dn;
int menu();
void help();
void error();
void operation_1();
void opertion_2();
void opertion_3();
int main()
{
printf("========== 口算生成器 ==========\n欢迎使用口算生成器 :\n");
help();
do
menu();
while(i!=5);
system("pause");
return 0;
}
int menu()
{
printf("\n操作列表:\n");
printf("1)一年级 2)二年级 3)三年级\n");
printf("4)帮助 5)退出程序\n");
printf("请输入操作>");
int n;
scanf("%d",&n);
switch(n){
case 1:printf("\n现在是一年级题目:\n<请输入生成个数> ");
scanf("%d",&x);
printf("<执行操作:>\n");
operation_1();
break;
case 2:printf("\n现在是二年级题目:\n<请输入生成个数> ");
scanf("%d",&x);
printf("<执行操作:>\n");
opertion_2();
break;
case 3:printf("\n现在是三年级题目:\n<请输入生成个数> ");
scanf("%d",&x);
printf("<执行操作:>\n");
opertion_3();
break;
case 4:help();
printf("\n");
break;
case 5:printf("\n程序结束, 欢迎下次使用任意键结束……\n");
i=5;
break;
default:error();break;
}
}
void help()
{
printf("帮助信息\n您需要输入命令代号来进行操作, 且\n");
printf("一年级题目为不超过十位的加减法;\n");
printf("二年级题目为不超过百位的乘除法;\n");
printf("三年级题目为不超过百位的加减乘除混合题目.\n\n");
}
void error()
{
printf("Error!!!\n错误操作指令, 请重新输入\n");
}
void operation_1()
{
char t[2]={'+','-'};
srand(unsigned(time(NULL)));
for( int i = 0;i<x; i++ ) {
a=rand() % 11;
ch=t[rand()%2];
b=rand() % 11;
if(ch=='+')
dn=a+b;
else
dn=a-b;
printf("%d ",a);
printf("%c ",ch);
printf("%d ",b);
printf("= %d\n",dn);
}
}
void opertion_2()
{
char t[2]={'*','/'};
int s;
srand(unsigned(time(NULL)));
for(int i = 0;i<x; i++ ) {
a=rand() % 101;
ch=t[rand()%2];
b=rand() % 101;
printf("%d ",a);
printf("%c ",ch);
printf("%d ",b);
if(ch=='/'&&b==0){
do
b=rand()%101;
while(!b);
dn=a*1.0/b;
}
else
if(ch=='/'&&b!=0)
dn=a*1.0/b;
else
dn=a*1.0*b;
printf("= %g\n",dn);
}
}
void opertion_3()
{
int i;
char t[4]={'+','-','*','/'};
/* 初始化随机数发生器 */
srand(unsigned(time(NULL)));
for( i = 0;i<x; i++ ){
a=rand()%101;
b=rand()%(101)+1;
c=rand()%(101)+1;
ch=t[rand()%4];
fh=t[rand()%4];
if(b==0&&ch=='/'){
do
b=rand()%101;
while(!b);
}
if(c==0&&fh=='/'){
do
c=rand()%101;
while(!c);
}
if(ch=='+')
switch(fh)
{
case '+':dn=a+b+c;break;
case '-':dn=a+b-c;break;
case '*':dn=a+b*c;break;
case '/':dn=a+b*1.0/c;break;
}
if(ch=='-')
switch(fh)
{
case '+':dn=a-b+c;break;
case '-':dn=a-b-c;break;
case '*':dn=a-b*c;break;
case '/':dn=a-b*1.0/c;break;
}
if(ch=='*')
switch(fh)
{
case '+':dn=a*b+c;break;
case '-':dn=a*b-c;break;
case '*':dn=a*b*c;break;
case '/':dn=a*b*1.0/c;break;
}
if(ch=='/')
switch(fh)
{
case '+':dn=a*1.0/b+c;break;
case '-':dn=a*1.0/b-c;break;
case '*':dn=a*1.0/b*c;break;
case '/':dn=a*1.0/b/c;break;
}
printf("%d ",a);
printf("%c ",ch);
printf("%d ",b);
printf("%c ",fh);
printf("%d ",c);
printf("= %g\n",dn);
}
}
2.2.5 Gitee上传截图与链接


浙公网安备 33010602011771号