chap3C清华大学郑莉.pptx
《chap3C清华大学郑莉.pptx》由会员分享,可在线阅读,更多相关《chap3C清华大学郑莉.pptx(66页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1本章主要内容函数的声明和调用函数间的参数传递内联函数带默认形参值的函数函数重载C+系统函数第1页/共66页2函数的声明函数是面向对象程序设计中,对功能的抽象函数声明的语法形式类型标识符 函数名(形式参数表)语句序列函数的声明与使用是被初始化的内部变量,寿命和可见性仅限于函数内部若无返回值,写void第2页/共66页3函数的声明形式参数表 name1,name2,.,namen函数的返回值由 return 语句给出,例如:return 0无返回值的函数(void类型),不必写return语句。函数的声明与使用第3页/共66页4函数的调用调用前先声明函数原型:在调用函数中,或程序文件中所有函数之
2、外,按如下形式说明:类型标识符 被调用函数名(含类型说明的形参表);调用形式 函数名(实参列表)嵌套调用函数可以嵌套调用,但不允许嵌套定义。递归调用函数直接或间接调用自身。函数的声明与使用第4页/共66页5例3-1编写一个求x的n次方的函数#include using namespace std;doublepower(double x,int n);int main()cout 5 to the power 2 is power(5,2)endl;doublepower(double x,int n)double val=1.0;while(n-)val=val*x;return(val);
3、函数的声明与使用第5页/共66页6运行结果:5 to the power 2 is 25例3-1编写一个求x的n次方的函数函数的声明与使用第6页/共66页7例3-2 数制转换题目:输入一个8位二进制数,将其转换为十进制数输出。例如:11012=1(23)+1(22)+0(21)+1(20)=1310 所以,如果输入1101,则应输出13函数的声明与使用第7页/共66页#include using namespace std;double power(double x,int n);int main()int i;int value=0;char ch;cout=0;i-)cin ch;if(c
4、h=1)value+=int(power(2,i);cout Decimal value is valueendl;double power(double x,int n)double val=1.0;while(n-)val*=x;return(val);运行结果:运行结果:Enter an 8 bit binary number 01101001Decimal value is 1058第8页/共66页9例3-3编写程序求的值其中arctan用如下形式的级数计算:直到级数某项绝对值不大于10-15为止;和x均为double型。函数的声明与使用第9页/共66页#includeusing na
5、mespace std;int main()double a,b;double arctan(double x);/函数原型声明 a=16.0*arctan(1/5.0);b=4.0*arctan(1/239.0);/注意:因为整数相除结果取整,/如果参数写1/5,1/239,结果就都是0 coutPI=a-b1e-15)f=e/i;r=(i%4=1)?r+f:r-f ;e=e*sqr;i+=2;return r;运行结果:运行结果:PI=3.1415911第11页/共66页12例3-4寻找并输出11999之间的数m,它满足m、m2和m3均为回文数。回文:各位数字左右对称的整数。例如:11满足
6、上述条件 112=121,113=1331。分析:10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。函数的声明与使用第12页/共66页#include using namespace std;int main()bool symm(long n);long m;for(m=11;m1000;m+)if(symm(m)&symm(m*m)&symm(m*m*m)coutm=m m*m=m*m m*m*m=m*m*mendl;13第13页/共66页bool symm(long n)long i,m;i=n;m=0;while(i)
7、m=m*10+i%10;i=i/10 ;return(m=n);14第14页/共66页运行结果:m=11 m*m=121 m*m*m=1331m=101 m*m=10201 m*m*m=1030301m=111 m*m=12321 m*m*m=136763115第15页/共66页16例3-5计算如下公式,并输出结果:其中r、s的值由键盘输入。SIN x的近似值按如下公式计算,计算精度为10-6:函数的声明与使用第16页/共66页#include#includeusing namespace std;int main()double k,r,s;double tsin(double x);cou
8、tr;couts;if(r*r=s*s)k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s);else k=tsin(r*s)/2;coutk=p);return g;运行结果:r=5s=81.3778118第18页/共66页19例3-6投骰子的随机游戏游戏规则是:每个骰子有六面,点数分别为1、2、3、4、5、6。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮.直到某轮的和数等于点数则取胜,若在此前出现和数为7
9、则为负。由rolldice函数负责模拟投骰子、计算和数并输出和数。函数的声明与使用第19页/共66页#include#include using namespace std;int rolldice(void);int main()int gamestatus,sum,mypoint;unsigned seed;coutseed;/输入随机数种子 srand(seed);/将种子传递给rand()sum=rolldice();/第一轮投骰子、计算和数20第20页/共66页 switch(sum)case 7:/如果和数为7或11则为胜,状态为1 case 11:gamestatus=1;bre
10、ak;case 2:/和数为2、3或12则为负,状态为2 case 3:case 12:gamestatus=2;break;default:/其它情况,游戏尚无结果,状态为0,记下点数,为下一轮做准备 gamestatus=0;mypoint=sum ;coutpoint is mypointendl;break;21第21页/共66页 while(gamestatus=0 )/只要状态仍为 0,就继续进行下一轮 sum=rolldice();if(sum=mypoint)/某轮的和数等于点数则取胜,状态置为1 gamestatus=1 ;else if(sum=7 )/出现和数为7则为负,
11、状态置为2 gamestatus=2;/当状态不为0时上面的循环结束,以下程序段输出游戏结果 if(gamestatus=1 )coutplayer winsn;else coutplayer losesn;22第22页/共66页rand函数原型:int rand(void);所需头文件:功能和返回值:求出并返回一个伪随机数srand函数原型:void srand(unsigned int seed);参数:seed产生随机数的种子。所需头文件:功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初化rand()。23第23页/共66页int rolldic
12、e(void)/投骰子、计算和数、输出和数 int die1,die2,worksum;die1=1+rand()%6;die2=1+rand()%6;worksum=die1+die2;coutplayer rolled die1+die2=worksumendl;return worksum;24第24页/共66页运行结果2:Please enter an unsigned integer:23player rolled 6+3=9point is 9player rolled 5+4=9player wins25第25页/共66页26函数调用的执行过程函数的声明与使用main()调fun
13、()结束fun()返回保存:返回地址当前现场恢复:主调程序现场返回地址第26页/共66页27嵌套调用函数的声明与使用main调fun1()结束fun1()调fun2()返回fun2()返回第27页/共66页28例3-6 输入两个整数,求平方和。#include using namespace std;int main()int a,b;int fun1(int x,int y);cinab;couta、b的平方和:fun1(a,b)endl;函数的声明与使用第28页/共66页int fun1(int x,int y)int fun2(int m);return(fun2(x)+fun2(y);
14、int fun2(int m)return(m*m);运行结果:3 4a、b的平方和:2529第29页/共66页30递归调用函数直接或间接地调用自身,称为递归调用。递归过程的两个阶段:递推:4!=43!3!=32!2!=21!1!=10!0!=1未知 已知回归:4!=43!=243!=32!=62!=21!=21!=10!=10!=1未知 已知函数的声明与使用第30页/共66页31例3-8 求n!分析:计算n!的公式如下:这是一个递归形式的公式,应该用递归函数实现。函数的声明与使用第31页/共66页源程序:#include using namespace std;long fac(int n)
15、long f;if(n0)coutn0,data error!endl;else if(n=0)f=1;else f=fac(n-1)*n;return(f);32第32页/共66页int main()long fac(int n);int n;long y;coutn;y=fac(n);coutn!=yendl;运行结果:Enter a positive integer:88!=4032033第33页/共66页34例3-9用递归法计算从n个人中选择k个人组成一个委员会的不同组合数。分析:由n个人里选k个人的组合数=由n-1个人里选k个人的组合数 +由n-1个人里选k-1个人的组合数当n=k或
16、k=0时,组合数为1函数的声明与使用第34页/共66页#includeusing namespace std;int main()int n,k;int comm(int n,int k);cinnk;coutcomm(n,k)n )return 0;else if(n=k|k=0 )return 1;else return comm(n-1,k)+comm(n-1,k-1);运行结果:18 5856835第35页/共66页36例3-10汉诺塔问题有三根针A、B、C。A针上有N个盘子,大的在下,小的在上,要求把这N个盘子从A针移到C针,在移动过程中可以借助B针,每次只允许移动一个盘,且在移动过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- chap3C 清华大学
限制150内