6C函数递推递归优质PPT.ppt

上传人:b****1 文档编号:14298364 上传时间:2022-10-21 格式:PPT 页数:22 大小:1.16MB
下载 相关 举报
6C函数递推递归优质PPT.ppt_第1页
第1页 / 共22页
6C函数递推递归优质PPT.ppt_第2页
第2页 / 共22页
6C函数递推递归优质PPT.ppt_第3页
第3页 / 共22页
6C函数递推递归优质PPT.ppt_第4页
第4页 / 共22页
6C函数递推递归优质PPT.ppt_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

6C函数递推递归优质PPT.ppt

《6C函数递推递归优质PPT.ppt》由会员分享,可在线阅读,更多相关《6C函数递推递归优质PPT.ppt(22页珍藏版)》请在冰豆网上搜索。

6C函数递推递归优质PPT.ppt

+3!

+10!

#includeusingnamespacestd;

intmain()intsum=0;

for(inti=1;

i=10;

i+)sum+=js(i);

coutsum=sumendl;

return0;

现在的问题是:

C+不提供js(x)这样一个标准函数,这个程序是通不过的。

如果是C+的标准函数,我们可以直接调用,如abs(x),sqrt(x)而C+提供给我们的可供直接调用的标准函数不多。

没关系,我们编写自己的函数!

一、函数的定义-【函数】,1.函数定义的语法形式数据类型函数名(形式参数表)函数体/执行语句关于函数的定义有如下说明:

函数的数据类型是函数的返回值类型(若数据类型为void,则无返回值)。

函数名是标识符,一个程序中除了主函数名必须为main外,其余函数的名字按照标识符的取名规则可以任意选取,最好取有助于记忆的名字。

形式参数(简称形参)表可以是空的(即无参函数);

也可以有多个形参,形参间用逗号隔开,不管有无参数,函数名后的圆括号都必须有。

形参必须有类型说明,形参可以是变量名、数组名或指针名,它的作用是实现主调函数与被调函数之间的关系,通常将函数所处理的,数据、影响函数功能的因素或者函数处理的结果作为形参。

在被调用函数中的参数被称为形参。

函数中最外层一对花括号“”括起来的若干个说明语句和执行语句组成了一个函数的函数体。

由函数体内的语句决定该函数功能。

函数体实际上是一个复合语句,它可以没有任何类型说明,而只有语句,也可以两者都没有,即空函数。

函数不允许嵌套定义。

在一个函数内定义另一个函数是非法的。

但是允许嵌套使用。

函数在没有被调用的时候是静止的,此时的形参只是一个符号,它标志着在形参出现的位置应该有一个什么类型的数据。

函数在被调用时才执行,也就是在被调用时才由主调函数将实际参数(简称实参)值赋予形参。

这与数学中的函数概念相似,如数学函数:

f(x)=x2+x+1这样的函数只有当自变量被赋值以后,才能计算出函数的值。

2函数定义的例子定义一个函数,返回两个数中的较大数。

intmax(intx,inty)returnxy?

x:

y;

该函数返回值是整型,有两个整型的形参,用来接受实参传递的两个数据,函数体内的语句是求两个数中的较大者并将其返回主调函数。

3函数的形式函数的形式从结构上说可以分为三种:

无参函数、有参函数和空函数。

它们的定义形式都相同。

(1)无参函数无参函数顾名思义即为没有参数传递的函数,无参函数一般不需要带回函数值,所以函数类型说明为void。

(2)有参函数有参函数即有参数传递的函数,一般需要带回函数值。

例如intmax(intx,inty)函数。

(3)空函数空函数即函数体只有一对花括号,花括号内没有任何语句的函数。

例如,函数名()空函数不完成什么工作,只占据一个位置。

在大型程序设计中,空函数用于扩充函数功能。

编写一个阶乘的函数,我们给此函数取一个名字js。

intjs(intn)ints=1;

i=n;

+i)s*=i;

returns;

在本例中,函数名叫js,只有一个int型的自变量n,函数js属int型。

在本函数中,要用到两个变量i,s。

在函数体中,是一个求阶乘的语句,n的阶乘的值在s中,最后由return语句将计算结果s值带回,js()函数执行结束,在主函数中js()值就是s的值。

在这里,函数的参数n是一个接口参数,说得更明确点是入口参数。

如果我们调用函数:

js(3),那么在程序里所有有n的地方,n被替代成3来计算。

在这里,3就被称为实参。

又如:

sqrt(4),ln(5),这里4,5叫实参。

而ln(x),sqrt(x)中的x,y叫形参。

二、参数传递-【函数】,1.非引用参数普通的非引用类型的参数是通过复制对应的实参实现初始化。

当用参数副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会修改实参的值。

举个例子:

#includeusingnamespacestd;

voidswap(inta,intb)inttmp=a;

a=b;

b=tmp;

intmain()intc=1,d=2;

swap(c,d);

coutcdendl;

/程序输出为:

12在此例中,虽然在swap函数中交换了a,b两数的值,但是在main中却没有交换。

因为swap函数只是交换c,d两变量副本的值。

2.引用参数引用参数直接关联到其所绑定的对象,而并非这些对象的副本。

定义引用时,必须用与该引用绑定对象初始化该引用。

引用形参完全以相同的方式工作。

每次调用函数,引用形参被创建并与相应实参关联。

现在用引用参数来实现swap:

voidswap(int/程序输出为:

21在此例中,因为swap函数的参数为引用参数,所以,在函数swap中修改a,b的值相当于在主函数main中修改c,d的值。

3.const形参使用const修饰参数可避免在函数执行中修改参数。

voidsolve(constint/错误,因为fb()使用了非常量引用形参,不可以接受常量2。

三、函数的声明和调用-【函数】,1函数的声明调用函数之前先要声明函数原型。

在主调函数中,或所有函数定义之前,按如下形式声明:

类型说明符被调函数名(含类型说明的形参表);

如果是在所有函数定义之前声明了函数原型,那么该函数原型在本程序文件中任何地方都有效,也就是说在本程序文件中任何地方都可以依照该原型调用相应的函数。

如果是在某个主调函数内部声明了被调用函数原型,那么该原型就只能在这个函数内部有效。

函数原型和函数定义在返回值类型、函数名和参数个数与类型必须完全一致,否则,就会发生编译错误。

下面对max()函数原型声明是合法的。

intmax(intx,inty);

也可以:

intmax(int,int);

可以看到函数原型声明与函数定义时的第一行类似,只多了一个分号,成为了一个声明语句而已。

2函数的调用声明了函数原型之后,便可以按如下形式调用函数:

函数名(实参列表)实参列表中应给出与函数原型形参个数相同、类型相符的实参。

在主调函数中的参数称为实参,实参一般应具有确定的值。

实参可以是常量、表达式,也可以是已有确定值的变量,数组或指针名。

函数调用可以作为一条语句,这时函数可以没有返回值。

函数调用也可以出现在表达式中,这时就必须有一个明确的返回值。

3函数的返回值在组成函数体的各类语句中,值得注意的是返回语句return。

它的一般形式是:

return(表达式);

其功能是把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数的返回。

所以,在圆括号表达式的值实际上就是该函数的返回值。

其返回值的类型即为它所在函数的函数类型。

当一个函数没有返回值时,函数中可以没有return语句(在TC+和VC+,函数类型定义为void,可以没有return语句;

函数类型定义为int,必须有返回值),直接利用函数体的右花括号“”,作为没有返回值的函数的返回。

也可以有return语句,但return后没有表达式。

返回语句的另一种形式是:

return;

这时函数没有返回值,而只把流程转向主调函数。

四、函数的应用举例-【函数】,例6.2求1!

+10!

的值。

程序如下:

ntjs(int);

+i)sum+=js(i);

例6.3任意输入10组三角形的三边,求其面积。

我们可以定义一个已知三角形三边求其面积的函数,设为area(a,b,c)。

#include#includeusingnamespacestd;

doublearea(double,double,double);

intmain()for(inti=1;

iabc;

if(a+b=c)|(a+c=b)|(b+c=a)coutdataerror!

endl;

/判断三角形是否合法elsecouts=area(a,b,c)endl;

doublearea(doublea,doubleb,doublec)/此函数为海伦秦九韶公式doublep=(a+b+c)/2;

returnsqrt(p*(p-a)*(p-b)*(p-c);

在函数说明中,如果形参的个数不止一个,那么在程序中调用函数的实参个数一定要与形参的个数一致,第一个实参对应第一个形参,第二个实参对应第二个形参次序不能对调。

例6.4定义一个函数check(n,d),让它返回一个布尔值。

如果数字d在正整数n的某位中出现则送回true,否则送回false。

例如:

check(325719,3)=true;

check(77829,1)=false;

boolcheck(int,int);

intmain()inta,b;

coutab;

if(check(a,b)=true)couttrueendl;

elsecoutfalseendl;

boolcheck(intn,intd)while(n)/C+中非0为真inte=n%10;

n/=10;

if(e=d)returntrue;

returnfalse;

例6.5计算如图多边形的面积。

从图中可以看出,五边形的面积是三个三角形面积之和。

#include#include/使用printf和scanf语句,调用cstdio库#includeusingnamespacestd;

intmain()doubleb1,b2,b3,b4,b5,b6,b7,s;

coutb1b2b3b4b5b6b7;

s=area(b1,b5,b6)+area(b2,b6,b7)+area(b3,b4,b7);

/调用三次函数areaprintf(s=%10.3lfn,s);

doublearea(doublea,doubleb,doublec)doublep=(a+b+c)/2;

例6.6输出以下一个图形【分析】我们前面学习可用二重循环打印出上图形,现我们设置一个函数打印出n个连

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1