合工大计算机学院 程序设计 04第四章 函数.ppt

上传人:sh****n 文档编号:12720748 上传时间:2020-05-19 格式:PPT 页数:29 大小:304.31KB
返回 下载 相关 举报
合工大计算机学院 程序设计 04第四章 函数.ppt_第1页
第1页 / 共29页
合工大计算机学院 程序设计 04第四章 函数.ppt_第2页
第2页 / 共29页
合工大计算机学院 程序设计 04第四章 函数.ppt_第3页
第3页 / 共29页
点击查看更多>>
资源描述
第四章函数,函数的声明与调用参数传递方式标识符的作用域变量的生存期递归程序设计C+语言常用库函数,4.1C+语言的函数一、函数的建立与使用,函数的建立函数声明:定义函数的名字、执行的语句序列、传递和使用的数据参数、返回值等;函数的使用函数调用:指明函数去“做什么”;函数调用的控制流程:如右图,函数调用程序(主调函数),调用F,调用F,被调用函数F,例1:,#includefloatmax(floatx,floaty)floatz;/求两个数的最大值if(x=y)z=x;elsez=y;returnz;intmain()floati,j,k;/用户输入的三个数floattemp;/临时最大者coutijk;/用户输入三个数/找出最大数存放在temp中temp=max(i,j);/main()是主调函数,max()是被调函数temp=max(temp,k);/输出找到的最大数coutThemaximumnumberistempjk;temp=max(i,j);temp=max(temp,k);cout=y)z=x;elsez=y;returnz;,floatmax(floatx,floaty);,函数原型:floatmax(floatx,floaty);floatmax(float,float);floatmax(floatt,floatk);,4.3参数传递,一、参数传递方式主调函数与被调函数的数据交换:由参数传递与返回值实现按值调用:单项的参数传递按引用调用:双向的参数传递二、按值调用(传值,按拷贝调用)单向的,实际参数形式参数,传递的是参数的值例:p91程序4.3.1#includecoutiisin;intsquare(intx)coutjisjn;/求一个整数的平方return0;x=x*x;returnx;intmain()inti,j;i=8;j=square(i);,8,64,64,64,三、缺省参数,C+语言允许在函数原型或函数定义中为形式参数指定缺省值,具有缺省值的形式参数称缺省形参用初值表达式定义缺省值缺省行参必须从右边开始定义intfunc(inta,floatb,intc=0);若在函数调用时指定了形式参数对应的实际参数,则形式参数使用实际参数的值,否则未指定相应的实际参数则形式参数使用缺省值。,例2:,#include#include/给出函数原型doubledistance(doublex1,doubley1,doublex2=0,doubley2=0);intmain()cout(1,2)to(0,0)isdistance(1,2)n;cout(-1.5,2)to(1.5,-2)isdistance(-1.5,2,1.5,-2)n;return0;/计算两点之间的距离doubledistance(doublex1,doubley1,doublex2,doubley2)doublex,y;x=x2-x1;y=y2-y1;returnsqrt(x*x)+(y*y);,4.4生存期与作用域一、变量的两个性质,生存期:(从时间角度考虑)变量的生存期是指在程序运行过程中变量占存储空间的时限作用域:(从空间角度考虑)指在变量占用存储空间的时间内变量的名字能被引用的区域,即变量名作用的有效范围。在变量的作用域中变量必然存在在变量的生存期中变量不一定有效,二、全局变量和局部变量,局部变量:在一个块语句内部定义的变量作用域:本块语句中。块语句嵌套时,内层的同名变量有效,而外层的同名变量被屏蔽。不同函数中使用同名变量,代表不同对象,互不相干例:voidfunc(intx)形式参数x的作用域inty=x+1;外层变量y的作用域inty=x+2;内层变量y的作用域intz=x+3;内层变量z的作用域y=y*y;z=z*z;coutx”y”z”n”;intz=x+4;外层变量z的作用域y=y+y;z=z+z;coutx”y”z”n”;,生存期:局部变量是当程序的控制流程进入定义该变量的块语句时,才为其分配一块临时的存储空间,当程序的控制流程退出该程序块时,临时占用的存储空间被释放。初始化:无显式初始化式,其初值是一个不确定的值。显示初始化时,每次流程进入块函数时,分配内存空间,都重新对局部变量初始化,2.全局变量:在函数之外定义的变量,作用域:从定义变量开始到本源程序文件结束。生存期:全局变量在整个程序的运行期中都存在初始化:无显式初始化式,其初值会被清0。显示初始化时,对全局变量的初始化在编译时一次完成。同名的全局变量与局部变量:在局部变量的作用域内,全局变量被屏蔽,直接使用该名字,用的是局部变量,但可用:作用域运算符引用同名全局变量,例:,inty=8;voidfunc(intx)inty=x+1;:y=:y*y;couty”:y”n”;intmain()func(3);couty”n”;return0;,三、变量的存储类别,1.存储方式从生存期(时间)来分,有两种存储方式静态存储方式:在程序运行期间占用固定存储空间动态存储方式:运行时,根据需要动态分配存储空间内存中,供用户使用的存储空间:变量的定义:数据存储类别数据类型变量名(=初值);,程序区,静态存储区,动态存储区,2.数据存储类别,例:,#includevoidgrow()intage=30;age=age+1;coutMyageisagen;return;intmain()for(inti=1;i=3;i=i+1)grow();return0;age不是静态变量的运行结果:age是静态局部变量的运行结果:Myageis31Myageis31Myageis31Myageis32Myageis31Myageis33,static,4.5递归程序设计,在函数定义中,一个函数直接或间接地调用自己,称递归调用,这类函数为递归函数。1)直接递归2)间接递归f(intx)f1()f2()f(x-1);f2();f1();递归调用是无终止的自身调用,因此在递归函数中应该用if语句或其它分支语句,判断当某些条件成立时结束递归调用,例:,/功能:使用递归程序计算Fibonacci序列。#includeintfibonacci(intn)intresult;if(n2)result=1;elseresult=fibonacci(n-1)+fibonacci(n-2);returnresult;intmain()intloop;/循环变量/输出Fibonacci序列的前6个数for(loop=0;loop=5;loop=loop+1)coutfibonacci(loop);coutn;return0;,intfibonacci(intn)intresult,i,pre1,pre2;result=1;i=2;pre2=1;while(i=n)pre1=pre2;pre2=result;result=pre1+pre2;i+;returnresult;,设n为5,则有:F(5)=F(3)+F(4)=F(1)+F(2)+F(2)+F(3)=F(1)+F(0)+F(1)+F(0)+F(1)+F(1)+F(2)=F(1)+F(0)+F(1)+F(0)+F(1)+F(1)+F(0)+F(1)=1+1+1+1+1+1+1+1=8,分析如下:,例:梵塔问题,盘按由小到大的顺序标上号码1n。开始时n个盘全套在A柱上,且小的放在大的上面,如图4.6.1所示。游戏要求按下列规则将所有的盘从A柱移到C柱,在移动过程中可以借助另一个B柱。规则1:每次只能移动柱最上面的一个盘;规则2:任何盘都不得放在比它小的盘上。ABC12n,递归思路:把A上的n个盘运到C上先把n-1个盘从A搬到B,借助C把A上剩下的最大的一个盘搬到C再把n-1个盘从B搬到C,借助A当n=1时,直接从A搬到C即可,程序,#include/将disk_num个盘从from柱移到to柱,可以借助aux柱voidmove_tower(intdisk_num,charfrom,charto,charaux)if(disk_num=1)/仅有一个盘时,直接从from柱移到to柱coutMovedisk1fromfromtoton;else/将disk_num-1个盘从from柱移到aux柱,借助于to柱move_tower(disk_num-1,from,aux,to);/将最下的盘从from柱移到to柱coutMovediskdisk_numfromfromtoton;/将disk_num-1个盘从aux柱移到to柱,借助于from柱move_tower(disk_num-1,aux,to,from);return;intmain()move_tower(4,A,C,B);return0;,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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