第三章函数

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第三章:函数第三章:函数•函数的定义与使用•内联函数•带默认形参值的函数•函数重载•使用C++系统函数函数•在面向过程的程序设计中,函数是对处理问题过程的一种抽象。•在面向对象的程序设计中,函数是对功能的抽象。•函数的优点:•有利于代码重用,提高开发效率,增强程序的可读性,便于分工合作和修改维护。第一节:函数的定义与使用•一个C++程序由一个主函数和若干个子函数构成。•主函数是程序执行的开始点。由主函数调用子函数,子函数还以调用其它子函数。•主调函数:调用其它函数的函数。•被调函数:被其它函数调用的函数。•一个函数既可以是主调函数,也可以是被调函数。一、函数的定义•函数定义的语法形式:类型标识符函数名(形式参数表){语句序列}例:doublepower(doublex,intn){doubleval=1.0;while(n--)val*=x;return(val);}类型标识符形式参数表返回值一、函数的定义类型标识符:规定了函数的返回类型,即函数值的类型。函数的返回值由return语句给出。如return0。无返回值的函数类型标识符为void。如果类型标识符是void,则不必写return语句。#includeiostreamusingnamespacestd;voidmain(){cout“hello”;}#includeiostreamusingnamespacestd;intmain(){cout“hello”;return0;}一、函数的定义•形式参数表•type1name1,type2name2,type3name3……•功能:实现主调函数和被调函数之间的联系。•形参是一种内部变量,在函数内部有效。•没有参数的函数在行参表的位置应该写void。•voidmain(void)•函数在没有被调用时,是静止的,只是一种符号,是一种形参,在调用时,主调函数将实际参数(实参)赋给形参。形参类型标识符形参名一、函数的定义•命令行参数:main函数的形参。•voidmain(intargc,char*argv[],char*env[])•argc:返回参数的个数。•argv:一个指针数组,接收外部输入参数。•env:一个指针数组,通常用作事件的反馈。•#includeiostream•#includestring•usingnamespacestd;••voidmain(intargc,char*argv[])•{•while(*argv!=NULL)//在命令行参数的提交中,系统会自动给指针数组后加上一个NULL•{•cout*argv++endl;•coutargc=argcendl;•}•cin.get();•}输入:c:\test.exe“aaaa”“bbbb”输出:c:\test.exeaaaabbbb二、函数的调用•函数原型声明:在主调函数中声明函数原型。•语法:•类型说明符被调函数名(含类型说明的形参表)•例:doublepower(doublex,intn);二、函数的调用•函数的调用语法:•函数名(实参列表)•实参与形参的个数、类型一致。•doublepower(doublex,intn);•coutpower(5,2);•函数调用可以作为一条语句,此时函数可以没有返回值。但是,函数调用在表达式中时,必须有返回值。例3-1#includeiostreamusingnamespacestd;doublepower(doublex,intn);voidmain(void){cout5tothepower2ispower(5,2)endl;//函数调用作为一个表达式出现在输出语句中。}doublepower(doublex,intn){doubleval=1.0;while(n--)val*=x;return(val);}函数的有效性•在所有函数之前声明函数原型,该函数原型在本程序文件的任何地方有效。•在某个主调函数内部声明函数原型,则只在主调函数内有效。#includeiostreamusingnamespacestd;voidprintpower(doublex,intn);voidmain(void){printpower(5,2);}doublepower(doublex,intn){doubleval=1.0;while(n--)val*=x;return(val);}voidprintpower(doublex,intn){doublepower(doublex,intn);cout5tothepower2ispower(5,2)endl;}#includeiostreamusingnamespacestd;voidprintpower(doublex,intn);voidmain(void){cout5tothepower2ispower(5,2)endl;}doublepower(doublex,intn){doubleval=1.0;while(n--)val*=x;return(val);}voidprintpower(doublex,intn){doublepower(doublex,intn);cout5tothepower2ispower(5,2)endl;}例3-2:将二进制数转换为十进制数•#includeiostream•usingnamespacestd;•doublepower(doublex,intn);•voidmain(void)•{•inti;•intvalue=0;•charch;••coutEnteran8bitbinarynumber;•for(i=7;i=0;i--)•{•cinch;•if(ch=='1')•value+=int(power(2,i));•}•coutDecimalvalueisvalueendl;•}•doublepower(doublex,intn)•{•doubleval=1.0;••while(n--)•val*=x;•return(val);•}例3-3:求π的值2391arctan451arctan16753)arctan(753xxxxx其中arctan用如下形式的级数计算:直到级数某项绝对值不大于10-15为止;π和x均为double型。#includeiostreamusingnamespacestd;voidmain(){doublea,b;doublearctan(doublex);a=16.0*arctan(1/5.0);b=4.0*arctan(1/239.0);//注意:因为整数相除结果取整,如果参数写1/5,1/239,结果就都是0coutPI=a-bendl;}doublearctan(doublex){inti;doubler,e,f,sqr;sqr=x*x;r=0;e=x;i=1;while(e/i1e-15){f=e/i;r=(i%4==1)?r+f:r-f;e=e*sqr;i+=2;}returnr;}例3-4:寻找并输出11-999之间的数m,满足m,m2,m3均为回文数。•回文:各位数字左右对称的整数。例如:11满足上述条件112=121,113=1331。•回文算法:•10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。#includeiostreamusingnamespacestd;voidmain(){boolsymm(longn);longm;for(m=11;m1000;m++)if(symm(m)&&symm(m*m)&&symm(m*m*m))coutm=mm*m=m*mm*m*m=m*m*mendl;}boolsymm(longn)//判断回文的函数{longi,m;i=n;m=0;while(i){m=m*10+i%10;//m为重新组织的数i=i/10;}return(m==n);}例3-5:求公式的值•计算如下公式,并输出结果:•其中r、s的值由键盘输入。SINx的近似值按如下公式计算,计算精度为10-6:222222r)*(21r)()(ssrSINssSINrSINk当当1121753)!12()1(!7!5!3!1nnnnxxxxxSINx#includeiostream#includecmath//头文件cmath中具有对C++标准库中数学函数的说明usingnamespacestd;voidmain(){doublek,r,s;doubletsin(doublex);coutr=;cinr;couts=;cins;if(r*r=s*s)k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s));elsek=tsin(r*s)/2;coutkendl;}doubletsin(doublex){doublep=0.000001,g=0,t=x;intn=1;do{g=g+t;n++;t=-t*x*x/(2*n-1)/(2*n-2);}while(fabs(t)=p);returng;}例3-6:投骰子的随机游戏•第一轮:和数为7、11为赢•和数为2、3、12为输•第二轮:点数等于和数为赢=连续两次的和相同为赢•和数为7为输•Rand函数•rand•函数原型:intrand(void);•所需头文件:cstdlib•功能和返回值:求出并返回一个伪随机数[0,rand_max]。默认种子为1。•srand•函数原型:voidsrand(unsignedintseed);•参数:seed产生随机数的种子。•所需头文件:cstdlib•功能:为使rand()产生一序列伪随机整数而设置起始点。#includeiostream#includecstdlibusingnamespacestd;introlldice(void);voidmain(){intgamestatus,sum,mypoint;//gamestatus:反映游戏的结果。Sum:和数。Mypoint:点数。unsignedseed;coutPleaseenteranunsignedinteger:;cinseed;//输入随机数种子srand(seed);//将种子传递给rand()sum=rolldice();//第一轮投骰子、计算和数switch(sum){case7://如果和数为7或11则为胜,状态为1case11:gamestatus=1;break;case2://和数为2、3或12则为负,状态为1case3:case12:gamestatus=2;break;default://其它情况,游戏尚无结果,状态为0,记下点数,为下一轮做准备gamestatus=0;mypoint=sum;coutpointismypointendl;break;}while(gamestatus==0)//只要状态仍为0,就继续进行下一轮{sum=rolldice();if(sum==mypoint)//某轮的和数等于点数则取胜,状态置为1gamestatus=1;elseif(sum==7)//出现和数为7则为负,状态置为2gamestatus=2;}//当状态不为0时上面的循环结束,以下程序段输出游戏结果if(gamestatus==1)coutplayerwins\n;elsecoutplayerloses\n;}introlldice(void){//投骰子、计算和数、输出和数intdie1,die2,worksum;die1=1+rand()%6;die2=1+

1 / 34
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功