青岛理工大学课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《青岛理工大学课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 青岛 理工大学 课件
- 资源描述:
-
1、青岛理工大学青岛理工大学第三章 函数本章主要内容本章主要内容3.1 3.1 函数的定义和声明函数的定义和声明3.2 3.2 函数的调用与参数传递函数的调用与参数传递3.3 3.3 内联函数内联函数3.4 3.4 函数重载函数重载3.5 3.5 带默认形参值的函数带默认形参值的函数3.6 3.6 作用域与生存周期作用域与生存周期3.7 3.7 多文件结构多文件结构3.1 3.1 函数的定义与申明函数的定义与申明1 1、函数的定义、函数的定义l无参函数的一般形式无参函数的一般形式类型说明符 函数名()类型说明语句类型说明符 函数名(形式参数表)形式参数类型说明 类型说明 语句l有参函数的一般形式有
2、参函数的一般形式【例例3-13-1】max max函数的位置示例函数的位置示例#include#include int max(int a,int b)int max(int a,int b)if(ab)return a;if(ab)return a;else return b;else return b;void main()void main()int max(int a,int b);int max(int a,int b);intint x,y,zx,y,z;coutcoutinput two numbers:input two numbers:xy;cinxy;z=max(x,y);
3、z=max(x,y);coutmaxmum=zendl;coutmaxmum=zendl;3.1 3.1 函数的定义与申明函数的定义与申明2 2、函数的申明、函数的申明l函数声明的语法形式函数声明的语法形式类型标识符类型标识符 函数名(形式参数表)函数名(形式参数表)语句序列语句序列 l形式参数表形式参数表 type name name1 1,type,name name2 2,.,type,.,name namen nl函数的返回值函数的返回值 由由 return return 语句给出;无返回值的函数(语句给出;无返回值的函数(voidvoid类型),类型),不必写不必写returnret
4、urn语句语句是被初始化的内部变量,寿命和可见性仅限于函数内部若无返回值,写void【例例3-13-1】max max函数的位置示例函数的位置示例#include#include intint max(intmax(int a,inta,int b);b);/函数声明函数声明void main()void main()int max(int a,int b);int max(int a,int b);intint x,y,zx,y,z;coutcoutinput two numbers:input two numbers:xy;cinxy;z=max(x,y);z=max(x,y);coutm
5、axmum=zendl;coutmaxmum=zb)return a;if(ab)return a;else return b;else return b;【例例3-23-2】实现两个数相加实现两个数相加#include#include intint add(add(intint,intint););/函数原型函数原型void main()void main()intint sum,x,ysum,x,y;coutcout请输入被加数和加数请输入被加数和加数:xy;xy;sum=add(sum=add(x,yx,y);/);/函数调用函数调用coutcoutSum=sumSum=sumendle
6、ndl;intint add(add(intint a,inta,int b)/b)/函数定义函数定义 return return a+ba+b;运行结果:请输入被加数和加数:213 625Sum=8383.2 3.2 函数的调用与参数传递函数的调用与参数传递1 1、函数的调用、函数的调用l调用形式调用形式 l函数名函数名(实参列表)(实参列表)l函数调用格式函数调用格式l函数表达式函数表达式l函数语句函数语句l函数实参函数实参3.2 3.2 函数的调用与参数传递函数的调用与参数传递2 2、函数调用时的参数传递、函数调用时的参数传递l按值传递按值传递 l形参在没有被调用时,不占用存储空间形参在
7、没有被调用时,不占用存储空间l调用函数时,应该注意函数的实参与形参类型一致,调用函数时,应该注意函数的实参与形参类型一致,否则会出现错误否则会出现错误lC+C+函数中参数的求值顺序为自右至左函数中参数的求值顺序为自右至左【例例3-33-3】按值传递按值传递#include#include void swap(void swap(int,intint,int););void main()void main()intint a=3,b=4;a=3,b=4;coutcouta=a,b=a=a,b=“b bendlendl;swap(swap(a,ba,b););coutcouta=a,b=a=a,b
8、=b b endlendl;void swap(int x,int y)void swap(int x,int y)intint t=x;t=x;x=y;x=y;y=t;y=t;运行结果:a=3,b=4a=3,b=4【例例3-43-4】函数参数的传递顺序函数参数的传递顺序#include#include int some_fun(int a,int b)int some_fun(int a,int b)return a+b;return a+b;void main()void main()int x,y;int x,y;x=2;y=3;x=2;y=3;coutsome_fun(+x,x+y)e
9、ndl;coutsome_fun(+x,x+y)endl;x=2;y=3;x=2;y=3;coutsome_fun(x+y,+x)endl;coutsome_fun(x+y,+x)endl;运行结果:8 93.2 3.2 函数的调用与参数传递函数的调用与参数传递2 2、函数调用时的参数传递、函数调用时的参数传递l地址传递地址传递 【例3-5】地址传递#include iostream.hvoid swap(int*,int*);void main()int a=3,b=4;couta=a,b=“bendl;swap(&a,&b);couta=a,b=“bendl;void swap(int*x
10、,int*y)int t=*x;*x=*y;*y=t;运行结果:a=3,b=4a=4,b=33.2 3.2 函数的调用与参数传递函数的调用与参数传递2 2、函数调用时的参数传递、函数调用时的参数传递l引用传递引用传递 l数据类型数据类型&引用名引用名=数据类型变量名;数据类型变量名;l引用引用(&)(&)是标识符的别名是标识符的别名;【例例3-6】引用的建立和使用。#include using namespace std;int main()int a=30,b=20;int&refa=a,&refb=b;refa=a+20;b=refb+10;coutrefa“”aendl;coutrefb
11、 bendl;refa=b;/此时引用refa仍旧是a的别名,只是把b的值给到a。coutrefa“”aendl;return 0;运行结果:50 50 30 3030 30【例例3-73-7】引用传递引用传递#include#include iostream.hiostream.h void swap(void swap(intint&,&,intint&);&);void main()void main()intint a=3,b=4;a=3,b=4;coutcout“a=”a“,b=“a=”a“,b=”bbendlendl;swap(swap(a,ba,b););coutcout“a=”
12、a“,b=“a=”a“,b=”bbendlendl;void swap(int&x,int&y)void swap(int&x,int&y)intint t=x;t=x;x=y;x=y;y=t;y=t;运行结果:a=3,b=4a=4,b=33.2 3.2 函数的调用与参数传递函数的调用与参数传递3 3、函数的嵌套调用和递归调用函数的嵌套调用和递归调用l函数的嵌套调用函数的嵌套调用 【例3-8】函数的嵌套调用,求三个数中最大数和最小数的差值。#includeusing namespace std;int max(int x,int y,int z)int t;t=xy?x:y;return(tz
13、?t:z);int min(int x,int y,int z)int t;t=xy?x:y;return(tabc;coutMax-Min=dif(a,b,c)endl;运行结果:5-6 15213.2 3.2 函数的调用与参数传递函数的调用与参数传递3 3、函数的嵌套调用和递归调用函数的嵌套调用和递归调用l函数的递归调用函数的递归调用 图图3-1 直接调用过程示意图直接调用过程示意图图图3-2 间接调用过程示意图间接调用过程示意图3.2 3.2 函数的调用与参数传递函数的调用与参数传递3 3、函数的嵌套调用和递归调用函数的嵌套调用和递归调用l函数的递归调用函数的递归调用l递归函数的一般形式
14、:递归函数的一般形式:函数类型 递归函数名f(参数x)if(满足结束条件)结果=初值;else 结果=含f(x-1)的表达式;返回结果;【例【例3-93-9】编程计算某个正整数的阶乘编程计算某个正整数的阶乘#include#include long long intint facfac(intint n)n)intint total;total;if(n=1|n=0)total=1;if(n=1|n=0)total=1;else total=fac(n-1)else total=fac(n-1)*n;n;return total;return total;void main()void mai
15、n()intint n;n;coutcoutplease input a integer:;n;cinn;coutn!is fac(n)endl;coutn!is fac(n)0)if(n0)while(n)while(n)total total*=n;=n;n-;n-;return total;return total;3.3 3.3 内联函数内联函数l声明时使用关键字声明时使用关键字 inlineinline。l编译时在调用处用函数体进行替换编译时在调用处用函数体进行替换,节省了参节省了参数传递、控制转移等开销。数传递、控制转移等开销。l注意:注意:l内联函数体内不能有内联函数体内不能有循
16、环语句循环语句和和switchswitch语句。语句。l内联函数的定义必须出现在内联函数第一次被调用内联函数的定义必须出现在内联函数第一次被调用之前。之前。l内联函数不能是递归函数内联函数不能是递归函数l语句数尽可能少,一般不超过语句数尽可能少,一般不超过5 5行行【例【例3-123-12】将字符数组】将字符数组str1str1中所有小写字母中所有小写字母(a(az)z)转换成大写字母转换成大写字母#include#include#include#include intint up_letterup_letter(char(char chch););void main()void main()
17、char char strstr80;80;intint i i;coutcoutplease input a string:;strstr;for(for(i i=0;i=0;istrlenstrlen(strstr););i i+)+)if(if(up_letterup_letter(strstr i i)strstr i i-=32;-=32;coutcoutthe result is:the result is:strstr=a&=a&chch=z)=z)return 1;return 1;else else return 0;return 0;运行结果:Please input a
18、string:goodMORNING3456The result is:GOODMORNING3456【例【例3-123-12】将字符数组】将字符数组str1str1中所有小写字母中所有小写字母(a(az)z)转换成大写字母转换成大写字母#include#include#include#include inline inline intint up_letterup_letter(char(char chch););void main()void main()char char strstr80;80;intint i i;coutcoutplease input a string:;strs
19、tr;for(for(i i=0;i=0;istrlenstrlen(strstr););i i+)+)if(if(up_letterup_letter(strstr i i)strstr i i-=32;-=32;coutcoutthe result is:the result is:strstr=a&=a&chch=z)=z)return 1;return 1;else else return 0;return 0;【例例3-133-13】内联函数的应用内联函数的应用#include#include inline int abs(int x)inline int abs(int x)ret
20、urn x0?-x:x;return x0?-x:x;void main()void main()int a,b=3,c,d=-4;int a,b=3,c,d=-4;a=abs(b);a=abs(b);c=abs(d);c=abs(d);couta=a,c=cendl;couta=a,c=cendl;运行结果:a=3,c=43.4 3.4 函数重载函数重载1 1、函数重载的定义、函数重载的定义l重载是指同一个函数名对应多个函数的现象重载是指同一个函数名对应多个函数的现象形参类型不同形参类型不同int add(int add(intint x,x,intint y);y);float add(f
21、loat add(floatfloat x,x,floatfloat y);y);形参个数不同形参个数不同int add(int x,int y);int add(int x,int y);int add(int x,int y,int add(int x,int y,intint z z););3.4 3.4 函数重载函数重载2 2、函数重载的绑定、函数重载的绑定l函数重载要求编译器能够唯一地确定调用一个函数时函数重载要求编译器能够唯一地确定调用一个函数时应执行哪个函数代码应执行哪个函数代码l重载函数重载函数add()add()的绑定:的绑定:coutadd(1,2)endl;/coutad
22、d(1,2)endl;/匹配匹配int add(int,int);int add(int,int);coutadd(1.2,3.4)endl;/coutadd(1.2,3.4)endl;/匹配匹配double add(double,double add(double,double);double);cout add(a,b)endl;/cout add(a,b)endl;/匹配匹配int add(int,int);int add(int,int);【例例3-143-14】求三个操作数之和求三个操作数之和#include#include intint sum(sum(int,int,intint
23、,int,int););double sum(double,double,double);double sum(double,double,double);void main()void main()coutInt:sum(2,3,4)endl;coutInt:sum(2,3,4)endl;coutDouble:sum(1.4,2.7,3.8)endl;coutDouble:sum(1.4,2.7,3.8)endl;intint sum(sum(intint a,inta,int b,intb,int c)c)return return a+b+ca+b+c;double sum(double
24、 a,double b,double c)double sum(double a,double b,double c)return return a+b+ca+b+c;运行结果:Int:9Double:7.93.5 3.5 带默认形参值的函数带默认形参值的函数lC+C+语言允许在函数说明或函数定义中为形参预语言允许在函数说明或函数定义中为形参预赋一个默认的值,这样的函数就叫做赋一个默认的值,这样的函数就叫做带有默认带有默认形参值的函数形参值的函数int fun(int x=15,int y=8)int fun(int x=15,int y=8)return x-y;return x-y;voi
25、d main(void)void main(void)fun(34,22);/fun(34,22);/传递给形参传递给形参x,yx,y的值分别为的值分别为3434和和2222 fun(10);/fun(10);/传递给形参传递给形参x,yx,y的值分别为的值分别为1010和和8 8 fun();/fun();/传递给形参传递给形参x,yx,y的值分别为的值分别为1515和和8 8 3.5 3.5 带默认形参值的函数带默认形参值的函数l特点特点l若函数具有多个形参,则缺省形参值必须自右向左连若函数具有多个形参,则缺省形参值必须自右向左连续定义,并且在一个缺省形参值的右边不能有未指定续定义,并且在
展开阅读全文