C++程序设计教程课件_第1页
C++程序设计教程课件_第2页
C++程序设计教程课件_第3页
C++程序设计教程课件_第4页
C++程序设计教程课件_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

第6章结构化程序6.1函数6.2编译预处理理解函数的概念掌握函数的定义和调用掌握函数参数传递方式了解编译预处理命令6.1函数6.1.1函数的定义6.1.3函数的参数传递、返回值及函数声明6.1.2函数的调用6.1.4数组名作为函数参数6.1.6变量的作用域6.1.5指针变量作为形参6.1.7函数的嵌套调用和递归调用6.1函数6.1.1函数的定义一个函数包含函数头和函数体两部分。函数头定义函数功能和接口的全部要素,包括函数名、函数参数、函数返回值等内容;函数体则定义函数的算法实现。函数必须先定义后使用。格式:<数据类型>函数名(形式参数表){函数体}intprime(intm){inti,yes=1;for(i=2;i<=m/2;i++)if(m%i==0){yes=0;break;}if(yes==1&&m>=2)return1;elsereturn0;}6.1函数6.1.2函数的调用格式:函数名(实际参数表)#include<iostream>usingnamespacestd;doublemax(doublex,doubley){if(x>y)returnx;elsereturny;}intmain(){doublex,y;cout<<"输入两个实数:"<<endl;cin>>x>>y;cout<<x<<"和"<<y<<"中的较大数为<<max(x,y)<<endl;return0;}6.1函数6.1.3函数的参数传递、返回值及函数声明函数的调用过程如下:(1)给形参和局部变量分配存储单元;(2)进行参数传递,若形参是简单变量,就将实参的值传给形参;(3)执行被调函数;(4)执行完被调函数之后,返回主调函数,分配一个临时变量存储返回值,同时释放被调函数的形参和局部变量所占用的内存单元。6.1函数6.1.3函数的参数传递、返回值及函数声明参数传递按照参数形式的不同,C/C++有两种调用方式:传值调用和传地址调用。6.1函数6.1.3函数的参数传递、返回值及函数声明函数返回值对于有返回值的函数,必须使用return语句将要返回的值返回给调用者。格式:return表达式;doubleTriangleArea(doublea,doubleb,doublec){if((a+b<=c)||(b+c<=a)||(a+c<=b))return-1;doubles;s=(a+b+c)/2;returnsqrt(s*(s-a)*(s-b)*(s-c));}6.1函数6.1.3函数的参数传递、返回值及函数声明函数声明

C/C++程序中,对函数之间的排列顺序没有固定要求,但要满足先定义后使用的原则。对于库函数,在程序开头用#include指令将所需的头文件包含进来即可;而对于自定义函数,只要在调用之前进行了函数声明,则无论函数放在什么位置,程序都能正确编译、运行。函数声明也称为函数原型(functionprototype)。格式:<数据类型>函数名(<形参表>);6.1函数6.1.4数组名作为函数参数当形参是数组名时,采用的是地址传递,就是将实参数组的首地址给了形参,它们共用存储单元。#include<iostream>usingnamespacestd;voidswap(intx[]){intz;z=x[0];x[0]=x[1];x[1]=z;}intmain(){inta[2]={1,2};swap(a);cout<<a[0]<<""<<a[1];return0;}6.1函数6.1.4数组名作为函数参数关于数组名用作形参,还有以下注意事项:(1)用数组名作为形参时,应该在主调函数和被调函数中分别定义数组。(2)实参数组与形参数组的类型应该一致,否则会出错。(3)形参数组可以不指定大小,在定义数组时,可以在数组名后跟一组方括号。有时为了满足在被调函数中处理数组元素个数的需要,可以另设一个参数,传递需要处理数组元素的个数。(4)在被调函数中,也可以指定形参数组的大小,但不起作用。因为地址传递将实参数组首地址给了形参数组作为形参数组的首地址,使用的是同样的存储单元,有相同的值,同时发生变化。(5)调用函数时,实参只能写数组名(或指针)6.1函数6.1.5指针变量作为形参如果将形参定义为指针,那么在函数调用时传递的就是实参的地址,函数体就可以根据该地址对实参的本身进行操作,从而改变实参的值。#include<iostream>usingnamespacestd;voidswap(int*,int*);intmain(){inta=5,b=10;cout<<"函数调用前,a="<<a<<",b="<<b<<endl;swap(&a,&b);cout<<"函数调用后,a="<<a<<",b="<<b<<endl;return0;}voidswap(int*i,int*j){inttemp;temp=*i;*i=*j;*j=temp;}6.1函数6.1.6变量的作用域局部变量在函数内部定义的变量称为局部变量,它只在它定义的作用域内有效,当退出作用域时,其存储空间被释放。不同函数中的局部变量之间没有联系,即使是同名,这些同名变量也不会相互冲突。#include<iostream>usingnamespacestd;voidfun(){intt=5;cout<<"fun()中的t="<<t<<endl;}intmain(){doublet=3.5;cout<<"main()中的t="<<t<<endl;fun();cout<<"main()中的t="<<t<<endl;return0;}6.1函数6.1.6变量的作用域静态变量静态变量是存储在固定存储空间的变量。从定义开始,一直保留其存储空间,供其在被调用时使用,直到程序结束。静态变量在退出其作用域后,仍然保留其存储空间,并在下一次进入时继续使用。#include<iostream>usingnamespacestd;intmain(){inta,s;s=100;cout<<s<<endl;for(a=1;a<5;a++){staticints=10;

s++;cout<<s<<endl;}cout<<s;return0;}6.1函数6.1.6变量的作用域全局变量定义在所有函数之外的变量称为全局变量(globalvariable),可以为本文件中的所有函数所共享,如果其中任何一个函数修改全局变量,其他函数都可“见到”修改结果。全局变量可定义在函数体外的任何位置,从变量定义开始,到源文件结束,变量一直有效。#include<iostream>usingnamespacestd;intn=100;voidfun(){n*=2;}intmain(){n*=2;cout<<n<<endl;fun();cout<<n<<endl;return0;}6.1函数6.1.7函数的嵌套调用和递归调用嵌套调用在C/C++中,所有函数的级别都是一样的,不允许在一个函数内定义另一个函数,即不允许嵌套定义。但函数可以嵌套调用,也就是说,可以在一个函数内调用另一个函数。#include<iostream>usingnamespacestd;voidpm(){voidps();ps();cout<<"\nHowareyou?";ps();}voidps(){cout<<"\n**************";}intmain(){pm();return0;}6.1函数6.1.7函数的嵌套调用和递归调用递归调用在函数调用中,有这样两种情况:一种是在函数A的定义中有调用函数A的语句,即自己调用自己;另一种是在函数A中出现调用函数B语句,而在函数B的定义中也出现调用函数A的语句,即相互调用。前者称为直接递归,后者称为间接递归。#include<iostream>usingnamespacestd;intfac(intn){inty;cout<<n<<'\t’;if(n==0||n==1)y=1;elsey=n*fac(n-1);cout<<y<<'\t';returny;}intmain(){cout<<"\n4!="<<fac(4)<<endl;return0;}6.2编译预处理6.2.1宏定义指令6.2.3条件编译指令6.2.2文件包含指令6.2编译预处理6.2.1宏定义指令不带参数的宏定义格式:#define宏名常量串#include<iostream>usingnamespacestd;#defineN2#defineMN+1#defineNUM(M+1)*M/2intmain(){inti;for(i=1;i<=NUM;i++);cout<<i<<endl;return0;}6.2编译预处理6.2.1宏定义指令带参数的宏定义格式:#define宏名(形参表)参数表达式#include<iostream>usingnamespacestd;#defineP4#defineF(x)P*x*xintmain(){intm=2,n=4;cout<<F(m+n)<<endl;return0;}6.2编译预处理6.2.2文件包含指令文件包含用#include指令,预处理后将指令中指明的源程序文件嵌入源程序文件的指令位置处。格式

温馨提示

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

评论

0/150

提交评论