C 语言 课件 第3章函数

上传人:痛*** 文档编号:244011985 上传时间:2024-10-02 格式:PPT 页数:59 大小:256KB
收藏 版权申诉 举报 下载
C 语言 课件 第3章函数_第1页
第1页 / 共59页
C 语言 课件 第3章函数_第2页
第2页 / 共59页
C 语言 课件 第3章函数_第3页
第3页 / 共59页
资源描述:

《C 语言 课件 第3章函数》由会员分享,可在线阅读,更多相关《C 语言 课件 第3章函数(59页珍藏版)》请在装配图网上搜索。

1、单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,,,计算机基础教研室,*,单击此处编辑母版标题样式,,单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,,*,本章简介,第,3,章 函数,,3.1,函数的定义与使用(掌握),,3.2,内联函数(掌握),,3.3,带默认形参值的函数(掌握),,3.4,函数重载(掌握),,3.5,使用,c++,系统函数(掌握),,3.6,小结,,,函数是面向对象程序设计中的基本抽象单元;,,,是对功能的抽象;,函数,,2,,,,计算机基础教研室,C++,系统函数,C++,的系统库中提供了几百个函数可

2、供程序员使用。,,例如:求平方根函数(,sprt,)、,求绝对值函数(,abs,),等。,,使用系统函数时要包含相应的头文件,。,,例如:,cmath,使 用,C++,系 统 函 数,,3,,,,计算机基础教研室,,使用的系统函数,函 数 的 定 义 与 使 用,,C++,标准函数库提供一随机数生成器,rand,,返回,0,-,RAND_MAX,之间均匀分布的伪随机整数。,RAND_MAX,必须至少为,32767,。,rand(),函数不接受参数,默认以,1,为种子(即起始值)。,,,rand(),产生的随机数在每次运行的时候都是与上一次相同的,若要产生每次不同的随机数,可以使用,srand,

3、( seed ),函数进行随机化,随着,seed,的不同,就能够产生不同的随机数。,,,,4,,,,计算机基础教研室,系统函数应用举例,题目:,,从键盘输入一个角度值,求出该角度的正弦值、余弦值和正切值。,,分析:,,系统函数中提供了求正弦值、余弦值和正切值的函数:,sin(),、,cos,(),、,tan(),,,函数的说明在头文件,cmath,中。,使 用,C++,系 统 函 数,,5,,,,计算机基础教研室,#include<,iostream,>,,#include<,cmath,>,,using namespace std;,,const double pi(3.14159265);

4、,,void main(),,{ double a,b;,,,cin,>>a;,,b=a*pi/180;,,,cout,<<"sin("<

5、,,查联机帮助,——,VC++6.0,联机帮助的使用方法:,,help/Contents,,->(“,活动子集”栏,)Visual C++ Documentation,,-> Visual C++ Documentation ->Using Visual C++ -> Visual C++ Programmer's Guide -> Run-Time Library Reference,,->Run Time Routines by Category -> Run Time Routines by Category,使 用,C++,系 统 函

6、数,,7,,,,计算机基础教研室,函数声明的语法形式,,类型标识符 函数名(形式参数表),,{,,,语句序列,,},若无参数,写,void,是被初始化的内部变量,寿命和可见性仅限于函数内部,若无返回值,写,void,,形式参数表,, name1, name2, ..., namen,,函数的返回值,,由,return,语句给出,例如:,return 0,;,,无返回值的函数(,void,类型),不必写,return,语句。,,函 数 的 定 义 与 使 用,函数的定义,,8,,,,计算机基础教研室,调用前先声明函数原型:,,在调用函数中,或程序文件中所有函数之外,按如下形式说明:,,类

7、型标识符 被调用函数名(含类型说明的形参表),;,,调用形式,,,函数名(实参列表),,嵌套调用,,函数可以嵌套调用,但不允许嵌套定义。,,递归调用,,函数直接或间接调用自身。,函 数 的 定 义 与 使 用,函数的调用,,9,,,,计算机基础教研室,编写一个求,x,的,n,次方的函数,#,include ,,using namespace std;,,Double,,power (double x, int n);,,void main(void),,{,,cout << "5 to the power 2 is " << power(5,2) << endl;,,},,D

8、ouble,,power (double x, int n),,{,,double val = 1.0;,,while (n),,,{,val = val*x;,,n--;,,return(val);,,},函 数 的 定 义 与 使 用,,10,,,,计算机基础教研室,数制转换,题目:,,输入一个,8,位二进制数,将其转换为十进制数输出。,,,例如:,(,1101,),2 = 1(2,3,) + 1(2,2,) + 0(2,1,) + 1(2,0,)=,(,13,),10,,所以,,如果输入,1101,,则应输出,13,函 数 的 定 义 与 使 用,,11,,,,计算机基础教研室,#,in

9、clude ,,using namespace std;,,double power (double x, int n);,,void main(void),,{,,int i;,,int value = 0;,,char ch;,,cout << "Enter an 8 bit binary number ";,,for (i = 7; i >= 0; i--),,{,,cin >> ch;,,if (ch == '1'),,value += int(power(2,i));,,},,cout <<"Decimal value is "<

10、 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,函 数 的 定 义 与 使 用,,12,,,,计算机基础教研室,,,其中,arctan,用如下形式的级数计算:,,,,,直到级数某项绝对值不大于,10,-15,为止;,π,和,x,均为,double,型。,函 数 的 定 义 与 使 用,÷,ø,ö,ç,è,æ,-,ø,ö,ç,è,æ,

11、=,239,1,arctan,4,5,1,arctan,16,p,编写程序求,π,的值,,13,,,,计算机基础教研室,#include<,iostream,>,,using namespace std;,,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="<

12、;,,},double,arctan(double,x),,{,int,i;,,double,r,e,f,sqr,;,,,sqr,=x*x;,,r=0; e=x; i=1;,,,while(e/i,>1e-15),,{,,f=,e/i,;,,r=(i%4==1)?,r+f,:,r-f,;,,e=e*,sqr,; i+=2;,,},,return r ;,,},函 数 的 定 义 与 使 用,,14,,,,计算机基础教研室,寻找并输出,11-999,之间的数,m,,,它满足,m,、,m2,和,m3,均为回文数。,,回文:各位数字左右对称的整数。 例如:,11,满足上述条件

13、,11,2,=121,,,11,3,=1331,。,,分析:,,10,取余的方法,从最低位开始,依次取出该数的各位数字。按反序重新构成新的数,比较与原数是否相等,若相等,则原数为回文。,函 数 的 定 义 与 使 用,寻找回文数,,15,,,,计算机基础教研室,#include <,iostream,>,,using namespace std;,,void main(),,{,,,bool,,symm(long,n);,,long m;,,for(m=11; m<1000; m++),,if (,symm(m)&&symm(m,*,m)&&symm(m,*m*m)),,,cout,<<"m=

14、"<

15、 与 使 用,,17,,,,计算机基础教研室,计算如下公式,并输出结果:,,,,,,其中,r,、,s,的值由键盘输入。,SIN x,的近似值按如下公式计算,计算精度为,10-6,:,,函 数 的 定 义 与 使 用,计算,sin(x,),的值,,18,,,,计算机基础教研室,#include <,iostream,>,,#include<,cmath,>,,using namespace std;,,void main(),,{,,double k,r,s;,,double,tsin(double,x);,,,cout,<<"r=";,,,cin,>>r;,,,cout,<<"s=";,,,c

16、in,>>s;,,if (r*r<=s*s),,k=,sqrt(tsin(r,)*,tsin(r)+tsin(s,)*,tsin(s,)) ;,,else,,k=,tsin(r,*s)/2;,,,cout,<=p);,,return g;,,}

17、,,运行结果:,,r=5,,s=8,,1.37781,函 数 的 定 义 与 使 用,,20,,,,计算机基础教研室,游戏规则是:每个骰子有六面,点数分别为,1,、,2,、,3,、,4,、,5,、,6,。游戏者在程序开始时输入一个无符号整数,作为产生随机数的种子。,,每轮投两次骰子,第一轮如果和数为,7,或,11,则为胜,游戏结束;和数为,2,、,3,或,12,则为负,游戏结束;和数为其它值则将此值作为自己的点数,继续第二轮、第三轮,...,直到某轮的和数等于点数则取胜,若在此前出现和数为,7,则为负。,,由,rolldice,函数负责模拟投骰子、计算和数并输出和数。,函 数 的 定 义 与

18、使 用,投骰子的随机游戏,,21,,,,计算机基础教研室,int,,rolldice(void,),,{ //,投骰子、计算和数、输出和数,,,int,die1,die2,worksum;,,die1=1+rand()%6;,,die2=1+rand()%6;,,,worksum,=die1+die2;,,,cout,<<"player rolled "<,,

19、#include <,cstdlib,>,,using namespace std;,,int,,rolldice(void,);,,void main(),,{,,,int,,gamestatus,sum,mypoint,;,,unsigned seed;,,,cout,<<"Please enter an unsigned integer:";,,,cin,>>seed; //,输入随机数种子,,,srand(seed,); //,将种子传递给,rand(),,sum=,rolldice,(); //,第一轮投骰子、计算和数,函 数 的 定 义 与 使 用,,23,,,,计算机

20、基础教研室,,switch(sum),,{,,case 7: //,如果和数为,7,或,11,则为胜,,,状态为,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 "<<,mypoint,<<,endl,

21、;,,break;,,},函 数 的 定 义 与 使 用,,24,,,,计算机基础教研室,,while (,gamestatus,==0),,//,只要状态仍为,0,,就继续进行下一轮,,,{ sum=,rolldice,();,,,if(sum,==,mypoint,),,//,某轮的和数等于点数则取胜,,,状态置为,1,,,gamestatus,=1 ;,,else,,if (sum==7) //,出现和数为,7,则为负,,,状态置为,2,,,gamestatus,=2;,,} //,当状态不为,0,时上面的循环结束,,,以下程序段输出游戏结果,,,if(gamestatus,=

22、=1),,,cout,<<"player wins\n";,,else,,,cout,<<"player loses\n";,,},运行结果:,,Please enter an unsigned integer:23,,player rolled 6+3=9,,point is 9,,player rolled 5+4=9,,player wins,函 数 的 定 义 与 使 用,,25,,,,计算机基础教研室,函数调用的执行过程,main(),,,调,fun(),,,,结束,fun(),,,,,返回,①,②,④,⑥,⑦,保存:,,返回地址,,当前现场,③,恢复:,,主调程序现场,,返回地址,

23、⑤,函 数 的 定 义 与 使 用,,26,,,,计算机基础教研室,嵌套调用,main{},,,调,fun1(),,,,结束,fun1(),,,调,fun2(),,,返回,fun2(),,,,,返回,①,②,③,⑦,④,⑤,⑥,⑧,⑨,函 数 的 定 义 与 使 用,,27,,,,计算机基础教研室,,输入两个整数,求平方和,#include <,iostream,>,,using namespace std;,,void main(void),,{,,,int,a,b;,,,int,fun1(int,x,int,y);,,,cin,>>a>>b;,,,cout,<<"a,、,b,的平方和,"<

24、

25、1! → 1!=1×0! → 0!=1,,回归:,,4!=4×3!=24←3!=3×2!=6←2!=2×1!=2←1!=1×0!=1←0!=1,函 数 的 定 义 与 使 用,,30,,,,计算机基础教研室,求,n!,分析:计算,n!,的公式如下:,,,,,这是一个递归形式的公式,应该用递归函数实现。,,函 数 的 定 义 与 使 用,,31,,,,计算机基础教研室,//,源程序:,,#include <,iostream,>,,using namespace std;,,long,fac(int,n),,{,,long f;,,if (n<0),,,cout,<<"n<0,data erro

26、r!"<<,endl,;,,else if (n==0) f=1;,,else f=fac(n-1)*n;,,return(f);,,},函 数 的 定 义 与 使 用,,32,,,,计算机基础教研室,void main(),,{,,long,fac(int,n);,,,int,n;,,long y;,,,cout,<<"Enter a positive integer:";,,,cin,>>n;,,y=,fac(n,);,,,cout,<

27、 与 使 用,,33,,,,计算机基础教研室,组合数,用递归法计算从,n,个人中选择,k,个人组成一个委员会的不同组合数。,,分析:,,由,n,个人里选,k,个人的组合数,,,=,由,n-1,个人里选,k,个人的组合数,,,+,由,n-1,个人里选,k-1,个人的组合数,,当,n==k,或,k==0,时,组合数为,1,函 数 的 定 义 与 使 用,,34,,,,计算机基础教研室,#include<,iostream,>,,using namespace std;,,void main(),,{,int,n,k;,,,int,,comm(int,n,,int,k);,,,cin,>>n>>k;

28、,,,cout,<<,comm(n,k,) <<,endl,;,,},,int,,comm(int,n,,int,k),,{ if ( k>n ) return 0;,,else if( n==k||k==0 ),,return 1;,,else,,return comm(n-1,k)+comm(n-1,k-1) ;,,},运行结果:,,18 5,,8568,函 数 的 定 义 与 使 用,,35,,,,计算机基础教研室,汉诺塔问题,有三根针,A,、,B,、,C,。,A,针上有,N,个盘子,大的在下,小的在上,要求把这,N,个盘子从,A,针移到,C,针,在移动过程中可以

29、借助,B,针,每次只允许移动一个盘,且在移动过程中在三根针上都保持大盘在下,小盘在上。,A,B,C,函 数 的 定 义 与 使 用,,36,,,,计算机基础教研室,分析:,,将,n,个盘子从,A,针移到,C,针可以分解为下面三个步骤:,,①,将,A,上,n-1,个盘子移到,B,针上(借助,C,针),;,,②,把,A,针上剩下的一个盘子移到,C,针上,;,,③,将,n-1,个盘子从,B,针移到,C,针上(借助,A,针),;,事实上,上面三个步骤包含两种操作:,,①,将多个盘子从一个针移到另一个针上,这是一个递归的过程。,hanoi,函数实现。,,②,将,1,个盘子从一个针上移到另一针上。用,mo

30、ve,函数实现。,函 数 的 定 义 与 使 用,,37,,,,计算机基础教研室,#include <,iostream,>,,using namespace std;,,void move(char,getone,char,,putone,),,{,cout,<<,getone,"<<,putone,<<,endl,; },,void,hanoi(int,n,char one,char two,char three),,{ void move(char,getone,char,,putone,);,,if (n==1) move (one,three);,,else,,{,hanoi,(n-

31、1,one,three,two);,,move(one,three);,,hanoi(n-1,two,one,three);,,},,},函 数 的 定 义 与 使 用,,38,,,,计算机基础教研室,void main(),,{,,void,hanoi(int,n,char one,char two,char three);,,,int,m;,,,cout,<<"Enter the number of,diskes,:";,,,cin,>>m;,,,cout,<<"the steps to moving "<

32、,'C,');,,},运行结果:,,Enter the number of diskes:3,,the steps to moving 3,diskes,:,,A-->C,,A-->B,,C-->B,,A-->C,,B-->A,,B-->C,,A-->C,函 数 的 定 义 与 使 用,,39,,,,计算机基础教研室,在函数被调用时才分配形参的存储单元。,,实参可以是常量、变量或表达式。,,实参类型必须与形参相符。,,传递时是传递参数值,即单向传递。,函 数 的 定 义 与 使 用,函数的参数传递机制,——,传递参数值,,40,,,,计算机基础教研室,参数值传递举例,X,N,被调函数:,主调函

33、数:,3,,2.5,A,D = power(A,3),,2.5,3,double power(double X,,int,N),函 数 的 定 义 与 使 用,,41,,,,计算机基础教研室,函 数 的 定 义 与 使 用,函数调用过程,,42,,,,计算机基础教研室,输入两整数交换后输出,#include<,iostream,>,,using namespace std;,,void,Swap(int,a,,int,b);,,int,main(),,{,,,int,x(5), y(10);,,,cout,<<"x="<

34、ut,<<"x="<

35、,a,10,,b,5,t,在,Swap,子函数中,返回主函数以后,5,x,10,y,函 数 的 定 义 与 使 用,,44,,,,计算机基础教研室,函数的参数传递,—,用引用做形参,引用,(,&,),是标识符的别名,,,是一种派生数据类型,不占存储空间。,例如,:,,int,,someInt,;,int,&,rInt,=,someInt,;,//,建立一个,int,型的引用,rInt,,,并将其,//,初始化为变量,someInt,的一个别名,,声明一个引用时,必须,同时对它进行初始化,,使它指向一个已存在的对象。,,一旦一个引用被初始化后,,就不能改为指向其它对象。,,引用可以作为形参,vo

36、id,swap(int,& a,,int,& b) {...}(,作用,),函 数 的 定 义 与 使 用,,45,,,,计算机基础教研室,输入两个整数交换后输出,#include<,iostream,>,,using namespace std;,,void,Swap(int,& a,,int,,,int,main(),,{,int,x(5), y(10);,,,cout,<<"x="<>m>>n;,,,cout,<<"integer "<>x>>y;,,,cout,<<

46、"real number "<>c1.real>>c1.imaginary;,,,cout,<<"Enter the second complex number: ";,,,cin,>>c2.real>>c2.imaginary;,,c3=add(c1,c2);,,,cout,<<"complex number (" <

47、<',',,<

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

相关资源

更多
正为您匹配相似的精品文档
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!