
第9章函数 -模块化程序设计 ·基本思想:将一个大的程序按功能分割成一些小模块, ·特点: 一各模块相对独立、功能单一、结构清晰、接口简单 一控制了程序设计的复杂性 一提高元件的可靠性 一缩短开发周期 一避免程序开发的重复劳动 一易于维护和功能扩充 ·开发方法:自上向下,逐步分解,分而治之
第9章 函数 – 模块化程序设计 • 基本思想:将一个大的程序按功能分割成一些小模块, • 特点: – 各模块相对独立、功能单一、结构清晰、接口简单 – 控制了程序设计的复杂性 – 提高元件的可靠性 – 缩短开发周期 – 避免程序开发的重复劳动 – 易于维护和功能扩充 • 开发方法: 自上向下,逐步分解,分而治之

①是模块化程序设计语言 C程序 源程序文件」 源程序文件i 源程序文件n 预编译命令 函数1 函数n 说明部分 执行部分 C程序结构 单C是函数式语言 单必须有且只能有一个名为main的主函数 四C程序的执行总是从main函数开始,在main中结束 具函数不能嵌套定义,可以嵌套调用
C是模块化程序设计语言 源程序文件1 预编译命令 说明部分 执行部分 函数1 函数n 源程序文件i 源程序文件n C程序 C程序结构 C是函数式语言 必须有且只能有一个名为main的主函数 C程序的执行总是从main函数开始,在main中结束 函数不能嵌套定义,可以嵌套调用

)烂9函数分类 。从用户角度 一标准函数(库函数):由系统提供 一用户自定义函数 ·从函数形式 一无参函数 一有参函数 使用库函数应注意: 1、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型 4、需要使用的包含文件
– 9.1 函数分类 • 从用户角度 – 标准函数(库函数):由系统提供 – 用户自定义函数 • 从函数形式 – 无参函数 – 有参函数 使用库函数应注意: 1、函数功能 2、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型 4、需要使用的包含文件

6.2函数的定义 函数返回值类型 缺省int型 一一般格式 无返回值void 合法标识符 现代风格: 函数类型 函数名(形参类型说明表》 函数体 说明部分 语句部分 例无参函数 printstar() {printf(****n”)方 或 printstar(void) 为空 printf**********n);
• 6.2 函数的定义 – 一般格式 合法标识符 函数返回值类型 缺省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, int z; z-x>y?xy; return(z);
函数类型 函数名(形参表) 形参类型说明 { 说明部分 语句部分 } 传统风格: 例 有参函数(传统风格) int max(x,y) int x,y; { int z; z=x>y?x:y; return(z); }

2 6.3函数的返回值 例无返回值函数 void swap(int x,int y 一返回语句 { int temp, ·形式: return(表达式); temp-x; 或 return 表达式; x-y; 或 y-temp; return; ·功能:使程序控制从被调用因效必凹到用凶敛中, 同时把返值带给调用函数 ·说明: -函数中可有多个return语句 -若无return语句,遇}时,自动返回调用函数 -若函数类型与return语句中表达式值的类型不一致,按前 者为准,自动转换一函数调用转换 -void型函数
• 6.3 函数的返回值 – 返回语句 • 形式: return(表达式); 或 return 表达式; 或 return; • 功能:使程序控制从被调用函数返回到调用函数中, 同时把返值带给调用函数 • 说明: – 函数中可有多个return语句 – 若无return语句,遇}时,自动返回调用函数 – 若函数类型与return语句中表达式值的类型不一致,按前 者为准,自动转换-函数调用转换 – void型函数 例 无返回值函数 void swap(int x,int y ) { int temp; temp=x; x=y; y=temp; }

例函数带回不确定值 printstar() void printstar() {printf("****")方 {printf("****")方 main() main() int a; { int a, a=printstar(); a=printstarO); printf("d",a); printf("%d",a); 输出:10 编译错误! 米
printstar() { printf("**********"); } main() { int a; a=printstar(); printf("%d",a); } 例 函数带回不确定值 输出:10 void printstar() { printf("**********"); } main() { int a; a=printstar(); printf("%d",a); } 编译错误!

6.4函数的调用 -调用形式 函数名(实参表); 说明: 一实参与形参个数相等,类型一致,按顺序一一对应 -实参表求值顺序,因系统而定(Turbo C自右向左)
• 6.4 函数的调用 – 调用形式 函数名(实参表); 说明: – 实参与形参个数相等,类型一致,按顺序一一对应 – 实参表求值顺序,因系统而定(Turbo C 自右向左)

调用方式 ·函数语句: 例printstar(O; printf("Hello,World!\n"); ·函数表达式: 例m=max(a,b)*2; ·函数参数: 例 printf(“%d”,max(a,b); m=max(a,max(b,c));
– 调用方式 • 函数语句: 例 printstar(); printf(“Hello,World!\n”); • 函数表达式: 例 m=max(a,b)*2; • 函数参数: 例 printf(“%d”,max(a,b)); m=max(a,max(b,c));

函数说明 ·对被调用函数要求: 一必须是已存在的函数 -库函数:#include 一用户自定义函数:函数类型说明 ·函数说明 一一般形式: 函数类型 函数名(形参类型[形参名],.); 或 函数类型 函数名(0; 一作用:告诉编译系统函数类型、参数个数及类型,以便检验 -函数定义与函数说明不同 一函数说明位置:程序的数据说明部分(函数内或外) 一下列情况下,可不作函数说明 》若函数返值是char或int型,系统自动按int型处理 》被调用函数定义出现在主调函数之前
– 函数说明 • 对被调用函数要求: – 必须是已存在的函数 – 库函数: #include – 用户自定义函数: 函数类型说明 • 函数说明 – 一般形式: 函数类型 函数名(形参类型 [形参名],. ); 或 函数类型 函数名(); – 作用:告诉编译系统函数类型、参数个数及类型,以便检验 – 函数定义与函数说明不同 – 函数说明位置:程序的数据说明部分(函数内或外) – 下列情况下,可不作函数说明 » 若函数返值是char或int型,系统自动按int型处理 » 被调用函数定义出现在主调函数之前