C语言---函数的封装、调用、嵌套、递归

为什么要用函数?

利用函数进行编写,可以让项目更加灵活、高效;使得项目可以结构化、模块化设计,便于项目的集成和统一处理。提升代码的运行效率。

1.一个简单的函数调用例子:比如我想运用指令来控制小车的前进、后退、向左、向右运行;这时候就可以定义一个指令,在指令中编写我们想要的效果;接着从服务器中获取这个指令(cmd);初始化WIFI让指令连接到服务器,也就是实现联网通信。

#include
int main(){

	initWifi();		//初始化WiFi
	int cmd;		//定义一个指令
	cmd = getCmdFromServer(); //从服务器获取指令
	//执行指令
	switch(cmd){
		case 1;
			goFhead();
			break;
		case 2;
			goBehind();
			break;
		case 3;
			turnleft();
			break;
		case 4;
			turnright();
			break;
	}
	return 0;
}

2.进行函数封装和调用的好处就是避免代码过于复杂和冗长,结构化、模块化设计,可以使得代码更精简易懂易操作。

example2:

#include
/*
	进行函数封装和调用的好处就是避免代码过于复杂和冗长,
	结构化、模块化设计,可以使得代码更精简易懂易操作。
*/
void printfWelcome(){ //没有参数和返回值的函数调用
	printf("===============\n");
	printf("这是一个函数封装、调用的例子\n");
	printf("===============\n");
}
//整个过程重点是数据和值
int getDataFromX(int data1){ //形式参数,需要包含变量类型,变量名()
	int data;
	data = data1-1; //在这里进行一个桥梁
	return data;
}
int main(){
	printfWelcome();//在这里进行printfWelcome函数调用
	int x;
	int y;
	puts("请输入一个数:");
	scanf("%d",&x);
	y = getDataFromX(x);//在这里调用上方封装好的函数
	printf("x=%d,y=%d\n",x,y);
	return 0;
}

3.函数的三要素:返回值、参数列表、函数功能

example3:

#include
/*
	函数的三要素:返回值、参数列表、函数功能
*/
int add(int data1,int data2,int data3){		//函数原型
	int ret;
	ret = data1+data2+data3;
	return ret;
}
int main(){
	int x;
	int y;
	int z;
	int ret;
	puts("请输入一个数:");
	scanf("%d",&x);
	puts("请再输入一个数:");
	scanf("%d",&y);
	puts("请再输入一个数:");
	scanf("%d",&z);
	ret = add(x,y,z);
	printf("%d+%d+%d=%d\n",x,y,z,ret);
	return 0;
}

4.形式参数和实际参数的区别

变量的四要素:名 类型 值 地址    

形参的生命周期:保存在栈空间中,被调用的时候才为形式参数申请内存,调用结束,又被系统释放内存。

example4:

#include
/*
   变量的四要素:名 类型 值 地址	
   形参的生命周期:保存在栈空间中,被调用的时候才为形式参数申请内存,
   调用结束,又被系统释放内存。
*/
int test(int x){	// "形式参数",需要包含变量类型,变量名()
	printf("test中x的地址是:\n",&x,x);
	return 0;
}
int main(){
	int x;
	int y;
	puts("请输入一个数:");
	scanf("%d",&x);
	printf("main中x的地址是:\n",&x,x);
	y = test(x)	// "实际参数",实参可以是一个变量名、表达式、常量
	return 0;
}

5.利用函数调用的思想,找出两个数的最大值(Max_two)

example5:在getMaxDataFromTwo时,嵌套当中有两种写法if esle语句和 三目运算符;如果采用三目运算符的形式,则返回值(return z)可以不写。

#include
int getMaxDataFromTwo(int x,int y){
	int z;
	if(x>y){
		z = x;
	}else{
		z = y;	
	}
	//另一种写法:三目运算符	z = x>y?x:y;
	return z;
}
int main(){
	int data1;
	int data2;
	int MAXone;
	//提示输入 
	puts("请输入两个数:");
	//获取输入
	scanf("%d%d",&data1,&data2);
	//函数调用
	MAXone = getMaxDataFromTwo(data1,data2);
	//输出结果
	printf("两个数是%d,%d,最大的数是:%d\n",data1,data2,MAXone);
	return 0;
}

6.函数嵌套思想;输入四个数,在四个数字中找到最大的那个数,利用函数封装、调用、嵌套的思想。

ex6:

#include
/*
	输入四个数,在四个数字中找到最大的那个数,
	利用函数封装、调用、嵌套的思想。
*/
int getMaxFromTwo(int data1,int data2){
		int biger;
		bieger = data1>data2?data1:data2; //三目运算符
}

int getMaxFromFour(int a,int b,int c,int d){
	int max;
	max = getMaxFromTwo(a,b);
	max = getMaxFromTwo(max,c);
	max = getMaxFromTwo(max,d);	
	return max;
}

int main(){
	int data1;
	int data2;
	int data3;
	int data4;
	int theBigOne;
	
	puts("please input four nums");
	scanf("%d%d%d%d",&data1,&data2,&data3,&data4);
	theBigOne = getMaxFromFour(data1,data2,data3,data4);
	printf("the biggest num is: \n",theBigOne);
	return 0;
}

7.函数递归思想

ex7:判断第几个学生的年龄为多少,利用函数递归思想,封装,嵌套,调用
    先给出第一个学生的年龄10,在此基础上加2.

#include
/*
	判断第几个学生的年龄为多少,利用函数递归思想,封装,嵌套,调用
	先给出第一个学生的年龄10,在此基础上加2.
*/
int getAge(int 	CurrentPersonalAge){
	int age;
	if(CurrentPersonalAge == 1){
		age = 10;
	}else{
		Age = getAge(CurrentPersonalAge-1)+2;
	}
		return age;
}
int main(){
	int age;
	int num;
	puts("你想要知道第几个学生的年龄?\n");
	scanf("%d",num);
	scanf = getAge(num);
	printf("第%d学生的年龄是:\n");
		return 0;
}

你可能感兴趣的:(c语言,c语言,开发语言)