您好,欢迎访问三七文档
程序设计与算法语言——C++程序设计函数本章内容简要介绍函数调用时的内部实现机制,以及与此相关的内存分配机制、变量生命期和作用域;函数重载,递归算法、内联函数、默认参数函数以及多文件组织、编译预处理、工程文件和运行库函数。信息科学与工程学院第3章函数2内容安排3.1函数的定义与调用3.2函数的参数传递、返回值及函数声明3.3全局变量和局部变量3.4函数调用机制3.5作用域与标示符的可见性3.6存储类型与标示符的生命期3.7函数的递归调用3.8函数的重载、内联及默认参数信息科学与工程学院第3章函数33.1函数的定义与调用3.1.1函数概述3.1.2函数的定义3.1.3函数的调用信息科学与工程学院第3章函数43.1.1函数概述函数是程序基本组成模块,可重复使用相对独立经常使用可把一个复杂任务分解成为若干个易于解决的小任务,充分体现逐步细化的设计思想使用时只考虑其功能和接口信息科学与工程学院第3章函数53.1.1函数概述C++程序由若干函数组成一般函数可调用其他函数,也可被其他函数调用其中存在一个函数称为主函数(入口函数)。入口函数是程序执行的入口,它可调用其他函数,但不可被调用main()WinMain()信息科学与工程学院第3章函数63.1.1函数概述函数调用层次关系信息科学与工程学院第3章函数7main()fun2()fun1()fun3()funa()funb()func()3.1.1函数概述函数按是否系统预定义可分为库函数(或标准函数):是由编译系统预定义的。例如:一些常用的数学计算函数、字符串处理函数、图形处理函数、标准输入输出函数等库函数都按功能分类,集中说明在不同的头文件中用户只需在自己的程序中包含某个头文件,就可直接使用该文件中定义(准确说是声明)的函数用户根据需要将某个具有相对独立功能的程序定义为函数,称为自定义函数信息科学与工程学院第3章函数83.1.1函数概述函数按是否带有参数可分为无参函数:不需要输入参数的函数有参函数:有输入参数的函数信息科学与工程学院第3章函数93.1.2函数的定义函数定义:functiondefinition函数构成函数头:定义函数功能和接口的全部要素函数名:thenameofthefunction函数参数:thetypesandnumberofparameters(arguments)函数返回值类型:thereturntype函数体:定义函数的算法实现函数必须先定义后使用信息科学与工程学院第3章函数103.1.2函数的定义无参函数基本格式《数据类型》函数名(《void》){函数体}数据类型指函数返回值类型,可是任一种数据类型,默认为返回整型值(但新标准要求写明,不用默认方式)。没有返回值应将返回值类型定义为void函数名采用合法标识符表示参数括号中的void通常省略,但括号不能省略函数体由一系列语句组成(函数体可为空,称为空函数)信息科学与工程学院第3章函数11voidsayHello(){couthelloworld!;}3.1.2函数的定义有参函数基本格式《数据类型》函数名(参数类型1形式参数1《,参数类型2形式参数2,…》){函数体}参数表中列出所有形式参数(form/formalparameters)的类型和参数名称各参数即使类型相同也必须分别加以说明形式参数简称形参,只能是变量名,不允许是常量或表达式信息科学与工程学院第3章函数123.1.2函数的定义信息科学与工程学院第3章函数13intmax(inta,intb){return(a=b?a:b);}3.1.2函数的定义根据参数和返回值,有4种类型函数需要参数,并返回值需要参数,不返回值不需参数,但返回值不需参数,不返回值信息科学与工程学院第3章函数143.1.2函数的定义函数头用来反映函数的功能和使用接口,它所定义的是“做什么”。即,明确了“黑匣子”的输入输出部分,输入就是参数,输出就是函数的返回值。只有那些功能上起自变量作用的变量才必须作为参数定义在参数表中函数体中具体描述“如何做”,因此除参数之外的为实现算法所需用的变量定义在函数体内C++中不允许函数的嵌套定义,即,在一个函数中定义另一个函数信息科学与工程学院第3章函数153.1.3函数的调用所谓函数调用,就是使程序转去执行函数体除主函数外,其他任何函数都不能单独作为程序运行任何函数功能的实现都是通过被主函数直接或间接调用进行的信息科学与工程学院第3章函数163.1.3函数的调用无参函数的调用格式函数名()有参函数的调用格式函数名(实际参数表)实际参数(actualarguments)简称实参,用来将实际参数的值传递给形参,因此可是常量、具有值的变量或表达式信息科学与工程学院第3章函数17Parametersarethenamesofthevaluespassedtoafunctionbyafunctioncall.Argumentsarethevaluesthefunctionexpectstoreceive.3.1.3函数的调用调用无返回值的函数可单独成为函数调用语句,即调用格式加分号调用有返回值的函数将产生一个数据值,因此函数调用通常出现在表达式中返回值参与表达式计算,例如:赋值在条件语句中直接参与逻辑运算信息科学与工程学院第3章函数183.1.3函数的调用信息科学与工程学院第3章函数19【例3.1】输入两个实数,输出其中较大的数。其中求两个实数中的较大数用函数完成floatmax(floatx,floaty){return(x=y?x:y);}intmain(){floatx,y;cout输入两个实数:endl;cinxy;coutx和y中较大数max(x,y)endl;return0;}3.2函数的参数传递、返回值及函数声明3.2.1函数的参数传递及传值调用3.2.2函数返回值3.2.3函数声明信息科学与工程学院第3章函数203.2.1函数的参数传递及传值调用函数调用首先要进行参数传递传递的方向是由实参传递给形参传递过程先计算实参表达式的值再将该值传递给对应的形参变量一般情况下,实参和形参的个数和排列顺序应一一对应,并且对应参数应类型匹配(赋值兼容)。即,实参的类型可转化为形参类型,而对应参数的参数名则不要求相同信息科学与工程学院第3章函数213.2.1函数的参数传递及传值调用调用形式传值(value):传递实参的值,需要复制引用(reference):传递实参的别名(alias)信息科学与工程学院第3章函数223.2.1函数的参数传递及传值调用传值调用将实参的值复制给形参。当两者不匹配时,编译器将实参转化为与形参一致的类型按参数位置对应,而不是按参数名对应在函数中参加运算的是形参,而实参不会发生任何改变起了一种隔离作用信息科学与工程学院第3章函数23信息科学与工程学院第3章函数24【例3.2】说明实参和形参对应关系的示例floatpower(floatx,intn){//求x的n次幂floatpow=1;while(n--)pow*=x;returnpow;}intmain(){intn=3;floatx=4.6;charc='a';coutpower(x','n)=power(x,n)endl;coutpower(c','n)=power(c,n)endl;coutpower(n','x)=power(n,x)endl;return0;}power(4.6,3)=97.336power(a,3)=912673power(3,4.6)=813.2.1函数的参数传递及传值调用传地址(address)一种特殊的传值方式虽然复制的也是值,但是可直接对地址所指向的内容进行读写操作,即,无法直接隔离形参对实参的影响包括指针(pointer)和数组的名称(thenameofthearray)都可实现传地址的任务信息科学与工程学院第3章函数253.2.2函数返回值对于有返回值的函数,在函数的出口处必须用return语句将要返回的值返回给调用者格式:return表达式;步骤计算表达式类型转化返回值信息科学与工程学院第3章函数263.2.2函数返回值函数一旦执行到return语句便会终止函数执行,返回调用单元对于没有返回值的函数,应将返回值类型定义为void,函数体内可没有return语句,当需要在程序指定位置退出时,可在该处放置一个:return;信息科学与工程学院第3章函数27信息科学与工程学院第3章函数28【例3.3】设计函数,根据三角形的三边长求面积。如果不能构成三角形,给出提示信息floatTriangleArea(floata,floatb,floatc){if((a+b=c)||(a+c=b)||(b+c=a))return-1;floats;s=(a+b+c)/2;returnsqrt(s*(s-a)*(s-b)*(s-c));}intmain(){floata,b,c,area;cout输入三角形三边a,b,c:endl;cinabc;area=TriangleArea(a,b,c);if(area==-1)cout'('a','b','c')'不能构成三角形!endl;elsecout三角形(a','b','c)面积为:areaendl;return0;}3.2.3函数声明函数声明的引入语法上对程序文件中函数的排列次序要求满足先定义后使用但从结构化程序设计的角度,通常是先调用后定义使用函数声明(functiondeclarations),则既符合由粗到精的思维方式,又满足了语法要求信息科学与工程学院第3章函数293.2.3函数声明函数声明的格式《函数返回值类型》函数名(《形参表》);是一条以分号结束的语句各形参之间以逗号分隔形参表可逐个列出每个参数的类型和参数名,也可只列出每个形参的类型,而参数名可省略信息科学与工程学院第3章函数303.2.3函数声明函数声明和所定义的函数必须在以下几方面完全对应一致,否则将导致编译错误返回值类型函数名形参个数形参类型形参次序信息科学与工程学院第3章函数31信息科学与工程学院第3章函数32【例3.4】输出所有满足下列条件的正整数m:10m1000且m、m2、m3均为回文数boolpalindrome(int);//函数原型intmain(){intm;coutsetw(10)'m'setw(20)m*msetw(20)m*m*mendl;for(m=11;m1000;m++)if(palindrome(m)&&palindrome(m*m)&&palindrome(m*m*m))coutsetw(10)msetw(20)m*msetw(20)m*m*mendl;return0;}boolpalindrome(intn){//判断回文数intdigit[10];intm=n,i=0;do{digit[i]=n%10;//将各位分离开n/=10;i++;}while(n0);for(intj=0;ji;j++)n=n*10+digit[j];//反向装配return(n==m);}作业P102:习题3.1.1。抄写P102:习题3.1.7的(2)P103:习题3.3信息科学与工程学院第3章函数332013年11月21日实验内容必作部分实验六:“文本文件的简单应用”中的实验内容3和4实验七:“函数的基本概念”中的实验内容3和4教材习题3.5选作部分实验七:“函数的基本概念”中的范例2
本文标题:C++程序设计函数
链接地址:https://www.777doc.com/doc-7140322 .html