第八章函数 第8章第1节 §8概述 按照结构化程序设计的思想,通常将较大的程序分成若干相对独立的 部分(子程序块),每一个子程序(块)实现某一种功能。C中的子程序 用“函数”实现。由main0函调用这些“函数” main 主函数只能有一个 调用 函数1函数2 函数n 自定义函数—程序设计者自己编写 调用 C系统提供的库函数用# inculde命令 函数a函数b 树型结构
第8章第1节 §8.1 概 述 按照结构化程序设计的思想,通常将较大的程序分成若干相对独立的 部分(子程序/块),每一个子程序(块)实现某一种功能。C中的子程序 用“函数”实现。由main()函调用这些“函数” main( ) C系统提供的库函数—用# inculde 命令 自定义函数 ——程序设计者自己编写 调用 函数1 函数2 … 函数n 主函数只能有一个 函数a 树型结构 函数b 调用
第8章第1节 maint (0 { print(2,30,*) print message; 主函数 prin(1,30,-) print(int m, int n, char c) fint i,j; for(i=l; i<=m; i++) 有参函数 i forj=1:j<=n;j++) printf("%c",c); printf("n); print messaged { printf(" How do you do!n",}卜无参函数 注意: 执行顺序:从main0开始,→调用其他函数→返回到 maino→向后执行
main() { print(2,30,'*'); print_message(); print(1,30,'-');} print(int m, int n, char c) {int i,j; for(i=1;i<=m;i++) { for(j=1;j<=n;j++) printf("%c",c); printf("\n"); } } print_message() { printf(" How do you do!\n");} 注意: 执行顺序:从main()开始, →调用其他函数→返回到main() →向后执行 第8章第1节 有参函数 无参函数 主函数
第8章第2节 §82函数定义的一般形式 无参函数的定义 形式: int,foat等 与变量命名相同 类型符函数名() {说明部分 定义其他变量 函数体 语句 例 print message { printf(“ How do you do!n”); 注:c++中的用法: void print message(void) { printf(“ How do you do:Ⅶn”);
第8章第2节 §8.2 函数定义的一般形式 一. 无参函数的定义 形式: 类型符 函数名( ) { 说明部分 语句 } int , float等 与变量命名相同 空 定义其他变量 print_message() {printf(“ How do you do!\n”); } 例 注: c++中的用法: void print_message(void) {printf(“ How do you do!\n”); } 函数体
第8章第2节 二.有参函数的定义 形式: 类型符函数名(形式参数表) {说明部分 语句 函数原型 例 void print(intm, int n, char c) 例 int max(int x, int y) fint i, fint z; r(i=1;iV?X {for(=1jy?x: y;)
二. 有参函数的定义 形式: 类型符 函数名( 形式参数表) { 说明部分 语句 } void print(int m, int n, char c) {int i,j; for(i=1;iy?x:y; return(z); } int max(int x, int y) { return( z=x>y?x:y;) } 或: 第8章第2节 函数原型
第8章第2节 空函数 形式:类型符函数名0 函数体内无内容 空函数不作任何工作,在程序设计时,作为后备补充。 四.函数的传统方式(标准C) 形式:类型符函数名(形式参数表 声明形式参数类型 说明部分 语句} 例: int max((x,y) int max(int x, int y) int x y 对比 fint z; nt z, x>y?x: y FX>Y?: y; return(z return (z;
三. 空函数 形式: 类型符 函数名() { } 函数体内无内容 空函数不作任何工作,在程序设计时,作为后备补充。 第8章第2节 四. 函数的传统方式(标准C) 形式: 类型符 函数名( 形式参数表) 声明形式参数类型 { 说明部分 语句 } int max(x, y) int x,y; {int z; z=x>y?x:y; return(z); } 例: int max(int x, int y) {int z; z=x>y?x:y; return(z); } 对比
第8章第3节 §83函数的参数和函数的值 形式参数和实际参数 形式参数(形参)—函数定义时,函数名后面()中的变量。 实际参数(实参)—函数调用时,函数名后面()中的变量、常量、表达式。 例 mainO fint a, b, c; scanf(“%d,%d,a,&b); 1.出现在主调函数范围内; c=max (a, b); a,b为实{2.可以是变量、常量、表达 printi(max=%dn”,c);参 3.己有确切的值。 区别 int max(int x,iny←xy为形参〔L.出现在被调用的函数内 fint z; 2.只能是变量 FX>y?:y; 3.无确切值,只是一个形式上的 return (z); 变量
§8.3 函数的参数和函数的值 第8章第3节 一. 形式参数和实际参数 形式参数(形参)——函数定义时,函数名后面()中的变量。 实际参数(实参)——函数调用时,函数名后面()中的变量、常量、表达式。 例 main() {int a,b,c; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“max=%d\n”,c); } int max(int x, int y) {int z; z=x>y?x:y; return(z); } a,b为实 参 x,y为形参 1. 出现在被调用的函数内; 2. 只能是变量; 3. 无确切值,只是一个形式上的 变量; 1. 出现在主调函数范围内; 2. 可以是变量、常量、表达; 3. 己有确切的值。 区别
第8章第3节 说明:1.实参和形参的类型应一致 2.数值传递的方向(传值方向) 实形一形参单向传递(又叫“值传递 二.函数的返回值 概念:调用一个函数后,得到的一个结果 1. return语句的使用—用于函数体内,规定要代回的结果。 c-max(a 3通过函数名代回到 传值 主调函数 主调函数中去。 int max(int x, int y) fint z; Fx>yx:y; 被调用函 2被调用函数(max)中 数 return 规定了需要代回值
说明:1. 实参和形参的类型应一致; 2. 数值传递的方向(传值方向) 实形 形参 单向传递(又叫“值传递”) 二. 函数的返回值 1. return语句的使用 ——用于函数体内,规定要代回的结果。 概念:调用一个函数后,得到的一个结果 c=max(a,b) int max(int x, int y) {int z; z=x>y?x:y; return(z); } 主调函数 被调用函 数 2.被调用函数(max)中 规定了需要代回z值, 3.通过函数名代回到 主调函数中去。 1.传值 第8章第3节
第8章第3节 return语句使用中应注意的问题 )形式: return(): 变量1括号(可省。如: 常量 return z; 2)函数返回值的个数 表达式 任何函数都只能有一个返回值,不论有多少reur语句,只有 个起作用。 例 例: int max(int x, int y) mainO Rif (x>y) return(x); fint a=10, b=3; else return(y) printf((“%d,%dn”,cul(a2b); int cul(int x, int y) Rreturn(x+y); return(x-y);+永远不起作用
return语句使用中应注意的问题 第8章第3节 1). 形式: return( ); 变量 常量 表达式 括号( )可省。如: return z; 2). 函数返回值的个数 任何函数都只能有一个返回值,不论有多少return语句,只有 一个起作用。 例: int max(int x, int y) {if (x>y) return(x); else return(y); } 例: main() {int a=10,b=3; printf(“%d,%d\n”,cul(a,b)); } int cul(int x, int y) {return(x+y); return(x-y); } 永远不起作用
第8章第3节 3)没有 return语句的情况 表示不需要返回一个值。函数定义时,函数名前的“类型符”用 void void print(int m, int n, char c) fint i,j; for(i-l; i<=m; i++) {for(j=1;j<=n;j++) 函数体内无 return语句 printf(“%c”,c); printf(“n”); 2.函数返回值的类型 int max(int x, int y) 定义时,由函数名前面“类型说明符”确定 fint z; 1)函数名前没有类型符,则默认函数返回值为 FXyX: y 特例整型 return( 2) return()中返回值的类型应与函数名前 类型符保持一致。如不一致,则以函数名类型应一致 前类型符为准
3). 没有return语句的情况 表示不需要返回一个值。函数定义时,函数名前的“类型符”用 “void” 。 第8章第3节 void print(int m, int n,char c) {int i,j; for(i=1;iy?x:y; return(z); } 类型应一致 1) 函数名前没有类型符,则默认函数返回值为 整型; 2) return( )中返回值的类型应与函数名前 类型符保持一致。如不一致,则以函数名 前类型符为准。 特例
第8章第3节 int max(float x, float y) floata 函数得到的结 类型不一致! 果仍为int类型 Fxy.x:Y return(z);
int max(float x, float y) {float z; z=x>y?x:y; return(z); } 函数得到的结 果仍为int 类型 类型不一致! 第8章第3节