在结构化程序设计中,函数是将任务进行模块划分的基本单位.ppt
《在结构化程序设计中,函数是将任务进行模块划分的基本单位.ppt》由会员分享,可在线阅读,更多相关《在结构化程序设计中,函数是将任务进行模块划分的基本单位.ppt(108页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、在结构化程序设计中,函数是将任务进行模块划分的基本单位 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望 练练习习:编编写写程程序序,输输入入x x,根根据据下下面面y y和和x x的的关关系,计算系,计算y y值并输出值并输出3x-11 (x10)x (x1)2x-1 (1xx;cinx;if(x1)y=x;if(x1)y=x;else if(1=x10)y=2*x-1;else if(1=x10)y=2*x-1;else y=3*x-11;else y=3*x-
2、11;couty;coutx;cinx;if(x1)y=x;if(x1)y=x;else if(1=x&x10)y=2*x-1;else if(1=x&x10)y=2*x-1;else y=3*x-11;else y=3*x-11;couty;coutx;cinx;if(x1)y=x;if(x1)y=x;else if(1 else if(1x10)y=2*x-1;x10)y=2*x-1;else y=3*x-11;else y=3*x-11;couty;coutx;cinx;x=10?y=3x-11:y=2x-1 x=10?y=3x-11:y=2x-1 couty;coutx;cinx;if
3、(x1)y=x;if(x1)y=x;else if(x10)y=2*x-1;else if(x10)y=2*x-1;else y=3*x-11;else y=3*x-11;couty;couty;5QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成第三章第三章 函数函数 3.1 函数的定义与调用函数的定义与调用 3.5 作用域与标识符的可见性作用域与标识符的可见性 3.4 函数调用机制函数调用机制 3.3 全局变量和局部变量全局变量和局部变量 3.2 函数的参数传递函数的参数传递,返回值及函数声明返回值及函数声明 3.10 编译预处理编译预处理 3.9 头文件
4、头文件与多文件结构与多文件结构 3.6 存储类型与标识符的生命期存储类型与标识符的生命期 3.8 函数的一些高级议题函数的一些高级议题 3.7 函数的递归调用函数的递归调用 6QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成 3.1 函数的定义与调用函数的定义与调用3.1.1 函数概述函数概述3.1.2 函数的定义函数的定义3.1.3 函数的调用函数的调用 7QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成3.1.1 函数概述函数概述函数是函数是C+C+程序的基本组成模块。程序的基本组成模块。通通过过函函数数,可可以以把把
5、一一个个复复杂杂任任务务分分解解成成为为若若干干个易于解决的小任务。充分体现逐步细化的设计思想。个易于解决的小任务。充分体现逐步细化的设计思想。组组 成成 C+C+程程 序序 的的 若若 干干 函函 数数 中中,有有 一一 个个 称称 为为main()main()(Winmain()Winmain())函函数数,是是程程序序执执行行的的入入口口,它它可可以以调调用用其其他他函函数数,但但不不可可以以被被调调用用。而而其其他他一一般般函函数既可以调用也可以被调用。数既可以调用也可以被调用。函数概念的引入:函数概念的引入:入口函数:入口函数:8QQ523458367才智在线旺旺有心诚成QQ5234
6、58367才智在线旺旺有心诚成3.1.1 函数概述函数概述main()fun2()fun1()fun3()funa()funb()func()图图3.1 3.1 函数调用层次关系函数调用层次关系9QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成3.1.1 函数概述函数概述3.1.1结束结束库函数和自定义函数:库函数和自定义函数:库函数库函数或或标准函数标准函数,是由编译系统预定义的,是由编译系统预定义的,如一些常用的数学计算函数、字符串处理函数、图如一些常用的数学计算函数、字符串处理函数、图形处理函数、标准输入输出函数等。形处理函数、标准输入输出函数等。库函
7、数都按功能分类,集中说明在不同的头文库函数都按功能分类,集中说明在不同的头文件中件中。用户只需在自己的程序中包含某个头文件,。用户只需在自己的程序中包含某个头文件,就可直接使用该文件中定义的函数。就可直接使用该文件中定义的函数。用户根据需要将某个具有相对独立功能的程序用户根据需要将某个具有相对独立功能的程序定义为函数,称定义为函数,称自定义函数自定义函数。四个要素:四个要素:返回值类型,函数名,参数列表和函数体返回值类型,函数名,参数列表和函数体10QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成3.1.2 函数的定义函数的定义无参函数定义格式为:无参函数定
8、义格式为:数据类型数据类型函数名函数名(voidvoid)函数体函数体 说明:说明:数数据据类类型型指指函函数数返返回回值值类类型型,可可以以是是任任一一种种数数据据类类型型。没有返回值应将返回值类型定义为没有返回值应将返回值类型定义为voidvoid。函数名函数名采用合法标识符表示。采用合法标识符表示。对对无无参参函函数数,参参数数括括号号中中的的voidvoid通通常常省省略略,但但括括号号不不能能省略。省略。函函数数体体由由一一系系列列语语句句组组成成。函函数数体体可可以以为为空空,称称为为空空函函数。数。1 1 无参函数无参函数11QQ523458367才智在线旺旺有心诚成QQ5234
9、58367才智在线旺旺有心诚成3.1.2 函数的定义函数的定义例例:打印一个表头打印一个表头void TableHead()cout*endl;cout*example *endl;cout*=b?a:b;return(x);有参函数的参数表中列出所有有参函数的参数表中列出所有形式参数形式参数的类型和参数名的类型和参数名称。各参数即使类型相同也必须分别加以说明。称。各参数即使类型相同也必须分别加以说明。形式参数简称形参,形式参数简称形参,只能是变量名只能是变量名,不允许是常量或表,不允许是常量或表达式。达式。Why?13QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺
10、旺有心诚成找错误int f()string s;.return s;f2(int i).int f(int v1,int v2).double square(double x)return x*x;14QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成问题:问题:定义函数时究竟哪些变量应当作为函数的参数?哪些定义函数时究竟哪些变量应当作为函数的参数?哪些应当定义在函数体内?应当定义在函数体内?原则原则:函数在使用时被看成函数在使用时被看成 “黑匣子黑匣子”,除了输入输出外,除了输入输出外,其他部分可不必关心其他部分可不必关心。从函数的定义看出,函数头正是用来反
11、。从函数的定义看出,函数头正是用来反映函数的功能和使用接口,它所定义的是映函数的功能和使用接口,它所定义的是“做什么做什么”。即明确。即明确了了“黑匣子黑匣子”的输入输出部分,的输入输出部分,输出就是函数的返回值,输入输出就是函数的返回值,输入就是参数就是参数。因此,只有那些功能上起自变量作用的变量才必须。因此,只有那些功能上起自变量作用的变量才必须作为参数定义在参数表中;函数体中具体描述作为参数定义在参数表中;函数体中具体描述“如何做如何做”,因,因此除参数之外的为实现算法所需用的变量应当定义在函数体内。此除参数之外的为实现算法所需用的变量应当定义在函数体内。C+C+中不允许函数的嵌套定义,
12、即在一个函数中定义另一中不允许函数的嵌套定义,即在一个函数中定义另一个函数。个函数。提示提示15QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成3.1.3 函数的调用函数的调用函数调用:函数调用:所谓函数调用,就是使程序转去执行函数体。所谓函数调用,就是使程序转去执行函数体。在在C+C+中中,除除了了主主函函数数外外,其其他他任任何何函函数数都都不不能能单单独独作作为为程程序序运运行行。任任何何函函数数功功能能的的实实现现都都是是通通过过被被主主函函数数直直接接或或间间接调用进行的。接调用进行的。无参函数的调用格式:无参函数的调用格式:函数名函数名()()有
13、参函数的调用格式:有参函数的调用格式:函数名函数名(实际参数表实际参数表)其其中中实实际际参参数数简简称称实实参参,用用来来将将实实际际参参数数的的值值传传递递给给形形参参,因此因此可以是常量、具有值的变量或表达式可以是常量、具有值的变量或表达式。【例例3.1】输入两个实数,输出其中较大的数输入两个实数,输出其中较大的数16QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成 函数的调用规则1、调用函数时,函数名必须与调用处的函数名完全一致。2、实参的个数必须与形参的个数一致。3、函数必须先声明或定义,后调用。4、函数可以直接或间接地自己调用自己,称为递归调用。
14、int main()int add(int x,int y);int a=100,b=200,c;c=add(a,b);.int add(int x,int y)int z;z=x+y;return(z);错误:c=ad(a,b);c=add(a);int add(int,int);17QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成3.2 函数的参数传递、返回值及函数的参数传递、返回值及函数声明函数声明 321 函数的参数传递及传值调用函数的参数传递及传值调用 323 函数声明函数声明322 函数返回值函数返回值 18QQ523458367才智在线旺旺有心
15、诚成QQ523458367才智在线旺旺有心诚成参数传递:参数传递:函数调用首先要进行参数传递,参数传递的方向是函数调用首先要进行参数传递,参数传递的方向是由实由实参传递给形参参传递给形参。传递过程是,传递过程是,先计算实参表达式的值,再将该值传递给先计算实参表达式的值,再将该值传递给对应的形参变量对应的形参变量。一般情况下,。一般情况下,实参和形参的个数和排列顺实参和形参的个数和排列顺序应一一对应,并且对应参数应类型匹配序应一一对应,并且对应参数应类型匹配(赋值兼容)(赋值兼容),即即实参的类型可以转化为形参类型。而对应参数的参数名则不实参的类型可以转化为形参类型。而对应参数的参数名则不要求相
16、同。要求相同。3.2.1 函数的参数传递及传值调用函数的参数传递及传值调用 传值调用和引用调用:传值调用和引用调用:按照参数形式的不同,按照参数形式的不同,C+有两种调用方式:有两种调用方式:传值调用传值调用和和引引用调用用调用。传值调用传递的是实参的值,本章介绍传值调用。传值调用传递的是实参的值,本章介绍传值调用。19QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成在调用函数时,一般在主调函数和被调用函数之间有 信息传递 这是由函数中的参数参数来完成的。调用函数和被调用函数之间的参数传递实际参数实际参数 形式参数形式参数主调用函数中的参数被调用函数中的参数
17、(实参实参)(形参形参)int main()int a=5,b=10,c;c=max(a,b);printf(“c=%dn”,c);return 0;int max(int x,int y)int t;if(xy)t=x;else t=y;return(t);20QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成yxa5b10510ct1010int main()int a=5,b=10,c;c=max(a,b);printf(“c=%dn”,c);return 0;int max(int x,int y)int t;if(xy)t=x;else t=y;re
18、turn(t);信息传递原则:信息传递原则:实参到形参实参到形参单向值传递单向值传递特点:实参与形参各占用不同的内存单元21QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成 3.2.1 函数的参数传递及传值调用函数的参数传递及传值调用 传值调用:传值调用:将实参的值复制给形参,在函数中参加运算的将实参的值复制给形参,在函数中参加运算的是形参,而实参不会发生任何改变。传值调用是形参,而实参不会发生任何改变。传值调用起了一种隔离作用。起了一种隔离作用。【例例3.2】实参和形参对应关系的示例。实参和形参对应关系的示例。注意:注意:【例例1.3】中调用函数中调用函数
19、strcpy(s3,s2),却实现了字符数,却实现了字符数组组s2的内容复制到字符数组的内容复制到字符数组s3中。这是因为数组名实际中。这是因为数组名实际上代表存储数组的内存的首地址,复制给形参的是实参数上代表存储数组的内存的首地址,复制给形参的是实参数组的首地址,结果参加运算的是实参数组。数组作为参数,组的首地址,结果参加运算的是实参数组。数组作为参数,定义时形参用数组名加一对方括号,调用时实参只用数组定义时形参用数组名加一对方括号,调用时实参只用数组名名 22QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成100aFFC2200bFFC4int add(
20、int x,int y)int z;z=(+x)+(+y);return(z);int main()int a=100,b=200,c;c=add(a,b);coutcendl;return 0;100 xFFA2200yFFA4101201302z1094302cFFC623QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成 当形参值在函 数中发生变化时,且不影响调用它的 实参值的变化。用途 采用这种数据复制的参数传递方式,每次每个参数只能传递一个数据。缺点add(a,b);int add(x,y)24QQ523458367才智在线旺旺有心诚成QQ52345
21、8367才智在线旺旺有心诚成 A)11 B)20 C)21 D)31请写出下列程序的运行结果 main()int x=6,y=7,z=8,r;r=f(x-,y+,x+y),z-);coutr=ry)t=x;else t=y;return(t);30QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成 下下面面是是一一个个使使用用结结构构化化程程序序设设计计思思想想开开发发的的企企业业管管理理报表程序的框架。它使用了报表程序的框架。它使用了函数声明函数声明。void menu_print();void account_report();void engineeri
22、ng_report();void marketing_report();int main()int choice;do menu_print();cinchoice;while(choice=4);switch(choice)case 1:account_report();break;case 2:engineering_report();break;case 3:marketing_report();break;return 0;31QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成void menu_print()cout”系统功能:系统功能:”endl;
23、cout”1 财务报表财务报表”endl;cout”2 工程报表工程报表”endl;cout”3 市场报表市场报表”endl;cout”选择业务序号:选择业务序号:”;void account_report()/生成财务报表生成财务报表void engineering_report()/生成工程报表生成工程报表 void marketing_report()/生成市场报表;生成市场报表;32QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成3.2.3 函数声明函数声明【例例3.4】输输出出所所有有满满足足下下列列条条件件的的正正整整数数m:10m1000且且m
24、、m2、m3均为回文数。均为回文数。分析:分析:回文指左右对称的序列。如回文指左右对称的序列。如121、353等就是回等就是回文数。判断整数是否回文数用函数实现,其思想是将文数。判断整数是否回文数用函数实现,其思想是将该数各位拆开后反向组成新的整数,如果该整数与原该数各位拆开后反向组成新的整数,如果该整数与原数相等则为回文数。数相等则为回文数。m m*m m*m*m11 121 1331101 10201 1030301111 12321 1367631 运行结果:运行结果:33QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成3.3 全局变量和局部变量全局变
25、量和局部变量3 33 31 1 变量的存储机制与变量的存储机制与变量的存储机制与变量的存储机制与C+C+的内存布局的内存布局的内存布局的内存布局 3 33 32 2 全局变量全局变量全局变量全局变量 3 33 33 3 局部变量局部变量局部变量局部变量 34QQ523458367才智在线旺旺有心诚成QQ523458367才智在线旺旺有心诚成3.3.1 变量的存储机制与变量的存储机制与C+的内存布局的内存布局自由存储区自由存储区 (动态数据动态数据)栈区(函数局部数据)栈区(函数局部数据)(main()main()函数局部数据)函数局部数据)全局数据区全局数据区(全局、静态全局、静态)代码区(程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 程序设计 函数 任务 进行 模块 划分 基本单位
限制150内