C++语言程序设计(清华大学郑莉)04

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

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

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

资源描述

第四章函数C++语言程序设计C++语言程序设计2本章主要内容函数的声明和调用函数间的参数传递内联函数带默认形参值的函数函数重载C++系统函数C++语言程序设计3函数的声明函数是面向对象程序设计中,对功能的抽象函数声明的语法形式类型标识符函数名(形式参数表){语句序列}函数的声明与使用是被初始化的内部变量,寿命和可见性仅限于函数内部若无返回值,写voidC++语言程序设计4函数的声明形式参数表type1name1,type2name2,...,typennamen函数的返回值–由return语句给出,例如:return0–无返回值的函数(void类型),不必写return语句。函数的声明与使用C++语言程序设计5函数的调用调用前先声明函数原型:–在调用函数中,或程序文件中所有函数之外,按如下形式说明:类型标识符被调用函数名(含类型说明的形参表);调用形式函数名(实参列表)嵌套调用–函数可以嵌套调用,但不允许嵌套定义。–递归调用–函数直接或间接调用自身。函数的声明与使用C++语言程序设计6函数的声明与使用例3-1编写一个求x的n次方的函数题目:C++语言程序设计7#includeiostreamusingnamespacestd;doublepower(doublex,intn);intmain(){cout5tothepower2ispower(5,2)endl;}doublepower(doublex,intn){doubleval=1.0;while(n--)val=val*x;return(val);}函数的声明与使用例3-1编写一个求x的n次方的函数C++语言程序设计8运行结果:5tothepower2is25例3-1编写一个求x的n次方的函数函数的声明与使用C++语言程序设计9例3-2数制转换题目:输入一个8位二进制数,将其转换为十进制数输出。例如:11012=1(23)+1(22)+0(21)+1(20)=1310所以,如果输入1101,则应输出13函数的声明与使用#includeiostreamusingnamespacestd;doublepower(doublex,intn);intmain(){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);}运行结果:Enteran8bitbinarynumber01101001Decimalvalueis10510C++语言程序设计11例3-3编写程序求π的值其中arctan用如下形式的级数计算:直到级数某项绝对值不大于10-15为止;π和x均为double型。函数的声明与使用2391arctan451arctan16π753)arctan(753xxxxx#includeiostreamusingnamespacestd;intmain(){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;}12doublearctan(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;}运行结果:PI=3.1415913C++语言程序设计14例3-4寻找并输出11~999之间的数m,它满足m、m2和m3均为回文数。–回文:各位数字左右对称的整数。例如:11满足上述条件112=121,113=1331。分析:–10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。函数的声明与使用#includeiostreamusingnamespacestd;intmain(){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;}15boolsymm(longn){longi,m;i=n;m=0;while(i){m=m*10+i%10;i=i/10;}return(m==n);}16运行结果:m=11m*m=121m*m*m=1331m=101m*m=10201m*m*m=1030301m=111m*m=12321m*m*m=136763117C++语言程序设计18例3-5计算如下公式,并输出结果:其中r、s的值由键盘输入。sinx的近似值按如下公式计算,计算精度为10-6:函数的声明与使用222222r)sin(21r)(sin)(sinssrssrk当当1121753)!12()1(!7!5!3!1sinnnnnxxxxxx#includeiostream#includecmathusingnamespacestd;intmain(){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;}19doubletsin(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;}运行结果:r=5s=81.3778120C++语言程序设计21例3-6投骰子的随机游戏每个骰子有六面,点数分别为1、2、3、4、5、6。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮...直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。由rolldice函数负责模拟投骰子、计算和数并输出和数。函数的声明与使用#includeiostream#includecstdlibusingnamespacestd;introlldice(void);intmain(){intgamestatus,sum,mypoint;unsignedseed;coutPleaseenteranunsignedinteger:;cinseed;//输入随机数种子srand(seed);//将种子传递给rand()sum=rolldice();//第一轮投骰子、计算和数22switch(sum){case7://如果和数为7或11则为胜,状态为1case11:gamestatus=1;break;case2://和数为2、3或12则为负,状态为2case3:case12:gamestatus=2;break;default://其他情况,游戏尚无结果,状态为0,记下点数,为下一轮做准备gamestatus=0;mypoint=sum;coutpointismypointendl;break;}23while(gamestatus==0)//只要状态仍为0,就继续进行下一轮{sum=rolldice();if(sum==mypoint)//某轮的和数等于点数则取胜,状态置为1gamestatus=1elseif(sum==7)//出现和数为7则为负,状态置为2gamestatus=2;}//当状态不为0时上面的循环结束,以下程序段输出游戏结果if(gamestatus==1)coutplayerwins\n;elsecoutplayerloses\n;}24rand函数原型:intrand(void);所需头文件:cstdlib功能和返回值:求出并返回一个伪随机数srand函数原型:voidsrand(unsignedintseed);参数:seed产生随机数的种子。所需头文件:cstdlib功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初化rand()。25introlldice(void){//投骰子、计算和数、输出和数intdie1,die2,worksum;die1=1+rand()%6;die2=1+rand()%6;worksum=die1+die2;coutplayerrolleddie1'+'die2'='worksumendl;returnworksum;}26运行结果2:Pleaseenteranunsignedinteger:23playerrolled6+3=9pointis9playerrolled5+4=9playerwins27C++语言程序设计28函数调用的执行过程函数的声明与使用main()调fun()结束fun()返回①②④⑥⑦保存:返回地址当前现场③恢复:主调程序现场返回地址⑤C++语言程序设计29嵌套调用函数的声明与使用main{}调fun1()结束fun1()调fun2()返回fun2()返回①②③⑦④⑤⑥⑧⑨C++语言程序设计30例3-6输入两个整数,求平方和#includeiostreamusingnamespacestd;intmain(){inta,b;intfun1(intx,inty);cinab;couta、b的平方和:fun1(a,b)endl;}函数的声明与使用intfun1(intx,inty){intfun2(intm);return(fun2(x)+fun2(y));}intfun2(intm){return(m*m);}运行结果:34a、b的平方和:2531C++语言程序设计32递归调用函数直接或间接地调用自身,称为递归调用递归过程的两个阶段:–递推:4!=4×3!→3!=3×2!→2!=2×1!→1!=1×0!→0!=1未知已知–回归:4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1×0!=1←0!=1未知已知函数的声明与使用C++语言程序设计33例3-8求n!分析:计算n!的公式如下:这是一个递归形式的公式,应该用递归函数实现。函数的声明与使用)0()!1()0(1!nnnnn源程序:#includeiostreamusingnamespacestd;longfac(intn){longf;if(n0)coutn0,dataerror!endl;elseif(n==0)f=1;elsef=fac(n-1)*n;return(f);}34intmain(){longfac(intn);intn;longy;coutEnterapositiveinteger:;cinn;y=fac(n);coutn!=yendl;}运行结果:Enterapositiveinteger:88!=4032035C

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

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

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

×
保存成功