1.7 函数

一、分而治之和信息隐藏

(一)分而治之( Divide and Conquer,Wirth, 1971 )

函数把较大的任务分解成若干个较小的任务,并提炼出公用任务

(二)信息隐藏(Information Hiding, Parnas, 1972)

设计得当的函数可把具体操作细节对外界隐藏起来,从而使整个程序结构清楚
使用函数时,不用知道函数内部是如何运作的,只按照我们的需要和它的参数形式调用它即可。
函数设计的基本原则
· 函数规模要小、函数功能要单一、函数接口定义要清楚
入口参数的有效性检查、敏感操作前的检查、调用成功与否的检查

二、程序设计的艺术

算法设计的艺术、结构设计艺术

三、函数

(一)定义

函数是C语言中模块化编程的最小单位;若干相关的函数可以合并成一个“模块”,一个C程序由一个或多个源程序文件组成,一个源程序文件由一个或多个函数组成

(二)分类

1、函数互相独立,没有从属之分。
main():C程序的执行从main函数开始,调用其他函数后流程回到main函数,在main函数中结束整个程序运行。
2、
1)标准库函数
ANSI/ISO C定义的标准库函数:符合标准的C语言编译器必须提供这些函数。函数的行为也要符合ANSI/ISO C的定义。
第三方库函数:由其他厂商自行开发的C语言函数库。不在标准范围内,能扩充C语言的功能(图形、网络、数据库等)
2)自定义函数
自己定义的函数,包装后,也可成为函数库,供别人使用
3.

类型  函数名(类型 参数1,  类型 参数2, ……){	
	声明语句序列
	可执行语句序列 
	return 表达式;
	}

四、向函数传递值和从函数返回值

1、
形式参数和实际参数

//有返回值
c = max(a,b);//数值表达式存放返回值
c = max(max(a,b),c);//作为另一个函数调用的参数
 display(a,b);//无返回值时:函数调用表达式

2、函数的参数传递
实参和形参必须匹配:数目一致,类型一一对应(否则会发生自动类型转换)

五、函数原型

调用函数前先声明其返回值类型、函数名和参数
函数原型有助于编译器对函数参数类型的匹配检查

六、函数定义与函数声明的区别

1、函数定义
函数功能的确立
指定函数名、函数类型、形参及类型、函数体等
2、函数声明
不包括函数体
一条语句,仅声明作用

七、函数封装与防御性程序设计

(一)函数封装(Encapsulation)

(二)函数设计的基本原则

信息隐藏

八、函数的嵌套调用

九、函数的递归调用和递归函数

1、如果一个对象部分地由它自己组成或按它自己定义,则我们称它是**递归(Recursive)**的。
典型实例:字典
2、任何一个递归调用程序必须包括两部分
递归循环继续的过程、递归调用结束的过程

if(递归终止条件成立)
	return	递归公式初值;
	else return 递归函数调用返回的结果值;

3、
1)回推过程:每个递归函数必须至少有一个基线条件。一般情况必须最终能简化为基线条件
2)递推过程:递归层数太多易,导致栈空间溢出。后果很严重,程序被异常中止

十、递归与迭代

十一、变量的作用域和存储类型

(一)、变量的作用域

在源程序中定义变量的位置及其能被读写访问的范围
分为:局部变量(Local Variable) 、全局变量(Global Variable )
1、局部变量
在语句块内定义的变量.
形参也是。
特点:
生存期是该语句块,进入语句块时获得内存,仅能由语句块内语句访问,退出语句块时释放内存,不再有效
定义时不会自动初始化
并列语句块各自定义的同名变量互不干扰 ,形参和实参可以同名
2、全局变量
在所有函数之外定义的变量
特点:
生存期是整个程序,从程序运行起占据内存,程序运行过程中可随时访问,程序退出时释放内存
有效范围是从定义变量的位置开始到本程序结束
全局变量使函数间的数据交换更容易,更高效,但建议尽量少用,因为谁都可改写它,所以很难确定是谁改写了它

(二)、变量的存储类型

1、指数据在内存中存储的方式,即编译器为变量分配内存的方式,它决定变量的生存期
存储类型 数据类型 变量名;
2、C程序的存储类别:

auto型(自动变量)//进入语句块时自动申请内存,退出时自动释放内存;动态局部变量,缺省的存储类型
	static型(静态变量)//生存期为整个程序运行期间
	extern型(外部变量)
	register型(寄存器变量)
	/*寄存器:CPU内部容量有限、但速度极快的存储器
使用频率比较高的变量声明为register ,可使程序更小、执行速度更快
现代编译器有能力自动把普通变量优化为寄存器变量,并且可以忽略用户的指定,所以一般无需特别声明变量为register 
	*/

3、变量的生存期
静态存储区(RAM)中的变量:与程序“共存亡”
动态存储区(RAM)中的变量:与程序块“共存亡”
寄存器中(CPU)的变量: 同动态存储区

十二、模块化程序设计

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

延7488

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值