C语言程序设计(第2版) 中南大学出版社 成奋华陈松乔著 第七章函数应用程序设计 授课老师:危盂君 Email: weimengiun a163 com
第七章 函数应用程序设计 授课老师: 危孟君 Email: weimengjun@163.com C语言程序设计(第2版) 中南大学出版社 成奋华 陈松乔 著
内容提要 l、概述 2、函数的定义 3、函数的参数(变量、数组)和函数值 4、函数的调用 5、函数的嵌套调用 6、局部变量、全局变量及变量的存储类型
内容提要 1、概述 2、函数的定义 3、函数的参数(变量、数组)和函数值 4、函数的调用 5、函数的嵌套调用 6、局部变量、全局变量及变量的存储类型
§7.1概述 ★C是模块化程序设计语言 C程序 源程序文件1源程序文件订源程序文件n 预编译命令 函数1 函数n 说明部分执行部分 c是函数式语言 C程序结构 必须有且只能有一个名为main的主函数 卫函数不能嵌套定义可以嵌套调用
§7.1 概述 C是模块化程序设计语言 源程序文件1 预编译命令 说明部分 执行部分 函数1 函数n 源程序文件i 源程序文件n C程序 C程序结构 C是函数式语言 必须有且只能有一个名为main的主函数 函数不能嵌套定义,可以嵌套调用
★模块化程序设计 心基本思翘:将一个大的程序按功能分割成一些小模块 心特点 各模块相对独立、功能单一、结构清晰、接口简单 控制了程序设计的复杂性 ●提高元件的可靠性 ●縮短开发周期 避免程序开发的重复劳动 易于维护和功扩充 ☆开发方渎:自上向下,還步分解,分而治之
模块化程序设计 ❖基本思想:将一个大的程序按功能分割成一些小模块, ❖特点: ⚫各模块相对独立、功能单一、结构清晰、接口简单 ⚫控制了程序设计的复杂性 ⚫提高元件的可靠性 ⚫缩短开发周期 ⚫避免程序开发的重复劳动 ⚫易于维护和功能扩充 ❖开发方法: 自上向下,逐步分解,分而治之
程序说明 1、程序从 maino函数中开始,调用 #include 其他的子函数以后,在mi0函数 void star0 中结束; Printf( 6622** 2、所有的子函数都是平行的,任 何子函数都不属于其他函数; 3、从用户的角度来看,函数可以 void maino 分为: 标准函数,即库函数,如prin0 staro; 自定义函数如 starO printf(“ Hello, World!n”); 4、从函数形式来看,可分为 无参数函数,如star 有参数函数,如 printi0
程序说明 #include void star() {printf(“**********\n”);} void main() { star(); printf (“Hello ,World!\n”); } 1、程序从main()函数中开始,调用 其他的子函数以后,在main()函数 中结束; 2、所有的子函数都是平行的,任 何子函数都不属于其他函数; 3、从用户的角度来看,函数可以 分为: 标准函数,即库函数,如printf() 自定义函数 如star() 4、从函数形式来看,可分为: 无参数函数,如star() 有参数函数,如printf()
872画数的定义(函冒值望 ★一舭格式 无返回值void 合法标识符 函数类型函数名([形参类型说明表]) 中数体 说明部分 语句部分 局部变量: 函数体内定义的「右会画嫩mA故 变量,其有效范围例无参函数 函数 仅限于所在函数的 printstar( 内部,离开函数体{ printf( 46 'e a ? e s e an”);} 则无意义 或 printstar(void) 函数体为 比如:变量x,y, z i printf(“*m”; 空
§7.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”); } 局部变量: 函数体内定义的 变量,其有效范围 仅限于所在函数的 内部,离开函数体 则无意义 比如:变量x,y,z
函数参数和函数的值 #include 个C程序由若干个函数组 int max(int x, int y) 成,各函数调用时经常需要传递 些数据,即调用函数把参数传 递给被调用函数,经被调用函数 int 处理后,得到一个确切的结果, T(x>Y)?x:y 在返回调用函数时,把这个结果 return(z); 带回调用函数。 调用函数 被调用函数 void mainO b int max(int x, int y) int a, b, c, c=max(a, b) scanf(%d, %d", &a, &b); return (z; c=max(a, b); printf( Max is%dm”,c);
函数参数和函数的值 #include int max(int x,int y) { int z; z=(x>y)?x:y; return(z); } void main() { int a,b,c; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“Max is %d\n”,c); } 一个C程序由若干个函数组 成,各函数调用时经常需要传递 一些数据,即调用函数把参数传 递给被调用函数,经被调用函数 处理后,得到一个确切的结果, 在返回调用函数时,把这个结果 带回调用函数。 调用函数 被调用函数 ………… c=max(a,b); ………… int max(int x,int y) ………… return(z); a,b z
形式参数和实际参数 #include 函数参数:用于函数间数据的传递; int max(int x, int y) 形式参数:定义函数时使用的参数; 实际参数:引用函数时使用的参数; int T(x>y? x:y; 函数mx有两个形参数、y return(z 数尽能在m中使用 a和b是主函数中定义的变量 void maino main函数调用函数max int abc: a和b为函数max的实参 scanf(“%d,%d”,&a,&b); c=max(a, b); printf(“ Max is%dn”,);
函数参数:用于函数间数据的传递; 形式参数:定义函数时使用的参数; 实际参数:引用函数时使用的参数; 函数max有两个形式参数x、y 参数x和y只能在max中使用 a和b是主函数中定义的变量 main函数调用函数max a和b为函数max的实参 形式参数和实际参数 #include int max(int x,int y) { int z; z=(x>y)?x:y; return(z); } void main() { int a,b,c; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“Max is %d\n”,c); }
形式参数和实际参数 #include 说明: int max(int x, int y) 1、定义函数时,必须说{ 明形参的类型,形参必须是变 int 量或者数组; TF(x>y?x:; 2、实参可以是常量、变 return 量或者表达式; 3形参与实参的类型必 void main(O 须一致,字符型和整型可以互 相匹配; int a b.c. 4、C语言中,形参对实 scanf(%d, %d", &a, &b); 参的传递是“值传递”,即单 向传递。它仅由参数的相对位 c=max(a, b); 置决定,与名字无关 printf("Max is%dn”,c);
说明: 1、定义函数时,必须说 明形参的类型,形参必须是变 量或者数组; 2、实参可以是常量、变 量或者表达式; 3、形参与实参的类型必 须一致,字符型和整型可以互 相匹配; 4、C语言中,形参对实 参的传递是“值传递”,即单 向传递。它仅由参数的相对位 置决定,与名字无关。 形式参数和实际参数 #include int max(int x,int y) { int z; z=(x>y)?x:y; return(z); } void main() { int a,b,c; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“Max is %d\n”,c); }
看程序,写出运行结果 #include int sum(int a, int b) i a=a+b; b=a+b; return a; void maino Sum of 1. 3 is 4 int a=1.b=3.c: c=sum(a, b) printf(sum of %d, d is %d \n, a, b, c);
看程序,写出运行结果 #include int sum(int a,int b) { a=a+b; b=a+b; return a; } void main() { int a=1,b=3,c; c=sum(a,b); printf(“sum of %d,%d is %d\n”,a,b,c); } Sum of 1,3 is 4