C++课件c++3章节1章节

上传人:E**** 文档编号:91227886 上传时间:2019-06-26 格式:PPT 页数:78 大小:226KB
返回 下载 相关 举报
C++课件c++3章节1章节_第1页
第1页 / 共78页
C++课件c++3章节1章节_第2页
第2页 / 共78页
C++课件c++3章节1章节_第3页
第3页 / 共78页
C++课件c++3章节1章节_第4页
第4页 / 共78页
C++课件c++3章节1章节_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《C++课件c++3章节1章节》由会员分享,可在线阅读,更多相关《C++课件c++3章节1章节(78页珍藏版)》请在金锄头文库上搜索。

1、第3章 函数,C+语言程序设计,2,本章主要内容,函数的声明和调用 函数间的参数传递 内联函数 带缺省形参值的函数 函数重载 函数模板 C+系统函数,3,函数的声明,函数是面向对象程序设计中的基本抽象单元,是对功能的抽象 函数声明的语法形式 类型标识符 函数名(形式参数表) 语句序列 ,函数的声明与使用,若无参数,写void,是被初始化的内部变量,寿命和可见性仅限于函数内部,若无返回值,写void,4,函数的声明,形式参数表 name1, name2, ., namen 函数的返回值 由 return 语句给出,例如: return 0 无返回值的函数(void类型),不必写return语句。

2、,函数的声明与使用,5,函数的调用,调用前先说明函数原型: 在调用函数的说明部分,或程序文件开头所有函数之前,按如下形式说明: 类型标识符 被调用函数名 (含类型说明的形参表); 调用形式 函数名(实参列表) 嵌套调用 函数不允许嵌套声明,但可以嵌套调用。 递归调用 函数直接或间接调用自身。,函数的声明与使用,6,例3-1编写一个求x的n次方的函数,#include double power (double x, int n); void main(void) cout “5 to the power 2 is “ power(5,2) endl; double power (double x

3、, int n) double val = 1.0; while (n-) val = val*x; return(val); ,函数的声明与使用,7,运行结果: 5 to the power 2 is 25,例3-1编写一个求x的n次方的函数,函数的声明与使用,8,例3-2 数制转换,题目: 输入一个8位二进制数,将其转换为十进制数输出。 例如:11012 = 1(23) + 1(22) + 0(21) + 1(20) = 1310 所以,如果输入1101,则应输出13,函数的声明与使用,#include double power (double x, int n); void main(v

4、oid) int i; int value = 0; char ch; cout = 0; i-) cin ch; if (ch = 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 01101001 Decimal value is 105,11,例3-3编写程序求的值,其中arct

5、an用如下形式的级数计算: 直到级数某项绝对值不大于10-15为止;和x均为double型。,函数的声明与使用,#include void 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 cout“PI=“a-bendl; ,double arctan(double x) int i; double r,e,f,sqr; sqr=x*x; r=0; e=x; i=1; while(e

6、/i1e-15) f=e/i; r=(i%4=1)? r+f : r-f ; e=e*sqr; i+=2; return r ; ,运行结果: PI=3.14159,运行结果: PI=3.14159,15,例3-4,寻找并输出11999之间的数m,它满足m、m2和m3均为回文数。 回文:各位数字左右对称的整数。 例如:11满足上述条件 112=121,113=1331。 分析: 10取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。,函数的声明与使用,#include void main() bool symm(long n);

7、long m; for(m=11; m1000; m+) if (symm(m) ,bool symm(long n) long i, m; i=n ; m=0 ; while(i) m=m*10+i%10; i=i/10 ; return ( m=n ); ,运行结果: m=11 m*m=121 m*m*m=1331 m=101 m*m=10201 m*m*m=1030301 m=111 m*m=12321 m*m*m=1367631,19,例3-5,计算如下公式,并输出结果: 其中r、s的值由键盘输入。SIN x的近似值按如下公式计算,计算精度为10-6:,函数的声明与使用,#includ

8、e #include void main() double k,r,s; double tsin(double x); coutr; couts; if (r*r=s*s) k=sqrt(tsin(r)*tsin(r)+tsin(s)*tsin(s) ; else k=tsin(r*s)/2; coutkendl; ,double tsin(double x) double p=0.000001,g=0,t=x; int n=1; do g=g+t; n+; t=-t*x*x/(2*n-1)/(2*n-2); while(fabs(t)=p); return g; ,运行结果: r=5 s=8

9、 1.37781,22,例3-6投骰子的随机游戏,游戏规则是:每个骰子有六面,点数分别为1、2、3、4、5、6。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。 每轮投两次骰子,第一轮如果和数为7或11则为胜,游戏结束;和数为2、3或12则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮.直到某轮的和数等于点数则取胜,若在此前出现和数为7则为负。 由rolldice函数负责模拟投骰子、计算和数并输出和数。,函数的声明与使用,rand 函数原型:int rand(void); 所需头文件: 功能和返回值:求出并返回一个伪随机数 srand 函数原型:void s

10、rand(unsigned int seed); 参数:seed产生随机数的种子。 所需头文件: 功能:为使rand()产生一序列伪随机整数而设置起始点。使用1作为seed参数,可以重新初化rand()。,#include #include int rolldice(void); void main() int gamestatus,sum,mypoint; unsigned seed; coutseed; /输入随机数种子 srand(seed); /将种子传递给rand() sum=rolldice(); /第一轮投骰子、计算和数,switch(sum) case 7: /如果和数为7或1

11、1则为胜,状态为1 case 11: gamestatus=1; break; case 2: /和数为2、3或12则为负,状态为2 case 3: case 12: gamestatus=2; break; default: /其它情况,游戏尚无结果,状态为0,记下点数,为下一轮做准备 gamestatus=0; mypoint=sum ; cout“point is “mypointendl; break; ,while ( gamestatus=0 ) /只要状态仍为 0,就继续进行下一轮 sum=rolldice(); if(sum=mypoint) /某轮的和数等于点数则取胜,状态置

12、为1 gamestatus=1 ; else if ( sum=7 ) /出现和数为7则为负,状态置为2 gamestatus=2; /当状态不为0时上面的循环结束,以下程序段输出游戏结果 if( gamestatus=1 ) cout“player winsn“; else cout“player losesn“; ,int rolldice(void) /投骰子、计算和数、输出和数 int die1,die2,worksum; die1=1+rand()%6; die2=1+rand()%6; worksum=die1+die2; cout“player rolled “die1+die2

13、=worksumendl; return worksum; ,运行结果2: Please enter an unsigned integer:23 player rolled 6+3=9 point is 9 player rolled 5+4=9 player wins,29,函数调用的执行过程,函数的声明与使用,30,嵌套调用,函数的声明与使用,main 调fun1() 结束,fun1() 调fun2() 返回,fun2() 返回,31,例3-6 输入两个整数,求平方和。,#include void main(void) int a,b; int fun1(int x,int y); ci

14、nab; cout“a、b的平方和:“ fun1(a,b)endl; ,函数的声明与使用,int fun1(int x,int y) int fun2(int m); return (fun2(x)+fun2(y); int fun2(int m) return (m*m); 运行结果: 3 4 a、b的平方和:25,33,递归调用,函数直接或间接地调用自身,称为递归调用。 递归过程的两个阶段: 递推: 4!=43! 3!=32! 2!=21! 1!=10! 0!=1 未知 已知 回归: 4!=43!=243!=32!=62!=21!=21!=10!=10!=1 未知 已知,函数的声明与使用,

15、34,例3-8 求n!,分析:计算n!的公式如下: 这是一个递归形式的公式,应该用递归函数实现。,函数的声明与使用,源程序: #include long fac(int n) long f; if (n0) cout“n0,data error!“endl; else if (n=0) f=1; else f=fac(n-1)*n; return(f); ,void main() long fac(int n); int n; long y; coutn; y=fac(n); coutn“!=“yendl; 运行结果: Enter a positive integer:8 8!=40320,37,例3-9,用递归法计算从n个人中选择k个人组成一个委员会的不同组合数。 分析: 由n个人里选k个人的组合数 =由n-1个人里选k个人的组合数 +由n-1个人里选k-1个人的组合数 当n=k或k=0时,组合数为1,函数的声明与使用,#include void main() int n,k; int comm(int n, int k); cinnk; cout

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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