第6章 函数与编译预处理.ppt
《第6章 函数与编译预处理.ppt》由会员分享,可在线阅读,更多相关《第6章 函数与编译预处理.ppt(94页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6章章 函数与编译预处函数与编译预处理理C语言程序设计教程2022/11/52C语言程序设计教程第6章 函数与编译预处理教学目的和基本要求:教学目的和基本要求:要求学生了解模块化程序设计的思想,掌握函数的定义及调用,理解变量的作用域与存储方式的概念,理解编译预处理的概念。教学重点:教学重点:函数的定义及调用、递归调用、变量的作用域。2 2C语言程序设计教程2022/11/53C语言程序设计教程第6章 函数与编译预处理6.1 模块化程序设计与函数模块化程序设计与函数 在在在在解解解解决决决决较较较较复复复复杂杂杂杂的的的的问问问问题题题题时时时时,我我我我们们们们一一一一般般般般采采采采用用
2、用用的的的的方方方方法法法法是是是是:把把把把问问问问题题题题分分分分成成成成几几几几个个个个部部部部分分分分,每每每每部部部部分分分分又又又又可可可可分分分分成成成成更更更更细细细细的的的的若若若若干干干干小小小小部部部部分分分分,逐逐逐逐步步步步细细细细化化化化,直直直直至至至至把把把把复复复复杂杂杂杂的的的的问问问问题题题题分分分分解解解解成成成成为为为为很很很很容容容容易易易易求求求求解解解解的的的的一一一一些些些些小小小小问问问问题题题题。这这这这样样样样,原原原原来来来来问问问问题题题题的的的的解解解解就就就就可可可可以以以以由由由由这这这这些些些些小小小小问问问问题的解来表示了。
3、题的解来表示了。题的解来表示了。题的解来表示了。求解较小问题的程序模块称为求解较小问题的程序模块称为“功能模块功能模块”。一个。一个较大的程序一般都应分为若干个功能模块,每个模块用较大的程序一般都应分为若干个功能模块,每个模块用来实现一个特定的功能,这也就是模块化程序设计的思来实现一个特定的功能,这也就是模块化程序设计的思想。想。3 3C语言程序设计教程2022/11/54C语言程序设计教程第6章 函数与编译预处理一、模块与函数 在在在在C C C C语语语语言言言言中中中中是是是是用用用用函函函函数数数数来来来来实实实实现现现现模模模模块块块块功功功功能能能能的的的的,故故故故一一一一个个个
4、个C C C C程程程程序序序序可可可可以以以以由由由由一一一一个个个个主主主主函函函函数数数数和和和和若若若若干干干干个个个个其其其其它它它它函函函函数数数数构构构构成成成成。由由由由主主主主函函函函数数数数调调调调用用用用其其其其它它它它函函函函数数数数,其其其其它它它它函函函函数数数数也也也也可可可可以以以以互互互互相相相相调调调调用用用用,同同同同一一一一个函数可以被一个或多个函数调用任意多次。个函数可以被一个或多个函数调用任意多次。个函数可以被一个或多个函数调用任意多次。个函数可以被一个或多个函数调用任意多次。C C C C语语语语言言言言就就就就是是是是通通通通过过过过函函函函数数
5、数数的的的的调调调调用用用用来来来来实实实实现现现现完完完完成成成成较较较较大大大大程程程程序序序序的全部功能。的全部功能。的全部功能。的全部功能。模模模模块块块块化化化化的的的的程程程程序序序序设设设设计计计计就就就就是是是是靠靠靠靠设设设设计计计计函函函函数数数数和和和和调调调调用用用用函函函函数数数数实实实实现的。现的。现的。现的。4 4C语言程序设计教程2022/11/55C语言程序设计教程第6章 函数与编译预处理任务模块模块模块函数函数函数函数函数函数任务、任务、模块与函数的关系模块与函数的关系:5 5C语言程序设计教程2022/11/56C语言程序设计教程第6章 函数与编译预处理例
6、例例例6_1:6_1:从键盘输入两个数,求这两个数的较大值从键盘输入两个数,求这两个数的较大值从键盘输入两个数,求这两个数的较大值从键盘输入两个数,求这两个数的较大值main()main()inta,b,maxv;inta,b,maxv;scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);maxv=maxv=max(a,b)max(a,b);star();star();printf(“themax_value=%dn,maxv);printf(“themax_value=%dn,maxv);star()star();intmax(intxintmax(intx,inty)i
7、nty)intz;intz;if(xy)z=x;if(xy)z=x;elsez=y;elsez=y;returnz;returnz;voidstar()voidstar()printf(“*n”);printf(“*n”);6 6C语言程序设计教程2022/11/57C语言程序设计教程第6章 函数与编译预处理二、模块设计的原则二、模块设计的原则1 1、模块独立:、模块独立:独立性原则表现在模块完成独立的功能独立性原则表现在模块完成独立的功能,模块间的模块间的关系尽量简单关系尽量简单,各模块可以单独调试。修改某一模块各模块可以单独调试。修改某一模块,不不会造成整个程序的混乱。会造成整个程序的混乱
8、。2 2、模块规模适当:、模块规模适当:模块不能太大模块不能太大,但也不能太小。模块太大,功能复杂但也不能太小。模块太大,功能复杂,可读性就不好。但如果模块太小,各个模块间反复调用,可读性就不好。但如果模块太小,各个模块间反复调用,也会增加程序的复杂度,可读性也会降低。这点需要在也会增加程序的复杂度,可读性也会降低。这点需要在不断的实践中慢慢积累经验。不断的实践中慢慢积累经验。7 7C语言程序设计教程2022/11/58C语言程序设计教程第6章 函数与编译预处理6.2 函数的定义与调用函数的定义与调用 在在在在C C语语语语言言言言中中中中,函函函函数数数数是是是是一一一一个个个个处处处处理理
9、理理过过过过程程程程,可可可可以以以以进进进进行行行行数数数数值值值值运运运运算算算算、信信信信息息息息处处处处理理理理、控控控控制制制制决决决决策策策策等等等等,即即即即一一一一段段段段完完完完成成成成某某某某个个个个功功功功能能能能的的的的程程程程序序序序放放放放在在在在函函函函数数数数中中中中进进进进行行行行,函函函函数数数数结结结结束束束束时时时时可可可可以以以以携携携携带带带带或或或或不不不不携携携携带带带带处理结果。处理结果。处理结果。处理结果。C C语语语语言言言言程程程程序序序序全全全全部部部部是是是是以以以以函函函函数数数数的的的的形形形形式式式式出出出出现现现现,最最最最简
10、简简简单单单单的的的的C C程序也至少要有一个程序也至少要有一个程序也至少要有一个程序也至少要有一个mainmain函数。函数。函数。函数。函数必须先定义和声明后才能调用函数必须先定义和声明后才能调用函数必须先定义和声明后才能调用函数必须先定义和声明后才能调用。从用户使用函数的角度来看,函数有两种:从用户使用函数的角度来看,函数有两种:库函数库函数(标准函数标准函数):系统提供的:系统提供的 用户自定义函数用户自定义函数:用户自己编写的:用户自己编写的8 8C语言程序设计教程2022/11/59C语言程序设计教程第6章 函数与编译预处理一、标准库函数一、标准库函数 C C C C语言有丰富的库
11、函数,这些函数的说明在不语言有丰富的库函数,这些函数的说明在不语言有丰富的库函数,这些函数的说明在不语言有丰富的库函数,这些函数的说明在不同的头文件同的头文件同的头文件同的头文件(*.(*.(*.(*.h)h)h)h)中。中。中。中。想要调用标准的库函数,就必须用编译预处理想要调用标准的库函数,就必须用编译预处理想要调用标准的库函数,就必须用编译预处理想要调用标准的库函数,就必须用编译预处理命令命令命令命令includeincludeincludeinclude把程序中所用到的头文件包含进来。把程序中所用到的头文件包含进来。把程序中所用到的头文件包含进来。把程序中所用到的头文件包含进来。例如:
12、例如:例如:例如:include“stdio.h”#includemain()printf(“%f”,sqrt(2*3);调用调用sqrt函数函数(求根号求根号)时,时,必须有必须有include9 9C语言程序设计教程2022/11/510C语言程序设计教程第6章 函数与编译预处理函数定义的一般形式:函数定义的一般形式:函数定义的一般形式:函数定义的一般形式:函数类型名函数类型名函数类型名函数类型名 函数名函数名函数名函数名(形式参数类型说明列表形式参数类型说明列表形式参数类型说明列表形式参数类型说明列表)局部变量说明部分局部变量说明部分局部变量说明部分局部变量说明部分 可执行语句序列可执行
13、语句序列可执行语句序列可执行语句序列 二、函数的定义二、函数的定义例如:求两个数中的较大者的函数例如:求两个数中的较大者的函数例如:求两个数中的较大者的函数例如:求两个数中的较大者的函数intmax(intxintmax(intx,inty)/*inty)/*有两个整型的形式参数有两个整型的形式参数有两个整型的形式参数有两个整型的形式参数*/intz;/*intz;/*局部变量局部变量局部变量局部变量 z z定义定义定义定义*/if(xy)z=x;if(xy)z=x;elsez=y;elsez=y;returnz;/*returnz;/*返回语句,函数携带整型返回值返回语句,函数携带整型返回值
14、返回语句,函数携带整型返回值返回语句,函数携带整型返回值*/1010C语言程序设计教程2022/11/511C语言程序设计教程第6章 函数与编译预处理函数定义分为两大部分:函数定义分为两大部分:函数定义分为两大部分:函数定义分为两大部分:函数的说明函数的说明函数的说明函数的说明部分和部分和部分和部分和函数体函数体函数体函数体部分。部分。部分。部分。1.1.1.1.函数说明部分(函数首部)函数说明部分(函数首部)函数说明部分(函数首部)函数说明部分(函数首部)(1 1 1 1)函数类型)函数类型)函数类型)函数类型:即函数返回值的类型。:即函数返回值的类型。:即函数返回值的类型。:即函数返回值的
15、类型。如如如如上上上上例例例例中中中中函函函函数数数数的的的的类类类类型型型型是是是是intintintint,即即即即函函函函数数数数的的的的返返返返回回回回值值值值z z z z是是是是intintintint类类类类型型型型。如如如如果果果果函函函函数数数数有有有有返返返返回回回回值值值值,要要要要用用用用返返返返回回回回语语语语句句句句returnreturnreturnreturn。returnreturnreturnreturn语句的一般形式是:语句的一般形式是:语句的一般形式是:语句的一般形式是:returnreturnreturnreturn(表达式);(表达式);(表达式);
16、(表达式);或或或或 return return return return 表达式;表达式;表达式;表达式;(2 2)函数名)函数名 函数名是用户定义函数时自己命名的,其命名遵循函数名是用户定义函数时自己命名的,其命名遵循函数名是用户定义函数时自己命名的,其命名遵循函数名是用户定义函数时自己命名的,其命名遵循C C C C 语言标识符命名规则。语言标识符命名规则。语言标识符命名规则。语言标识符命名规则。如果函数不需要提供返回值,可定义函数类型为空如果函数不需要提供返回值,可定义函数类型为空如果函数不需要提供返回值,可定义函数类型为空如果函数不需要提供返回值,可定义函数类型为空类型。类型。类型
17、。类型。空类型空类型的标识符为的标识符为的标识符为的标识符为voidvoidvoidvoid,例如:,例如:,例如:,例如:void starvoid starvoid starvoid star()()()()printf(“*n”);printf(“*n”);printf(“*n”);printf(“*n”);1111C语言程序设计教程2022/11/512C语言程序设计教程第6章 函数与编译预处理(3 3 3 3)参数列表)参数列表)参数列表)参数列表 函数名后的()内是参数列表,由一个或多个函数名后的()内是参数列表,由一个或多个函数名后的()内是参数列表,由一个或多个函数名后的()内
18、是参数列表,由一个或多个类型标识类型标识类型标识类型标识符符符符 变量名变量名变量名变量名组成。参数列表中的变量称为组成。参数列表中的变量称为组成。参数列表中的变量称为组成。参数列表中的变量称为形式参数形式参数形式参数形式参数,简称形,简称形,简称形,简称形参。如参。如参。如参。如int max(int xint max(int xint max(int xint max(int x,int yint yint yint y)根据函数是否需要参数,可将函数分为根据函数是否需要参数,可将函数分为根据函数是否需要参数,可将函数分为根据函数是否需要参数,可将函数分为无参函数无参函数无参函数无参函数和
19、和和和有参有参有参有参函数函数函数函数两种。(注意:无参函数的函数名后的两种。(注意:无参函数的函数名后的两种。(注意:无参函数的函数名后的两种。(注意:无参函数的函数名后的()()()()也不能省也不能省也不能省也不能省!)!)!)!)例如:打印一排例如:打印一排例如:打印一排例如:打印一排*的函数的函数的函数的函数 void star()void star()/*/*函数无形式参数,无返回值函数无形式参数,无返回值函数无形式参数,无返回值函数无形式参数,无返回值*/printf(“n*n”);printf(“n*n”);2.2.2.2.函数体函数体函数体函数体 内内内内的的的的部部部部分分
20、分分是是是是函函函函数数数数体体体体,包包包包含含含含局局局局部部部部变变变变量量量量定定定定义义义义部部部部分分分分和和和和执执执执行语句序列。行语句序列。行语句序列。行语句序列。1212C语言程序设计教程2022/11/513C语言程序设计教程第6章 函数与编译预处理 说明:说明:函数定义不允许嵌套函数定义不允许嵌套。在语言中,所有函数(包括主函数在语言中,所有函数(包括主函数main()main())都是平级的。一个函数的定义,可以放)都是平级的。一个函数的定义,可以放在程序中的任意位置,主函数在程序中的任意位置,主函数main()main()之前或之之前或之后。后。但在任意一个函数(包
21、括主函数)的函数体内但在任意一个函数(包括主函数)的函数体内(即即 内),不能再定义另一个函数,即函数不内),不能再定义另一个函数,即函数不能嵌套定义。能嵌套定义。1313C语言程序设计教程2022/11/514C语言程序设计教程第6章 函数与编译预处理函数定义举例函数定义举例1.编写求编写求x的的n次方的函数,要求返回计算结果。次方的函数,要求返回计算结果。intpower(intx,intn)intj;inty=1;for(j=1;j=n;j+)y=y*x;returny;main()intm,n;m=power(2,3);n=power(3,2);1414C语言程序设计教程2022/11
22、/515C语言程序设计教程第6章 函数与编译预处理2.2.求求求求200,1000200,1000的双胞胎数的对数。双胞胎数:两素数差为的双胞胎数的对数。双胞胎数:两素数差为的双胞胎数的对数。双胞胎数:两素数差为的双胞胎数的对数。双胞胎数:两素数差为2 2称称称称为双胞胎数。下面是我们用现在所学的知识编的程序。为双胞胎数。下面是我们用现在所学的知识编的程序。为双胞胎数。下面是我们用现在所学的知识编的程序。为双胞胎数。下面是我们用现在所学的知识编的程序。main()inta,b,n=0,I;for(a=200;a=998;a+)for(I=2;Ia;I+)if(a%I=0)break;if(a=
23、i)b=a+2;for(I=2;Ib;I+)if(b%I=0)break;if(b=i)n+;printf(“n%d”,n);我们注意到,程序中我们注意到,程序中用用筐住的部分是筐住的部分是完成了相同的功能,完成了相同的功能,即判断一个数即判断一个数(a或或b)是否是素数。是否是素数。我们可以考虑用一个我们可以考虑用一个独立的函数来完成判独立的函数来完成判断素数的功能,在主断素数的功能,在主函数中调用此函数即函数中调用此函数即可。如下:可。如下:1515C语言程序设计教程2022/11/516C语言程序设计教程第6章 函数与编译预处理main()inta,b,n=0;intf(intx);fo
24、r(a=200;a=998;a+)if(f(a)=1)b=a+2;if(f(b)=1)n+;printf(“n%d”,n);intf(intx)intI;for(I=2;Ix;I+)if(x%I=0)break;if(x=I)return1;elsereturn0;下面我们详细介绍函数调用的格式和语法规定。下面我们详细介绍函数调用的格式和语法规定。1616C语言程序设计教程2022/11/517C语言程序设计教程第6章 函数与编译预处理1 1、函数调用的一般形式:函数调用的一般形式:调用有参函数调用有参函数:函数名(实参列表);:函数名(实参列表);调用无参函数调用无参函数:函数名(:函数名(
25、););如如果果实实参参表表列列包包括括多多个个实实参参,则则实实参参间间用用逗逗号号隔隔开开(注注意意:实实参参与与形形参参的的个个数数必必须须相相等等,类类型型应应一一致致或或赋赋值值兼兼容容),实参与形参是按照对应位置一一传递数据的。如:实参与形参是按照对应位置一一传递数据的。如:三、函数的调用三、函数的调用intpower(intx,intn)intj;inty=1;for(j=1;jb)?a:b;y=(ab)?a:b;returny;returny;调用时调用时:m=max(3,6);m=max(a,b);括号里是形式参数括号里是形式参数括号里是形式参数括号里是形式参数返回值返回值返
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6章 函数与编译预处理 函数 编译 预处理
限制150内