第七章函数 7.1概述 7.2函数的定义 7.3函数的返回值 74函数的调用 75函数参数及其传递方式 7.6函数的嵌套与递归调用 7.7数组作为函数参数 7.8变量的存储属性 7.9内部函数和外部函数
第七章 函数 7.1 概述 7.2 函数的定义 7.3 函数的返回值 7.4 函数的调用 7.5 函数参数及其传递方式 7.6 函数的嵌套与递归调用 7.7 数组作为函数参数 7.8 变量的存储属性 7.9 内部函数和外部函数
7.1概迷 ★模块化程序设计 基本思想:将一个大的程序按功能分割成一些小模块 ◆特点 各模块相对独立、功能单一、结构清晰、接口简单 ●控制了程序设计的复杂性 ●提高元件的可靠性 缩短开发周期 ●避免程序开发的重复劳动 易于维护和功能扩充 开发方法:自上向下逐步分解,分而治之
模块化程序设计 ❖基本思想:将一个大的程序按功能分割成一些小模块, ❖特点: ⚫各模块相对独立、功能单一、结构清晰、接口简单 ⚫控制了程序设计的复杂性 ⚫提高元件的可靠性 ⚫缩短开发周期 ⚫避免程序开发的重复劳动 ⚫易于维护和功能扩充 ❖开发方法: 自上向下,逐步分解,分而治之 7.1 概述
★C是模块化程序设计语言 C语言是结构化的程序设计语言,一个较大的 程序一般由几个程序模块组成,每个程序模块 完成一定的功能。在C语言中,这种功能模块 就是由函数来实现的。 C是函数式语言 C程序 ⑩必须有且只能有一个名为的主函数 C程序热弃受个「源程序文件派程序文件来 但函数 预编译命令 函数1 函数n 说明部分执行部分 C程序结构
C是模块化程序设计语言 源程序文件1 预编译命令 说明部分 执行部分 函数1 函数n 源程序文件i 源程序文件n C程序 C程序结构 C是函数式语言 必须有且只能有一个名为main的主函数 C程序的执行总是从main函数开始,在main中结束 函数不能嵌套定义,可以嵌套调用 C语言是结构化的程序设计语言,一个较大的 程序一般由几个程序模块组成,每个程序模块 完成一定的功能。在C语言中,这种功能模块 就是由函数来实现的
★数学函数和C函数 形式参数 如数学中有:f(x)=√3x2+2x 定义函数 f(0)=√3*02+2*0=0 调用函数 f(1)=√3*12+2*1=223607 f(2)=V3*2+2*2=4 实际参数 函数值
如数学中有: f(x)= f(0)= f(1)= f(2)= 定义函数 调用函数 形式参数 实际参数 函数值 3x 2x 2 + 3*0 2*0 2 + 3*1 2*1 2 + 3*2 2*2 2 + = 0 = 2.23607 = 4 数学函数和C函数
★数学函数和C函数 两个形式参数 再如: g(xy)=1x2+ 定义函数 g(3,4)=√32+42=5 调用函数 两个实际参数 函数值
再如: g(x, y)= g(3,4)= = 5 定义函数 调用函数 两个形式参数 两个实际参数 函数值 2 2 x + y 2 2 3 + 4 数学函数和C函数
★函数分类 今从用户角度 标准函数(库函数):由系统提供解决公共问题,使用 时要包含相应的库文件 ●用户自定义函数由用户自己定义,解决特定的冋题 今从函数形式 无参函数主调函数与被调函数之间无参数传递,通常 来执行一组操作 有参函数:主调函数与被调函数之间有参数传递 使用库函数应注意: 1、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型 4、需要使用的包含文件
函数分类 ❖从用户角度 ⚫ 标准函数(库函数):由系统提供,解决公共问题,使用 时要包含相应的库文件 ⚫ 用户自定义函数:由用户自己定义,解决特定的问题 ❖从函数形式 ⚫ 无参函数:主调函数与被调函数之间无参数传递,通常 来执行一组操作 ⚫ 有参函数:主调函数与被调函数之间有参数传递 使用库函数应注意: 1、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型 4、需要使用的包含文件
7.2函数的定义 令函数必须定义才能够调用,在函数定义时,要对函数的 类型、形参及其类型、函数中所要完成的操作、返回的 函数值进行一系列的规定,根据这些规定才能够正确的 对函数进行调用。 令其中函数中所完成的操作是函数的核心部分,是由程序 语句实现的;函数及形参的类型是正确使用函数的依据; 函数返回的值是调用函数后所得到的结果
❖ 函数必须定义才能够调用,在函数定义时,要对函数的 类型、形参及其类型、函数中所要完成的操作、返回的 函数值进行一系列的规定,根据这些规定才能够正确的 对函数进行调用。 ❖ 其中函数中所完成的操作是函数的核心部分,是由程序 语句实现的;函数及形参的类型是正确使用函数的依据; 函数返回的值是调用函数后所得到的结果。 7.2 函数的定义
函数的定义 函数返回值类型 缺省int型 ★一般格式 无返回值void 合法标识符 现代风格: 函数类型函数名(形参类型说明表) 函数体 说明部分 语句部分 例无参函数 printstar( printf(* *********n”);} 或 printstar( void) 为空 i printf( 水**水**水**
一般格式 合法标识符 函数返回值类型 缺省int型 无返回值void 函数体 函数类型 函数名(形参类型说明表) { 说明部分 语句部分 } 现代风格: 例 有参函数(现代风格) int max(int x,int y) { int z; z=x>y?x:y; return(z); } 例 有参函数(现代风格) int max(int x, y) { int z; z=x>y?x:y; return(z); } 例 空函数 dummy( ) { } 函数体为空 例 无参函数 printstar( ) { printf(“**********\n”); } 或 printstar(void ) { printf(“**********\n”); } 函数的定义
传统风格:函数类型函数名(形参表) 形参类型说明 说明部分 语句部分 例有参函数(传统风格) int max(x, y) int x y Z=X>y?xy return (z)
函数类型 函数名(形参表) 形参类型说明 { 说明部分 语句部分 } 传统风格: 例 有参函数(传统风格) int max(x,y) int x,y; { int z; z=x>y?x:y; return(z); }
★定义一个有参函数计算并输出两个形参的平均值 函数为实型函数 函数名 两个形参 float fun(a, b) int a, b 两个形参均为整型 i float ave; ave=(a+b)/20; printf("a=%d, b=%d, average=%fin", a, b, ave); 形参在函数体之前已经说明,函数体中不能再次定义
{ float a, b, ave; ave= (a+b)/2.0 ; printf ( "a=%d,b=%d,average=%f\n",a,b,ave ); } 函数名 函数为实型函数 float ave; 形参在函数体之前已经说明,函数体中不能再次定义 float fun2 ( a , b ) 两个形参 int a , b ; 两个形参均为整型 定义一个有参函数,计算并输出两个形参的平均值