函数与编译预处理_第1页
函数与编译预处理_第2页
函数与编译预处理_第3页
函数与编译预处理_第4页
函数与编译预处理_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、main ( )fun2( )fun1( )fun3( )fun1_1( )fun2_1( )fun2_2( )图图 函数调用层次关系函数调用层次关系* * * * * * * * * * * How do you do!* * * * * * * * * * *要求显示器输出:要求显示器输出:# #include #define NUM 11void main() int i; for(i=0;iNUM;i+) cout*; coutendl; cout“How do you do !”endl; for(i=0;iNUM;i+) cout*; coutendl;# #include #de

2、fine NUM 11void print( ) int i; for (i=0;iNUM;i+) cout*; coutendl; void main() print();cout“How do you do !”endl; print();在出现函数调用时,程序在出现函数调用时,程序控制转到函数,函数执行控制转到函数,函数执行结束后,回到调用点(主结束后,回到调用点(主函数),继续执行后续语函数),继续执行后续语句。句。函数调用函数调用函数定义函数定义函数定义,函数定义,a,b 称为函数的形式参数,称为函数的形式参数,一般称为形参一般称为形参,每个形参前有形参的每个形参前有形参的类型说明(

3、不能写成类型说明(不能写成int a,b),形参之形参之间用逗号隔开;间用逗号隔开; return 格式为:格式为: return 或或 return ,功能是立即结束函数,返,功能是立即结束函数,返回。回。若有表达式,先计算表达式,然后若有表达式,先计算表达式,然后带值返回带值返回函数调用:(函数调用:(1)计算表达)计算表达式值(该值称为实参)(式值(该值称为实参)(2)转到函数首先值传递给对转到函数首先值传递给对应的形参,然后开始执行应的形参,然后开始执行函数体函数体若从键盘输入: 9 4 23输出是:?注意:形参与值参数原则上个数、注意:形参与值参数原则上个数、类型应该相一致(特殊情况

4、除外)类型应该相一致(特殊情况除外)调用调用power(4.6,3 )函数函数power(4.6,3 )return 97.336 主程序后续语主程序后续语句句【例】【例】 说明实参和形参对应关系的示例。说明实参和形参对应关系的示例。#include #includefloat power(float x,int n)/求求x x的的n n次幂次幂float pow=1;while(n-) pow*=x;return pow; void main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power(x,n)endl;coutpower(c,n)

5、=power(c,n)endl;coutpower(n,x)=power(n,x)endl; 调用调用power(a,3 )函数函数power(a,3 )return 912673 主程序后续语主程序后续语句句【例例】 说明实参和形参对应关系的示例。说明实参和形参对应关系的示例。#include #includefloat power(float x,int n) /求求x x的的n n次幂次幂float pow=1;while(n-) pow*=x;return pow; void main()int n=3;float x=4.6;char c=a;coutpower(x,n)=power

6、(x,n)endl;coutpower(c,n)=power(c,n)endl;coutpower(n,x)=power(n,x)endl;调用调用power(3,4.6 )函数函数power(3,4.6 )return 81 主程序后续语主程序后续语句句【例例】 说明实参和形参对应关系的示例。说明实参和形参对应关系的示例。#include #includefloat power(float x,int n) /求求x x的的n n次幂次幂float pow=1;while(n-) pow*=x;return pow; void main()int n=3;float x=4.6;char c

7、=a;coutpower (x,n)=power(x,n)endl;coutpower (c,n)=power(c,n)endl;coutpower (n,x)=power(n,x)endl;#include void main ( ) int a,b,t;cinab; print(a,b);t=max(a,b);couttendl;void print(int a,int b) for(i=0;imax(a,b);i+) cout*; couty)?x:y; void print (int,int);int max(int, int);int max (int,int);int max (i

8、nt,int)void print (int,int);#include void change(int x,int y) int tmp; tmp=y; y=x; x=tmp; coutx=xy=yendl;void main() int x=3,y=4; coutx=x x=yendl; change(x,y); coutx=x y=yendl;void fun1(int, int);void fun2(float);void main() int x=1;y=2; fun1(x, y);void fun1(int a,int b) float x=3; fun2(x);void fun2

9、(float y) int x; #include void change(int x,int y) int tmp; tmp=y; y=x; x=tmp; coutx=xy=yendl;void main() int x=3,y=4; coutx=x x=yendl; change(x,y); coutx=x y=y1unsigned long fac(unsigned long n) if( n = =1 ) return 1; else return n*fac(n-1); #include void main() unsigned long n; cinn; coutfac(n)end

10、l;递归是一种编程技术,并不是用于计算阶乘的。用非递归的方法计算递归是一种编程技术,并不是用于计算阶乘的。用非递归的方法计算阶乘效率更高,我们用递归来计算阶乘,是因为它的递归调用易于实阶乘效率更高,我们用递归来计算阶乘,是因为它的递归调用易于实现和理解。现和理解。 Hanoi塔塔hanoi(n,a,b,c) /n个盘个盘a从移到从移到c,允许利用的中间杆是,允许利用的中间杆是b hanoi(n-1,a,c,b); a c; / couta”cendl;hanoi(n-1,b,a,c);当只有一个盘时,上述不成立。应直接从当只有一个盘时,上述不成立。应直接从a移到移到cA B C#include

11、 void hanoi(int n,char a,char b,char c) if(n = 1) coutacendl; else hanoi(n-1,a,c,b); coutacn; hanoi(n,A,B,C);Hanoi塔塔A B C#include void hanoi(int n,char a,char b,char c) if(n = 1) coutacendl; else hanoi(n-1,a,c,b); coutacendl; hanoi(n-1,b,a,c); hanoi(3,A,B,C);void hanoi(3, A, B, C) if(n = 1) coutacen

12、dl; else hanoi(n-1,a,c,b); coutacendl; hanoi(n-1,b,a,c); void hanoi(3,A, B, C) hanoi(2, A, C, B); A搬到搬到C; hanoi(2, B, A, C); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,A,C,B) hanoi(1,A,B,C); A搬到B; hanoi(1,

13、C,A,B); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,A,C,B) hanoi(1,A,B,C); A搬到B; hanoi(1,C,A,B); A搬到CHanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,A,C,B) hanoi(1,A,B,C); A搬到B; hanoi(1,C,A,B); A搬到CHanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C;

14、 hanoi(2,B,A,C); hanoi(2,A,C,B) hanoi(1,A,B,C); A搬到B; hanoi(1,C,A,B); A搬到CHanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,A,C,B) hanoi(1,A,B,C); A搬到B; hanoi(1,C,A,B); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,A,C,B) hanoi(1,A,B,C); A搬到B; hanoi(

15、1,C,A,B); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,A,C,B) hanoi(1,A,B,C); A搬到B; hanoi(1,C,A,B); C搬到BHanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,A,C,B) hanoi(1,A,B,C); A搬到B; hanoi(1,C,A,B); C搬到BHanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到

16、C; hanoi(2,B,A,C); hanoi(2,A,C,B) hanoi(1,A,B,C); A搬到B; hanoi(1,C,A,B); C搬到BHanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,A,C,B) hanoi(1,A,B,C); A搬到B; hanoi(1,C,A,B); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B)

17、; A搬到C; hanoi(2,B,A,C); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,A); B搬到C; hanoi(1,A,B,C); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,A); B搬到C; hanoi(1,A,B,C); B搬到AHanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A

18、,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,A); B搬到C; hanoi(1,A,B,C); B搬到AHanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,A); B搬到C; hanoi(1,A,B,C); B搬到AHanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,

19、A); B搬到C; hanoi(1,A,B,C); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,A); B搬到C; hanoi(1,A,B,C); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,A); B搬到C; hanoi(1,A,B,C); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C

20、,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,A); B搬到C; hanoi(1,A,B,C); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,A); B搬到C; hanoi(1,A,B,C); A搬到CHanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,A); B搬

21、到C; hanoi(1,A,B,C); A搬到CHanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,A); B搬到C; hanoi(1,A,B,C); A搬到CHanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,A); B搬到C; hanoi(1,A,B,C); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A

22、,C,B); A搬到C; hanoi(2,B,A,C); hanoi(2,B,A,C) hanoi(1,B,C,A); B搬到C; hanoi(1,A,B,C); Hanoi塔塔A B Chanoi(3,A,B,C) hanoi(2,A,C,B); A搬到C; hanoi(2,B,A,C); 文件作用域规则:文件作用域规则:打印打印200调用调用func( )函数函数func( )200*2=400打印打印400n=100n=100*2=200全局变量的例子。全局变量的例子。#includeint n=100;void func()n*=2; void main()n*=2;coutnendl

23、;func();coutnendl; 打印打印main()中的中的t=3.5调用调用fun( )函数函数fun( )打印打印fun()中的中的t=5 打印打印main()中的中的t=3.5t = 5局部变量的例子局部变量的例子#includevoid fun()auto int t=5;/ fun()中的局部变量,中的局部变量,auto可省略可省略coutfun()中的中的t=tendl;void main()float t=3.5;/main()函数中的局部变量函数中的局部变量coutmain()中的中的t=tendl;fun();coutmain()中的中的t=tendl;块作用域规则:块

24、作用域规则: 200 300内内 i= 500内内 j= 600内内n=500+600=11001100 500 600100200+300=500500 500 200 300外部外部 i=200外部外部 j=300【例】【例】 显示同名变量可见性。显示同名变量可见性。int n=100;#includevoid main() int i=200,j=300;cout ntitjendl; /内部块内部块 int i=500,j=600,n; n=i+j; cout ntitj endl; /输出局部变量输出局部变量n cout:nendl;/输出全局变量输出全局变量n n=i+j;/修改全

25、局变量修改全局变量cout ntitj endl;函数作用域规则:函数作用域规则:C/C+存储区域分配图存储区域分配图堆区堆区 ( (动态数据动态数据) )栈区(函数局部数据)栈区(函数局部数据)全局数据区全局数据区( (全局、静态全局、静态) )代码区(程序代码)代码区(程序代码)存放应用程存放应用程序的可执行序的可执行代码代码 存放应用程序的全局数存放应用程序的全局数据和静态数据,它们的据和静态数据,它们的生命期与应用程序的生生命期与应用程序的生命期一相同,即从应用命期一相同,即从应用程序开始运行时起至停程序开始运行时起至停止运行时止。全局数据止运行时止。全局数据与静态数据的内存空间与静态

26、数据的内存空间均是在编译时分配的均是在编译时分配的 局部变量存放局部变量存放在栈中,它们在栈中,它们的内存空间是的内存空间是在程序运行时在程序运行时动态分配的动态分配的C+中,对内中,对内存用存用new命令命令创建用创建用delete命命令释放。令释放。 局部静态变量和局部变量的对比局部静态变量和局部变量的对比#include st() static int t=100; /局部静态变量局部静态变量 t+; return t;at() int t=100; /自动变量自动变量 t+;return t;void main() int i; for(i=0;i5;i+) coutat()t; co

27、utendl; for(i=0;i5;i+) coutst()t; coutendl;12 34 51011011011011011 21013 4 5102103104105局部静态变量和局部变量的对比局部静态变量和局部变量的对比#include st() static int t=100; /局部静态变量局部静态变量 t+; return t;at() int t=100; /自动变量自动变量 t+;return t;void main() int i; for(i=0;i5;i+) coutat()t; coutendl; for(i=0;i5;i+) coutst()t; couten

28、dl;输出是:输出是: 5 9参数的缺省值为参数的缺省值为20参数的缺省值为参数的缺省值为30参数的缺省值为参数的缺省值为10函数的定义函数的定义函数的原型说明函数的原型说明3+5=调用调用sum(3,5 )函数函数sum(3,5 )return 8 2.2+5.6=调用调用sum(2.2,5.6 )函数函数double sum(2.2,5.6 )return 7.8 3.5+4+8=调用调用sum(3.5, 4, 8 )函数函数float sum(3.5, 4, 8 )return 15.5 结束结束87.815.5#includesum(int a,int b) return a+b;double sum(double a,double b)return a+b;float sum(float a,float b,float c)return a+b+c;void main()cout3+5=sum(3,5) endl;cout2.2+5.6=“ sum(2.2,5.6)endl;cout3.5+4+8=“ sum(3.5,4,8)endl;源程序(文本文件)*.CPP目标文件(二进制文件)*.OBJ可执行文件(二进制文件)*.EXE库文件(各种函数)编译连接编译预处理编译预处理 编译预处理指令不属

温馨提示

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

评论

0/150

提交评论