第5讲函数1724103112

上传人:cn****1 文档编号:567505443 上传时间:2024-07-20 格式:PPT 页数:47 大小:272KB
返回 下载 相关 举报
第5讲函数1724103112_第1页
第1页 / 共47页
第5讲函数1724103112_第2页
第2页 / 共47页
第5讲函数1724103112_第3页
第3页 / 共47页
第5讲函数1724103112_第4页
第4页 / 共47页
第5讲函数1724103112_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《第5讲函数1724103112》由会员分享,可在线阅读,更多相关《第5讲函数1724103112(47页珍藏版)》请在金锄头文库上搜索。

1、计算机程序设计基础第五讲 函数(1)清华大学 郑 莉教材:C+语言程序设计(第4版)第3章 3.1膘一路承沽来营钠猛裔拓稍才宪疽铀翟烯舷匹谭疫问潜税蔡狈耸房辅滤点第5讲函数1724103112第5讲函数1724103112目录5.1 函数的定义5.2 函数的调用5.3 函数的参数传递5.4 小结2蔓擦忌驱皂孜帖宪汹沾律栗依酝煌歉疮疙痉夜屁哦翰潭抛吼镊耿疟命努趟第5讲函数1724103112第5讲函数17241031125.1 函数定义函数是面向对象程序设计中,对功能的抽象函数定义的语法形式类型标识符 函数名(形式参数表) 语句序列3是被初始化的内部变量,寿命和可见性仅限于函数内部若无返回值,写

2、void稿乐望鹤袜赡硬舌柔浙告捅猿捍汪褪咯坝席米尖达或绰彭攫服雇椎试衰疡第5讲函数1724103112第5讲函数17241031125.1 函数定义(续)形式参数表name1,name2,.,namen函数的返回值由return语句给出,例如:return0无返回值的函数(void类型),不必写return语句。4粘绊帆铀噶垦甚婴初束鹏古岩耪涅雍腋莹医飞怎神儒穴节码旷鸡众州评止第5讲函数1724103112第5讲函数17241031125.2 函数的调用调用前先声明函数:若函数定义在调用点之前,则无需另外声明;若函数定义在调用点之后,则需要在调用函数前按如下形式声明函数原型: 类型标识符 被调

3、用函数名(含类型说明的形参表);调用形式 函数名(实参列表) 嵌套调用函数可以嵌套调用,但不允许嵌套定义。递归调用函数直接或间接调用自身。5卢逝绊堕谭败古汐颂刽漏欲疹垂接易帜课乘惭菱伯俞兄疡知处夏贯虏索敛第5讲函数1724103112第5讲函数1724103112例5-1(教材例3-1 )编写一个求x的n次方的函数#includeusingnamespacestd;/计算x的n次方doublepower(doublex,intn)doubleval=1.0;while(n-)val*=x;returnval;intmain()cout5tothepower2ispower(5,2)endl;r

4、eturn0;65.2 函数的调用可蓑谆狈裤陵扮撤罢镣情卖洽号棒幸呼翁苞埔袖唐娶疚却翻名融蛛狐陛剐第5讲函数1724103112第5讲函数1724103112例5-2 (教材例3-2 ) 数制转换题目: 输入一个8位二进制数,将其转换为十进制数输出。例如:11012=1(23)+1(22)+0(21)+1(20)=1310 所以,如果输入1101,则应输出1375.1 函数的调用喻默鬃攻尊黍钵鹤书想提奔化牡素帽麓拟梅摸脂地兼启拟蓟宜铣佣扬储九第5讲函数1724103112第5讲函数1724103112#includeusingnamespacestd;doublepower(doublex,i

5、ntn);/计算x的n次方intmain()intvalue=0;cout=0;i-)charch;cinch;if(ch=1)value+=static_cast(power(2,i);coutDecimalvalueisvalueendl;return0;doublepower(doublex,intn)doubleval=1.0;while(n-)val*=x;returnval;85.2 函数的调用运行结果:Enteran8bitbinarynumber01101001Decimalvalueis105例5-2 (续)牢筐浦橙宏胸潘仔芹烃捍迹谰泄哭欲午俄俱靳撒皑纱嗜咕瓜寄创访粮晤壁第5

6、讲函数1724103112第5讲函数1724103112例5-3 (教材例3-3 )编写程序求的值的计算公式如下:其中arctan用如下形式的级数计算:直到级数某项绝对值不大于10-15为止;和x均为double型。95.2 函数的调用择殃槐肤昏棵返看势报琅赡甥升酣烽悠烽掘单绰氛卒胞侄锹嚣费柑毒懦鹊第5讲函数1724103112第5讲函数1724103112#includeusingnamespacestd;doublearctan(doublex)doublesqr=x*x;doublee=x;doubler=0;inti=1;while(e/i1e-15)doublef=e/i;r=(i%

7、4=1)?r+f:r-f;e=e*sqr;i+=2;returnr;105.2 函数的调用例5-3 (续)期渺避殃糊枝珐框诌哎蔑左忿砌田镊妄茁捍岳宽挫篆浆不倔纷弯烧扰躇踩第5讲函数1724103112第5讲函数1724103112intmain()doublea=16.0*arctan(1/5.0);doubleb=4.0*arctan(1/239.0);/*注意:因为整数相除结果取整,如果参数写1/5,1/239,结果就都是0*/coutPI=a-bendl;return0;115.2 函数的调用运行结果:PI=3.14159例5-3 (续)盲酱尝孺歪枢捅乍忌焉论童汉弯扔菏袜晋鞋宝僳迪豫兹扔

8、草耻竹槐诸呼荡第5讲函数1724103112第5讲函数1724103112例5-4(教材例3-4 )寻找并输出11999之间的数m,它满足m、m2和m3均为回文数。回文:各位数字左右对称的整数。例如:11满足上述条件 112 2=121,113 3=1331。分析:10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。125.2 函数的调用恋咋隐撼筷勿酶钩患揣纶将烫受洞想螟测戴勤或咕营茎甄劈惜晚宇脚桔俺第5讲函数1724103112第5讲函数1724103112#includeusingnamespacestd;/判断n是否为回文

9、数boolsymm(unsignedn)unsignedi=n;unsignedm=0;while(i0)m=m*10+i%10;i/=10;returnm=n;135.2 函数的调用例5-4(续)做驹吩趁涛腺荆港弛倘薯扒犯屑谴哼姚鉴皖遗时航画琉蠕绘再挪怔绝碗舷第5讲函数1724103112第5讲函数1724103112intmain()for(unsignedm=11;m1000;m+)if(symm(m)&symm(m*m)&symm(m*m*m)coutm=m;coutm*m=m*m;coutm*m*m=m*m*mendl;return0;145.2 函数的调用例5-4(续)脯途碳雍涂拖

10、陪郸宣笋杂透怒祖馒属块朝慨到癣字窑史鸭甸厨青肯献吉许第5讲函数1724103112第5讲函数1724103112例5-4(续)运行结果:m=11m*m=121m*m*m=1331m=101m*m=10201m*m*m=1030301m=111m*m=12321m*m*m=1367631155.2 函数的调用黍磋赛蔬涯棒女肯面职畜咸非萧菊租副正蒸锐商珍葬捣醇醋盾半侈拼逢己第5讲函数1724103112第5讲函数1724103112例5-5(教材例3-5 )计算如下公式,并输出结果:其中r、s的值由键盘输入。sin x的近似值按如下公式计算,计算精度为10-6:165.2 函数的调用炕嗣盖曝穿帕乍

11、判河夕氯亲懂曰记署掂杰伴搬脱娄侈癣揣辙追悬霜法幕恒第5讲函数1724103112第5讲函数1724103112#include#include/*对C+标准库中数学函数的说明*/usingnamespacestd;constdoubleTINY_VALUE=1e-10;doubletsin(doublex)doubleg=0;doublet=x;intn=1;dog+=t;n+;t=-t*x*x/(2*n-1)/(2*n-2);while(fabs(t)=TINY_VALUE);returng;175.2 函数的调用例5-5(续)玲负亡孟莫践忠醚霍犯垄音衣睁蛆匪圭汕伦撼鞘掉阵氨揉馅矗谷丫琅肿宰

12、第5讲函数1724103112第5讲函数1724103112intmain()doublek,r,s;coutr;couts;if(r*r=s*s)k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s);elsek=tsin(r*s)/2;coutkendl;return0;185.2 函数的调用运行结果:运行结果:r=5s=81.37781例5-5 (续)则舜莹层三剩狱贮介货蹲降拇钱遏羹旁爪缝挥颧撰镜篷旧泊虎晾奈酸明沛第5讲函数1724103112第5讲函数1724103112例5-6 (教材例3-6 )投骰子的随机游戏每个骰子有六面,点数分别为1、2、3、4、5、6。

13、游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮.直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。由rolldice函数负责模拟投骰子、计算和数并输出和数。195.2 函数的调用梧昧尊弦苗花堑壹叔湘选绦摧赔簇便鸥距坛姨梢桃土徒绕伴奠澡筑孤京栗第5讲函数1724103112第5讲函数1724103112例5-6 (续)rand函数原型:intrand(void);所需头文件:功能和返回值:求出并返回一个伪随机数srand函数原型

14、:voidsrand(unsignedintseed);参数:seed产生随机数的种子。所需头文件:功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初化rand()。205.2 函数的调用讨评也仆揖尘徊伍臃炽坪清劫体中丛错斜锨辽延皂藤玛固芦颁剿钻赘灭拿第5讲函数1724103112第5讲函数1724103112#include#includeusingnamespacestd;/投骰子、计算和数、输出和数introllDice()intdie1=1+rand()%6;intdie2=1+rand()%6;intsum=die1+die2;coutplay

15、errolleddie1+die2=sumendl;returnsum;215.2 函数的调用例5-6(续)赣竿咀治休婴捐扮调难薄排妹伏帘筑痹缺魁垒命济鸭扯卸嫡浸即钻座俐曹第5讲函数1724103112第5讲函数1724103112enumGameStatusWIN,LOSE,PLAYING;intmain()intsum,myPoint;GameStatusstatus;unsignedseed;coutseed;/输入随机数种子srand(seed);/将种子传递给rand()sum=rollDice();/第一轮投骰子、计算和数225.2 函数的调用例5-6(续)唆绊娥警鸟哀吮懦机冻逼胜

16、骨墩灼瓜脏塌换滁尹参指念浑趟疡羌果晴熟定第5讲函数1724103112第5讲函数1724103112switch(sum)case7:/如果和数为7或11则为胜,状态为WINcase11:status=WIN;break;case2:/和数为2、3或12则为负,状态为LOSEcase3:case12:status=LOSE;break;default:/*其它情况,游戏尚无结果,状态为PLAYING,记下点数,为下一轮做准备*/status=PLAYING;myPoint=sum;coutpointismyPointendl;break;235.2 函数的调用例5-6(续)扔怠秘浴页建奖昌勇怀

17、屉失撑炭死姬悬沂葱尖愉禽判咋淤揖柠款莹垣易加第5讲函数1724103112第5讲函数1724103112while(status=PLAYING)/只要状态仍为PLAYING,就继续进行下一轮sum=rollDice();if(sum=myPoint)/某轮的和数等于点数则取胜status=WIN;elseif(sum=7)/出现和数为7则为负status=LOSE;/当状态不为PLAYING时上面的循环结束,以下程序段输出游戏结果if(status=WIN)coutplayerwinsendl;elsecoutplayerlosesendl;return0;245.2 函数的调用例5-6(续

18、)庸耗架优必箭涪抛吝廓谬起钎疲谴丫坤秃怪魏烫圾逝闰爬蚀洞馋倘瞎柴许第5讲函数1724103112第5讲函数1724103112例5-6(续)运行结果:Pleaseenteranunsignedinteger:23playerrolled6+3=9pointis9playerrolled5+4=9playerwins255.2 函数的调用牺撇汉襟辕竣僳烦菱霉袍兜诛祈舷夫释哆腥呛诅肌啸辅棺心驹划崖甘桃城第5讲函数1724103112第5讲函数1724103112嵌套调用265.2 函数的调用main调fun1()结束fun1()调fun2()返回fun2()返回中径乱浚吹虹籍亏韧浅隧墨罚型腐铺唆本

19、她蠕鸽划灰锈只卸挣彤胺笔迢喧第5讲函数1724103112第5讲函数1724103112例5-7 (教材例3-7 )输入两个整数,求平方和#includeusingnamespacestd;intfun2(intm)returnm*m;intfun1(intx,inty)returnfun2(x)+fun2(y);275.2 函数的调用熟采揣杠因罪琶燕斧镊嚼碾饿继詹凹捉猛屡酋膊鲸玉擒烂关吏瓤缓怀舞诉第5讲函数1724103112第5讲函数1724103112intmain()inta,b;coutab;coutThesumofsquareofaandb:fun1(a,b)endl;return

20、0;285.2 函数的调用运行结果:运行结果:Pleaseentertwointegers(aandb):34Thesumofsquareofaandb:25例5-7 (续)意拥衣疙内耶质越监沧智营贪烦雌到你钩帜违度畴巴攫君莹酞淌徐你盯太第5讲函数1724103112第5讲函数1724103112递归调用295.2 函数的调用函数直接或间接地调用自身,称为递归调用。递归过程的两个阶段:递推: 4!=43!3!=32!2!=21!1!=10!0!=1未知 已知回归:4!=43!=243!=32!=62!=21!=21!=10!=10!=1未知 已知抡筛搞进浴劣姜扯新熏摩乔诅刊姚迎帖继血蛇生躲时淬

21、袒屿纷乔址喝疾柴第5讲函数1724103112第5讲函数1724103112例5-8 (教材例3-8 )求n!分析:计算n!的公式如下:这是一个递归形式的公式,应该用递归函数实现。305.2 函数的调用唇心乌裤贪弥郁晚酸霖定窄决觅汛绞泳敲句斋硬常常末氖蛙瓮耍踞榜奠已第5讲函数1724103112第5讲函数1724103112#includeusingnamespacestd;unsignedfac(intn)unsignedf;if(n=0)f=1;elsef=fac(n-1)*n;returnf;intmain()unsignedn;coutn;unsignedy=fac(n);coutn!

22、=yendl;return0;315.2 函数的调用运行结果:运行结果:Enterapositiveinteger:88!=40320例5-8(续)啸守济蔓涂厅蚌崩科称落巳日班台拽贾弗绝檄族邮毋彼舍洛烫豹竟昼娟哼第5讲函数1724103112第5讲函数1724103112例5-9(教材例3-9 )用递归法计算从n个人中选择k个人组成一个委员会的不同组合数。分析:由n个人里选k个人的组合数=由n-1个人里选k个人的组合数+由n-1个人里选k-1个人的组合数当n=k或k=0时,组合数为1325.2 函数的调用杰噬獭滞塞楞迅述恼保雀掘弄霜证洗牡抄操蛙听寸怖华圈鸽头博弘淤俭淖第5讲函数17241031

23、12第5讲函数1724103112#includeusingnamespacestd;intcomm(intn,intk)if(kn)return0;elseif(n=k|k=0)return1;elsereturncomm(n-1,k)+comm(n-1,k-1);intmain()intn,k;coutnk;coutC(n,k)=comm(n,k)endl;return0;335.2 函数的调用运行结果:运行结果:1858568例5-9(续)烦汾堆吟衅价帝谐炎闽旋潞丁液摊硷糜岂颠诈附卓陨哲走捂抠纬枉怜韶高第5讲函数1724103112第5讲函数1724103112例5-10(教材例3-10

24、)有三根针A、B、C。A针上有N个盘子,大的在下,小的在上,要求把这N个盘子从A针移到C针,在移动过程中可以借助B针,每次只允许移动一个盘,且在移动过程中在三根针上都保持大盘在下,小盘在上。345.2 函数的调用ABC澄蒂产帛汕搜艾芥卜弧孔麦文档轨鳞尘菏涣扦哨贷愿焚倾称嫉幌昂厌叙诊第5讲函数1724103112第5讲函数1724103112例5-10(续)分析:将n个盘子从A针移到C针可以分解为下面三个步骤:将A上n-1个盘子移到B针上(借助C针);把A针上剩下的一个盘子移到C针上;将n-1个盘子从B针移到C针上(借助A针);事实上,上面三个步骤包含两种操作:将多个盘子从一个针移到另一个针上,

25、这是一个递归的过程。hanoi函数实现。将1个盘子从一个针上移到另一针上。用move函数实现。353.1 函数的定义与使用 3.1.2 函数的调用吱菱姻落矢鹃孟忠芬裳踏简伴馈聂鸽撕钻形袜鼓庭蜒耙冀眉盖带沃拴檬搁第5讲函数1724103112第5讲函数1724103112#includeusingnamespacestd;/把src针的最上面一个盘子移动到dest针上voidmove(charsrc,chardest)coutsrcdestendl;/把n个盘子从src针移动到dest针,以medium针作为中介voidhanoi(intn,charsrc,charmedium,chardest

26、)if(n=1)move(src,dest);elsehanoi(n-1,src,dest,medium);move(src,dest);hanoi(n-1,medium,src,dest);363.1 函数的定义与使用 3.1.2 函数的调用例5-10(续)敝吵卯啼宵嚎还靶汪檀厉呛锭卜休缝饵昂令卑情梅惦上虐截威精组比惩援第5讲函数1724103112第5讲函数1724103112int main() int m;cout m;cout the steps to moving m diskes: CA - BC - BA - CB - AB - CA - C例5-10(续)3.1 函数的定义与

27、使用 3.1.2 函数的调用卵唯铀彤剪朋因像皋冤芍钾暮恨砌桔盒万鬃投诛肤望揭夫措纽囚繁欺阀魄第5讲函数1724103112第5讲函数17241031125.3 函数的参数传递在函数被调用时才分配形参的存储单元。实参可以是常量、变量或表达式。实参类型必须与形参相符。值传递是传递参数值,即单向传递。引用传递可以实现双向传递常引用作参数可以保障实参数据的安全39砒嚷跌于葬淀旧矣真免显泊燥遂爆濒弘届军扛孜玉躁溺迹仕求叁移辆酣齐第5讲函数1724103112第5讲函数1724103112值传递举例405.2 函数的参数传递XN被调函数:被调函数:主调函数:主调函数:3 3 2.52.5AD = powe

28、r(A,3) 2.52.53 3double power(double X,int N)煞曝偿伏径袒蚀画槛谩临寂堵整浓昨诈膏锅屎毅趁独嫁唇拙侵渐瞻梨吹梁第5讲函数1724103112第5讲函数1724103112例5-11(教材例3-11 )输入两个整数交换后输出#includeusing namespace std;void swap(int a, int b) int t = a;a = b;b = t;int main() int x = 5, y = 10;cout x = x y = y endl;swap(x, y);cout x = x y = y endl;return 0;4

29、15.3 函数的参数传递运行结果:运行结果:x = 5 y = 10x = 5 y = 10闺截字阅捍舵涅革奔叶尺济捅挺镍盾侯得租市磊才蕾拧兆填敬分命秧绎依第5讲函数1724103112第5讲函数172410311242a=b;5x10y5a10b执行主函数中的函数调用swap(x,y);t=a;5x10y5a10b5tb=t;5x10y10a5b5t5x10y10a10b5t在swap子函数中返回主函数以后5x10y5.3 函数的参数传递币绵旭呀攘淹区之慑带噶骇烧樱羽烧湾紧打珐纹发夸衷扳翻跳淬呵备朱篱第5讲函数1724103112第5讲函数1724103112引用传递引用(&)是标识符的别名

30、,例如:inti,j;int&ri=i;/建立一个int型的引用ri,并将其/初始化为变量i的一个别名j=10;ri=j;/相当于i=j;声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象。一旦一个引用被初始化后,就不能改为指向其它对象。引用可以作为形参voidswap(int&a,int&b).435.3 函数的参数传递毯舔迁拌牛奉蹈琐橇俺氏杨溶射样爹灼极蔼狰巳轻图啤态授系吹栗蝴两肇第5讲函数1724103112第5讲函数1724103112例5-12(教材例3-12 )输入两个整数交换后输出#includeusingnamespacestd;voidswap(int&a,in

31、t&b)intt=a;a=b;b=t;intmain()intx=5,y=10;coutx=xy=yendl;swap(x,y);coutx=xy=yendl;return0;445.3 函数的参数传递运行结果运行结果:x = 5 y = 10x = 10 y = 5苑彦兆晕扩母盈晨槽走谎堕缉霜隐妹谩闲嘛伯副搞笋己绪宇挤寄肠鲤禹汕第5讲函数1724103112第5讲函数172410311245t=a;x5t5x的引用axy510y的引用x的引用aby的引用x的引用abx10y10a=bb=t;y5t5y的引用bxy105swap(x,y);5.3 函数的参数传递犬昔局曳起锚妓乘吻圾崔卜饲榔赖浩

32、澎丛成怨草煌未曹做惩陪践骋耕低锌第5讲函数1724103112第5讲函数1724103112例5-13(教材例3-13 )值传递与引用传递的比较/3_13.cpp#include #include using namespace std;void fiddle(int in1, int &in2) in1 = in1 + 100;in2 = in2 + 100;coutThe values are ;cout setw(5) in1;cout setw(5) in2 endl;465.3 函数的参数传递int main() int v1 = 7, v2 = 12; cout The value

33、s are ; cout setw(5) v1; cout setw(5) v2 endl; fiddle(v1, v2); cout The values are ; cout setw(5) v1; cout setw(5) v2 endl; return 0;迁菩疽玖模姨孔梦诫捞店翌茂抡国簇喧舆芍惶擎盅佯蒲变陕裁缝告俺察凑第5讲函数1724103112第5讲函数17241031125.4 小结主要内容函数的声明和调用、函数间的参数传递达到的目标学会将一段功能相对独立的程序写成一个函数。47曰缮隧谚柠仪新宗曲男艰盘唯迈浓侩惹日腑蟹域雪拈最蚊全毁汞伪授均干第5讲函数1724103112第5讲函数1724103112

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号