为什么要用函数?
利用函数进行编写,可以让项目更加灵活、高效;使得项目可以结构化、模块化设计,便于项目的集成和统一处理。提升代码的运行效率。
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;
}