c语言程序设计(郑莉第四版)课件ppt.ppt
《c语言程序设计(郑莉第四版)课件ppt.ppt》由会员分享,可在线阅读,更多相关《c语言程序设计(郑莉第四版)课件ppt.ppt(72页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章第三章 函数函数清华大学清华大学 郑郑 莉莉C+语言程序设计1C+语言程序设计清华大学 郑莉2本章主要内容本章主要内容l函数的定义和调用函数的定义和调用l函数间的参数传递函数间的参数传递l内联函数内联函数l带默认形参值的函数带默认形参值的函数l函数重载函数重载lC+系统函数系统函数l深度探索深度探索C+语言程序设计清华大学 郑莉3函数的定义函数的定义l函数是面向对象程序设计中,对功能的函数是面向对象程序设计中,对功能的抽象抽象l函数定义的语法形式函数定义的语法形式类型标识符 函数名(形式参数表)语句序列函数的声明与使用是被初始化的内部变量,寿命和可见性仅限于函数内部若无返回值,写void
2、C+语言程序设计清华大学 郑莉4函数的定义函数的定义l形式参数表形式参数表 name1,name2,.,namenl函数的返回值函数的返回值由 return 语句给出,例如:return 0无返回值的函数(void类型),不必写return语句。函数的声明与使用C+语言程序设计清华大学 郑莉5函数的调用函数的调用l调用前先声明函数:调用前先声明函数:若函数定义在调用点之前,则无需另外声明;若函数定义在调用点之后,则需要在调用函数前按如下形式声明函数原型:类型标识符 被调用函数名(含类型说明的形参表);l调用形式调用形式 函数名(实参列表)l嵌套调用嵌套调用函数可以嵌套调用,但不允许嵌套定义。l
3、递归调用递归调用函数直接或间接调用自身。函数的声明与使用C+语言程序设计清华大学 郑莉6例例3-1编写一个求编写一个求x的的n次方的函数次方的函数#include include using namespace std;using namespace std;/计算计算x的的n次方次方doubledouble power(double x,int n)power(double x,int n)double val=1.0;double val=1.0;while(n-)while(n-)val*=x;val*=x;return val;return val;int main()int main
4、()cout 5 to the power 2 is cout 5 to the power 2 is powerpower(5,2)endl;(5,2)endl;return 0;return 0;函数的声明与使用C+语言程序设计清华大学 郑莉7运行结果:运行结果:5 5 to the power 2 is 25to the power 2 is 25例例3-1编写一个求编写一个求x的的n次方的函数次方的函数函数的声明与使用C+语言程序设计清华大学 郑莉8例例3-2 数制转换数制转换题目:题目:输入一个输入一个8 8位二进制数,将其转换位二进制数,将其转换为十进制数输出。为十进制数输出。例如
5、:例如: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函数的声明与使用#include include using namespace std;using namespace std;/计算计算x的的n次方次方double double powerpower(double x,int n);(double x,int n);int main()int main()int value=0;int value=0;cout E
6、nter an 8 bit binary number ;cout=0;i-)for(int i=7;i=0;i-)char ch;char ch;cin ch;cin ch;if(ch=1)if(ch=1)value+=int(value+=int(powerpower(2,i);(2,i);cout Decimal value is value endl;cout Decimal value is value endl;return 0;return 0;double double powerpower(double x,int n)(double x,int n)double val=1
7、.0;double val=1.0;while(n-)while(n-)val*=x;val*=x;return val;return val;运行结果:运行结果:Enter an 8 bit binary number Enter an 8 bit binary number 0110100101101001Decimal value is 105Decimal value is 10599C+语言程序设计清华大学 郑莉10例例3-3编写程序求编写程序求的值的值其中其中arctanarctan用如下形式的级数计算:用如下形式的级数计算:直直到到级级数数某某项项绝绝对对值值不不大大于于1010
8、-15-15为为止止;和和x x均为均为doubledouble型。型。函数的声明与使用#include#include using namespace std;using namespace std;double double arctan(doublearctan(double x)x)double double sqrsqr=x*x;=x*x;double e=x;double e=x;double r=0;double r=0;intint i=1;i=1;while(e/i 1e-15)while(e/i 1e-15)double f=e/i;double f=e/i;r=(i%4=
9、1)?r+f:r-f;r=(i%4=1)?r+f:r-f;e=e*e=e*sqrsqr;i+=2;i+=2;return r;return r;1111intint main()main()double a=16.0*double a=16.0*arctan(1/5.0)arctan(1/5.0);double b=4.0*double b=4.0*arctan(1/239.0)arctan(1/239.0);/注意:因为整数相除结果取整,如果参数写注意:因为整数相除结果取整,如果参数写1/51/5,1/2391/239,结果就都是,结果就都是0 0coutcout PI=a-b PI=a-b
10、 endlendl;return 0;return 0;运行结果:运行结果:PI=3.14159PI=3.141591212C+语言程序设计清华大学 郑莉13例例3-4l寻找并输出寻找并输出1111999999之间的数之间的数m m,它满足,它满足m m、m m2 2和和m m3 3均为回文数。均为回文数。回文:各位数字左右对称的整数。例如:11满足上述条件 112 2=121,113 3=1331。l分析:分析:10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。函数的声明与使用#include#include using n
11、amespace std;using namespace std;/判断判断n n是否为回文数是否为回文数boolbool symm(unsignedsymm(unsigned n)n)unsigned i=n;unsigned i=n;unsigned m=0;unsigned m=0;while(while(i 0i 0)m=m=m*10+i%10m*10+i%10;i/=10;i/=10;return m=n;return m=n;1414intint main()main()for(unsignedfor(unsigned m=11;m 1000;m+)m=11;m 1000;m+)i
12、f(if(symmsymm(m(m)&)&symmsymm(m(m*m)&*m)&symmsymm(m(m*m*m)*m*m)cout m=m;cout m=m;cout m*m=m*m;cout m*m=m*m;cout m*m*m=cout m*m*m=m*m*m endl;m*m*m endl;return 0;return 0;1515运行结果:运行结果: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=123
13、21 m*m*m=1367631m=111 m*m=12321 m*m*m=13676311616C+语言程序设计清华大学 郑莉17例例3-5计算如下公式,并输出结果:计算如下公式,并输出结果:其中其中r r、s s的值由键盘输入。的值由键盘输入。sin xsin x的近似的近似值按如下公式计算,计算精度为值按如下公式计算,计算精度为1010-6-6:函数的声明与使用#include#include#include#include /对对C+C+标准库中数学函数的说明标准库中数学函数的说明using namespace std;using namespace std;const double
14、TINY_VALUE=1e-10;const double TINY_VALUE=1e-10;double double tsin(doubletsin(double x)x)double g=0;double g=0;double t=x;double t=x;intint n=1;n=1;do do g+=t;g+=t;n+;n+;t=-t*x*x/(2*n-1)/(2*n-2);t=-t*x*x/(2*n-1)/(2*n-2);while(while(fabs(tfabs(t)=TINY_VALUE);)=TINY_VALUE);return g;return g;1818int mai
15、n()int main()double k,r,s;double k,r,s;cout r=;cout r;cin r;cout s=;cout s;cin s;if(r*r=s*s)if(r*r=s*s)k=sqrt(k=sqrt(tsintsin(r)*(r)*tsintsin(r)+(r)+tsintsin(s)*(s)*tsin(s);tsin(s);elseelsek=k=tsintsin(r*s)/2;(r*s)/2;cout k endl;cout k endl;return 0;return 0;运行结果:r=5s=81.377811919C+语言程序设计清华大学 郑莉20例例
16、3-6投骰子的随机游戏投骰子的随机游戏每每个个骰骰子子有有六六面面,点点数数分分别别为为1 1、2 2、3 3、4 4、5 5、6 6。游游戏戏者者在在程程序序开开始始时时输输入入一一个个无无符符号号整整数数,作作为为产产生生随机数的种子。随机数的种子。每每轮轮投投两两次次骰骰子子,第第一一轮轮如如果果和和数数为为7 7或或1111则则为为胜胜,游游戏戏结结束束;和和数数为为2 2、3 3或或1212则则为为负负,游游戏戏结结束束;和和数数为为其其它它值值则则将将此此值值作作为为自自己己的的点点数数,继继续续第第二二轮轮、第第三三轮轮.直直到到某某轮轮的的和和数数等等于于点点数数则则取取胜胜,
17、若若在在此此前前出现和数为出现和数为7 7则为负。则为负。由由rolldicerolldice函函数数负负责责模模拟拟投投骰骰子子、计计算算和和数数并并输输出和数。出和数。函数的声明与使用lrandrand函数原型:int rand(void);所需头文件:功能和返回值:求出并返回一个伪随机数lsrandsrand函数原型:void srand(unsigned int seed);参数:seed产生随机数的种子。所需头文件:功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初化rand()。2121#include#include#include#inc
18、lude using namespace std;using namespace std;/投骰子、计算和数、输出和数投骰子、计算和数、输出和数intint rollDicerollDice()()intint die1=1+rand()%6;die1=1+rand()%6;intint die2=1+rand()%6;die2=1+rand()%6;intint sum=die1+die2;sum=die1+die2;coutcout player rolled die1 +player rolled die1 +die2 =sum die2 =sum endlendl;return sum
19、;return sum;2222enumenum GameStatusGameStatus WIN,LOSE,PLAYING;WIN,LOSE,PLAYING;intint main()main()intint sum,sum,myPointmyPoint;GameStatusGameStatus status;status;unsigned seed;unsigned seed;coutcout Please enter an unsigned integer:;seed;/seed;/输入随机数种子输入随机数种子srand(seedsrand(seed);/);/将种子传递给将种子传递给r
20、and()rand()sum=sum=rollDicerollDice();/();/第一轮投骰子、计算和数第一轮投骰子、计算和数2323switch(sum)switch(sum)case 7:/case 7:/如果和数为如果和数为7 7或或1111则为胜则为胜,状态为状态为WINWINcase 11:case 11:status=WIN;status=WIN;break;break;case 2:/case 2:/和数为和数为2 2、3 3或或1212则为负则为负,状态为状态为LOSELOSEcase 3:case 3:case 12:case 12:status=LOSE;status=
21、LOSE;break;break;default:/default:/其它情况其它情况,游戏尚无结果游戏尚无结果,状态为状态为PLAYING,PLAYING,记下记下点数点数,为下一轮做准备为下一轮做准备 status=PLAYING;status=PLAYING;myPointmyPoint=sum;=sum;coutcout point is point is myPointmyPoint endlendl;break;break;2424while(status=PLAYING)/while(status=PLAYING)/只要状态仍为只要状态仍为PLAYING,PLAYING,就继续就
22、继续进行下一轮进行下一轮 sum=sum=rollDicerollDice();();if(sum=if(sum=myPointmyPoint)/)/某轮的和数等于点数则取胜某轮的和数等于点数则取胜 status=WIN;status=WIN;else if(sum=7)/else if(sum=7)/出现和数为出现和数为7 7则为负则为负 status=LOSE;status=LOSE;/当状态不为当状态不为PLAYINGPLAYING时上面的循环结束时上面的循环结束,以下程序段输出游戏结以下程序段输出游戏结果果if(status=WIN)if(status=WIN)coutcout pla
23、yer wins player wins endlendl;elseelse coutcout player loses player loses endlendl;return 0;return 0;2525运行结果运行结果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
24、 wins2626C+语言程序设计清华大学 郑莉27嵌套调用嵌套调用函数的声明与使用main调fun1()结束fun1()调fun2()返回fun2()返回C+语言程序设计清华大学 郑莉28例例3-6 输入两个整数,求平方和。输入两个整数,求平方和。#include#include using namespace std;using namespace std;intint fun2fun2(int m)(int m)return m*m;return m*m;intint fun1fun1(int(int x,intx,int y)y)return return fun2fun2(x)+(x
25、)+fun2fun2(y);(y);函数的声明与使用intint main()main()intint a,b;a,b;coutcout a b;a b;coutcout The The sum sum of of square square of of a a and and b:b:fun1fun1(a,b)(a,b)endlendl;return 0;return 0;运行结果:运行结果:Please enter two Please enter two integers(aintegers(a and b):3 4 and b):3 4The sum of square of a an
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第四 课件 ppt
限制150内