1、第2章 数据类型、运算符和表达式,- 2 -,2.1 C+的符号集,1、空白符包括空格、制表符(Tab)、回车(Enter)等,起间隔作用。合理布置空白符,采用缩进格式,可读性强例如:/可读性强,提倡#include void main() cout void main() cout“Hello BeiJing.n”; ,- 3 -,2、注释在程序中起到注释说明的作用,增加程序的可读性,在程序运行时,不被执行。 单行注释:/ 多行注释:/* */,- 4 -,3、分隔符用于分隔各个词法记号或程序正文。 , : ; 比如:语句之间用;间隔多条由括起的语句称为块,- 5 -,4、操作符用于实现各种
2、运算的符号。例如:+ - * / 等,- 6 -,5、文字在程序中直接使用符号表示的数据。比如:7 Hello 等,- 7 -,6、关键字C+中规定的具有专门的意义和用途的符号。,常用关键字: asm auto bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum explicit extern false float for friend goto if inline int long mutable namespace new op
3、erator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile while,- 8 -,合法的标识符:identifier User_name Change3,不合法的标识符 : 2Day class #myname,7、标识符程序员对
4、程序中的各个元素加以命名时使用的命名记号称为标识符,包括:类名、变量名、常量名、函数名等。 由字母、数字、下划线组成,而且只能以字母、下划线打头。 长度没有限制,但是尽量不要太长,有些编译系统可以设置有效长度。 名字不能是关键字。 字母的大小写有区别。 名字最好能表达一定的含义。,- 9 -,2.2 C+ 的数据类型、常量和变量,数据类型,基本数据类型,复合数据类型,字符类型:char 等,布尔类型:bool,整数类型: short int long等,浮点数类型: float double等,空类型:void,类类型:class,共用体类型:union,枚举类型:enum,结构体类型:str
5、uct,导出数据类型,自定义数据类型,- 10 -,一、基本数据类型,整 型:int浮点型:float、double字符型:char布尔型:bool空类型:void,- 11 -,C+语言中还有四种类型修饰符:signed(有符号) unsigned(无符号) long(长型) short (短型),- 12 -,1、整数类型,- 13 -,2、浮点类型,注意:浮点类型数据都是带符号的。,- 14 -,3、字符型数据,注意:字符型数据的取值在整型数据的范围内。,- 15 -,4、布尔类型(bool),布尔逻辑数据只有两个:true和false在计算结果中:true对应1,false对应0在参与
6、运算时:非0对应true,0对应false,- 16 -,5、空类型(void),void类型的值集为一空集 。用来说明函数及其参数: 没有返回值的函数说明为void类型的函数 没有参数的函数其形参表由void表示。,- 17 -,二、常量,在程序执行过程中其值不发生改变的量。,整型常量浮点型常量字符型常量字符串常量符号常量,- 18 -,1、整型常量3种进制表示方式: 十进制整数八进制整数(以0开头的整数)十六进制整数(以0X或0x开头的整数)整数后加或,表示long整数整数后加u或U,表示Unsigned整数例如: 123,-34,0 0123 /等于数83 (=1*82+2*81+3*8
7、0) 0X123 /等于数291 -024,-0X32 /不正确123L /长整型数123LU /无符号长整型数,- 19 -,2、浮点型常量有两种表示:定点数形式指数形式例如:0.123 .23 0.0 /定点数形式123E5 23.4e-2 /指数形式要注意E或e的前面要有数字,且E的后面的指数必须为整数。例如:E2 2.1E3.5 e /不合法实型常数分为单精度、双精度和长双精度3类。例如: 34.5 3.8f 3.8F 34.6l 34.6L在C+中,一个实型常数未说明则表示是double型。,- 20 -,例如: 141 x61八进制数表示范围: 000377,即从0255。十六进制
8、数表示范围:x00xff,例如: n ,它表示一个换行符。转义字符中可将反斜杠同八进制或十六进制数值结合使用,以表示相应于该数值的ASCII码。,3、字符型常量普通字符:用单引号括起来的一个字符。例如: a ! 转义字符:以 开头的字符序列。P18,- 21 -,4、字符串常量由一对双引号括起来的字符序列。例如:“ How do you do? “ “ hello “ 字符常量和字符串常量在存储方式上是不同的:字符常量只占一个字节的空间,而字符串常量除字符序列中每个字符占一个字节外,还要在最后多占一个字节空间用来保存一个0字符(空字符)称为字符串结束标志符号。它是系统自动增加的。例如:a :是
9、字符,占一个字节。“ a “ :是字符串常量,占两个字节。,- 22 -,5、符号常量 常量也可用一个标识符来代表,称为符号常量。 使用符号常量的好处:含义清楚;在需要改变一个常量时可“一改全改”。#define例如:#define PI 3.14159 其值不能改变。 符号常量名一般用大写,而变量名用小写,以示区别。,- 23 -,#define PI 3.14 #include void main() double r,area; coutr;area=PI*r*r; cout“r = “rendl; cout“Area= “areaendl; ,- 24 -,变量是指在程序中其值可以被改
10、变的量。变量具有三个基本要素:名字、类型、值,二、变量,- 25 -,1、变量名用来标识变量。命名变量名的规则为: 不能为关键字 遵循标识符的命名规则 不能与程序中的其他名字如函数名等同名 一般讲究见名知意 一般变量名用小写字母开头。例如: myBook,theFox,- 26 -,2、变量类型用来定义变量的取值范围,确定变量所占内存大小,以及所能进行的运算。例如:unsigned myAge , myWeight; float myScore;可在定义时直接给变量赋值,称为变量初始化。例如:unsigned short width=5;int x(0);还可用赋值运算符给变量赋值。例如:un
11、signed short width; width=5;,- 27 -,3、变量值有两个值的概念:一个是数据值(存放在内存空间中的数据)一个是地址值(所占内存空间的起始地址)例如:int a; a=300;,- 28 -,2.3 运算符和表达式,操作数参与运算的数据:变量、常量、函数调用等 运算符表示某种运算的符号:(算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符等) 表达式由运算符将操作数连接起来构成的式子,- 29 -,一、运算符,算术运算符关系运算符逻辑运算符位运算符赋值运算符条件运算符逗号运算符字长提取运算符强制类型转换符,- 30 -,1、算术运算符完成整型或浮点型数据的算
12、术运算。 单目运算符: - (负) 双目运算符乘除类: * (乘) / (除) % (取模,求余) 加减类: +加 - (减)注意: %要求操作数为整型/与%的第二操作数不为0/ 当分子分母都是整数时做整除! 例如: 5/2 = 2 -5/2.0 = -2.5 1/10=0 5%2 =1 -5%2 =-1 1%10=1,- 31 -,自加1(+)、自减1(-) +、-可放变量前,也可放在后面,如a+,+a,对变量本身无影响,都能使a增加1。 但对表达式或运算结果有影响:+a:a先自加1,然后再参与运算a+:a先参与运算,然后a自加1 例如:,int a=2,b; b=+a;,int a=2,b
13、; b=a+;,b为2,a为3,b为3,a为3,- 32 -,2、关系运算符 用来比较两个值,结果为逻辑型(0或1 )大于 =大于等于 =3 / 1 A = a / 10 != 9 / 1 注意:参与比较的数可以是整型,字符型,也可是浮点型,- 33 -,3、逻辑运算符!(逻辑非) &(逻辑与)|(逻辑或)参与逻辑运算的操作数:其值为0代表逻辑假,非0代表逻辑真。 a b a&b a|b0 0 0 0非0 0 0 10 非0 0 1非0 非0 1 1例如:!(9=9) /03&4 /19 | 0 /1,- 34 -,4、位运算符位运算符用来对二进制位进行操作。 (按位取反) (右移) (左移)
14、& (按位与) (异或) | (按位或)位运算符只能对整型和字符型数据进行操作。,正数 a=42,00000000000000000000000000101010,10000000000000000000000000101010,负数 a=-42,11111111111111111111111111010101,11111111111111111111111111010110,- 35 -,(1) 非()0 11 0例如:a=42 00000000000000000000000000101010a 11111111111111111111111111010101 100000000000000
15、0000000000010101010000000000000000000000000101011 -43a=-42 11111111111111111111111111010110a 00000000000000000000000000101001 41,- 36 -,(2) 位与(&)0&0 00&1 01&0 01&1 1 例如:a=42 00000000000000000000000000101010b=15 00000000000000000000000000001111a&b 00000000000000000000000000001010 10,- 37 -,(3) 位或(|)0
16、 | 0 00 | 1 11 | 0 11 | 1 1 例如: a=42 00000000000000000000000000101010b=15 00000000000000000000000000001111a | b 00000000000000000000000000101111 47,- 38 -,(4) 异或()0 0 00 1 11 0 11 1 0 例如:a=42 00000000000000000000000000101010b=15 00000000000000000000000000001111a b 00000000000000000000000000100101 37
17、,- 39 -,(5) 左移() (右侧补0)例如:a=42 00000000000000000000000000101010a 1 00000000000000000000000001010100 84 (a2)a2 00000000000000000000000010101000 168 (a4)a=-42 11111111111111111111111111010110a1 11111111111111111111111110101100 1000000000000000000000000101001110000000000000000000000001010100 -84 (a2),-
18、 40 -,(6) 右移()(左侧补符号位:正数补0,负数补1)例如:a=42 00000000000000000000000000101010a 1 00000000000000000000000000010101 21 (a2)a2 00000000000000000000000000001010 10 (a 4)a=-42 11111111111111111111111111010110a1 111111111111111111111111111010111000000000000000000000000001010010000000000000000000000000010101 -2
19、1 (a2),- 41 -,5、赋值运算符= +=、-=、*=、/=、%=、a*=3+b a=a*(3+b) 注意:运算时右边的表达式是被作为一个整体参与运算的。,- 42 -,在C+中字符数据和整型数据之间可以通用。,#include void main() int x,y; x=A; y=B; cout“x = “xn; cout“y = “yendl; ,- 43 -,6、条件运算符三目运算符条件表达式?条件为真时的表达式:条件为假时的表达式例如:x=ab? a : b; /实现把a和b 中较小的值赋给x,- 44 -,#include void main() double x,y,z;
20、 /定义三个变量用来输入三个数double maxv,temp; / 存放最大、最小及中间数coutxyz; /从键盘上输入三个任意的数temp=xy? x:y; /计算x y中的大值maxv=ztemp? z:temp; /x y中的大值再与z相比cout“最大值 “maxvendl; ,- 45 -,7、逗号运算符表达式1,表达式2,表达式n C+将顺序计算表达式1,表达式2,表达式n的值,整个逗号表达式的值是最后一个表达式n的值。 例如:int a,b,c,d; d=(a=1,b=a+2,c=b+3);则:a、b、c、d的值分别为1、3、6、6,最后一个表达式的值就是逗号表达式的值,-
21、46 -,8、字长提取符sizeof用来返回其后的类型说明符或表达式所表示的数在内存中所占有的字节数。sizeof();sizeof();例如: sizeof(int) /返回int型数占内存的字节数float a; 则sizeof (a) 返回a变量占内存的字节数当表达式为变量名时,括号()可以省略。使用sizeof运算符可测试C+中的各种数据类型在使用的机器上所占内存的字节数,了解不同类型数据在系统内实际分配的内存情况。,- 47 -,9、强制类型转换运算符用来将指定的表达式的值强制为所指定的类型。类型说明符 (表达式)或: (类型说明符) 表达式 例如:int a; double b=3
22、.8921; a= int (b)+(int) b;则:a值为6 注意:是对所求表达式的值指定类型,并不是改变b 变量的类型。,- 48 -,运算符的优先级(1) : +(后缀) - (后缀)() - . .* -* (2) +(前缀) -(前缀) ! - + & * sizeof new delete (type) (3) * / % (4) + - (5) = = &= = |= (15),- 49 -,二、表达式,由运算符将操作数连接起来构成的式子。,1、表达式的种类 算术表达式 例如:a+5.2/3.0 逻辑表达式 例如:!a&8|7 关系表达式 例如:“m“=“n“ 赋值表达式 例如
23、:a=7 条件表达式 例如:a4?+a:-a 逗号表达式 例如:a+5,a=7,a+=4,- 50 -,2、表达式的值和类型任何一个表达式经过计算都应有一个确定的值和类型。计算一个表达式的值时要注意两点:先确定运算符的功能。再确定计算顺序。要注意优先级和结合性的影响。 一个表达式的类型由运算符种类和操作数类型来决定。 1)算术表达式 例如:int a=7*2+ -3%5-4/3; /a:10float b=510+3.2e3-5.6/0.03 /b:3523.33int m(3),n(4);a=m+-( -n); /a:0 m:4 n:3,- 51 -,2)关系表达式 例如: char x(m
24、),y(n);int n; n=x3)+(y-x=1); / n:3,3)逻辑表达式 例如: int a(3),b(0);!a /0 a:3a|b|b+ /1 b:0,注意:C+规定:在一个逻辑表达式中,当计算出一个子表达式的值后便可确定整个逻辑表达式的值时,后面的子表达式就不再计算。,- 52 -,4)条件表达式 例如: int a(3),b(4),c;c=ab?+a:+b; /c:5c=a-b?a+b:a-3?b:a; /c:7 从右向左结合c=a-b?a+b:(a-3?b:a);,5)赋值表达式 例如: int x(1),y(3),z(5); /从右向左结合x+=y*=z-=2; /?(10,9,3)z=(x*=2)+(y+=4)+2; /? (2,7,11),6)逗号表达式 例如: int a,b,c; a=1,b=2,c=a+b+3; /6c=(a+,a+=b,a+b); /赋值表达式 6,- 53 -,3、表达式中的类型转换(隐含类型转换),