C语言寒假大作战03

2.1.1C语言寒假大作战03

这个作业属于哪个课程 2019级软件工程4班 (中南林业科技大学涉外学院)
这个作业要求在哪里 C语言寒假大作战03
这个作业的目标 学会函数的基本操作 形参实参的使用 尝试编写一个功能性强的程序
参考资料 C 库函数 - rand()

2.1.2 程序截图:


2.2.2 设计思路和遇到的问题

我最初提交的代码是缺少一步检验过程,就是程序输出的式子不能“a/b 而b=0”这样的情况出现。而我则偷懒,干脆将b的随机数范围改为1到99,则

b=rand()%99+1;

但会这样会缺少"a*b 且 b=0 "的情况,这样的程序对题目的要求来说是不完善的。
我所以就重新更改代码。将void zifu改为char zifu 。这样就可以返回符号。
我利用if语句,判断这个式子对题目要求来说应不应该成立。

if(symbol!='/'||b!=0)
		{
			i++;
			printf("%2d %c%2d",a,symbol,b);
			printf(" =  ___\n");
		}

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;
	scanf("%d",&w);
	printf("\n");
	printf("<执行操作 :)\n\n");
	for(i=0;i<w;i++)
	{
			char symbol;
			time_t t,a,b;
			a=rand()%10;
			symbol = zifu1(); 
			b=rand()%10;	
			printf("%2d %c%2d",a,symbol,b);
			printf(" =  ___\n");
	}
	printf("\n\n");	
} 

void rand2()
{	
	int w,i;
	scanf("%d",&w);
	printf("\n");
	printf("<执行操作 :)\n\n");
	for(i=0;i<w;)
	{
			char symbol;
			time_t t,a,b;
			a=rand()%10;
			symbol = zifu2(); 
			b=rand()%10;	
		if(symbol!='/'||b!=0)
		{
			i++;
			printf("%2d %c%2d",a,symbol,b);
			printf(" =  ___\n");
		}
	}
	printf("\n\n");	
} 

void rand3()
{	
	int w,i;
	scanf("%d",&w);
	printf("\n");
	printf("<执行操作 :)\n\n");
	for(i=0;i<w;)
	{
			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;	
		if(symbol_1!='/'&&b!=0&&symbol_2!='/'&&c!=0)
		{
			i++;
			printf("%2d %c%2d %c%2d",a,symbol_1,b,symbol_2,c);
			printf(" =  ___\n");
		}
	}
	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='x';
			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='x';
			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上传截图


D.va

2.2.6小结

因为我没有好好学习函数的知识,导致我第一次写这道题绕了很大的弯,换了两次结构,只是因为我不会熟练使用实参形参,然后返回值。
从而导致我的每个计算部分的函数都功能性很差。相互之间的沟通很少,重复量大,没能很好的整合,比其他同学的函数差距甚远。
这让我意识到了差距,也会更加激励我学习。毕竟我也希望自己能有个好的作品。

作业有不好的地方麻烦大家多多提点,我一定会认真修改的。

posted @ 2020-02-03 23:44  凡~\(≧▽≦)/~尔  阅读(173)  评论(0编辑  收藏  举报