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上传截图与链接

链接

posted @ 2020-02-17 15:48  南天之下  阅读(137)  评论(0)    收藏  举报