函数和编译预处理.ppt
《函数和编译预处理.ppt》由会员分享,可在线阅读,更多相关《函数和编译预处理.ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、关于函数与编译预处理关于函数与编译预处理第一张,PPT共六十七页,创作于2022年6月第第7章章 函数与函数与预处理命令理命令7.1 概述概述7.2 函数的定义与调用函数的定义与调用7.3 变量作用域与存储方式变量作用域与存储方式7.4 编译预处理编译预处理2第二张,PPT共六十七页,创作于2022年6月7.1 概述概述 程序结构清晰,可读性好。程序结构清晰,可读性好。程序结构清晰,可读性好。程序结构清晰,可读性好。减少重复编码的工作量。减少重复编码的工作量。减少重复编码的工作量。减少重复编码的工作量。可多人共同编制一个大程序,缩短程序设可多人共同编制一个大程序,缩短程序设可多人共同编制一个大
2、程序,缩短程序设可多人共同编制一个大程序,缩短程序设计周期,提高程序设计和调试的效率。计周期,提高程序设计和调试的效率。计周期,提高程序设计和调试的效率。计周期,提高程序设计和调试的效率。使用使用使用使用函数函数函数函数的的的的好处好处好处好处C程序程序源程序文件源程序文件n函数函数1函数函数m 源程序文件源程序文件1函数函数1函数函数n3第三张,PPT共六十七页,创作于2022年6月【例例7.1】求一个整数的立方。求一个整数的立方。int cube(int x)/*函数定义函数定义*/return(x*x*x);main()int f,a;printf(nEnter an integer n
3、umber:);scanf(%d,&a);f=cube(a);printf(%d*%d*%d=%dn,a,a,a,f);程序运行情况如下:程序运行情况如下:Enter an integer number:2 2*2*2=8函数调用函数调用函数调用函数调用程序的执行总是程序的执行总是从从main函数开始函数开始4第四张,PPT共六十七页,创作于2022年6月 一个一个C C源程序源程序源程序源程序可以由可以由一个或多个源程序文件一个或多个源程序文件一个或多个源程序文件一个或多个源程序文件组成。组成。C编译系统在对编译系统在对C源程序进行编译时是以文件为单位进行源程序进行编译时是以文件为单位进行的
4、。的。一个一个C C源程序文件源程序文件源程序文件源程序文件可以由可以由一个或多个函数一个或多个函数一个或多个函数一个或多个函数组成。所组成。所有函数都是独立的。主函数可以调用其它函数,其它函有函数都是独立的。主函数可以调用其它函数,其它函数可以相互调用。数可以相互调用。在一个在一个C程序中,有且仅有一个主函数程序中,有且仅有一个主函数mainmain。C程序程序的执行总是从的执行总是从mainmain函数开始,调用其它函数后最终回函数开始,调用其它函数后最终回到到mainmain函数,在函数,在mainmain函数中结束整个程序的运行。函数中结束整个程序的运行。说明说明5第五张,PPT共六十
5、七页,创作于2022年6月 函数的种函数的种类从函数定从函数定义形式分:形式分:有参函数有参函数有参函数有参函数在主调(用)函数和被调在主调(用)函数和被调在主调(用)函数和被调在主调(用)函数和被调(用)函数之间通过参数(用)函数之间通过参数(用)函数之间通过参数(用)函数之间通过参数进行数据传递,进行数据传递,进行数据传递,进行数据传递,如:如:如:如:int cube(int x)int cube(int x)无参函数无参函数无参函数无参函数如:如:如:如:getchar()getchar()在调用无参函数时,主调函数在调用无参函数时,主调函数在调用无参函数时,主调函数在调用无参函数时,
6、主调函数不需要将数据传递给无参函数。不需要将数据传递给无参函数。不需要将数据传递给无参函数。不需要将数据传递给无参函数。从使用的角度看:从使用的角度看:从使用的角度看:从使用的角度看:标准函数(库函数)标准函数(库函数)标准函数(库函数)标准函数(库函数)库函数是由系统提供的。库函数是由系统提供的。库函数是由系统提供的。库函数是由系统提供的。如:如:如:如:getchar()getchar()、sin(x)sin(x)等。等。等。等。在程序中可以直接调用它在程序中可以直接调用它在程序中可以直接调用它在程序中可以直接调用它们。附录们。附录们。附录们。附录A A列出了列出了列出了列出了C C的部分
7、的部分的部分的部分库函数。库函数。库函数。库函数。用户自定义函数用户自定义函数用户自定义函数用户自定义函数如如如如:例例例例7.17.1中的中的中的中的cubecube函数。函数。函数。函数。6第六张,PPT共六十七页,创作于2022年6月【例例7.2】无参函数的定无参函数的定义与与调用。用。void welcome()void welcome()printf(*n);printf(*n);printf(Welcome to China n);printf(Welcome to China n);printf(*n);printf(*n);main()main()welcome();welco
8、me();程序的输出结果如下:程序的输出结果如下:*Welcome to China*7第七张,PPT共六十七页,创作于2022年6月7.2.1 函数的定函数的定义函数定义的一般形式函数定义的一般形式函数定义的一般形式函数定义的一般形式函数类型函数类型 函数名函数名(类型名类型名 形式参数形式参数1,)说明语句说明语句 执行语句执行语句 例如:求两个数的最大值。例如:求两个数的最大值。int max(int x,int y)int z;z=x y?x:y;return(z);类型省略时类型省略时类型省略时类型省略时默认为默认为默认为默认为intint类类类类型型型型有形式参数,有形式参数,有形
9、式参数,有形式参数,maxmax为为为为有参函数有参函数有参函数有参函数 8第八张,PPT共六十七页,创作于2022年6月int max(x,y)int max(x,y)int x,y;int x,y;int z;int z;z=x y?x:y;z=x y?x:y;return(z);return(z);int max(x,y)int x,y;或或或或int max(int x,y)int max(int x,y)或或int max(x,y)int x,y,z;z=x y?x:y;return(z);花括号中也可以为空,这种函数叫花括号中也可以为空,这种函数叫花括号中也可以为空,这种函数叫花括
10、号中也可以为空,这种函数叫空函数空函数空函数空函数 。例如:例如:例如:例如:null()null()null()null()不能在函数体内定义其他函数,即函数不能在函数体内定义其他函数,即函数不能在函数体内定义其他函数,即函数不能在函数体内定义其他函数,即函数不能嵌套定义不能嵌套定义不能嵌套定义不能嵌套定义。形参也可以这样定义形参也可以这样定义如下定义都是错误的如下定义都是错误的如下定义都是错误的如下定义都是错误的 9第九张,PPT共六十七页,创作于2022年6月函数名(实参表列)函数名(实参表列)在在C语言中,把函数调用也作为一个表达式。因此凡语言中,把函数调用也作为一个表达式。因此凡是表
11、达式可以出现的地方都可以出现函数调用。例如:是表达式可以出现的地方都可以出现函数调用。例如:welcome();if(iabs(a)max)max=iabs(a);m=max(c,max(a,b);7.2.2 函数的调用函数的调用函数调用的一般形式:函数调用的一般形式:10第十张,PPT共六十七页,创作于2022年6月int sum()int sum()int i,t=0;int i,t=0;for(i=1;i=100;i+)for(i=1;i=100;i+)t+=i;t+=i;return(t);return(t);main()main()int s;int s;s=sum();s=sum(
12、);printf(%dn,s);printf(%dn,s);程序输出结果:程序输出结果:5050int sum(int x)int sum(int x)int i,t=0;int i,t=0;for(i=1;i=x;i+)for(i=1;iy?x:y;z=xy?x:y;return(z);return(z);/*/*返回返回返回返回z z的的的的值值*/main()main()int a,b,c;int a,b,c;scanf(%d,%d,&a,&b);scanf(%d,%d,&a,&b);c=c=maxmax(a,b);(a,b);printf(max is%dn,c);printf(max
13、 is%dn,c);15第十五张,PPT共六十七页,创作于2022年6月函数的返回函数的返回函数的返回函数的返回值值是通是通是通是通过过returnreturn语语句句句句带带回到主回到主回到主回到主调调函数的。函数的。函数的。函数的。功能:功能:功能:功能:终终止函数的运行,返回主止函数的运行,返回主止函数的运行,返回主止函数的运行,返回主调调函数,若有返回函数,若有返回函数,若有返回函数,若有返回值值,将返回,将返回,将返回,将返回值带值带回主回主回主回主调调函数。函数。函数。函数。说明:说明:说明:说明:若函数没有返回值,若函数没有返回值,若函数没有返回值,若函数没有返回值,return
14、return语句可以省略。语句可以省略。语句可以省略。语句可以省略。returnreturn语句中的表达式类型一般应和函数的类型一语句中的表达式类型一般应和函数的类型一语句中的表达式类型一般应和函数的类型一语句中的表达式类型一般应和函数的类型一致,致,致,致,如果不一致,如果不一致,如果不一致,如果不一致,VCVC系统警告的同时自动将表达式类型系统警告的同时自动将表达式类型系统警告的同时自动将表达式类型系统警告的同时自动将表达式类型转换为函数类型转换为函数类型转换为函数类型转换为函数类型。函数的返回值函数的返回值return return 语句格式:语句格式:语句格式:语句格式:return
15、return (表达式表达式表达式表达式);return return 表达式表达式表达式表达式;return;return;16第十六张,PPT共六十七页,创作于2022年6月【例例7.6】计算并输出圆的面积。计算并输出圆的面积。s(int r)return 3.14*r*r;main()int r,area;scanf(%d,&r);printf(%dn,s(r);自动转换自动转换自动转换自动转换为为为为intintintint型型型型 思考:思考:若要得到双精度实型的圆面积,程序应如何修改若要得到双精度实型的圆面积,程序应如何修改程序运行情况如下:程序运行情况如下:2 1217第十七张,
16、PPT共六十七页,创作于2022年6月 7.2.4 对被调函数的声明和函数原型对被调函数的声明和函数原型变量要变量要变量要变量要先定义后使用先定义后使用先定义后使用先定义后使用,函函函函数也如此数也如此数也如此数也如此。即。即。即。即被调函数的定义要被调函数的定义要被调函数的定义要被调函数的定义要出现在主调函数的定义之前出现在主调函数的定义之前出现在主调函数的定义之前出现在主调函数的定义之前。如。如。如。如swapswapswapswap函数函数函数函数:允许整型函数(且参数也允许整型函数(且参数也允许整型函数(且参数也允许整型函数(且参数也是整型)的定义出现在主调函数是整型)的定义出现在主调
17、函数是整型)的定义出现在主调函数是整型)的定义出现在主调函数之后。如之后。如之后。如之后。如maxmaxmaxmax函数函数函数函数:如果非整型函数在主调函如果非整型函数在主调函如果非整型函数在主调函如果非整型函数在主调函数之后定义,则应在主调函数中数之后定义,则应在主调函数中数之后定义,则应在主调函数中数之后定义,则应在主调函数中或主调函数之前对或主调函数之前对或主调函数之前对或主调函数之前对被调函数进被调函数进被调函数进被调函数进行声明。行声明。行声明。行声明。void swap(int x,int y)main()swap(a,b);main()main()c=max(a,b);c=ma
18、x(a,b);max(int x,int y)max(int x,int y)18第十八张,PPT共六十七页,创作于2022年6月对被被调函数函数进行声明的一般形式行声明的一般形式 函数函数函数函数类类型型型型 函数名(函数名(函数名(函数名(参数参数参数参数类类型型型型1 1 1 1 参数名参数名参数名参数名1 1 1 1,);或或或或 函数函数函数函数类类型型型型 函数名(函数名(函数名(函数名(参数参数参数参数类类型型型型1 1 1 1,参数参数参数参数类类型型型型2 2 2 2,);思考思考思考思考:以下哪种情况需要以下哪种情况需要以下哪种情况需要以下哪种情况需要在主调函数中在主调函数
19、中在主调函数中在主调函数中对被调函数对被调函数对被调函数对被调函数声明声明声明声明被调函数定义在前被调函数定义在前被调函数定义在前被调函数定义在前,主调函数定义在后主调函数定义在后主调函数定义在后主调函数定义在后。主调函数定义在前主调函数定义在前主调函数定义在前主调函数定义在前,被调函数定义在后被调函数定义在后被调函数定义在后被调函数定义在后,且被调函数,且被调函数,且被调函数,且被调函数的类型不是整型的。的类型不是整型的。的类型不是整型的。的类型不是整型的。被调函数定义在后被调函数定义在后被调函数定义在后被调函数定义在后,但被调函数的类型是,但被调函数的类型是,但被调函数的类型是,但被调函数
20、的类型是整型整型整型整型。第二种形式省略了参数名,此种形式也称为第二种形式省略了参数名,此种形式也称为函数的原型函数的原型。19第十九张,PPT共六十七页,创作于2022年6月main()void calc(float x,float y,char opr);float a,b;char opr;printf(nInput expression:);scanf(%f%c%f,&a,&opr,&b);calc(a,b,opr);void calc(float x,float y,char opr)switch(opr)case +:printf(%5.2f%c%5.2f=%6.2fn,x,opr
21、,y,x+y);return;case -:printf(%5.2f%c%5.2f=%6.2fn,x,opr,y,x-y);return;case *:printf(%5.2f%c%5.2f=%6.2fn,x,opr,y,x*y);return;case /:printf(%5.2f%c%5.2f=%6.2fn,x,opr,y,x/y);return;default:printf(Operator err!n);对被调函对被调函数的声明数的声明【例例7.7】计算并算并输出两个数的和、差、出两个数的和、差、积、商。、商。第二十张,PPT共六十七页,创作于2022年6月7.2.5 数数组作函数参数
22、作函数参数1.一一维数数组元素元素作函数参数作函数参数main()int a5,i,m;for(i=0;i5;i+)scanf(%d,&ai);m=a0;for(i=1;i5;i+)m=min(m,ai);printf(%dn,m);【例例7.8】求求5个数中的最小值。个数中的最小值。int min(int x,int y)return(xy?x:y);用打擂台方法求最用打擂台方法求最用打擂台方法求最用打擂台方法求最小小小小值值。mm相当于擂相当于擂相当于擂相当于擂主主主主单向值传递单向值传递21第二十一张,PPT共六十七页,创作于2022年6月2.一一维数数组名名作函数参数作函数参数数组名数
23、组名作为函数参数,在调用函数时,传递的是数作为函数参数,在调用函数时,传递的是数组的组的地址,地址,因为因为数组名数组名表示数组在内存中的表示数组在内存中的起始地起始地址,址,这种传递称为这种传递称为地址传递地址传递。例如例如:数组数组a在内存中从在内存中从20002000地址开始存放地址开始存放,则则a的值为的值为2000。2000是地址值,是指针类型的数据(第是地址值,是指针类型的数据(第8中将中将介绍指针类型),不能把它看成是整型或其他类型介绍指针类型),不能把它看成是整型或其他类型数据。数据。实参是数组名实参是数组名,形参也应定义为,形参也应定义为数组形式数组形式,形参数,形参数组的长
24、度可以省略,但组的长度可以省略,但 不能省,否则就不是数组不能省,否则就不是数组形式了。形式了。【例例7.9】用冒泡法将用冒泡法将10个整数排序。个整数排序。22第二十二张,PPT共六十七页,创作于2022年6月void sort(void sort(int int bb ,int n);,int n);void printarr(void printarr(intint bb ););main()main()int a10=int a10=11,22,63,97,58,80,45,11,22,63,97,58,80,45,32,73,36;32,73,36;printf(Before sor
25、t:n);printf(Before sort:n);printarr(a);printarr(a);sort(a,10);sort(a,10);printf(After sort:n);printf(After sort:n);printarr(a);printarr(a);void printarr(int void printarr(int b10 b10)int i;int i;for(i=0;i10;i+)for(i=0;i10;i+)printf(%5d,bi);printf(%5d,bi);printf(n);printf(n);void sort(void sort(int i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 编译 预处理
限制150内