文档介绍:C程序设计语言
第4章函数与程序结构
孙志岗******@hit.
2017/11/10
1
Functions and Program Structure
大话三国
懿问曰:“孔明寝食及事之烦简若何?” 使者曰:“丞相夙兴夜寐,罚二十以上皆亲览焉。所啖之食,日不过数升。” 懿顾谓诸将曰:“孔明食少事烦,其能久乎?”
程序设计的艺术
算法设计的艺术
程序的灵魂
Donald E. Knuth, "The Art puter Programming", 清华大学出版社, 2002
结构设计的艺术
程序的肉体
“..the larger the project, the more essential the structuring!”—Dijkstra, 1968
模块化(Parnas, 1972)
结构化(Structural)
面向对象(Object-Oriented)
ponent-Oriented)
面向智能体(Agent-Oriented)
……
假如不模块化
读多少行的程序能让你不头疼?
main()当中能放多少行程序?
假如printf()函数由10行代码替换,那么你见过的程序会成什么样子?
如果所有代码都在main()当中,怎么团队合作?
如果代码都在一个文件中,怎么团队合作?
模块化的优点
模块各司其职
每个模块只负责一件事情,它可以更专心
便于进行单个模块的设计、开发、调试、测试和维护等工作
一个模块一个模块地完成,最后再将它们集成
开发人员各司其职
按模块分配任务,职责明确
并行开发,缩短开发时间
分而治之(Wirth, 1971 )信息隐藏(Parnas, 1972)
函数(function)和模块(module)
函数是C语言中模块化编程的最小单位
可以把每个函数看作一个模块
若干相关的函数可以合并作一个“模块”
main()
printf()
scanf()
power()
putchar()
getchar()
main()
stdio:
printf()
scanf()
putchar()
getchar()
mymdl:
power()
函数的分类
函数生来都是平等的,没有高低贵贱之分,只有main()稍微特殊一点点
库函数
ANSI C定义的标准库函数
符合标准的C语言编译器必须提供这些函数
函数的行为也要符合ANSI C的定义
第三方库函数
由其它厂商自行开发的C语言函数库
不在标准范围内,能扩充C语言的功能
自定义函数
自己编写的函数
包装后,也可成为函数库,供别人使用
函数定义(definition)
类型函数名(类型参数1, 类型参数2, ……){ 函数体; return 表达式;}
返回值类型
标识符
参数表
返回值
函数出口
函数定义(definition)
函数是这样的一种运算:
函数名说明运算规则
参数是运算的操作数
返回值是运算的结果
当函数执行到return语句或}时,函数的运算停止。程序从当次调用函数的地方继续执行
函数可以有多个return,但最好只有一个且是最后一行
用void定义返回值类型
函数没有运算结果,没有返回值
return语句之后不需要任何表达式
用void定义参数,表示没有参数
参数表里的参数(叫形式参数,parameter)也是函数的语句块内的变量
函数调用(call)
函数名(表达式1, 表达式2, ……);
调用一个函数之前,先要对其返回值类型、函数名和参数进行声明(declare)
不对函数进行声明是非常危险的
函数定义也有声明函数的效果
调用函数时,提供的表达式(叫实际参数, argument)和该函数的形式参数必须匹配
数目一致
类型一一对应(会发生自动类型转换)
表达式的值赋值给对应的参数
返回值可以按需处理