您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C++课件第5章函数.
南京航空航天大学计算机科学与技术学院计算机基础教学部制作(版权所有)第5章函数第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)本章要点了解标准(预定义)函数,并学会怎样在程序中使用它们如何定义函数领会函数调用的内部实现机制区分函数声明和定义理解值参数和引用参数的区别了解引用参数和带有返回值的函数了解带有默认参数的函数理解并运用递归、内联、重载函数理解标识符的作用域了解局部变量、静态变量和全局变量的区别第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)主要内容概述库函数的使用函数的定义与调用函数的原型声明函数的嵌套调用和递归调用内联函数函数重载作用域和存储类别第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)一个简单的函数调用例5.1#includeiostream.hvoidprintstar(){cout******************'\n';}voidprintmessage(){coutWelcometoC++'\n';}voidmain(){printstar();printmessage();printstar();}第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)C++程序的构成由函数构成。函数:一个独立完成某个功能的语句块,函数与函数之间通过(输入)参数和返回值(输出)来联系。执行流程:从main()函数开始,顺序执行。遇函数调用语句,转入被调函数,执行完毕,返回主调函数。第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)一个程序中函数调用的示意图main()a()b()c()a1()a2()a21()第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)函数分类从用户角度来看系统库函数(如:sqrt()、fabs())标准函数函数自定义函数(如:printstar()、maxx())从函数的形式来看无参函数(如:printstar())函数有参函数(如:maxx(x,y))第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)库函数的使用调用C++语言标准库函数时要求用include命令例如:#includemath.h或#includemath.hinclude命令必须以#开头系统提供的头文件以.h作为文件的后缀文件名用一对双撇号或一对尖括号括起来第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)函数的定义分为两种:无参函数的定义有参函数的定义第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)无参函数的定义形式[类型标识符]函数名(void)//函数的首部{…...//函数体}例:voidprintstar(void){cout******************\n;}第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)有参函数的定义形式[类型标识符]函数名(形参列表)//函数的首部{…...//函数体…...}例:intmin(intx,inty){intz;z=(xy)?x:y;return(z);}表示函数的返回值类型第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)函数的返回值格式:return表达式;或return(表达式);或return;例:return(z);等价于returnz;return(xy?x:y);第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)函数的调用函数语句例:printstar();(前例)函数表达式例:c=min(a,b);第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)intmin(intx,inty){intz;z=(xy)?x:y;return(z);}main(){……d=min(a,b);……}形参和实参形参:即形式参数定义时函数名后面的变量名实参:即实际参数调用函数时函数名后面括号中的表达式实参→形参传值调用形参实参第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)传值调用示意一般来说,形参和实参个数、类型应一致。形参、实参占用不同的内存单元。3a3x9b9y实参形参相当于在函数调用时,做如下赋值:x=ay=b传值调用第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)传值调用的例子例5.4#includeiostream.h//li0504.cpp理解传值调用voidswap(intx,inty){intt;t=x;x=y;y=t;coutx=x,y=yendl;}voidmain(){inta(4),b(5);//等价于inta=4,b=5;swap(a,b);couta=a,b=bendl;}两数交换第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)形参变化不会影响实参示图44a55bmainswapx5y4swap单向传递。实参和形参分别占用不同的存储单元。a4b5main形参的改变不会影响实参。函数调用时函数调用完xy第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)进一步理解传值调用例5.5#includeiostream.hvoidswap(inta,intb){intt;t=a;a=b;b=t;couta=a,b=bendl;}voidmain(){inta(4),b(5);//等价于inta=4,b=5;swap(a,b);couta=a,b=bendl;}实参与形参同名,但分别代表了不同的变量第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)函数的引用调用函数需要改变传递给它的实参的值时使用#includeiostream.h//li0504_1.cppvoidswap(int&x,int&y){intt;t=x;x=y;y=t;coutx=x,y=yendl;}voidmain(){inta(4),b(5);cout交换前:endl;couta=a,b=bendl;swap(a,b);cout交换后:endl;couta=a,b=bendl;}引用运算符&用来说明一个引用第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)函数实参的求值顺序例5.6#includeiostream.hintfun(inta,intb){returnb;}voidmain(){intx(5),y(6);intz=fun(x--,x+y);coutzendl;}z的值是多少自左向右求值:10自右向左求值:11VC6.0中的求值顺序是自右向左第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)设置函数形参的默认值例5.7#includeiostream.hvoidfun(intx=1,inty=2,intz=3){coutx=x,y=y,z=zendl;}voidmain(){fun();fun(5);fun(5,6);fun(5,6,7);}第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)设置函数形参的默认值注意默认值集中在形参的右边intfun1(inta,intb=1,intc=2);合法intfun1(inta=1,intb,intc=2);不合法第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)函数原型声明语句格式格式1:[数据类型]函数名([形式参数列表]);格式2:[数据类型]函数名([形式参数类型列表]);第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)函数原型声明例5.8#includeiostream.hvoidmain(){intmin(int,int);//函数原型声明,也可以放在main()函数之前inta,b,mv;cinab;mv=min(a,b);//函数调用cout最小值为:mvendl;}intmin(intx,inty)//函数定义:求两个数中的最小值{return(xy?x:y);}第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)验证歌德巴赫猜想例5.9问题:一个大偶数可分解成两个素数之和。分析:找出一个数是素数后,如果大偶数减去该素数后的数也是素数,验证该结论。第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)验证歌德巴赫猜想#includeiostream.h#includemath.hboolprime(inta)//返回值类型为布尔类型{inti,k;k=(int)sqrt(a);for(i=2;i=k;i++)if(a%i==0)returnfalse;returntrue;}第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)验证歌德巴赫猜想将96~100之间的大偶数分解成两个素数之和。voidmain(){inta,b,m,n=0;for(m=96;m=100;m=m+2)for(a=2;a=m/2;a++){if(prime(a)){b=m-a;if(prime(b)){coutm=a+b'\n';break;}}}}第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)最大公约数和最小公倍数例5.10intgcd(intx,inty){intr;while((r=x%y)!=0){x=y;y=r;}returny;}intlcm(intx,inty){intd;d=gcd(x,y);//调用求最大公约数的函数return(x*y/d);}例:21,35用辗转相除法第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)最大公约数和最小公倍数voidmain(){intx,y,d,m;cout请输入两个整数:;cinxy;d=gcd(x,y);m=lcm(x,y);cout最大公约数为:d'\n';cout最小公倍数为:m'\n';}第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)最大公约数和最小公倍数例:mn21,3521,147,147,7用大数减小数的方法while(m!=n)if(mn)m-=n;elsen-=m;m是最大公约数第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)函数的嵌套调用intb(){……}inta(){……y=b()……}voidmain(){……x=a()……}C++语言的函数定义是相互平行和独立的不能嵌套定义,但可嵌套调用main函数调用a函数结束a函数调用b函数b函数①②③④⑤⑥⑦⑧⑨第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)函数的嵌套调用例例5.12用弦截法求方程x4+4x3-3x2+5x+6=0的根。第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)用几个函数来实现各部分的功能用f(x)来求x的函数:x4+4x3-3x2+5x+6=0。用函数xpoint(x1,x2)来求f(x1)和f(x2)的连线与X轴的交点x的坐标。用函数root(x1,x2)来求(x1,x2)区间的实根。显然执行root函数过程中要用到函数第5章南京航空航天大学信息学院计算机基础教研室制作(版权所有)用弦截法求方程的根#includeiostream.h#includemath.hdoublef(doublex);doublexpoint(doublex1,doublex2);doubleroot(doublex1,doublex2);voidmain()//主函数{doublex1,x2,x,f1,f2;do{
本文标题:C++课件第5章函数.
链接地址:https://www.777doc.com/doc-2901863 .html