1)基本概念
一个功能相对独立的代码段
C的源程序由函数构成,使用函数的好处:
1)更加灵活
2)提高代码的重用性
3)程序更加简洁,有利于多文件开发(模块化编程)
2)函数的分类
1)定义角度:系统的库函数 和 用户自定义函数
2)有无参数:有参数的函数 和 无参数的函数
3)有无返回值:有返回值函数 和 无返回值函数
3、函数的定义
格式: 返回值类型 函数名(参数的列表){
函数体;
}
注意:如果有返回值,可以使用return,返回值
1)有参 有返回值得函数
int max(int x,int y,float z){
return x>y?x:y;
}
2)有参 无返回值函数
void print_x(int x){
printf("x = %d\n",x);
}
3)无参 有返回值函数
int sum(){
return 3+3;
}
4)无参 无返回值函数
void print_line(){
printf("-------------\n");
}
注意:函数的定义 不能嵌套的
4、函数的参数
参数分为两种:
形式参数:
函数名称后面小括号中的参数,就是函数的形式参数,简称形参
int max(int x,int y); x y 就是形参
注意:形参在调用之前是不会被分配存储空间
实际参数:
调用函数的时候,函数名后面的小括号中的参数,简称实参
max(1,67); 1,67 它就称之为实参
实参注意事项:
1)实参可以常量、变量、表达式
2)实参的类型和形参的类型要一致
3)实参的顺序和形参的顺序要保持一致
4)实参和形参的个数要保持一致
5、函数的返回值
void test(){
pirntf("xxx");
}
void test1(){
test();
}
主调函数: test1是主调函数,主调函数是相对的概念
被调函数:test
函数的返回值:被调函数返回给主调函数的值
如何让函数返回值:
return 表达式/常量/变量; 通过return语句可以
返回给主调函数
return a*3;
return a;
return 32;
注意:
1) 如果函数的返回值是void 可以有return语句
格式:return ;
return 语句之后的语句都不会被执行
2) 在一个函数中可以有多个return 语句
起作用的只有一个
如果有多个return 语句,更多的情况下联合 if来使用的
目的:根据条件 提前结束函数的执行
6、函数的调用
函数的执行流程:
先声明函数 ---> 执行函数
1)如何进行函数的声明?
格式: 被调函数的返回值 被调函数名(被调函数的参数);
技巧: 把函数的头部(xxx)拷贝一份,加上个分号
声明的注意事项:
1)被调函数写到主调函数之前,免声明
2)如果函数的返回值是 int 类型,免声明
3)声明的位置 :函数的内部 ,调用函数之前
函数的外部, 优点:在其他函数中不需要声明了
4)全局的声明的作用域:
从声明的位置开始,到文件结束
2)调用函数
格式:函数名(实参列表);
实参: 常量/变量/表达式/函数
嵌套调用问题
min(min(min(a,b),c),d)
7、递归函数
在函数的内部又当前函数本身
int f(int n){
return f(n-1);
}
// 递归调用的 死循环
能够构成递归函数的条件:
1)能够让递归函数调用结束
2)能够找到一个规律,让问题的规模缩小
递归的两个阶段:
1)递推阶段:问题规模缩小的过程
2)回归计算阶段:当条件满足,递归结束,依次代入值
递归原理:
在递归阶段,把每一步的结果存放到内存栈(先进后出)中
从条件满足的时候,从栈顶开始依次出栈。
所以,基于这个原理,大批量数据计算不适合使用递归,太消耗资源。
|
|