C语言-->(八)函数

知识点:
1.函数基础
2.函数参数和返回值
3.形参和实参,变量的类型
4.函数声明
5.函数递归算法

==========================
1、函数基础数组

函数的做用:封装一个经常使用的功能app

定义函数的步骤函数

 1>明确函数的做用,起一个有意义的名称spa

 2>肯定函数的参数:想清楚调用函数的时候是否须要传入外界的一些数据code

 3>肯定函数的返回值:想清楚函数调用完毕后是否须要返回一个值给函数调用者blog


1.函数的定义格式递归

 返回值类型  函数名(参数列表)生命周期

 {ci

    函数体

 }

(1)功能函数

// 函数能够没有形参
play() {
// 在这个大括号里面说清楚函数是干啥(里面包含了什么代码) printf("播放了MP3\n"); }

(2)返回值,参数

形参:定义函数的时候,函数后面()中的变量

实参:调用函数的时候,传进去的值

#include <stdio.h>
double
average(int v1, int v2) // 变量v一、v2称为“形式参数”,简称“形参”。 ()中的内容能够称为“形参列表” { // 计算平均数 double result = (v1 + v2)/2.0; // return的2个做用 // 1.退出函数 // 2.将右边的值返回给函数调用者 return result; } // 任何C语言程序默认状况下,只会执行main函数 int main() { // 调用函数 play(); // 调用average函数 double d = average(10, 20); double d1 = average(30, 40); printf("d1 is %f\n", d1); return 0; }

 建议:

 之后尽可能把经常使用的代码\功能封装到一个函数里面去,这样能够提升代码重用率,能够提升可扩展性


2.函数做用
1)使程序结构清晰简洁
2)部分代码重复利用下降代码冗余
3)独立的工做内容和模块

3.函数的分类
使用角度分类:

API application programe interface

ASCII C89 C99 C11
1)标准c库函数,由系统实现好的一些列功能函数
如:printf, scanf, fabs, labs…

 除c库之外的函数称为第三方函数

2)用户自定义函数,由用户自定义的功能函数

从函数形式分类:
1)无参函数 void
2)有参函数
3)有返回值 对应类型
4)无返回值 void


4.函数说明
1)一个程序有若干个文件,每一个文件有若干个函数组成
2)c程序由main函数开始,也从main函数结束
3)源程序中的全部函数在结构上是平行的,互相独立的
4)main函数能够调用其余函数,函数之间能够相互调用


===========================
函数参数和返回值

2)调用过程当中实参和形参
3.若是没有参数时通常将参数列表置空
没有参数时,参数列表通常填写void

3.return 做用分析
1)当函数须要有返回值的时候,用来将结果返回
2)思考:若是函数没有明确返回值的时候,是否能够使用?   见上得功能函数
3)return 的另一个做用是提早结束该函数,而且返回到函数调用者处,return后的代码不会被执行
===========================
形参和实参关系
1.例子:交换两数
2.参数传递的方式和过程
1)值传递

2)地址传递
===========================
全局变量和局部变量
全局变量:共享数据
1.变量的分类
1)函数参数和内部变量称为局部变量
2)在函数外部的变量称为全局变量
2.做用域,生命周期(变量有效范围)
1)局部变量的做用域为当前函数,从变量开始到函数结束
2)全局变量的做用域为全部文件,从变量开始到程序结束
3.生命周期(变量的有效时间)
1)只在函数运行期间有效,一旦函数执行完毕后,变量将会被系统销毁
2)全局变量在整个程序运行期间有效,直到程序退出才会被系统销毁
4.参数屏蔽
局部变量屏蔽全局变量
局部变量和全局变量的变量名一致
===========================
函数声明
1.函数声明的做用
1)让调用者知道如何调用
2)让编译器在编译阶段判断函数调用是否正确
思考:函数声明是否有必要?若是没有声明会如何(从参数和返回值方面思考)

2.声明方式
声明了函数的名字,参数个数和类型,返回值类型
===========================
函数递归
例子:从前有座山…
1.什么是递归
函数调用自身的过程
2.递归做用
递归常常被用于解决计算机科学的问题。
3.应用场合
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。
(树的遍历,图的搜索)
4.实例:

1)计算1+2+3+…+n
练习:1.用函数递归计算1*2*3*…*n的值
2.用函数递归输入10进制,输出2进制 1010

2)用函数递归计算斐波那切数列
1>示例:经过循环实现斐波那切数列
2> 经过递归实现
5.递归缺点
1)递归算法解题相对经常使用的算法如普通循环等,运行效率较低。
所以,应该尽可能避免使用递归,除非没有更好的算法或者某种特定状况比
递归更为适合的时候。
2)在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。
递归次数过多容易形成栈溢出等。

 

补充:

// 终端上用control+x能够退出死循环 

// 函数调用本身自己可能会出现死循环

// 函数调用本身自己,称为“递归

相关文章
相关标签/搜索