资源预览内容
第1页 / 共46页
第2页 / 共46页
第3页 / 共46页
第4页 / 共46页
第5页 / 共46页
第6页 / 共46页
第7页 / 共46页
第8页 / 共46页
第9页 / 共46页
第10页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第2章 基本数据类型与表达式,第2章 基本数据类型与表达式,2.1 C+数据类型概述 2.2 C+的基本数据类型 2.3 常量与变量 2.4 运算符与表达式 2.5 数值运算符与数值表达式 2.6 赋值运算 2.7 关系与逻辑运算 2.8 条件运算符与逗号表达式 2.9 sizeof运算符 2.10 表达式的副作用和表达式语句,2.1 c+数据类型概述,1.基本数据类型,基本数 据类型,整型 int,字符型,实型,逻辑型,单字符型 char,宽字符型 wchar_t,单精度型 float,双精度型 double,bool,2.数据类型修饰符 signed:有符号 unsigned:无符号 short:短型 long:长型 说明: 1) 类型修饰符可以修饰除void、bool类型以外的其他类型; 2) 上述修饰符均可用于整型和字符型; 3) long修饰符还适用于双精度浮点数;,2.2 C+的基本数据类型,说明: (1)表中的int可以省略,既在int之前有修饰符出现时,可以省略关键字int; (2) 单精度类型float、双精度类型double、长精度类型long double统称浮点类型; (3) char型和各种int类型统称整型类型;char型变量在内存中以字符的ASCII码值的形式存储; (4) 字宽(字节)取决于操作系统和编译器的实现,可用sizeof验证;,/ ch2_1.cpp 测试计算机中数据类型的字节长度 #include void main() cout“char类型的长度是“sizeof(char)endl; cout“宽char类型的长度是“sizeof(wchar_t)endl; cout“int类型的长度是“sizeof(int)endl; cout“long类型的长度是“sizeof(long)endl; cout“float类型的长度是“sizeof(float)endl; cout“double类型的长度是“sizeof(double)endl; cout“long double类型的长度是“sizeof(long double); coutendl; ,2.3 常量与变量,2.3.1 变量 变量是指程序在运行时其值可改变的量。每个变量由一个变量名惟一标识,同时,每个变量又具有一个特定的数据类型。不同类型的变量在内存中占有存储单元的个数不同。,变量定义,1.命名变量名 每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。 2.标识符命名规则 (1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。( _Num1 , 8NUM, NUM8) (2)有效长度:随系统而异,但至少前个字符有效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前个字符相同,有的系统认为这两个变量,是一回事而不加区别。,(3)C+的关键字不能用作变量名。 注意:C+对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。习惯上,变量名和函数名中的英文字母用小写,以增加可读性。 标识符命名的良好习惯见名知意,即通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。 (4)命名风格:my_car,myCar,iMyCar,dMyCar,3.变量定义方式: ; 例如:int a,b,c; double x,y,z; 4.变量赋值与初始化 数据类型 标识符1(初始值1), ,标识符n(初始值n); 数据类型 标识符1=初始值1, ,标识符n=初始值n; 例如:double price=15.5; int size=100; 5.typedf 用typedef可以为一个已有的类型名提供一个同义词 例如:typedef double profit; typedef int INT,integer; INT a; profit d;,2.3.2 常量,1.整型常量 10进制表示例:132, -345 8进制表示例:010, -0536 16进制表示例:0x7A, -0X3de 2.实型常量 (1)定点数形式 。它由数字和小数点组成。如:0.123,.234,0.0等。 (2)指数形式。如,123e5或123E5都表示123105。要注意E或e的前面必须要有数字,且E后面的指数必须为整数。,3.字符常量 (1)由一对单引号括起的一个字符表示; (2)其值为所括起字符在ASCII表中的编码; (3)转义序列表示方法:以反斜线()开头,后跟字符的ASCII码值;,C+中常用转义序列符,.字符串常量 一对双引号括起的字符序列,字符序列可以包含空格、转义序列或任何其他字符,这些字符不一定是C+字符集中的字符,只要C+编译器支持即可. 例如:“This is a string;” “How do you do?” “I am a student.”,串常量与字符常量的区别:,5.布尔常量 布尔常量仅有两个: false(假)和true(真) 或:1 (真) 0 (假),6.枚举常量 枚举声明: enum ; 由若干个枚举符组成,多个枚举符之间用逗号分隔; 枚举符是用标识符表示的整型常量,又称枚举常量; 枚举常量的值默认为最前边的一个为0,其后的值依次加1; 枚举常量的值也可显式定义,未显式定义的则在前一个值的基础上加1; 例如:enum day Sun,Mon,Tue,Wed,Thu,Fri,Sat; enum day Sun=7,Mon=1, Tue,Wed,Tur,Fri,Sat;,2.3.3 常量定义,定义方法:使用类型说明符const; 例如:const int size=80; 定义的符号常量必须初始化; 一个符号常量可看作是一个只读变量,由const定义的常量的值不可以改变;,2.3.4 宏定义的使用,例: define pi 3.14,说明: define 在c+中不常用,已经被const所取代,2.4 运算符与表达式,在程序中,表达式是计算求值的基本单位,它是由运算符和运算数组成的式子。运算符是表示进行某种运算的符号。运算数包含常量、变量和函数等。 C+语言的运算符按其在表达式中与运算对象的关系(连接运算对象的个数)可分为: 单目运算(一元运算符,只需一个操作数) 双目运算(二元运算符,需两个操作数) 三目运算(三元运算符,需三个操作数),按其在表达式中所起的作用又可分为: 算术运算符 + - * / % 关系运算符 = = != 逻辑运算符 ! & | 位运算符 | & 自增自减运算符 + - 赋值运算符 = 及其扩展(+= -= *= /= %= 等) 条件运算符 ? : 指针运算符 * 和 & 逗号运算符 , 分量运算符 * - 函数调用运算符() 下标运算符 求字节运算符 sizeof 强制类型转换运算符:(type),2.左值和右值 左值(left value,缩写为lvalue)是能出现在赋值表达式左边的表达式。左值表达式具有存放数据的空间,而且存放是允许的。例如: int a=3; /a是变量,所以a是左值 const int b=4; /b是常量,所以b不是左值 显然常量不是左值,因为c+规定常量的值一旦确定就不能更改。,右值(right value,缩写为rvalue)只能出现在赋值表达式的右边。左值表达式也可以作为右值表达式。例如: int a,b=6; a=b;/ b是变量,所以是左值,此处作为右值。 a=8;/ 8是常量,只能作右值,不能作为左值。 表达式可产生左值、右值或不产生值。例如: int a; (a=4)=28; /a=4是左值表达式,可以被赋以值28。 /* 28是右值表达式,而a=4是左值表达式(C+的语法规定),所以可以放在赋值语句的左边。该语句表示a的值使用28代替刚刚赋给的值4。*/,2.5 数值运算符与数值表达式,+(加法运算符,或正值运算符,如1+2,+3) - (减法运算符,或负值运算符,如1-2,-3) *(乘法运算符,如1*2) / (除法运算符,如1/2) 两整数相除,结果取整。 如:5/2结果为2;1/2为0 浮点数参与除法运算,结果是浮点数。 如:5.0/2.0结果为2.5; 1.0/2.0为 0.5 %(模运算符或称求余运算符,如7%3=1) 只能对整数进行操作。,算术类型转换,数据类型转换 C+中数据类型转换有两类,即隐式类型转换和显式类型转换。 1. 隐式类型转换 隐式类型转换是由编译器自动完成的类型转换。当编译器遇到不同类型的数据参与同一运算时,会自动将它们转换为相同类型后再进行运算,赋值时会把所赋值的类型转换为与被赋值变量类型一样。隐式类型转换按从低到高的顺序进行,如图2-1所示。,2. 显式类型转换 显式类型转换是由程序员显式指出的类型转换,转换形式有两种: 类型名(表达式) (类型名)表达式 这里的“类型名”是任何合法的C+数据类型,例如float、int等。通过类型的显式转换可以将“表达式”转换成适当的类型。 例如: double f=3.6; int n=(int)f; 这样n为3。,2.6 赋值运算,2.6.1 赋值运算符 (1)赋值运算符“=”的一般格式为: 变量=表达式; 表示将其右侧的表达式求出结果,赋给其左侧的变量。 例如: int i; i=3*(4+5); /i的值变为27 (2)赋值表达式本身的运算结果是右侧表达式的值,而结果类型是左侧变量的数据类型。 例如: int i=1.2*3; /结果为3,而不是3.6,(3)赋值运算符的结合性是从右至左的,因此,C+程序中可以出现连续赋值的情况。例如,下面的赋值是合法的: int i,j,k; i=j=k=10; /i,j,k都赋值为10 (4)复合赋值运算符: +=(加赋值), -=(减赋值), *=(乘赋值), /=(除赋值), %=(取模赋值), =(右移赋值), &=(与赋值), =(异或赋值), |=(或赋值),它们的含义如下: a+=b 等价于 a=a+b a-=b 等价于 a=a-b a*=b 等价于 a=a*b a/=b 等价于 a=a/b a%=b 等价于 a=a%b 例如: int a=12; a+=a; 表示 a=(a+a)=(12+12)=24; 又例如:int a=12; a+=a-=a*=a; 表示 a=a*a /a=12*12=144 a=a-a /a=144-144=0 a=a+a /a=0+0=0,2.6.2 溢出,进行算术运算和赋值运算时,很可能溢出结果。 发生溢出的原因: 是由于一个变量被赋予一个超出其数值类型表示范围的数值。 数值溢出不会引起编译错误,但会使运行结果发生偏差 例如:在16位机器上进行如下操作: int weight=42896; 变量weight将得不到42896,而是得到-22640。因为有符号整数的表示范围是-3276832767。所以它只能得到42896的补码-22640 (42896-65536),思考如下的问题: 在16位机器中,做如下操作: int x=142896; 变量x将会得到什么数?,如果x是2个字节的整数,得到的值为:11824 因为:142896=265536+11824,2.6.3 自增、自减运算符,(1)自增(+)、自减(-)运算符为变量的增1和减1提供了紧凑格式。 (2)自增、自减运算符都是单目运算符,其作用是使变量的值增1或减1。 (3)自增、自减运算符有四种应用格式: b=a+; 等价于 b=a;a=a+1;
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号