操作及其控制_第1页
操作及其控制_第2页
操作及其控制_第3页
操作及其控制_第4页
操作及其控制_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、第第4 4章章 操作及其控制操作及其控制4.1 基本操作与运算符基本操作与运算符4.2 表达式表达式4.3 语句语句4.4 预处理指令预处理指令学习目的:学习目的:掌握基本数据类型与操作掌握基本数据类型与操作; ;掌握掌握C+C+的主要语句的主要语句; ;熟练掌握熟练掌握C+C+提供的顺序控制提供的顺序控制; ;熟悉熟悉includeinclude等预处理指令。等预处理指令。4.1 4.1 基本操作与运算符基本操作与运算符赋值操作赋值操作算术操作算术操作增增1(减(减1)操作)操作关系、逻辑操作关系、逻辑操作条件运算符条件运算符操作又称为运算,通用程序设计语言提供多种操作,每种操作都用运算操作

2、又称为运算,通用程序设计语言提供多种操作,每种操作都用运算符标记,如:加(符标记,如:加(+ +)、减()、减(- -)、乘()、乘(* *)、除()、除(/ /)等算术运算,以及)等算术运算,以及指针运算、移位等各种语言特有的操作。指针运算、移位等各种语言特有的操作。运算符分类:运算符分类:根据操作数个数:根据操作数个数:单目运算符、双目运算符及三目运算符;单目运算符、双目运算符及三目运算符;按照功能不同:按照功能不同:算术运算符、关系运算符、逻辑运算符、位操作运算术运算符、关系运算符、逻辑运算符、位操作运算符、赋值运算符等算符、赋值运算符等另外,另外, 可按优先级和结合性对算符进行分类。可

3、按优先级和结合性对算符进行分类。赋值操作赋值操作注意:对于字符串的赋值采用对于字符串的赋值采用 memset()memset()、memcpy()memcpy()、strcpy()strcpy()等函数进行。等函数进行。int nVar(0);nVar=4;nVar=nVar+2;nVar+=2;int *pN=&nVar;*pN=8;赋值操作用于改变数据对象的值,基本类型变量的赋值操作一般由赋值赋值操作用于改变数据对象的值,基本类型变量的赋值操作一般由赋值符符 = = 表示,其具体语义是将表示,其具体语义是将 = = 左侧数据对象的值改变为左侧数据对象的值改变为 = = 右侧表达右侧

4、表达式的值(常数为表达式的一种形式):式的值(常数为表达式的一种形式): 算术操作注意注意: :对整型数据的除法操作,其结果为整型数据,例如:对整型数据的除法操作,其结果为整型数据,例如:5.0/2.0=2.5、 2.0/4=0.5,但,但5/2=2、 2/4=0,相当于进行除法后保留商的整数部分。,相当于进行除法后保留商的整数部分。 包括加、减、乘、除、取负、取余数,分别以包括加、减、乘、除、取负、取余数,分别以+、-、*、/、-、%等运等运算符代表算符代表 。其中其中 % 的操作数要求为的操作数要求为int型,而其它运算符要求操作数为基本数据型,而其它运算符要求操作数为基本数据类型或指针类

5、型等。复杂运算的书写规则与人类的习惯相似:类型或指针类型等。复杂运算的书写规则与人类的习惯相似:3+4n*(x+4)对于用户自定义类型或构造类型,需要由用户重新给出上述运算符所对于用户自定义类型或构造类型,需要由用户重新给出上述运算符所代表的具体操作代表的具体操作 (运算符重载)。(运算符重载)。增增1 1(减(减1 1)操作)操作1. 前缀增前缀增1(减(减1)运算符)运算符 格式为:格式为: +prefix_exp -prefix_exp要求操作数要求操作数prefix_expprefix_exp是整型、浮点型或指针型,并且必须是一个可修是整型、浮点型或指针型,并且必须是一个可修改的左值表

6、达式(即表达式没有改的左值表达式(即表达式没有constconst属性),例如整型变量等。前缀增属性),例如整型变量等。前缀增1 1(减(减1 1)操作结果的类型与操作数类型相同,)操作结果的类型与操作数类型相同,且结果是左值且结果是左值,运算后,运算后prefix_expprefix_exp的值加(减)的值加(减)1 1,表达式的值同此。因此,表达式的值同此。因此x=+Valx=+Val相当于相当于x=Val+1x=Val+1和和Val=Val+1Val=Val+1两个操作的复合,例如当变量两个操作的复合,例如当变量ValVal的值为的值为5 5时,表达时,表达式式x=+Valx=+Val的

7、结果是的结果是x x的值为的值为6 6,ValVal的值也为的值也为6 6。int n=0;+n;+(+n);增增1 1(减(减1 1)操作)操作2. 后缀增后缀增1(减(减1)运算符)运算符 格式为:格式为:postfix_exp +postfix_exp -对操作数对操作数postfix_exppostfix_exp的要求与前缀增的要求与前缀增1 1(减(减1 1)运算符相同。运算结果类)运算符相同。运算结果类型与操作数类型相同,但不再是左值。型与操作数类型相同,但不再是左值。 int n=0;n +;+n;(n+)=2;关系、逻辑操作关系、逻辑操作这两种操作经常出现在条件判断中,关系操作

8、有六种这两种操作经常出现在条件判断中,关系操作有六种: (大于)(大于)=(大于等于)(大于等于)2的值为的值为true。逻辑操作有三种:逻辑操作有三种:& (逻辑与)(逻辑与)|(逻辑或)(逻辑或)!(逻辑非)(逻辑非)逻辑运算操作数类型为逻辑型,结果为逻辑型,具体操作语义如下:逻辑运算操作数类型为逻辑型,结果为逻辑型,具体操作语义如下:两操作数都为真,逻辑与运算的结果为真,否则为假。两操作数都为真,逻辑与运算的结果为真,否则为假。两操作数中至少一个为真,逻辑或运算结果为真,否则为假。两操作数中至少一个为真,逻辑或运算结果为真,否则为假。操作数为真,逻辑非运算结果为假,否则为真。操作

9、数为真,逻辑非运算结果为假,否则为真。条件运算符条件运算符该运算符是一个三目运算符,格式如下:该运算符是一个三目运算符,格式如下: exp0 ? exp1 : exp2语义是,如果语义是,如果exp0为真,则该表达式的值为为真,则该表达式的值为exp1,否则,否则表达式的值为表达式的值为exp2。表达式的类型与。表达式的类型与exp1和和exp2中类型中类型高的()一个相同。高的()一个相同。使用方法举例如下:使用方法举例如下:int MaxAB = (AB) ? A : B;4.2 4.2 表达式表达式隐含类型转换隐含类型转换强制类型转换强制类型转换表达式内的顺序控制表达式内的顺序控制运算符

10、的优先级运算符的优先级运算符的结合性运算符的结合性运算符与操作数相结合形成的式子称为表达式。常见的简单表达式运算符与操作数相结合形成的式子称为表达式。常见的简单表达式有算术表达式、逻辑表达式、关系表达式、赋值表达式等。简单表有算术表达式、逻辑表达式、关系表达式、赋值表达式等。简单表达式通常由一个运算符与一两个操作数构成,用来表述算法中最基达式通常由一个运算符与一两个操作数构成,用来表述算法中最基本的简单操作。复杂的表达式由多个表达式复合而成,它们可以用本的简单操作。复杂的表达式由多个表达式复合而成,它们可以用来描述算法中的一个模块或者是复杂的处理。来描述算法中的一个模块或者是复杂的处理。任何表

11、达式在运算后都会产生一个结果,这个结果具有某种类型和任何表达式在运算后都会产生一个结果,这个结果具有某种类型和数值,称作表达式的类型和值。数值,称作表达式的类型和值。隐含类型转换隐含类型转换intunsignedlongunsigned longfloatdouble上述类型中上述类型中int类型最低,类型最低,double类型最高,当低类型和高类型同时出现类型最高,当低类型和高类型同时出现在一个运算符操作数中时,低类型将被转换为高类型,例如当算术运算在一个运算符操作数中时,低类型将被转换为高类型,例如当算术运算符两个操作数中有一个的类型为符两个操作数中有一个的类型为double时,则运算前另

12、一个操作数将被时,则运算前另一个操作数将被转换成转换成double类型,然后进行浮点型的算术运算,运算后的结果也将为类型,然后进行浮点型的算术运算,运算后的结果也将为double型;总之,计算算术表达式的值时,如果两个操作数的类型不同,型;总之,计算算术表达式的值时,如果两个操作数的类型不同,所采用的方针是用存储宽度较大的类型存放存储宽度较窄的操作数,这所采用的方针是用存储宽度较大的类型存放存储宽度较窄的操作数,这样做的目的是为了不丢失信息。样做的目的是为了不丢失信息。每个表达式的值都具有确定类型,取决于运算符的种类和操作数类型,每个表达式的值都具有确定类型,取决于运算符的种类和操作数类型,当

13、二目运算符的两个操作数类型不同时,不能直接进行运算,必须进当二目运算符的两个操作数类型不同时,不能直接进行运算,必须进行适当的类型转换。行适当的类型转换。对于基本数据类型,这种类型转换通常为语言所内建,因此称为隐含对于基本数据类型,这种类型转换通常为语言所内建,因此称为隐含类型转换。隐含类型转换的规律是将低类型的操作数转换为高类型,类型转换。隐含类型转换的规律是将低类型的操作数转换为高类型,对算术运算符而言,常见类型的高低顺序如下:对算术运算符而言,常见类型的高低顺序如下:强制类型转换强制类型转换当操作数的类型不同,而且不属于基本数据类型时,经常需要强制类型转换,将当操作数的类型不同,而且不属

14、于基本数据类型时,经常需要强制类型转换,将操作数转化为所需的类型。强制类型转换具有两种形式,称为显式强制转换和隐操作数转化为所需的类型。强制类型转换具有两种形式,称为显式强制转换和隐式强制转换。式强制转换。 1. 1. 显式强制类型转换显式强制类型转换格式为:格式为:type()或或(type)type为类型描述符,如为类型描述符,如int、float等。等。为表达式。经强制类为表达式。经强制类型转换运算符运算后,返回一个具有型转换运算符运算后,返回一个具有type类型的数值,这种强制类型转类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未被改变,例如:换操作并不改变操作数

15、本身,运算后操作数本身未被改变,例如:int nVar=0 xab65;char cChar=char(nVar);上述强制类型变换的结果是将整型值上述强制类型变换的结果是将整型值0 xab65的高端两个字节去掉,而将的高端两个字节去掉,而将低端两个字节的内容作为低端两个字节的内容作为char型数值赋值给变量型数值赋值给变量cChar,经过类型变换,经过类型变换后后nVar的值并没有发生改变。的值并没有发生改变。强制类型转换强制类型转换2. 隐式强制类型转换隐式强制类型转换 隐式类型转换发生在赋值表达式和有返回值的函数调用表达式中。隐式类型转换发生在赋值表达式和有返回值的函数调用表达式中。在赋

16、值表达式中,如果赋值符左右两侧的操作数类型不同,则将赋值符在赋值表达式中,如果赋值符左右两侧的操作数类型不同,则将赋值符右侧操作数强制转换为赋值符左侧操作数类型的数值后赋值给赋值符左右侧操作数强制转换为赋值符左侧操作数类型的数值后赋值给赋值符左侧的变量。侧的变量。在函数调用时,如果在函数调用时,如果returnreturn后面表达式的类型与函数返回值类型不后面表达式的类型与函数返回值类型不同,则在返回值时将同,则在返回值时将returnreturn后表达式的数值强制转换为函数返回值类型后表达式的数值强制转换为函数返回值类型后再将值返回。例如后再将值返回。例如:int nVar;double d

17、Var=3.88;nVar=dVar; /执行本语句后,执行本语句后,nVar的值为的值为3,而,而dVar仍然是仍然是3.88表达式内的顺序控制表达式内的顺序控制 (3+5)(3+5)* *8 83+53+5* *8 83+(53+(5* *8)8)?表达式的值与操作数类型有关,也与运算顺序有关。表达式的值与操作数类型有关,也与运算顺序有关。应用括号直接控制表达式中子表达式的求值顺序,能够避应用括号直接控制表达式中子表达式的求值顺序,能够避免运算结果的不确定性。例如:按习惯免运算结果的不确定性。例如:按习惯a a* *b/cb/c可以利用括号可以利用括号写成写成(a(a* *b)/cb)/c

18、,否则有可能理解为,否则有可能理解为a a* *(b/c)(b/c),这两个表达式,这两个表达式的值通常是不一样的,比如的值通常是不一样的,比如(3(3* *2)/3=22)/3=2,而,而3 3* *(2/3)=0(2/3)=0。运算符的优先级运算符的优先级制定运算符的优先级的目的是解决表达式语义的二义性,高优先级运制定运算符的优先级的目的是解决表达式语义的二义性,高优先级运算符所代表的操作先进行、低优先级运算符代表的操做的后进行,在算符所代表的操作先进行、低优先级运算符代表的操做的后进行,在一定程度上可以解决二义性问题。一定程度上可以解决二义性问题。+ +、- -、* *、/ /等等4 4

19、种基本操作的执行顺序与人们所习惯的四则运算规则相种基本操作的执行顺序与人们所习惯的四则运算规则相同。常用运算符的优先级如下:同。常用运算符的优先级如下:+(-)后缀增后缀增1(减减1)nVar+; nVar-;+(-)前前缀增缀增1(减减1)+nVar, -nVar;&取变量存储地址取变量存储地址&nVar* ( / )乘乘 (除)(除)int a=2,b=8/a; a=b/3;%取余数取余数a=4%3;+ (- )加(减)加(减)int a=1,b=a+4; a=8-7; )小(大)于小(大)于int a=3;if(a=6) coutaendl;= )小(大)于等于小(大)于

20、等于= (!=) 等于(不等于)等于(不等于)if(p != 0) break;& |按位与、异或、或按位与、异或、或a & b n a | b&逻辑与逻辑与(x=1) & (x=3)-取负数取负数x=-nVar|逻辑或逻辑或b1 | b2? :条件表达式条件表达式(a=b)?(a):(b)运算符的结合性运算符的结合性只有单目运算符、条件运算符和赋值符是右结合的,只有单目运算符、条件运算符和赋值符是右结合的,其他运算符均为左结合。其他运算符均为左结合。 结合性用于多个具有相同优先级运算符出现在一起时运算顺序的控制,结合性用于多个具有相同优先级运算符出现在一起时运

21、算顺序的控制,具有左结合性的运算符左边优先于右边,因此将从左至右逐个运算符具有左结合性的运算符左边优先于右边,因此将从左至右逐个运算符地进行运算,而具有右结合性的运算符的运算顺序与此相反。地进行运算,而具有右结合性的运算符的运算顺序与此相反。a=b=c等价于等价于a=(b=c)a+b+c等价于等价于(a+b)+c3+4+5-8等价于等价于(3+4)+5)-83*4/5*8等价于等价于(3*4)/5)*83*4*8/5等价于等价于(3*4)*8)/54.3 4.3 语句语句表达式语句表达式语句语句间顺序控制语句间顺序控制复合语句复合语句选择语句选择语句循环语句循环语句直接顺序控制直接顺序控制语句

22、是构成程序的基本单元,简单语句用于表示一种单一功能的操作,语句是构成程序的基本单元,简单语句用于表示一种单一功能的操作,复合语句、选择语句、循环语句等复杂语句可能代表多个操作组成的复合语句、选择语句、循环语句等复杂语句可能代表多个操作组成的一种复杂操作或功能。一种复杂操作或功能。语句由单词按照语句的语法规则组成,单词间以分隔符、运算符或若语句由单词按照语句的语法规则组成,单词间以分隔符、运算符或若干个空格符分隔,语句通常以一个特殊的符号结束,例如干个空格符分隔,语句通常以一个特殊的符号结束,例如C+C+的语句的语句以分号做为结束标志。以分号做为结束标志。 表达式语句表达式语句表达式语句(表达式

23、语句(Expression Statement)的形式很简单,在)的形式很简单,在C+中,中,只要在任何表达式的结尾缀以分号只要在任何表达式的结尾缀以分号 ; 就构成了表达式语句。就构成了表达式语句。例如例如:x=10*y;l=5, m=6, n=7;mb=a&(b|c);a+b;fun(x, y);y=MyFunction(3, 8);表达式语句是一个大家族,因为表达式本身的种类就很多,我们在表达式语句是一个大家族,因为表达式本身的种类就很多,我们在编程中最常用到的表达式语句是变量赋值语句、增编程中最常用到的表达式语句是变量赋值语句、增1语句、减语句、减1语句。语句。如下述的程序段:

24、如下述的程序段:int n=0;while(n10) x=2*n;/ 赋值语句赋值语句 +n;/ 增增1语句语句4.3.4.3.2 2 语句间的顺序控制语句间的顺序控制作为算法实现工具,通用程序设计语言通常都提供描述算法三作为算法实现工具,通用程序设计语言通常都提供描述算法三种基本控制结构的具体方式,使用三类语句构成程序的三种基种基本控制结构的具体方式,使用三类语句构成程序的三种基本控制结构:本控制结构:顺序结构顺序结构使用顺序语句实现。顺序语句指一组语句的使用顺序语句实现。顺序语句指一组语句的执行顺序与语句的物理排列顺序相同。执行顺序与语句的物理排列顺序相同。选择结构选择结构使用选择语句加以

25、实现。选择使用选择语句加以实现。选择有两种形式:有两种形式:条件语句和开关语句。条件语句和开关语句。循环结构循环结构使用循环语句加以实现。循环语句有三种形使用循环语句加以实现。循环语句有三种形式:式:dodo语句、语句、forfor语句和语句和whilewhile语句语句 复合语句复合语句复合语句是由花括号复合语句是由花括号 ,及其内部语句组成,作为一个整体,及其内部语句组成,作为一个整体在语法上是一条语句,尽管其内部可能包含多条语句。复合语在语法上是一条语句,尽管其内部可能包含多条语句。复合语句具有明显的块特色,所以也称为块语句。句具有明显的块特色,所以也称为块语句。复合语句可以嵌套,即复合

26、语句的内部可以含有其他复合语句。复合语句可以嵌套,即复合语句的内部可以含有其他复合语句。复合语句可以单独使用,将程序的一部分利用复合语句可以单独使用,将程序的一部分利用 扩起来作为扩起来作为相对独立的一块形成良好的编程风格,但更常用于相对独立的一块形成良好的编程风格,但更常用于if语句、语句、switch语句或循环语句中。另外,如果在复合语句中嵌入了一语句或循环语句中。另外,如果在复合语句中嵌入了一条或多条说明变量,则常称这种复合语句为分程序或块结构。条或多条说明变量,则常称这种复合语句为分程序或块结构。选择语句选择语句1 1 条件语句条件语句ifif语句语句()布尔表达式布尔表达式ifif语

27、句语句语句语句elseelse从上述语法图可得两种常用形式:从上述语法图可得两种常用形式:格式一格式一: if ( if ( ) ) 格式二:格式二: if ( if ( ) ) 1 else else 2if(a=8) b=9;else if(a=9) b=20; else if(a=10) b=21; else b=30; b=20b=20b=9b=9b=30b=30b=21b=21a=8a=8a=9a=9a=10a=10falsefalsefalsefalsefalsefalsetruetruetruetruet r ut r ue e选择语句选择语句2 2 开关语句开关语句 : :de

28、faultdefaultswitchswitch语句语句()switchswitch casecase: :例例 4.1 编程统计输入流中字符编程统计输入流中字符A的数目,字符的数目,字符A与与a的数目,输入字符总数。的数目,输入字符总数。 #include iostream.hvoid main() int nA(0), nAa(0), nTotal(0); for( ; ; ) char c; coutc; switch( c ) case 033: /Enter ESC to terminate goto Termination; case A: nA+; case a: nAa+; d

29、efault : nTotal+; Termination : coutThe total number of A is nAendl; coutThe total number of A and a is nAaendl; coutThe total number of characters is nTotalendl;选择语句选择语句2 2 开关语句开关语句例例 4.2 编写程序统计输入流中编写程序统计输入流中-1、0和和+1的个数。的个数。#include iostream.hvoid main() int nNegtive(0), nZero(0), nPositive(0); for

30、( ; ; ) int i; couti; switch( i ) case -1: nNegtive +; break; case 0 : nZero +; break; case 1 : nPositive +; break; case 100 : goto Termination; default : coutIllegal integer!endl; Termination : coutThe total number of -1 is nNegtiveendl; coutThe total number of 0 is nZeroendl; coutThe total number

31、of 1 is nPositiveendl;循环语句循环语句1. for 语语句句forfor语句语句(forfor 1; 2; 3) 例例 4.3 用用for循环计算自然数循环计算自然数110之和。之和。#include void main( ) int nSum(0); for(int i=1; i=10; i+) nSum+=i; /1到到10循环循环 coutThe sum is nSumendl; /显示结果显示结果truetrue计算计算 1执行执行 计算计算 3falsefalse退出循环退出循环计算计算 2循环语句循环语句2. while语句语句while while 句句(w

32、hilewhile )语句语句例例4.4 用用while循环计算自然循环计算自然数数110之和。之和。#include void main() int i(0), nSum(0); while(i=10) /1到到10循环循环 nSum+=i; i+; coutThe sum is nSumendl;truetrue执行执行 falsefalse退出循环退出循环计算计算 循环语句循环语句3. do 语语句句dodo语句语句(whilewhile ) dodo例例4.6 用用do循环计算自然数循环计算自然数110之和。之和。#include void main() int i(0), nSum(

33、0); do nSum+=i; while(+i=10); /1到到10循环循环 coutThe sum is nSumendl; /显显示结果示结果truetruefalsefalse退出循环退出循环计算计算 执行执行 循环语句循环语句4. 复杂条件循环复杂条件循环循环中的初始化表达式、条件表达示等可以是一些复杂的表达式,甚至包循环中的初始化表达式、条件表达示等可以是一些复杂的表达式,甚至包括循环变量的声明也可能出现在循环中,下面所列为循环的一些用法,学括循环变量的声明也可能出现在循环中,下面所列为循环的一些用法,学习循环时可以借鉴:习循环时可以借鉴: for(int i=0; iGetNe

34、xtDlgGroupItem(pWndStart) != NULL)循环语句循环语句5. 多重循环多重循环 例例4.7 已知已知a为为54阶矩阵,阶矩阵,b为为46阶矩阵,阶矩阵,编程求这样两个矩阵的乘积矩阵,将编程求这样两个矩阵的乘积矩阵,将结果输出在屏幕上。结果输出在屏幕上。#include #include string.hvoid main() int i, j, k; int a54, b46, c56; memset(c, 0, sizeof(int)*5*6); / Initialize c /Followings for entering the elements of mat

35、rix a for(i=0; i5; i+) for(j=0; j4; j+) coutai, jaij; a=37691115647382563842 b=446739856677324867785321。11393107927610212780126110100105134941311038298282636415150127112138129131149 /Followings for inputing the elements of matrix b for(i=0; i4; i+) for(j=0; j6; j+) coutbi, jbij; /Followings for calc

36、ulating and outputing the elements of matrix c coutendlendlThe product matrix is:tendl; for(i=0; i5; i+) for(j=0; j6; j+) for(k=0; k4; k+) cij+=aik*bkj; coutcijt; coutendl; 直接顺序控制直接顺序控制1. goto 语句语句3. continue 语语句句2. break 语句语句#include void main() int nCount(0); int nCtrl(0);MyLabel: nCtrl+; nCount+=

37、nCtrl; if( nCtrl10 ) goto MyLabel; cout The sum is nCount i) if(i=8) break;couti;int n(0);for(int i=0; i=100; i+) if(i%2=0) continue; n+=i;4.4 4.4 预处理指令预处理指令文件包含指令文件包含指令宏定义指令宏定义指令条件编译指令条件编译指令*预处理指令不是程序运行时刻的有效操作,而是用以指示编译器在对预处理指令不是程序运行时刻的有效操作,而是用以指示编译器在对源代码编译之前进行必要的预处理。源代码编译之前进行必要的预处理。C+C+的所有预处理指令都以的所

38、有预处理指令都以 # # 开始,除了注释外,每条预处理指令占开始,除了注释外,每条预处理指令占用单独的一行,同一行不能有其它预处理指令和用单独的一行,同一行不能有其它预处理指令和C+C+语句,而且与语句,而且与C+C+语句不同,预处理指令不以分号结束。语句不同,预处理指令不以分号结束。预处理指令(亦称编译指令)不是语言的一部分,但实际上几乎预处理指令(亦称编译指令)不是语言的一部分,但实际上几乎C+C+、JavaJava等语言的任何程序都离不开它,它为编程者提供了控制编译器行等语言的任何程序都离不开它,它为编程者提供了控制编译器行为的手段,扩展了编程环境的使用范围,在程序组织和管理上给编程为的

39、手段,扩展了编程环境的使用范围,在程序组织和管理上给编程者带来方便。者带来方便。文件包含指令文件包含指令文件包含指令(嵌入指令或文件包含指令(嵌入指令或includeinclude指令),格式:指令),格式:#include 或或#include filename例如:例如:#include c:userWangMingFirtcommon.h#include c:userWangMingFirtcommon.h 注意:注意: 由于预处理指令不是由于预处理指令不是C+指令,因此上述表示路径的反斜杠指令,因此上述表示路径的反斜杠只用一个反斜杠。如果在只用一个反斜杠。如果在C+程序中使用字符串表示

40、路径,程序中使用字符串表示路径,则这个字符串中必须用双斜杠。例如则这个字符串中必须用双斜杠。例如: char FileName=c:userWangMingFirtcommon.h;首先按调用编译器时行命首先按调用编译器时行命令中所指示的路径查找,令中所指示的路径查找,然后按语言环境所设置的然后按语言环境所设置的默认默认includeinclude目录去查找目录去查找 预处理器首先在含有该条预处理器首先在含有该条includeinclude语句的文件所在目录中查找,语句的文件所在目录中查找,然后在所有包含该文件的文件所在的目录中查找,再按调用编译然后在所有包含该文件的文件所在的目录中查找,再按

41、调用编译器时行命令中所指示的路径查找,最后按语言环境所设置的默认器时行命令中所指示的路径查找,最后按语言环境所设置的默认includeinclude目录去查找。目录去查找。 宏定义指令宏定义指令宏定义是高级语言编译器提供的常用预处理指令,其目的是使用某一标识宏定义是高级语言编译器提供的常用预处理指令,其目的是使用某一标识符标识某个文本字符串,分为无参数宏及有参数宏两类,格式如下:符标识某个文本字符串,分为无参数宏及有参数宏两类,格式如下: #define 或或 #define () 使用方法示例如下:使用方法示例如下:#define PI 3.1415926#define max(a, b) (a)(b)?(a):(b);void main() int nRadius=3.0; int nArea=nRadius*nRadius*PI;宏定义指令宏定义指令宏的不安全性宏的不安全性#define PI 3.1415926#define max(a, b) (a)(b)?(a):(

温馨提示

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

评论

0/150

提交评论