《chapter02-数据类型和表达式》由会员分享,可在线阅读,更多相关《chapter02-数据类型和表达式(44页珍藏版)》请在金锄头文库上搜索。
1、C+程序设计 第一部分:C+程序设计语言基础,第二章 数据类型和表达式,第二章 数据类型和表达式,数据类型概述 C+基本数据类型 常量和变量 运算符 表达式中运算符的优先级 表达式中数据类型的转换,2.1 数据类型概述,C+语言支持多种数据类型。,图2-1 C+数据类型,2.2 C+基本数据类型,2.2 C+基本数据类型(续),int型保存的是整数类型的数据。基本的整型变量使用int关键字声明,也可以在int前加上修饰符short、long、signed和unsigned,在使用这些修饰符时可以省略int。,例如: int day=28; /声明整型变量day,初始化整型常量28 unsign
2、ed int number=1;/声明无符号型整型变量number,初始化整型常量1,2.2 C+基本数据类型(续),float型和double型统称为浮点型,是指带有小数部分的数据类型。这两种类型是按照保存数据的精度不同划分的。double型的精度高于float型。在声明浮点型变量时也可以使用类型修饰符long、signed、unsigned,但是不能省略float和double关键字。,例如: float temperature=36.5;/声明单精度型变量temperature,初始化浮点型常量36.5 unsigned double price=12.00;/声明无符号双精度型变量pr
3、ice,初始化浮点型常量12.00,2.2 C+基本数据类型(续),char型数据存储时占用1个字节(8位)。因为计算机不能识别字符,只能识别数字,所以无论是字符型常量还是变量,在内存中实际存储的是字符的ASCII码值。 由于在内存中字符型数据是以ASCII码形式存储的,与整型数据相似,所以字符型数据可以用在数值表达式中,像整型数据一样使用。 声明字符型变量时也可以使用signed和unsigned进行修饰。,2.2 C+基本数据类型(续),在C+语言中还包括wchar_t数据类型。wchar_t也是字符类型,但是其宽度超过8位。通常wchar_t型占用2个字节(16位)。iostream类库
4、为输入/输出wchar_t型数据提供了相应的类和对象。,例如: char ch=a; /声明字符型变量ch,初始化字符型常量a,ASCII码值为97 int a,b; /声明整型变量a和b a=12; /a的值为12 b=a+ch; /b的值为a+ch的结果109,例2-1 输入/输出宽字符型数据。 /*p2-1.cpp */ #include using namespace std; int main() wchar_t ch1; wcinch1; wcoutch1endl; return 0; 程序运行结果: 输入 E E,2.3 常量和变量,常量 变量,2.3.1 常量,在C+程序的表达
5、式中被明确表达出来的值可以称为常量。 整型常量后面可以使用一些字符表示特定的含义。如整型常量后面加“l”或“L”,称之为长整型常量;后面加“u”或“U”称为无符号常量。 整型常量有十进制数、八进制数和十六进制数三种形式。每种形式的数据都有特殊标记。以数字0开头的数据表示八进制数,以0x开头的数据表示十六进制数。,2.3.1 常量(续),浮点数可以用十进制数和指数两种形式来表示。 通常情况下编译系统将浮点型常量处理成双精度型数据。如果要表示单精度数据可以在浮点型常量的后面加后缀“f”或“F”。,2.3.1 常量(续),在C+程序中要特别注意字符型常量与字符串常量的使用。 字符常量是用单引号括起来
6、的一个字符,如A、a、?、0等。字符常量也可以用ASCII码值表示,可以像其他整型常量一样参与运算。 字符串常量是由一对双引号括起来的字符序列。 字符常量还有另外一种形式转义字符形式。转义字符仍然使用单引号括起来,单引号内是一组以“”开头的特殊字符序列。使用这些转义字符可以输出字母字符、专用字符、控制字符和图形字符。,2.3.1 常量(续),2.3.1 常量(续),在C+程序中可以使用一个标识符代表某个常量,这种形式的常量可以称为符号常量。 格式: 由于C语言是C+语言的子集,在C语言中使用编译预处理语句#define定义符号常量的方法在C+语言中也是可以使用的。,const 数据类型 常量名
7、常数值;,例2-2 使用符号常量的实现计算圆的周长和面积。 参考程序: /*p2-2.cpp*/ #include using namespace std; const float PI=3.1416; /定义一个符号常量PI来代表常量.1416 /这条语句可以使用“#define PI 3.1416”来代替 int main() float r,s,area; cinr; s = 2 * PI * r; area = PI * r * r; cout“s=“sendl; cout“area=“areaendl; return 0; 程序运行结果: 输入4 s=25.1328 area=50.
8、2565,2.3.2 变量,变量的声明 所有的变量必须先声明后使用 变量声明时要给出变量的数据类型和名称 在一条变量声明语句中可以同时声明一个或多个同类型的变量,例如: int sum; /声明整型变量sum double z; /声明双精度浮点型变量z,例如: int a,b, c ; /声明整型变量a,b,c unsigned year,month; /声明无符号整型变量year,month float x,y; /声明单精度浮点型变量x,y char ch1 , ch2; /声明字符型变量ch1,ch2,2.3.2 变量(续),变量初始化 变量可以在定义时进行初始化,即对一些变量预先设置
9、初值 初始化变量还可以使用另外一种方式,例如: int a,b, c=0 ; /声明a,b,c为整型变量,a,b没有赋初值,c的初值为0 float x=2.0; /声明x为单精度浮点型变量,x的初值为2.0 char ch1=a , ch2=A; /声明ch1,ch2为字符型变量,ch1的初值为a,ch2的初值为A,例如: int a,b, c(0) ; float x(2.0); char ch1(a),ch2(A);,2.3.2 变量(续),标识符命名规则 C+的标识符可以由字母(a-z、A-Z)、数字(0-9)和下划线(_)组成,不能包含其他类型的字符,并且第一个字符只能是字母或下划线
10、。 C+ 语言是区分大小写字母的,例如Day与day是两个不同的名字。通常情况下变量的名字使用小写字母,而符号常量的名字使用大写字母。 不能使用C+中的关键字作为标识符。在C+语言中某些有专门的用途的字符序列,例如,if、bool、int等,它们被称为C+的关键字。它们是不能被声明为标识符的。并且在C+程序中关键字必须用小写。,建议:,为了提高程序的可读性,变量的名字尽量使用有意义的名称。习惯上变量名字使用小写字母,以便和符号常量区分开。如果有两个以上的单词连写,可以将第二个单词的首字母大写。 例如: int year,month,day; float studentScore;,2.4 运算
11、符,算术运算符 赋值运算符 关系运算符 逻辑运算符 位运算符 自增和自减运算符 条件运算符 逗号运算符,2.4.1 算术运算符,进一步解释:,在使用除法运算符(/)时,如果两边的运算量都是整型,那么相除结果还是整型。如果参加运算的两个运算量中有一个是浮点型,则结果为double型。,例如: float x,y; x=11/3; /11和3都是整型常量,所以赋值给x的值为3,而不是4 y=11/3.0 /y的值为3.66667,进一步解释:,求模运算符(%)用来对整型数据进行除法运算取其余数。例如表达式x%y的结果为两数相除后的余数,如果x能被y整除,则结果为零。 “%”运算符只能用于整型数据,
12、不能用于float或double型数据。,例如: int x; float y,z; x=11%3; /x的值为2 y=11%4 /y的值为3 z=11%3.0 /错误,不能运行,2.4.2 赋值运算符,C+语言赋值运算符(=)的作用就是把一个表达式的值赋给一个变量。 算术运算符(+、-、*、/、%)与赋值运算符(=)结合在一起,可以形成复合的赋值运算符。 注意: “=”的左边只能是变量,右边可以是常量、变量或表达式。 多重赋值表达式不能出现在变量声明语句中。,例如: i += 2 /等价于i = i + 2 a %= 3 /等价于a = a % 3 x * = y 2 /等价于x = x *
13、 (y-2),2.4.3 关系运算符,2.4.3 关系运算符,关系运算符中只有不等于运算符(!=)是单目运算符,其他都是双目运算符。 关系运算符通常用来构造条件表达式,用在条件判断中。 由关系运算符形成的表达式的结果为逻辑值,即“真”或“假”。在C+中常常将逻辑真用1表示,逻辑假用0表示。 注意: 逻辑相等运算符“=”和赋值运算符“=”的区别,2.4.4 逻辑运算符,2.4.4 逻辑运算符,逻辑非(!)运算符的作用是将原表达式的逻辑值取反 逻辑与(&)运算符的作用是当左右两个表达式的值都为逻辑真时其值为真,只要其中一个为逻辑假则其值为假 逻辑或(|)运算符的作用是当左右两个表达式都为逻辑假时其
14、值为假,只要有一个表达式的值为逻辑真则其值为真。 其中逻辑非(!)运算符是单目运算符,其他是双目运算符。 在由逻辑运算符组成的逻辑表达式中,运算量的值非0则等价于逻辑真,运算量的值为0则等价于逻辑假。整个逻辑表达式返回的值也为逻辑值,逻辑假返回“0”,逻辑真返回“1”。,进一步解释:,在整个逻辑表达式的计算中如果前面的表达式的值已经可以确定整个逻辑表达式的值,则剩下的表达式不求解,这种方式可以称之为“短路”。,例如: int x=0,y=1,z=2,t; t=x /结果为t=1,x=0,y=1,z=2,2.4.5 位运算符,2.4.5 位运算符,按位求反运算符()是将操作数的二进制位逐位取反,
15、将1变为0,将0变为1。 例如:25 /结果为-26 按位与运算符(&)比较两个运算量对应的二进制位,当两个二进制位均为1时,该位的结果取1,否则取0。 例如:3&5 /结果为1 按位与运算符的作用 清零 取一个数中的某些指定位 要想将一个数的某些位保留下来,就与一个在这些位为1的数进行&运算,2.4.5 位运算符(续),按位或运算符(|)比较两个运算量对应的二进制位,当两个二进制位均为0时,该位的结果取0,否则取1。 例如:23|67 /结果为87 按位异或运算符()比较两个运算量对应的二进制位,当两个二进制位相同时,该位的结果取0,否则取1。 例如:0011100100101010 /结果
16、为00010011 按位异或运算符的作用 翻转特定位 运算量与0进行按位异或运算,结果为原值 不使用临时变量交换两个变量的值,2.4.5 位运算符(续),左移运算符(2; /b的值为3 在计算机中常将除以2n处理为右移n位,2.4.6 自增和自减运算符,自增运算符(+)和自减运算符(-)都是单目运算符。它们的作用是使变量自动增加1或减少1。 注意: 自增自减运算符只能作用于变量,不能作用于常量和表达式。 例如:a=6+;-(x+y)都是错误 的。,例如: a=i+; /等价于a=i;i=i+1; a=m-; /等价于a=m;m=m-1; a=+j; /等价于j=j+1;a=j; a=-n; /等价于n=n+1;a=n;,2.4.7 条件运算符,条件运算符(? :)是C+语言中唯一的一个三目运算符。 格式: 运算过程为:如果表达式1的值为真,则整个