c++函数

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

函数1.什么是函数?2.函数的定义和说明3.函数的参数和返回值主要内容4.函数的参数和返回值5.函数的调用方式6.函数的嵌套调用和递归调用2什么是函数编写函数,计算并打印若干给定整数(1、3、4)的阶乘,要求每次打印数据后打印一行星号(10个)。1**********************6**********************24**********************……3什么是函数voidmain(){inta=1,b=3,c=4;intv=1;while(a0){v*=a;a--;}coutv;for(inti=0;i10;i++){cout*;}coutendl;v=1;while(a0){v*=a;a--;}coutv;for(inti=0;i10;i++){cout*;}coutendl;4什么是函数intgetfact(intm){intv=1;while(m0){v*=m;m--;}returnv;}voidcoutstar(){for(inti=0;i10;i++)cout*;coutendl;}voidmain(){inta=19,b=123,c=67;coutgetfact(a);coutstar();coutgetfact(b);coutstar();coutgetfact(c);coutstar();}5参数类型参数名函数名返回类型函数体函数调用(参数传递)什么是函数为什么需要函数提高效率,减少重复编写程序的工作量。一个较大的程序不可能完全由一个人完成,更不可能把所有代码放在一个主函数中。什么是函数函数(function)就是一段实现某个功能的代码。6什么是函数一个程序包含若干个函数(但只有一个主函数),程序从主函数开始执行。执行过程中,主函数调用其它函数,其他函数相互调用。实际应用中,主函数一般比较简单,作用就是调用其它函数,而程序的功能全部都是由函数实现的。mainABCED7函数的定义和说明1、函数的定义格式返回类型函数名(参数列表){若干条语句(函数体)}返回类型包含存储类型和数据类型,存储类型省略为外部函数,数据类型不能省略。参数列表由若个参数组成,参数间用逗号分隔,给出参数名时还要给出参数的数据类型。8函数的定义和说明注意:1、函数的类型即函数返回值的类型,如果函数没有返回值则返回类型为void。voidcoutstar(){…}2、参数定义方式intgetfact(intm){……}9什么是函数voidcoutstar(){for(inti=0;i10;i++){cout*;}coutendl;}intgetfact(intm){intv=1;while(m0){v*=m;m--;}returnv;}10什么是函数voidmain(){inta=1,b=3,c=4;coutgetfact(a);coutstar();coutgetfact(b);coutstar();……}voidcoutstar(){……}intgetfact(intm){……}voidcoutstar(){……}intgetfact(intm){……}voidmain(){inta=1,b=3,c=4;coutgetfact(a);coutstar();coutgetfact(b);coutstar();……}11函数说明intgetfact(int);voidcoutstar();函数的定义和说明2、函数的说明如果函数定义在前,调用在后,调用前可以不说明。如果函数定义在调用之后,则必须在调用前说明函数的类型,名称和参数。说明格式:类型函数名(参数列表)例如,有函数定义如下:intgetfact(intm){…}原型说明:intgetfact(int)要与定义时顺序和类型相一致可省略参数名12函数的定义和说明voidmain(){inta=1,b=3,c=4;voidcoutstar();intgetfact(intm);coutgetfact(a);coutstar();……}voidcoutstar(){……}intgetfact(intm){……}voidcoutstar();intgetfact(intm);voidmain(){inta=1,b=3,c=4;coutgetfact(a);coutstar();……}voidcoutstar(){……}intgetfact(intm){……}13函数的参数和返回值1、函数的参数在定义函数时,函数名后括号中的变量名为形式参数(形参)。定义函数时,必须写出形参的个数、类型和名字。当调用一个有参数的函数时,直接写函数名调用函数,函数名后括号中的参数为实际参数(实参)。实参不加数据类型,可以是常量、变量、表达式。14函数的参数和返回值1、函数的参数在未被调用时,形参没有确定值,只是形式上的参数,只有被调用时才从调用函数中获得实际参数。voidfun(intm){coutm;}voidmain(){inta=100;fun(a);fun(10);fun(10+a);}…………ma100100intm=a;15函数的参数和返回值函数参数的求值顺序参数的求值顺序因编译系统不同而不同,一般来说不会引起参数值不同,但在具有副作用的表达式中可能会造成二义性。inta=5;fun(a++,a);编写程序要避免实参表达式中出现具有副作用的表达式166.1#includeiostream.hintfun(inta,intb){returna+b;}voidmain(){inta(13),b(25);intsum=fun(a-1,a-b);coutsumendl;}17函数的参数和返回值函数参数的默认值在定义或说明函数时通过设置参数的默认值,可以方便函数在调用时只写出部分参数。例如doublefun(doublea=1.5,doubleb=2.6)在函数被调用时,如果对应实参无值,则用形参的默认值,如对应实参有值,则用实参值,默认值无效。fun();//a=1.5,b=2.6fun(1.0)//a=1.0,b=2.618函数的参数和返回值如,doublefun(doublea,doubleb=2.6),则以下调用函数语句有无错误?fun();fun(1.2);fun(1,3);又如doublefun(doublea=1.5,doubleb),则以下调用语句有无错误?fun(1.2);19函数的参数和返回值注意设置形参的默认值要求从参数的右端开始,在指定了默认值的参数右端不允许出现没有指定默认值的参数。如果一个函数需要说明时,设置参数默认值应放在说明函数的语句中,不放在定义函数的语句中。参数默认值可以只用表达式206.2#includeiostream.hvoidmain(){voidfun(inti=1,intj=2,intk=3);fun();fun(4);fun(5,6);fun(7,8,9);}voidfun(inti,intj,intk){couti+j+kendl;}21函数的参数和返回值函数返回值的实现函数可以有返回值也可以没有返回值。没有返回值的函数类型为void,return语句可以省略。在函数中实现返回值的方法是使用带有表达式的return语句:return[表达式];一个函数可以有一个以上return语句,执行到哪一个return语句,哪一个return语句起作用。return后的表达式可以加括号,可以不加22函数的参数和返回值return[表达式];的执行过程;先计算表达式值;当表达式值同函数返回类型不一致时,应将表达式值转换为返回类型;将表达式值返回给调用函数,作为调用函数的值将程序的控制权返回到调用函数语句,执行调用函数下面的语句。236.4#includeiostream.hintfun(doublea,intb){returna-b;}voidmain(){doublex(11.5);inty(10);doublez=fun(x,y);coutzendl;}24函数的调用方式函数根据调用方式分为传值调用和引用调用。传值调用函数调用时,将实参的值传递给形参的调用方式。传值调用中有个分为传值和传地址两种。传值是指传递变量或表达式的值传地址是指传递变量的地址值25函数的调用方式1、传值调用实参为表达式,形参为变量实参复制一个副本给形参,在被调用函数中形参的值被改变时,实参不会受到影响。26传值调用1234567891011voidswap(int,int);voidmain(){intx=100,y=0;swap(x,y);coutx,yendl;}voidswap(inta,intb){intt;t=a;a=b;b=t;couta,bendl;}27回顾注意:当形参是普通变量时,实参可以是变量、常量、表达式,这时形参收到的是实参的值。传参的过程就是初始化形参的过程(开辟空间+赋值)传值方式不能通过改变形参来改变实参28函数的嵌套调用和递归调用函数的嵌套调用嵌套调用是指在一个函数体中调用另一个函数。注意,函数可以嵌套调用,但是不能嵌套定义!mainABCED29函数的嵌套调用和递归调用#includeiostream.hvoidfun1(),fun2(),fun3();voidmain(){coutItisinmain().endl;fun2();coutTiisbackmain().endl;}voidfun1(){coutItisinfun1().endl;fun3();coutItisbackinfun1().endl;}30函数的嵌套调用和递归调用voidfun2(){coutItisinfun2().endl;fun1();coutItisbackinfun2().endl;}voidfun3(){coutItisinfun3().endl;}31函数的嵌套调用和递归调用函数的递归调用递归调用是指在一个函数体中直接或间接调用自己。mainDmainAD32递归调用采用递归调用可以解决的问题是有限的,这些问题具有以下特点:能够将原有问题分解为一个新问题,而这个新问题又要用原有问题的解决方法。按这一特点将问题分解下去,每次出现的新问题都是原有问题的简化的子问题;(规模变小,形式不变)最终分解出来的新问题是具有已知解的问题。(有限)33递归从键盘输入一个正整数,编程求出该函数的阶乘,要求使用递归调用的方法。0!=11!=12!=1*23!=1*2*3n!=1*2*3*……*n=1!*2=2!*3=(n-1)!*n1n=0,1fact(n)=fact(n-1)*nn134递归longfact(intn){intc;if(n=1){return1;elsereturnfact(n-1)*n;}voidmain(){intn;cinn;coutfact(n)endl;}351n=0,1fact(n)=fact(n-1)*nn1主函数voidmain()intfact(intn)fact(n)54主函数voidmain()intfact(inti)fact(n)递归54longfact(intn){intc;if(n=1){return1;elsereturnfact(n-1)*n;}voidmain(){intn;cinn;coutfact(n)endl;}mainfact(n)输出fact(n)returnfact(n-1)*nfact(n-1)returnfact(n-2)*(n-1)fact(1)re

1 / 72
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功