1、知知 识识 回回 顾顾1.1.字符串存储方法字符串存储方法2.2.字符串输入输出字符串输入输出3.3.常用字符串处理函数常用字符串处理函数问问 题题 引引 出出1.1.前面各章所有程序规模比较小,只有一个前面各章所有程序规模比较小,只有一个mainmain函数函数2.2.在实际应用中,问题往往比较复杂在实际应用中,问题往往比较复杂 3.3.需要按照自上而下的设计方法把问题进行分解需要按照自上而下的设计方法把问题进行分解 4.4.模块间通过调用实现其功能模块间通过调用实现其功能 问问 题题 引引 出出5.C5.C语言支持模块化程序设计,每个模块是一个函数语言支持模块化程序设计,每个模块是一个函数
2、如何编写函数?函数间如何调用?如何编写函数?函数间如何调用?等问题就是本章研究的等问题就是本章研究的主题主题主主 要要 内内 容容8.1 8.1 结构化程序设计结构化程序设计目的要求目的要求复习思考题复习思考题8.2 8.2 函数定义函数定义8.3 8.3 原型声明与函数调用原型声明与函数调用8.4 8.4 向函数传值向函数传值8.5 8.5 向函数传地址向函数传地址8.1 8.1 结构化程序设计结构化程序设计1.1.自上而下程序设计自上而下程序设计(1)(1)大系统要进行大系统要进行问题分解问题分解,分解成很多,分解成很多模块模块(2)(2)模块间通过模块间通过调用调用实现功能实现功能(3)
3、(3)模块间传递数据叫模块间传递数据叫模块间的通信模块间的通信2.C2.C程序的结构化程序的结构化(1)C(1)C语言是结构化程序设计语言语言是结构化程序设计语言(2)C(2)C语言中的模块是语言中的模块是函数函数(3)(3)函数是功能独立的函数是功能独立的命名代码段命名代码段(4)(4)函数间只存在调用和被调用关系函数间只存在调用和被调用关系(5)(5)被调用函数间由被调用函数间由调用函数调用函数控制执行,执行完返回控制执行,执行完返回调用者调用者(6)(6)函数间传递数据叫函数间传递数据叫函数间通信函数间通信,也叫,也叫参数传递参数传递(7)(7)参数传递有参数传递有传值传值和和传地址传地
4、址两种两种8.2 8.2 函数定义函数定义包含包含函数头函数头和和函数体函数体两部分两部分 1.1.定义格式定义格式2.2.说明的几个问题说明的几个问题(2)(2)函数名是一地址常量,函数名后面必须带括号函数名是一地址常量,函数名后面必须带括号(1)(1)要明确指定函数返回值类型要明确指定函数返回值类型 u返回值类型是函数返回结果的数据类型返回值类型是函数返回结果的数据类型u允许省略不写,默认为允许省略不写,默认为intint型型u无返回值时必须指定为无返回值时必须指定为voidvoid型型 u函数名是一地址常量函数名是一地址常量,代表函数代码在内存中的代表函数代码在内存中的位置位置u函数名后
5、的括号不能省,末尾不能加分号函数名后的括号不能省,末尾不能加分号 (3)(3)形参列表是用逗号隔开的多个对象形参列表是用逗号隔开的多个对象,可以是可以是变量变量、数组数组和和指针指针u形式参数简称形式参数简称形参形参 u 形式参数形式参数原来接收来自函数外部的数据原来接收来自函数外部的数据 (5)(5)returnreturn语句往往是必须的语句往往是必须的(4)(4)函数体是函数的功能部分函数体是函数的功能部分u函数体通常包含函数体通常包含局部变量定义部分局部变量定义部分和和操作语句部分操作语句部分u局部变量定义位于开头,也叫局部变量定义位于开头,也叫局部声明局部声明u函数内部定义的变量叫函
6、数内部定义的变量叫局部变量局部变量ureturnreturn语句语句的的两个作用两个作用n结束函数执行结束函数执行n返回处理结果返回处理结果u语句格式语句格式return;/*结束函数执行,无结果结束函数执行,无结果*/return 表达式表达式;/*结束函数执行,结束函数执行,返回结果返回结果*/return(表达式)(表达式);/*结束函数执行,结束函数执行,返回结果返回结果*/3.3.函数定义举例函数定义举例(2)(2)无返回值有形参的函数定义无返回值有形参的函数定义(1)(1)无返回值无形参的函数定义无返回值无形参的函数定义(3)(3)有返回值有形参的函数定义有返回值有形参的函数定义8
7、.3 8.3 函数声明与函数调用函数声明与函数调用(1)(1)作用域作用域是指可以调用函数的语句范围,又是指可以调用函数的语句范围,又叫作用范围叫作用范围1.1.函数声明函数声明(2)(2)函数的函数的作用域作用域是从其定义位置起到程序结束的代码区是从其定义位置起到程序结束的代码区(3)(3)要使函数的要使函数的作用域与定义位置无关作用域与定义位置无关就要进行原型声明就要进行原型声明(4)(4)原型声明就是使用语句的形式对原型声明就是使用语句的形式对函数头函数头进行描述进行描述2.2.函数声明的方法函数声明的方法函数头函数头;举举例例请记住:请记住:u声明的目的是扩大函数的作用域声明的目的是扩
8、大函数的作用域u把作用域变为声明位置到程序结束的范围把作用域变为声明位置到程序结束的范围u实现任何地方都可调用函数实现任何地方都可调用函数3.3.两点说明两点说明(1)(1)声明中形参的名字可以与定义中的不同声明中形参的名字可以与定义中的不同,也可以省略不写也可以省略不写举举例例(2)(2)声明不是必须的声明不是必须的,但建议要但建议要,最好将其放在程序的开头最好将其放在程序的开头有两种情况可以不声明有两种情况可以不声明:函数的返回值为函数的返回值为intint型型被调用函数在调用函数之前定义被调用函数在调用函数之前定义 4.4.函数调用函数调用(1)(1)格式格式 函数名函数名(实参列表实参
9、列表)(2)(2)注意事项注意事项 有返回值的函数可以出现在表达式中参加其它运算有返回值的函数可以出现在表达式中参加其它运算无返回值的函数只能以无返回值的函数只能以语句语句的形式单独出现的形式单独出现 举举例例实参列表是调用函数向被调用函数传递的数据实参列表是调用函数向被调用函数传递的数据,在类型、在类型、顺序和个数上与形参必须对应一致顺序和个数上与形参必须对应一致实参可以是任意有意义的实参可以是任意有意义的表达式表达式举举例例无形参的函数在调用时括号中必须是无形参的函数在调用时括号中必须是空空的的举例举例8.4 8.4 向函数传值向函数传值1.1.向函数传值概述向函数传值概述(1)(1)调用
10、函数把一个或多个调用函数把一个或多个值值传递给了被调用函数的传递给了被调用函数的形参形参(2)(2)传值调用的要求传值调用的要求 u被调用函数的形参必须是被调用函数的形参必须是变量变量形式形式u调用函数的实参可以是调用函数的实参可以是任意表达式任意表达式(3)(3)传值调用的实质传值调用的实质 u调用函数把实参的值传给了被调用函数的形参调用函数把实参的值传给了被调用函数的形参,形参获得了形参获得了初始值初始值u被调用函数对调用函数被调用函数对调用函数无副作用无副作用8.5 8.5 向函数传地址向函数传地址1.1.调用函数把一个或多个调用函数把一个或多个地址地址传递给了被调用函数的传递给了被调用
11、函数的形参形参2.2.传址调用的要求传址调用的要求 u被调用函数的形参必须是被调用函数的形参必须是指针指针形式形式u调用函数的实参必须是调用函数的实参必须是地址地址3.3.传址调用的实质传址调用的实质 u调用函数把调用函数把地址地址传给了被调用函数的形参传给了被调用函数的形参u调用函数和被调用函数调用函数和被调用函数共享同一空间共享同一空间u被调用函数对形参的操作就是间接对实参操作被调用函数对形参的操作就是间接对实参操作u可以解决可以解决返回多个值返回多个值的问题的问题目目 的的 要要 求求1.1.理解结构化程序设计的概念和自上而下设计方法理解结构化程序设计的概念和自上而下设计方法2.2.掌握
12、函数定义的方法掌握函数定义的方法3.3.掌握函数声明的意义和方法掌握函数声明的意义和方法4.4.掌握函数调用的方法和注意事项掌握函数调用的方法和注意事项5.5.掌握向函数传值的要求、实质和使用时机掌握向函数传值的要求、实质和使用时机6.6.掌握向函数传地址的要求、实质和使用时机掌握向函数传地址的要求、实质和使用时机复习思考题复习思考题说明:题目前面的说明:题目前面的*代表问题的重要程度代表问题的重要程度*2.2.如何定义函数如何定义函数?定义时应该注意什么定义时应该注意什么?*3.3.函数声明指什么函数声明指什么?如何声明如何声明?*1.1.解释下列名词解释下列名词*4.4.函数调用的一般格式是什么函数调用的一般格式是什么?应该注意什么应该注意什么?*5.5.实现传值调用有什么要求实现传值调用有什么要求?实质是什么实质是什么?*6.6.实现传地址调用有什么要求实现传地址调用有什么要求?实质是什么实质是什么?(1)(1)函数定义函数定义 (2)(2)函数声明函数声明 (3)(3)函数调用函数调用