L03函数省名师优质课赛课获奖课件市赛课一等奖课件.ppt
《L03函数省名师优质课赛课获奖课件市赛课一等奖课件.ppt》由会员分享,可在线阅读,更多相关《L03函数省名师优质课赛课获奖课件市赛课一等奖课件.ppt(67页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章第三章 函数函数福州大学福州大学 吴小竹吴小竹面向对象程序设计第1页1本章主要内容本章主要内容l函数申明和调用函数申明和调用l函数间参数传递函数间参数传递l内联函数内联函数l带默认形参值函数带默认形参值函数l函数重载函数重载lC+系统函数系统函数第2页2函数申明函数申明l函数是面向对象程序设计中,对功效抽函数是面向对象程序设计中,对功效抽象象l函数申明语法形式函数申明语法形式类型标识符 函数名(形式参数表)语句序列函数申明与使用是被初始化内部变量,寿命和可见性仅限于函数内部若无返回值,写void第3页3函数申明函数申明l形式参数表形式参数表 name1,name2,.,namenl函数返
2、回值函数返回值由 return 语句给出,比如:return 0无返回值函数(void类型),无须写return语句。函数申明与使用第4页4函数调用函数调用l调用前先申明函数原型:调用前先申明函数原型:在调用函数中,或程序文件中全部函数之外,按以下形式说明:类型标识符 被调用函数名(含类型说明形参表);l调用形式调用形式 函数名(实参列表)l嵌套调用嵌套调用函数能够嵌套调用。递归调用函数直接或间接调用本身。函数申明与使用第5页5例例3-1编写一个求编写一个求xn次方函数次方函数#include include using namespace std;using namespace std;do
3、uble power(double x,int n);double power(double x,int n);int main()int main()cout5 to the power 2 is cout5 to the power 2 is powerpower(5,2)endl;(5,2)endl;double power(double x,int n)double power(double x,int n)double val=1.0;double val=1.0;while(n-)val=val*x;while(n-)val=val*x;return(val);return(val
4、);函数申明与使用第6页6运行结果:运行结果:5 to the power 2 is 255 to the power 2 is 25例例3-1编写一个求编写一个求xn次方函数次方函数函数申明与使用第7页7例例3-2 数制转换数制转换题目:题目:输入一个输入一个8 8位二进制数,将其转换位二进制数,将其转换为十进制数输出。为十进制数输出。比如:比如:110111012 2=1(2=1(23 3)+1(2)+1(22 2)+0(2)+0(21 1)+1(2)+1(20 0)=13)=131010 所以,假如输入所以,假如输入11011101,则应输出,则应输出1313函数申明与使用第8页8#in
5、clude include using namespace std;using namespace std;double double powerpower(double x,int n);(double x,int n);int main()int main()int i;int i;int value=0;int value=0;char ch;char ch;cout Enter an 8 bit binary number ;cout=0;i-)for(i=7;i=0;i-)cin ch;cin ch;if(ch=1)if(ch=1)value+=int(value+=int(powe
6、rpower(2,i);(2,i);cout Decimal value is valueendl;cout Decimal value is valueendl;double double powerpower(double x,int n)(double x,int n)double val=1.0;double val=1.0;while(n-)val*=x;while(n-)val*=x;return(val);return(val);运行结果:运行结果:Enter an 8 bit binary number Enter an 8 bit binary number 01101001
7、01101001Decimal value is 105Decimal value is 1059第9页9例例3-3编写程序求编写程序求值值其中其中arctanarctan用以下形式级数计算:用以下形式级数计算:直直到到级级数数某某项项绝绝对对值值小小于于1010-15-15为为止止;和和x x均为均为doubledouble型。型。函数申明与使用第10页10#include#includeusing namespace std;using namespace std;int main()int main()double a,b;double a,b;double double arctana
8、rctan(double x);/(double x);/函数原型申明函数原型申明 a=16.0*a=16.0*arctanarctan(1/5.0);(1/5.0);b=4.0*b=4.0*arctanarctan(1/239.0);(1/239.0);/注意:因为整数相除结果取整,注意:因为整数相除结果取整,/假如参数写假如参数写1/51/5,1/2391/239,结果就都是,结果就都是0 0 coutPI=a-bendl;coutPI=a-b1e-15)while(e/i1e-15)f=e/i;f=e/i;r=(i%4=1)?r+f:r-f;r=(i%4=1)?r+f:r-f;e=e*s
9、qr;i+=2;e=e*sqr;i+=2;return r;return r;运行结果:运行结果:PI=3.14159PI=3.1415912第12页12例例3-4l寻找并输出寻找并输出1199911999之间数之间数m m,它满足,它满足m m、m m2 2和和m m3 3均为回文数。均为回文数。回文:各位数字左右对称整数。比如:11满足上述条件 112 2=121,113 3=1331。l分析:分析:10取余方法,从最低位开始,依次取出该数各位数字。按反序重新组成新数,比较与原数是否相等,若相等,则原数为回文。函数申明与使用第13页13#include#include using name
10、space std;using namespace std;int main()int main()bool bool symmsymm(long n);(long n);long m;long m;for(m=11;m1000;m+)for(m=11;m1000;m+)if(if(symmsymm(m)&(m)&symmsymm(m*m)&(m*m)&symmsymm(m*m*m)(m*m*m)coutm=m m*m=m*m coutm=m m*m=m*m m*m*m=m*m*mendl;m*m*m=m*m*mendl;14第14页14bool symm(long n)bool symm(l
11、ong n)long i,m;long i,m;i=n;m=0;i=n;m=0;while(while(i i)m=m=m*10+i%10m*10+i%10;i=i/10 ;i=i/10 ;return(m=n);return(m=n);15第15页15运行结果:运行结果:m=11 m*m=121 m*m*m=1331m=11 m*m=121 m*m*m=1331m=101 m*m=10201 m*m*m=1030301m=101 m*m=10201 m*m*m=1030301m=111 m*m=12321 m*m*m=1367631m=111 m*m=12321 m*m*m=13676311
12、6第16页16例例3-5计算以下公式,并输出结果:计算以下公式,并输出结果:其中其中r r、s s值由键盘输入。值由键盘输入。sin xsin x近似值按近似值按以下公式计算,计算精度为以下公式计算,计算精度为1010-6-6:函数申明与使用第17页17#include#include#include#includeusing namespace std;using namespace std;int main()int main()double k,r,s;double k,r,s;double double tsintsin(double x);(double x);coutr=;cout
13、r;cinr;couts=;couts;cins;if(r*r=s*s)if(r*r=s*s)k=sqrt(k=sqrt(tsintsin(r)*(r)*tsintsin(r)+(r)+tsintsin(s)*(s)*tsintsin(s);(s);else else k=k=tsintsin(r*s)/2;(r*s)/2;coutkendl;coutk=p);while(fabs(t)=p);return g;return g;运行结果:r=5s=81.3778119第19页19例例3-6投骰子随机游戏投骰子随机游戏每每个个骰骰子子有有六六面面,点点数数分分别别为为1 1、2 2、3 3、4
14、 4、5 5、6 6。游游戏戏者者在在程程序序开开始始时时输输入入一一个个无无符符号号整整数数,作作为为产产生生随机数种子。随机数种子。每每轮轮投投两两次次骰骰子子,第第一一轮轮假假如如和和数数为为7 7或或1111则则为为胜胜,游游戏戏结结束束;和和数数为为2 2、3 3或或1212则则为为负负,游游戏戏结结束束;和和数数为为其其它它值值则则将将此此值值作作为为自自己己点点数数,继继续续第第二二轮轮、第第三三轮轮.直直到到某某轮轮和和数数等等于于点点数数则则取取胜胜,若若在在以以前前出出现现和数为和数为7 7则为负。则为负。由由rolldicerolldice函函数数负负责责模模拟拟投投骰骰
15、子子、计计算算和和数数并并输输出和数。出和数。函数申明与使用第20页20#include#include#include#include using namespace std;using namespace std;int int rolldicerolldice(void);(void);int main()int main()int gamestatus,sum,mypoint;int gamestatus,sum,mypoint;unsigned seed;unsigned seed;coutPlease enter an unsigned integer:;coutseed;/cin
16、seed;/输入随机数种子输入随机数种子 srand(seed);/srand(seed);/将种子传递给将种子传递给rand()rand()sum=sum=rolldicerolldice();/();/第一轮投骰子、计算和数第一轮投骰子、计算和数21第21页21 switch(sum)switch(sum)case 7:/case 7:/假如和数为假如和数为7 7或或1111则为胜则为胜,状态为状态为1 1 case 11:gamestatus=1;case 11:gamestatus=1;break;break;case 2:/case 2:/和数为和数为2 2、3 3或或1212则为负
17、则为负,状态为状态为2 2 case 3:case 3:case 12:gamestatus=2;case 12:gamestatus=2;break;break;default:default:/其他情况其他情况,游戏尚无结果游戏尚无结果,状态为状态为0,0,记下点数记下点数,为下一轮做准备为下一轮做准备 gamestatus=0;gamestatus=0;mypoint=sum ;mypoint=sum ;coutpoint is mypointendl;coutpoint is mypointendl;break;break;22第22页22 while(gamestatus=0)whi
18、le(gamestatus=0)/只要状态仍为只要状态仍为 0,0,就继续进行下一轮就继续进行下一轮 sum=sum=rolldicerolldice();();if(sum=mypoint)if(sum=mypoint)/某轮和数等于点数则取胜某轮和数等于点数则取胜,状态置为状态置为1 1 gamestatus=1 gamestatus=1 else else if(sum=7 )/if(sum=7 )/出现和数为出现和数为7 7则为负则为负,状态置为状态置为2 2 gamestatus=2;gamestatus=2;/当状态不为当状态不为0 0时上面循环结束时上面循环结束,以下程序段输出游
19、戏结果以下程序段输出游戏结果 if(gamestatus=1 )if(gamestatus=1 )coutplayer winsn;coutplayer winsn;else else coutplayer losesn;coutplayer losesn;23第23页23lrandrand函数原型:int rand(void);所需头文件:功效和返回值:求出并返回一个伪随机数lsrandsrand函数原型:void srand(unsigned int seed);参数:seed产生随机数种子。所需头文件:功效:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,能够重
20、新初始化rand()。24第24页24int rolldice(void)int rolldice(void)/投骰子、计算和数、输出和数投骰子、计算和数、输出和数 int die1,die2,worksum;int die1,die2,worksum;die1=1+rand()%6;die1=1+rand()%6;die2=1+rand()%6;die2=1+rand()%6;worksum=die1+die2;worksum=die1+die2;coutplayer rolled coutplayer rolled die1+die2=worksumendl;die1+die2=works
21、umendl;return worksum;return worksum;25第25页25运行结果运行结果2 2:Please enter an unsigned integer:23Please enter an unsigned integer:23player rolled 6+3=9player rolled 6+3=9point is 9point is 9player rolled 5+4=9player rolled 5+4=9player winsplayer wins26第26页26函数调用执行过程函数调用执行过程函数申明与使用main()调fun()结束fun()返回保留:
22、返回地址当前现场恢复:主调程序现场返回地址第27页27嵌套调用嵌套调用函数申明与使用main调fun1()结束fun1()调fun2()返回fun2()返回第28页28例例3-6 输入两个整数,求平方和。输入两个整数,求平方和。#include#include using namespace std;using namespace std;int main()int main()int a,b;int a,b;int fun1(int x,int y);int fun1(int x,int y);cinab;cinab;couta couta、b b平方和:平方和:fun1fun1(a,b)e
23、ndl;(a,b)endl;函数申明与使用第29页29int int fun1fun1(int x,int y)(int x,int y)int int fun2fun2(int m);(int m);return(fun2(x)+fun2(y);return(fun2(x)+fun2(y);int int fun2fun2(int m)(int m)return(m*m);return(m*m);运行结果:运行结果:3 43 4a a、b b平方和:平方和:252530第30页30递归调用递归调用l函数直接或间接地调用本身,称为递归调用。l递归过程两个阶段:递推:4!=43!3!=32!2!
24、=21!1!=10!0!=1未知 已知回归:4!=43!=243!=32!=62!=21!=21!=10!=10!=1未知未知 已知已知函数申明与使用第31页31例例3-8 求求n!分析:计算n!公式以下:这是一个递归形式公式,应该用递归函数实现。函数申明与使用第32页32源程序:源程序:#include#include using namespace std;using namespace std;long long facfac(int n)(int n)long f;long f;if(n0)if(n0)coutn0,data error!endl;coutn0,data error!e
25、ndl;else if(n=0)f=1;else if(n=0)f=1;else f=else f=facfac(n-1)*n;(n-1)*n;return(f);return(f);33第33页33int main()int main()long fac(int n);long fac(int n);int n;int n;long y;long y;coutEnter a positive integer:;coutn;cinn;y=y=facfac(n);(n);coutn!=yendl;coutn!=yendl;运行结果:运行结果:Enter a positive integer:8E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- L03 函数 名师 优质课 获奖 课件 市赛课 一等奖
限制150内