函数是C程序的基本模块可将一些功能相对独立的或经常.ppt
《函数是C程序的基本模块可将一些功能相对独立的或经常.ppt》由会员分享,可在线阅读,更多相关《函数是C程序的基本模块可将一些功能相对独立的或经常.ppt(92页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 函数是函数是C+C+程序的基本模块。可将一些功能相对独立的或程序的基本模块。可将一些功能相对独立的或经常使用的操作或运算抽象出来,定义为函数。使用时只要经常使用的操作或运算抽象出来,定义为函数。使用时只要考虑其功能和使用接口即可。考虑其功能和使用接口即可。在结构化程序设计中,函数是将任务进行模块划分的基在结构化程序设计中,函数是将任务进行模块划分的基本单位。本单位。在面向对象的程序设计中,类中所封装的操作是用函数在面向对象的程序设计中,类中所封装的操作是用函数进行描述的,因此函数在进行描述的,因此函数在C+C+程序中具有非常重要的意义。程序中具有非常重要的意义。要掌握函数的使用,必须理解函数
2、调用时的内部实现机要掌握函数的使用,必须理解函数调用时的内部实现机制,以及与此相关的内存分配机制、变量生命期和作用域。制,以及与此相关的内存分配机制、变量生命期和作用域。本章还将介绍关于函数重载的概念,介绍递归算法、内本章还将介绍关于函数重载的概念,介绍递归算法、内联函数、默认参数函数以及多文件组织、编译预处理、工程联函数、默认参数函数以及多文件组织、编译预处理、工程文件的概念和运行库函数。文件的概念和运行库函数。第四章第四章 函数函数 第四章第四章 函数函数 41函数的定义与调用函数的定义与调用45作用域与存储类型作用域与存储类型 44函数调用机制函数调用机制 43全局变量和局部变量全局变量
3、和局部变量 42函数的参数传递函数的参数传递,返回值及函数原型说明返回值及函数原型说明 410编译预处理编译预处理49头文件头文件与多文件结构与多文件结构48C+的系统库函数的系统库函数47函数的一些高级议题函数的一些高级议题 46函数的递归调用函数的递归调用 4.1 函数的定义与调用函数的定义与调用4.1.1 函数概述函数概述4.1.2 函数的定义函数的定义4.1.3 函数的调用函数的调用 4.1.1 函数概述函数概述函数是函数是C+C+程序的基本组成模块。程序的基本组成模块。通通过过函函数数,可可以以把把一一个个复复杂杂任任务务分分解解成成为为若若干干个个易易于于解解决决的的小小任任务务。
4、充充分分体体现现结结构构化化程程序序设设计计由由粗粗到精,逐步细化的设计思想。到精,逐步细化的设计思想。组组 成成 C+C+程程 序序 的的 若若 干干 函函 数数 中中,有有 一一 个个 称称 为为main()main()(WinmainWinmain()())函函数数,是是程程序序执执行行的的入入口口,它它可可以以调调用用其其他他函函数数。而而其其他他一一般般函函数数既既可可以以调调用用也也可可以被调用。函数之间的调用关系见下图:以被调用。函数之间的调用关系见下图:4.1.1 函数概述函数概述main()fun2()fun1()fun3()fun1_1()fun2_1()fun2_2()图
5、图4.1 4.1 函数调用层次关系函数调用层次关系4.1.1 函数概述函数概述函数函数按是否带有参数,分为按是否带有参数,分为:无参函数无参函数和和有参函数有参函数4.1.1结束结束 函数按其是否系统预定义分为两类,一类是编译函数按其是否系统预定义分为两类,一类是编译系统预定义的,称为系统预定义的,称为库函数库函数或或标准函数标准函数,如一些常,如一些常用的数学计算函数、字符串处理函数、图形处理函用的数学计算函数、字符串处理函数、图形处理函数、标准输入输出函数等。这些数、标准输入输出函数等。这些库函数都按功能分库函数都按功能分类,集中说明在不同的头文件中类,集中说明在不同的头文件中。用户只需在
6、自己。用户只需在自己的程序中包含某个头文件,就可直接使用该文件中的程序中包含某个头文件,就可直接使用该文件中定义的函数。另一类是用户定义的函数。另一类是用户自定义函数自定义函数,用户可以,用户可以根据需要将某个具有相对独立功能的程序定义为函根据需要将某个具有相对独立功能的程序定义为函数。数。4.1.2 函数的定义函数的定义1.无参函数无参函数2.有参函数有参函数1 无参函数无参函数 定义格式为:定义格式为:数据类型数据类型函数名函数名(voidvoid)函数体函数体 例例:下面函数的功能是打印一个表头下面函数的功能是打印一个表头voidTableHead()cout*endl;cout*exa
7、mple*endl;cout*=b?a:b);定义函数时可能会涉及若干个变量,究竟哪些变量应当作定义函数时可能会涉及若干个变量,究竟哪些变量应当作为函数的参数?哪些应当定义在函数体内?这有一个原则:作为函数的参数?哪些应当定义在函数体内?这有一个原则:作为一个相对独立的模块,为一个相对独立的模块,函数在使用时完全可以被看成函数在使用时完全可以被看成 “黑黑匣子匣子”,除了输入输出外,其他部分可不必关心,除了输入输出外,其他部分可不必关心。从函数的定。从函数的定义看出,函数头正是用来反映函数的功能和使用接口,它所定义看出,函数头正是用来反映函数的功能和使用接口,它所定义的是义的是“做什么做什么”
8、,在这部分必须明确,在这部分必须明确“黑匣子黑匣子”的输入输出的输入输出部分,部分,输出就是函数的返回值,输入就是参数输出就是函数的返回值,输入就是参数。因此,只有那。因此,只有那些功能上起自变量作用的变量才必须作为参数定义在参数表中;些功能上起自变量作用的变量才必须作为参数定义在参数表中;函数体中具体描述函数体中具体描述“如何做如何做”,因此除参数之外的为实现算法,因此除参数之外的为实现算法所需用的变量应当定义在函数体内。所需用的变量应当定义在函数体内。C+C+中不允许函数的嵌套定义,即在一个函数中定义另一中不允许函数的嵌套定义,即在一个函数中定义另一个函数。个函数。提示提示4.1.3 函数
9、的调用函数的调用在在C+C+中中,除除了了主主函函数数外外,其其他他任任何何函函数数都都不不能能单单独独作作为为程程序序运运行行。任任何何函函数数功功能能的的实实现现都都是是通通过过被被主主函函数数直直接接或或间间接接调调用进行的。所谓函数调用,就是使程序转去执行函数体。用进行的。所谓函数调用,就是使程序转去执行函数体。无参函数的调用格式为:无参函数的调用格式为:函数名函数名()()有参函数的调用格式为:有参函数的调用格式为:函数名函数名(实际参数表实际参数表)其其中中实实际际参参数数简简称称实实参参,用用来来将将实实际际参参数数的的值值传传递递给给形形参参,因此可以是常量、具有值的变量或表达
10、式。因此可以是常量、具有值的变量或表达式。4.1.3 函数的调用函数的调用main()函数函数调用调用max(2.5,4.7)函数函数max(2.5,4.7)return4.7 主程序后主程序后续语句续语句【例例41】输输入入两两个个实实数数,输输出出其其中中较较大大的的数数。其其中中求求两两个个实实数中的较大数用函数完成。数中的较大数用函数完成。程序如下程序如下:#includefloat max(float x,float y)return(x=y?x:y);void main()float x,y;cout输入两个实数:输入两个实数:xy;coutx和和y中较大数为中较大数为max(x,
11、y)endl;4.2 函数的参数传递、返回值及函数的参数传递、返回值及函数原型说明函数原型说明 421 函数的参数传递及传值调用函数的参数传递及传值调用 423 函数原型说明函数原型说明422 函数返回值函数返回值 函数调用首先要进行参数传递,参数传递的方向是由实参函数调用首先要进行参数传递,参数传递的方向是由实参传递给形参。传递过程是,传递给形参。传递过程是,先计算实参表达式的值,再将先计算实参表达式的值,再将该值传递给对应的形参变量该值传递给对应的形参变量。一般情况下,。一般情况下,实参和形参的实参和形参的个数和排列顺序应一一对应,并且对应参数应类型匹配个数和排列顺序应一一对应,并且对应参
12、数应类型匹配(赋值兼容)(赋值兼容),即实参的类型可以转化为形参类型。而对即实参的类型可以转化为形参类型。而对应参数的参数名则不要求相同。某些特殊情况下也允许参应参数的参数名则不要求相同。某些特殊情况下也允许参数不对应,这将在函数高级议题中讨论。数不对应,这将在函数高级议题中讨论。按照参数形式的不同,按照参数形式的不同,C+C+有两种调用方式:有两种调用方式:传值调用传值调用和和引用调用引用调用。顾名思义,传值调用传递的是实参的值,本章。顾名思义,传值调用传递的是实参的值,本章主要介绍传值调用。关于引用调用,将在第五章类与对象主要介绍传值调用。关于引用调用,将在第五章类与对象中介绍。中介绍。4
13、.2.1 函数的参数传递及传值调用函数的参数传递及传值调用 4.2.1 函数的参数传递及传值调用函数的参数传递及传值调用 调用调用power(4.6,3)函数函数power(4.6,3)return97.336 主程序后续语主程序后续语句句n=3x=4.6c=a【例例42】说明实参和形参对应关系的示例。说明实参和形参对应关系的示例。#include#includefloat power(float x,int n)/求求x x的的n n次幂次幂float pow=1;while(n-)pow*=x;return pow;void main()int n=3;float x=4.6;char c
14、=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;4.2.1 函数的参数传递及传值调用函数的参数传递及传值调用 调用调用power(a,3)函数函数power(a,3)return912673 主程序后续语主程序后续语句句n=3x=4.6c=a【例例42】说明实参和形参对应关系的示例。说明实参和形参对应关系的示例。#include#includefloat power(float x,int n)/求求x x的的n n次幂次幂float pow=1;while
15、(n-)pow*=x;return pow;void main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;4.2.1 函数的参数传递及传值调用函数的参数传递及传值调用 调用调用power(3,4.6)函数函数power(3,4.6)return81主程序后续语主程序后续语句句n=3x=4.6c=a【例例42】说明实参和形参对应关系的示例。说明实参和形参对应关系的示例。#include#include
16、float power(float x,int n)/求求x x的的n n次幂次幂float pow=1;while(n-)pow*=x;return pow;void main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;4.2.2 函数返回值函数返回值return语句的一般格式为:语句的一般格式为:return表达式;表达式;函数的计算结果通过该语句传递回主调函数。函数的计算结果通过该语句传递回主
17、调函数。【例例43】设计函数,根据三角形的三边长求面积。如设计函数,根据三角形的三边长求面积。如果不能构成三角形,给出提示信息。果不能构成三角形,给出提示信息。分析:函数为计算三角形面积,一般三角形返回面积值,分析:函数为计算三角形面积,一般三角形返回面积值,若不能构成三角形则返回若不能构成三角形则返回-1。设计一个主函数完成函数测。设计一个主函数完成函数测试。根据返回值情况输出相应结果。试。根据返回值情况输出相应结果。程序见下页:程序见下页:4.2.2 函数返回值函数返回值#include#includefloatTriangleArea(floata,floatb,floatc)if(a+
18、b=c)|(a+c=b)|(b+c=a)return-1;floats;s=(a+b+c)/2;returnsqrt(s*(s-a)*(s-b)*(s-c);voidmain()floata,b,c,area;cout输入三角形三边输入三角形三边a,b,c:abc;area=TriangleArea(a,b,c);if(area=-1)cout(a,b,c)不能构成三角形!不能构成三角形!endl;elsecout三角形三角形(a,b,c)面积为:面积为:areaendl;4.2.2 函数返回值函数返回值函函数数可可以以有有返返回回值值,也也可可以以没没有有返返回回值值。对对于于没没有有返返回
19、回值值的的函函数数,功功能能只只是是完完成成一一定定操操作作,应应将将返返回回值值类类型型定定义义为为void,函函数数体体内内可可以以没没有有return语语句句,当当需需要要在在程程序序指指定定位位置置退退出出时时,可可以以在该处放置一个:在该处放置一个:return;4.2.2结束结束4.2.3 函数原型说明函数原型说明 函函数数原原型型是是一一条条以以分分号号结结束束的的语语句句,实实际际上上就是所定义函数的函数头,形如:就是所定义函数的函数头,形如:函数返回值类型函数返回值类型函数名函数名 (形参表形参表)语语法法上上对对程程序序文文件件中中函函数数的的排排列列次次序序是是没没有有固
20、固定定要要求求的的,只只要要满满足足先先定定义义后后使使用用即即可可。但但从从结结构构化化程程序序设设计计的的角角度度,通通常常是是先先调调用用后后定定义义。使使用用函函数数原原型型,则则既既符符合合由由粗粗到到精精的的思维方式,又满足了语法要求。思维方式,又满足了语法要求。其中形参表可以逐个列出每个参数的类型和参数名,其中形参表可以逐个列出每个参数的类型和参数名,也可以列出每个形参的类型,也可以列出每个形参的类型,参数名可省略参数名可省略,各形参之间,各形参之间以逗号分隔。函数原型和所定义的函数必须在返回值类型、以逗号分隔。函数原型和所定义的函数必须在返回值类型、函数名、形参个数和类型及函数
21、名、形参个数和类型及次序次序等方面完全对应一致,否等方面完全对应一致,否则将导致编译错误。则将导致编译错误。下下面面是是一一个个使使用用结结构构化化程程序序设设计计思思想想开开发发的的企企业业管管理理报表程序的框架。它使用了函数原型说明。报表程序的框架。它使用了函数原型说明。#include void menu_print();void account_report();void engineering_report();void marketing_report();void main()int choice;do menu_print();cinchoice;while(choice=4)
22、;switch(choice)case 1:account_report();break;case 2:engineering_report();break;case 3:marketing_report();break;voidmenu_print()cout”系统功能:系统功能:”endl;cout”1财务报表财务报表”endl;cout”2工程报表工程报表”endl;cout”3市场报表市场报表”endl;cout”选择业务序号:选择业务序号:”;voidaccount_report()/生成财务报表生成财务报表voidengineering_report()/生成工程报表生成工程报表v
23、oidmarketing_report()/生成市场报表;生成市场报表;4.2.3 函数原型说明函数原型说明【例例44】输输出出所所有有满满足足下下列列条条件件的的正正整整数数m:10m1000且且m、m2、m3均为回文数。均为回文数。分分析析:回回文文指指左左右右对对称称的的序序列列。如如121、353等等就就是是回回文文数数。判判断断整整数数是是否否回回文文数数用用函函数数实实现现,其其思思想想是是将将该该数数各各位位拆拆开开后后反反向向组组成成新新的的整整数数,如如果果该该整整数数与与原原数数相相等等则则为为回文数。回文数。程序如下:程序如下:#include#includeboolpa
24、lindrome(int);/函数原型函数原型voidmain()coutsetw(10)msetw(20)m*m“setw(20)m*m*mendl;for(intm=11;m1000;m+)if(palindrome(m)&palindrome(m*m)&palindrome(m*m*m)coutsetw(10)msetw(20)m*msetw(20)m*m*0);for(intj=0;ji;j+)n=n*10+digitj;return(n=m);4.2.3 函数原型说明函数原型说明mm*mm*m*m111211331101102011030301111123211367631运行结果:
25、运行结果:4.3 全局变量和局部变量全局变量和局部变量4 43 31 1 变量的存储机制与变量的存储机制与变量的存储机制与变量的存储机制与C+C+的内存布局的内存布局的内存布局的内存布局 4 43 32 2 全局变量全局变量全局变量全局变量 4 43 33 3 局部变量局部变量局部变量局部变量 4.3.1 变量的存储机制与变量的存储机制与C+的内存布局的内存布局堆区堆区 (动态数据动态数据)栈区(函数局部数据)栈区(函数局部数据)(main()函数局部数据)函数局部数据)全局数据区全局数据区 (全局、静态变量全局、静态变量)代码区(程序代码)代码区(程序代码)操操作作系系统统为为一一个个C+C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 程序 基本 模块 一些 功能 相对 独立 经常
限制150内