第2章C++语言基础课件.ppt

上传人(卖家):三亚风情 文档编号:3526153 上传时间:2022-09-11 格式:PPT 页数:133 大小:2.85MB
下载 相关 举报
第2章C++语言基础课件.ppt_第1页
第1页 / 共133页
第2章C++语言基础课件.ppt_第2页
第2页 / 共133页
第2章C++语言基础课件.ppt_第3页
第3页 / 共133页
第2章C++语言基础课件.ppt_第4页
第4页 / 共133页
第2章C++语言基础课件.ppt_第5页
第5页 / 共133页
点击查看更多>>
资源描述

1、版权所有版权所有 复制必究复制必究2.1 C+概述本节主要内容本节主要内容:2.1.1 2.1.1 C+C+的主要特点的主要特点2.1.2 2.1.2 C+C+程序与程序与C C程序程序2.1.3 2.1.3 C+C+对对C C的一般扩充的一般扩充2.1.4 2.1.4 利用利用Visual C+Visual C+编制和运行编制和运行C+C+程序程序 C+语言是由贝尔实验室的Bjarne Stroustrup 在1980年创建的。自90年代后,C+越来越受到重视并得到广泛的应用。2.1.1 C+的主要特点C+是由C扩充而来,因此,除了与C兼容,C+还继承了C的以下特点:丰富的运算符和数据类型、

2、结构化的程序设计方法、高效的机器代码、良好的可移植性。支持面向对象程序设计的方法。C+的错误检查机制强,提供了专门的机制检查类和异常处理功能。C+有很多成熟的编译器:Visual C+、Inprise(被Borland兼并)的C+Builder、Borland的Borland C+和IBM的VisualAge C+。2.1.2 C+程序与C程序C C语言程序语言程序:/*这是一个简单的C程序:simple.c */#include void main(void)printf(Hello World!n );/输出字符串 用C+语言编写同样功能的程序C+C+语言程序:语言程序:/这是一个简单的C

3、+程序:simple.cpp#include void main(void)cout Hello World!n;/输出字符串程序运行后在屏幕上输出:Hello World!(1)C+程序与C程序的结构完全相同。(2)C源程序文件的扩展名为C,C+源程序文件的扩展名为CPPCPP。(3)C注释使用符号“/*”和“*/”,表示符号“/*”和“*/”之间的内容都是注释;C+除了支持这种注释,还提供了一个双斜线“/”注释符,表示“/”之后的本行内容是注释,注释在行尾自动结束。(4)C程序所包含的标准输入、输出的头文件是stdio.h,输入、输出通常通过调用函数来完成;而C+程序可以包含标准输入、输出

4、流的头文件iostream.h,输入、输出可以通过使用标准输入、输出流对象来完成。C+程序与程序与C程序的比较:程序的比较:一个C+程序可以由多个函数构成;每个程序都从主函数main()开始执行,从主函数返回时结束执行;组成程序的语句主要包括声明语句和执行语句;声明语句用于声明变量和函数,变量声明语句说明变量的名称和数据类型,函数声明语句说明函数的名称、参数类型和返回值;执行语句包括:赋值语句、表达式语句、函数调用语句和流程控制语句等,它们写在一个函数中(包括主函数)。例例C+程序基本结构:程序基本结构:例 输入一个学生三门课的成绩,计算其平均值,并根据其值输出评语。#include void

5、 main()int math,chem,phy,ave;coutmathchemphy;ave=(math+chem+phy)/3.0+0.5;/0.5用于四舍五入if(ave=90)/使用ifelse if语句coutExcellent=60&ave90)coutPassn;elsecoutFail”流提取运算符或“”流插入运算符,分别将数据对象从输入流提取出来或插入到输出流,从而完成数据的输入和输出。使用C+面向流的输入、输出方式提高了程序的可读性,减少了错误的发生。例例例 编写程序利用标准输入流接收用户从键盘输入的数据,利用标准输出流将运算结果输出到屏幕。#include /使用输入、

6、输出流void main(void)coutxyz;/从键盘读取数据给变量x、y、z coutThe sum is x+y+zn;/输出结果程序运行的结果为:please enter the value of x,y,z:2 4 6The sum is 12 2.1.4 利用Visual C+编制和运行C+程序 (1)启动Visual C+Visual C+,执行“FileFile|NewNew”菜单命令,在New对话框的Projects页面左侧项目类型列表中选择Win32 Console ApplicationWin32 Console Application项,在对话框右侧的Locatio

7、n和Project Name框中分别输入路径和项目名称,单击OK按钮。(2)进入Win32 Console Application step-1 of 1对话框,选择An Empty Project项,单击Finish按钮。最后在New Project Information对话框单击OK按钮完成项目的建立。(3)建立和编辑C+源程序文件。执行“ProjectProject|Add to ProjectAdd to Project|NewNew”菜单命令,在New对话框的File页面选择C+Source FileC+Source File项,在File框中填入C+源文件名,确认选择Add to

8、 project,单击OK按钮将打开文本编辑器。输入并编辑C+源程序代码。(4)建立可执行程序。执行“Build|Build”菜单命令(快捷键F7)即可建立可执行程序,若程序有语法错误,则在屏幕下方的输出窗口中显示错误信息。(5)执行“Build|Execute”菜单命令即可在伪DOS状态下运行程序,也可进入DOS状态后运行已建立的程序。注意不能在Windows中直接运行一个控制台程序。也可采用另一种简单的方法编写C+程序,即执行“File|New|Files|C+Source File”菜单命令直接创建一个C+源文件,在执行Build命令时再建立项目工作区。作业作业:P60,2-2,2-3上

9、机作业上机作业:P63,2-43,2-442.2 C+程序基本要素 程序由语句组成,语句由基本要素组成。任何一种程序设计语言都有自己的一套语法规则以及按照语法规则构成的元素,程序基本要素就是这样一种具有独立语法意义的元素。C+程序基本要素主要包括标识符、关键字、常量、变量、运算符和表达式等。2.2.1 标识符标识符是程序员或系统定义的符号,用以标识变量、函数、对象等。标识符由字母、数字和下划线组成,它必须以字母或下划线开始。为标识符取名时,尽量使用能够反映其用途的单词或缩写,这样可提高程序的可读性。例如:x,y,sum,length,Area,Myfun,m_xPos,CPerson,pers

10、on1 2.2.2 关键字关键字是C+编译器预定义的、具有固定含义的保留字,在程序中它们不能被作为一般的标识符使用。C+增加了C不具有的关键字,并且不同C+编译器含有不同的关键字。例如:auto,bool,break,case,char,class,const,continue,default,delete,do,double,else,enum,extern,false,float,for,friend,goto,if,inline,int,long,new,operator,private,protected,public,return,short,signed,sizeof,static

11、,struct,switch,template,this,true,try,typedef,union,unsigned,using,virtual,void,while 2.2.3 常量和变量在程序中使用的数据有常量和变量两种形式;常量是不能被程序改变的固定值;变量是可以被程序改变的数据。常量和变量的主要区别在于:常量不占内存空间,不能为常量赋值;而变量需要占内存空间,可以给变量赋不同的值。不管常量还是变量,程序中使用的每一个数据都属于一种特定的数据类型。在使用变量之前,必须先利用标识符标识符声明变量。变量声明的形式变量声明的一般形式如下:=,=,;变量声明语句说明了变量的名称和数据类型,程

12、序中通过变量名来存取其中的数据,数据类型定义了变量的存储结构和可以进行的运算。编译程序要为声明的变量分配存储空间,并可以给变量赋一个初始值。例如:int x;float radius=123.56 int x,y=100;2.2.4 运算符和表达式 运算符:运算符:运算是对数据进行加工的过程,表示各种不同运算的符号称为运算符,而参与运算的数据称为操作数。运算符实质上是系统预定义的函数名,而进行运算就是调用一个函数。按运算符和操作数的运算性质,运算符可分为算术运算符、逻辑运算符、关系运算符和其它运算符(见表2-1)。例如:+、-、*、/、%、+、()、=、+=、-、&、b)&(x=y)表达式:表

13、达式:一个表达式由常量、变量、函数调用和运算符组成,每个表达式都将产生一个值,并且具有某种类型(称为该表达式的类型)。表达式隐含的数据类型取决于组成表达式的操作数的类型。当表达式中的操作数都是常量时,称这个表达式是常量表达式。在对一个表达式求值时,优先级高的运算符先运算,优先级低的运算符后运算。运算符的结合性:右结合性和左结合性2.3 C+数据类型 数据是程序加工的对象。C+将数据分为不同的数据类型,不管常量还是变量,它们都属于某一种数据类型。数据类型规定了数据的存储结构和可以进行的运算。C+中的数据类型分为:基本数据类型、指针类型和构造类型三大类。构造类型包括数组、结构和枚举等类型。2.3.

14、1 基本数据类型基本数据类型是C+预定义的数据类型,C+的基本数据类型包括字符型、整数型、实型(单精度和双精度)和无值型。每种基本数据类型都使用一个关键字来表示,如char、int、float、double和void等(见表)。数组、指针和类等派生数据类型是程序员按照C+的语法要求在基本数据类型基础之上建立起来的。除void数据类型以外,其它基本数据类型加类型修饰符signed、unsigned、short和long。例例例:int num,total;float v,r,h;int a=3;/等价于:int a(3);char c=A;long lx=12345678;unsigned in

15、t nWidth;可以使用运算符“()”进行强制类型转换:float x=123.56;int i=(int)x;/i=123 2.3.2 const常量类型 const常量类型表示一个“常值变量”,即值不能被改变的变量。声明一个const型变量只需在数据类型说明前加上关键字const。例如:const int size=20;用const声明的变量必须用常量或常量表达式初始化。一旦变量被声明为const型,禁止任何试图修改该变量的操作。如果知道一个变量赋初值后在生命周期里其值不变,用const限定该变量是程序设计的好习惯,如数组长度。前面介绍了基本数据类型,后面开始介绍指针类型和构造类型,包

16、括数组、指针、字符串、结构和枚举等类型。2.3.3 数组 数组属于构造类型,它是一组具有相同类型数据的有序集合,其中每个数据称为数组的元素。数组按其下标的个数分为一维数组、二维数组和多维数组。一维数组的声明方式如下:常量表达式;二维数组的声明方式如下:常量表达式 常量表达式;数组名后括号中的常量表达式表示数组的长度,即数组所包含元素的数量。例如例如.数组声明语句:float score30;/数组score有30个元素,其数据类型是float型 int Array124;/数组Array有124个元素,其数据类型是int型 数组的使用:数组的使用:数组声明后,可以引用数组每个元素,但不能一次引

17、用整个数组。数组元素作为一个简单的变量对待。数组元素的引用方式如下:下标表达式下标表达式 下标表达式 注意:注意:数组元素的下标从0开始,直到数组长度减1,如:score0,score1,score29。在编译C+源程序时,为了保证程序编译和运行的效率,C+编译系统不对数组下标进行越界检查,程序运行时系统也不会提出越界警告。因此在对数组元素进行操作时应格外注意,以免破坏其它存储单元的数据,否则可能造成不可预料的后果。数组的初始化数组的初始化声明数组时可以用一个用花括号括起的常量列表对数组进行初始化,例如:float grade3=90.0,75.0,85.0;二维数组和多维数组的初始化可以按照

18、数组的排列顺序或分行赋初始值的方法。例如:int a23=2,4,6,8,10,12;/按数组的排列顺序 int a23=2,4,6,8,10,12;/分行赋初始值 其中,2、4、6分别为a0的元素a00、a01和a02的初始值。数组的初始化数组的初始化初始值的个数可以比数组元素的个数少,这时未提供初始值的元素被置为0。例如:int a23=2,4,6;当提供全部的初始值时,数组第一维的长度可以省略。例如:float grade =90.0,75.0,85.0;int a 3=2,4,6,8,10,12;数组使用举数组使用举例例例例 输入10个学生某门课的成绩,然后按与输入次序相 反的顺序输出

19、成绩。#include void main()int i;float score10;coutPlease enter 10 scores:;for(i=0;iscorei;/输入数据 cout=0;i-)coutscorei;/逆向输出结果coutn;2.3.4 指针 任何变量都有一个内存地址,这种地址称为指针,而指针变量是一种存放内存地址的变量。每一个指针变量都有相应的数据类型,该类型用以说明指针所指内存单元中存放的数据的类型。指针变量声明的一般形式为:*;符号“*”是指针类型说明符,声明变量是一个指针型变量。例如:int*pointer;int *pointer;/两条语句功能相同与指针

20、有关的运算符 有两个与指针有关的运算符:取地址运算符“”和指针运算符“*”;运算符“”用于取一个变量的地址;运算符“*”以一个指针作为其操作数,其运算结果表示所指向的变量;“”运算和“*”运算互为逆运算。指针使用举指针使用举例例例 指针的使用。#include void main()int a,b,*pa,*pb;a=10;b=20;pa=&a;pb=&b;/使pa指向a,pb指向bcout*pa,*pbn;pa=&b;pb=&a;/使pa指向b,pb指向acout*pa,*pbn;*pa=100;*pb=200;/分别对b和a赋值couta,bn;运行结果运行结果程序运行结果:程序运行结果:

21、1010,20202020,1010200200,100 100 如果先声明了变量,就可以在声明指针变量时对指针进行初始化。如下所示:int a,b;int *pa=&a,*pb=&b;指针与数组指针与数组l指针与数组关系密切,编程时可以用指针代替下标引用数组元素,指针使数组的使用更为灵活、有效;l当声明一个数组后,编译程序会按照数组的类型和长度为它分配内存空间,数组名表示数组在内存中的首地址;l当用一个指针变量存储数组首地址时,该指针就指向这个数组,就可以通过指针运算间接访问数组的元素。例例 例例2 2 利用指针引用数组的方法求一个数组中所有元素之和。#include void main()

22、int a=2,4,6,8,10;int*pa=a;/或pa=&a0int result=0;for(int i=0;i5;i+)result+=*pa;/通过指针访问数组元素pa+;/指针运算coutresult=resultn;2.3.5 字符串 C+语言没有提供字符串类型,字符串变量是作为一维字符数组来处理。字符串末尾必须加上一个字符串结束符“0”,但“0”不是字符串的有效字符,求字符串的长度时不能将它计算在内。对于字符串常量(用一对双引号括起来的字符序列),C+编译程序自动在字符串的末尾加上字符0,因此,可以直接用一个字符串常量来初始化一个字符数组。例例如如.例:例:字符串的初始化ch

23、ar s=Hello;初始化后,字符数组中每个元素的初始值如下:s0=H,s1=e,s2=l,s3=l,s4=o,s5=0。该字符数组长度为6,但字符串长度为5 5。转义字符转义字符“”的使用:的使用:由于双引号用作字符串的界限符,所以在字符串中必须以转义字符“”表示双引号。例如:Please enter good,编译器将这个字符串解释为:Please enter good。通过指针使用字符串:通过指针使用字符串:可以通过指针引用字符数组,即可以通过指针来使用字符串。初始化语句可写为:char*ps=Hello;例例 例例 输入一个字符串,计算字符串的长度。#include void mai

24、n(void)char*pStr1=Enter a string:;/使用字符指针char*pStr2=The length of string is:;char string100;/使用字符数组coutstring;/输入字符串int length=0;while(stringlength!=0)/计算字符串长度length+;coutpStr2lengthn;/输出结果 2.3.6 结构 结构(structure)属于构造类型,它是由多种类型的数据成分组成的数据类型。例如,一个职员的信息由ID号、姓名、性别、出生日期和工资等数据项组成,可采用结构类型来表示。区别以前所介绍过的数据类型,结

25、构的具体构成需要用户自己定义,即定义一个结构类型。结构中的每个数据项称为成员,成员的类型可以是基本数据类型,也可以是一个诸如结构这样的构造类型。结构类型的定义形式:结构类型定义的一般形式为:结构类型定义的一般形式为:struct ;.;例例下面定义职员结构类型:struct staffer intID;char name20;bool sex;float salary;定义了结构(类型),就可以用结构声明结构变量,结构变量的声明形式如下:;例如例如.例如,利用定义的职员结构staffer声明一个职员结构变量:staffer employee1;注意:注意:不能在定义结构时对成员进行初始化,因为

26、结构是一种数据类型,而不是一个变量。只有在声明一个结构变量时才可以对该结构变量的成员进行初始化。如下所示:staffer employee1=110105,LiMing,1,3809.80;结构变量是一种组合类型的变量,结构变量的引用包括整个变量的引用和其成员的引用。作为变量,整个结构变量可以进行赋值、作为函数参数和返回值。结构变量成员的使用与同类型的普通变量完全一样,但必须使用成员运算符“.”说明是哪一个结构变量的成员。结构成员引用的形式为:.例例如如.结构变量的引用结构变量的引用employee1=employee2;/引用整个结构变量employee1.ID=110108;/引用结构成员

27、strcpy(employee1.name,WangPing);/结构成员结构变量及其成员的引用:结构变量及其成员的引用:指向结构变量的指针指向结构变量的指针:结构变量的指针的声明、赋值和使用规则同普通指针一样。可以通过使用指向运算符“-”引用结构成员。引用的形式如下:-例如例如.staffer*pStaff=&employee1;/声明结构变量的指针pStaff-ID=110115;/引用结构成员strcpy(pStaff-name,WangPing);/引用结构成员 通过指向运算符通过指向运算符“-”引用结构成员:引用结构成员:#include struct student/定义结构cha

28、rname20;intscore4;intaverage;例例 利用结构编程,计算一个学生利用结构编程,计算一个学生4门课的平均分数。门课的平均分数。void main(void)student stu;/声明结构变量int i,sum=0;coutstu.name;/输入姓名coutEnter four scores:;for(i=0;istu.scorei;/输入4门课分数for(i=0;i4;i+)sum+=stu.scorei;/计算平均分数stu.average=sum/4;coutThe average score of stu.name is:stu.averagen;/输出结果

29、 2.3.7 枚举枚举类型(enum)也是程序员定义的类型,它是一种允许用符号常量代表数据的数据类型。在定义枚举类型时必须指定一组被命名的符号常量的集合,该集合决定了该枚举类型的变量可以具有的合法值。枚举类型定义的一般形式为:enum ,;枚举常量是C+标识符,每一个枚举常量对应一个整数值,第1个常量值为0,第2个常量值为1,依此类推。使用举例:使用举例:使用举例:以下定义了一个表示颜色的枚举类型:enum ColorRed,Green,Blue;定义好的枚举类型可作为数据类型用于声明枚举型变量,例如:enum Color MyColor;声明了枚举型变量,就可以将定义枚举类型时所列举的枚举常

30、量集合中的任何一个常量赋值给枚举型变量。例如:MyColor=Green;在定义枚举类型时,可以为枚举常量指定其对应的整型值,例如:enum ColorRed=-1,Green,Blue=3;2.3.8 用typedef定义类型 用typedeftypedef语句定义类型是指对原有的数据类型定义一个新的名称,而不是真正定义一个新的数据类型。typedef语句的使用形式为:typedef ;其中的数据类型可以是简单的数据类型,如int、float和char等,也可以是诸如结构、枚举等组合数据类型。使用typedef的目的有两个:移植程序,增加程序的可读性。使用举例:使用举例:例如:typedef

31、 int INTEGER;typedef unsigned char BYTE;typedef struct tagDate int year;int month;int day;DATE;新定义数据类型如INTEGER(一般用大小字母)与int完全一样,可以用它进行变量的声明。如:INTEGER i;2.4 控制语句 从结构化程序设计的观点考虑问题,任何算法功能都可以通过三种流程控制结构来实现。为了实现复杂的算法功能,除了采用一般的按照源代码编写顺序执行程序的顺序结构,还需要采用另外两种能够控制语句执行顺序的控制结构:分支结构分支结构和循环结构循环结构。分支结构是根据某个条件来决定执行哪些源

32、代码,循环结构是根据某个条件来决定是否重复执行一段源代码。C+提供了多种不同形式的流程控制语句。2.4.1 条件语句 包括ifif语句和switchswitch语句,用于实现分支结构。if 语句的一般形式:ifif()如果表达式的值为真(非0),则执行其中的语句(块),否则跳过该语句。if语句的另一种形式:if()elseelse if语句的嵌套形式:if()else if()else if().else if()else 例 输入一个学生三门课的成绩,计算其平均值,并根据其值输出评语。#include void main()int math,chem,phy,ave;coutmathchem

33、phy;ave=(math+chem+phy)/3.0+0.5;/0.5用于四舍五入if(ave=90)/使用ifelse if语句coutExcellent=60&ave90)coutPassn;elsecoutFailn;运行运行.多分支结构switch语句的一般形式:switchswitch()case case :break;case case :break;.case case :break;default default:;switch语句使用说明:执行switch语句时将其中表达式的值与一些常量进行比较,当某case语句中的常量与该表达式的值相等时,就执行该case语句后的语句(

34、块),直到遇到break语句或到达switch语句末尾时退出switch结构。如果未出现相等的情况,则执行default后的语句。default语句可缺省,此时如果未出现相等的情况则不执行任何语句。在switch语句中,表达式与常量的类型必须一致,且只能是字符型、整形或枚举型。例 键盘输入一个字符,判断输入的字符是数字、空格,还是其它字符,并给出相应的提示信息。#include void main()char ch;coutch不能输入空格switch(ch)case 0:case 1:.case 9:coutIt is a digit.endl;break;case :coutIt is a

35、 space.endl;break;default:coutIt is not a digit or space.endl;运行运行.2.4.2 循环语句 循环结构在很大程度上简化了顺序结构程序设计,特别是在一段代码执行次数未知的情况下,只能采用循环结构。循环语句:for语句、while语句、do-while语句 循环条件和循环体是循环语句所必备的组成部分,重复执行的程序段称为循环体,循环语句根据循环条件判断是否执行循环体。1.for语句:forfor(;)l 表达式2是循环条件表达式,其值为真时执行循环,为假时终止循环。l 在进入for循环时,先对表达式l求值,然后对表达式2求值,如果表达式

36、2的值为真,执行循环体中的语句,最后对表达式3求值。每执行一次循环后再对表达式2求值,以决定是否进行下次循环。l 表达式l用于设置进入for循环时的初始状态,表达式3用于改变某些变量的值,以便使表达式2的值为假,最终使for循环结束。例 显示一个摄氏温度和华氏温度的对照表。#include void main()float degCel;int degFahr;for(degFahr=0;degFahr=300;degFahr+=10)/从华氏零度到300度每隔10度显示一项 degCel=(5.0/9.0)*(degFahr-32.0);coutFahrenheit:degFahr ttCe

37、lsius:degCelendl;运行运行.for语句的其他使用形式:l在for循环后面的圆括号内可以声明变量,还可使用逗号表达式,如:for(int i=0,j=0;i100;i+,j+=5)coutij;l 组成for循环的表达式可以部分或全部省略掉。int n=-1;for(;nn;程序不断读入整数,直到遇到一个大于零的整数为止。2.while语句:whilewhile()表达式是循环条件表达式,为真时执行循环体中的语句,为假时终止循环。do while();do-while语句与while语句功能类似,只是循环条件的判断是在循环语句的末尾进行。do-while语句的循环体至少执行一次。

38、例 利用while语句编程,要求用户输入字符Y或N,并给出对应的提示信息。如果输入其它字符,程序显示一条出错信息,并要求用户重新进行输入。#include main()char response;coutresponse;while(response!=Y&response!=N&response!=y&response!=n)coutError:you entered an incorrect letter.endl;coutresponse;if(response=Y|response=y)coutIm glad.endl;else coutKeep trying.endl;运运行行.作业

39、:P61-63 2-24,2-26上机:2-47,2-48 2.5 函数 当设计一个解决复杂问题的程序时,常常将一个复杂的任务分解为若干简单的子任务,为每一个子任务设计一个子程序。在C+中,利用函数实现子程序的编程。函数是一个具有独立功能的程序模块,这种功能一般是一种通用的功能,通过在不同程序中或程序不同地方调用函数,可以反复使用一个函数所实现的功能。如将求平方根、解一元二次方程等算法分别用一个函数来实现,程序员就可以在程序中需要使用求解算法的地方直接调用已设计好的函数。2.5.1 函数定义、函数调用和函数声明1.1.函数定义:函数定义:编写一个实现特定功能的函数代码就称为函数定义。函数定义的

40、一般形式是:()函数的组成:函数的组成:函数类型、函数名、形参表、函数体。函数类型:函数类型:函数头中的数据类型称为函数类型,它规定了所定义函数返回值的类型。如果函数没有返回值,则函数类型应指定为void类型。如果不指定函数类型,则其默认类型为int型。形参表:形参表:l函数定义中的形参表是一个用逗号分隔的变量声明列表,这些变量称作函数的形参,它们用于接收调用函数时传递的参数值。l形参表可以为空。函数定义举例:函数定义举例:例例 以下以下函数sum()用于求两个形参x与y的和。int sum(int x,int y)int temp;temp=x+y;return temp;/将temp返回给

41、主调函数注意:注意:C+不允许嵌套定义函数,即将一个函数定义放在另一个函数的函数体内。2.函数调用:函数调用:使用一个已定义的函数称为函数调用。调用某个函数的函数称为该函数的主调函数,被调用的函数简称为被调函数。函数定义后便可以反复多次调用,每次调用通过不同的参数值(实参)可以处理不同的数据函数调用的一般形式为:(实参1,实参2,实参n)例如:c=sum(a,b);功能:功能:将实参a和b相加,其和放于c中函数调用时的执行流程:函数调用时的执行流程:当出现函数调用语句时,中断当前函数(主调函数)的执行,将程序的执行流程转移到被调用函数,并将实参传递给形参。实参是一个实际的参数值,它可以是常量、

42、变量或表达式。参数传递方式:参数传递方式:l 值传递:单向l 按地址传递:双向l 引用传递:双向例例 实参与形参的值传递值传递。调用函数后,实参a、b的值并没有发生改变。#include void swap(int x,int y)/函数定义cout x=x y=yendl;int temp=x;/交换形参x和yx=y;y=temp;coutafter swap:endl;cout x=x y=yendl;main()int a=20,b=40;coutbefore swap:endl;cout a=a b=bendl;swap(a,b);/函数调用cout a=a b=bendl;程序的输出

43、结果为程序的输出结果为:before swap:a=20 b=40 x=20 y=40after swap:x=40 y=20 a=20 b=40按地址传递参数按地址传递参数 如果希望通过被调函数改变主调函数中实参的值,可以采用“按地址传递”或“引用传递”两种方式。当采用按地址传递方式时,函数定义以指针(包括数组)作为函数的形参,函数调用的实参必须是指针变量或一般类型变量的地址(包括数组名)。例例例例 实参与形参按地址传递,以指针作为函数参数。#include void swap(int*,int*);/函数声明main()int a=20,b=40;swap(&a,&b);/地址作为函数实参

44、couta=a,b=bendl;void swap(int*px,int*py)/指针作为函数形参int temp=*px;/“*px”表示px所指单元的内容*px=*py;*py=temp;运行结果运行结果:a=40,b=203.函数声明函数声明lC+允许函数调用在前,函数定义在后,但此时要求在调用函数前必须先进行函数声明,以便告诉编译程序被调用函数的类型和参数类型。l函数声明的一般形式为:(形参表);例如:例如:l只列出参数类型:void swap(int*,int*);l列出参数类型和参数名:void swap(int*px,int*py)函数的存储类型函数的存储类型l与变量类似,函数也

45、具有存储类型。l函数被分为内部函数(static)和外部函数(extern,默认值),内部函数只能被同一个源文件中的函数调用,而外部函数可以被其它源文件中的函数调用。l调用外部函数前必须先进行外部函数声明。例如:例如:在源文件File1.cpp中定义函数YourFun(),而在源文件File2.cpp中调用函数YourFun()。File1.cpp源文件:int YourFun(int x,int y)/默认为外部函数 int temp;temp=x+y;return temp;File2.cpp源文件:#include /外部函数声明,可省略externextern int YourFun(

46、int,int);main()int sum,a=20,b=40;sum=YourFun(a,b);coutsum=sum endl;通常可将所有外部函数的声明放在一个头文件中,然后用#include 指令包含头文件。2.5.2 函数参数的函数参数的1.什么是函数参数的默认值(缺省值):什么是函数参数的默认值(缺省值):C+允许在函数声明或函数定义时为形参指定一个默认值。在调用此类含默认值形参的函数时,如果形参有对应的实参,则将实参传递给形参;如果省略了实参,则将上述默认值传递给形参。例如,下面声明一个带缺省值参数的函数:void MyFun(int val=10);而如果函数调用省略实参,则

47、把缺省值10传递给形参,如下所示:MyFun();/等同于MyFun(10)2.含有多个函数参数的含有多个函数参数的 如果函数有多个形参,则声明和定义函数时,必须将带缺省值的形参放在参数表的右部,即在带缺省值的形参的右边不能有未指定缺省值的形参。例如:void fun1(int w,int x=1,int y=1,int z=1);/正确的函数声明 void fun2(int w=1,int x=2,int y=3,int z);/错误的函数声明 void fun3(int w=1,int x=2,int y,int z=3);/错误的函数声明3.含有多个参数含有多个参数函数调用函数调用 当编

48、译器将实参与形参相联系时,其顺序是从左到右,如果只省略前面的实参,编译器将无法区分随后的实参与哪个形参相对应。因此,在调用函数时,如果省略某个实参,则该实参右边的所有实参都必须省略。例如:fun1(10,3);/等同于fun1(10,3,1,1);fun1(10,3,5);/等同于fun1(10,3,5,1);fun1(10,5);/错误的函数调用2.5.3 内联函数内联函数 在调用函数时,系统要进行现场处理工作,需要占用附加的现场处理时间。若把函数体直接嵌入函数调用处,则可消除附加的现场处理的时间开销,提高程序的运行效率。C+提供了实现上述嵌入功能的函数,这种函数称为内联(inline)函数

49、。定义一个内联函数只需在函数头前加入关键字inline。当编译程序遇到内联函数调用语句时,需要将该内联函数的函数体替换调用语句。当然,这样将会加大代码占用内存的空间开销,因此,内联函数一般适用于代码较短的函数。例例例例 将函数sum()改为内联函数。inline int sum(int x,int y)int temp;temp=x+y;return temp;2.5.4 引用引用 引用(reference)是为一个已声明的变量起一个别名。声明一个引用时需要在其名称前加符号“&”,并同时对引用进行初始化,即指定它所引用的对象(是哪一个变量的别名)。声明一个引用一般采用如下格式:&=;例如:in

50、t ActualInt;/声明变量ActualIntint&OtherInt=ActualInt;/声明变量ActualInt的引用OtherInt 一旦为一个变量声明一个引用,那么对这个引用的所有操作实际上都是对被引用变量的操作,它们代表同一个变量并且占用相同的内存单元。例如,为变量i声明一个引用r,在程序中分别对r和i进行操作。当r变化时,i也随之变化,反之亦然。void main(void)int i=10;int&r=i;/r是变量i的引用型变量r+;/同时执行i+couti=i,r=rn;i=88;/同时执行r=88couti=i,r=rn;运行结果:i=11,r=11i=88,r=

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第2章C++语言基础课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|