《C++程序设计第2章 数据类型与表达式教学课件.ppt》由会员分享,可在线阅读,更多相关《C++程序设计第2章 数据类型与表达式教学课件.ppt(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+程序设计第2 章 数据类型与表达式教学课件第2 章 数据类型与表达式2.1 C+的数据类型2.2 常量和变量2.3 表达式2.4 运算符分类2.5 运算符的优先级和结合性2.6 类型转换2.1 C+的数据类型整型基本类型:有int(整型)、short int(短整型,int 可省略)、long int(长 整型,int 可省略)及long long int(长长整型,int 可省略)C+中未规定每一种数据所占的字节数,只规定int 型数据所占的字节数不大于long 型,不小于short 型。数据衔接不同的后缀表示不同的数据类型:12/整型或短整型34L/长整型数,带有后缀“L”56l/长整
2、型数,带有后缀“l”(小写的L,实际意义同上)789LL/长长整型数,带有后缀“LL”(注意:大小写不可混用)特殊整型 在C+标准中,并没有具体规定某种类型数据所占内存的大小,而只是规定了其大小与机器字的关系。所谓机器字的大小就是计算机的位数。如果两台计算机的位数大小不一样,则在定义、初始化、赋值时对整型变量的操作就不一样,从而导致这两台计算机的程序不能互相移植。为了解决这个问题,C+标准引入了一些特殊类型关键字来表示确定大小的整型数。如_int8、_int16、_int32 和_int64 分别表示8 位、16 位、32 位和64 位的整数。无符号整型整数:分为有符号整数,无符号整数。无符号
3、类型需在该类型符前面加上unsigned 关 键字;有符号整型可以在类型符前面加上signed 关键字,但一般可以省略。浮点型数据类型:有float(单精度浮点数)、double(双精度浮点数)和long double(长双 精度浮点数,或称扩展精度浮点数)。浮点型字面常量可以写成普通的十进制形式,或用科学计数法表示。没有后缀的浮点型字面常量或直接写出的浮点数字面值,都默认为double 型。double型的数据在数字后面加上f 或F 便可转化为float 型的数据。字符型计算机不能直接存储字符,所有字符都是用数字编码来表示和处理的。无符号字符型类型关键字只需在类型符char 前面加上unsi
4、gned 关键字。转义字符即以转义符“”开头的格式字符。宽字符型宽字符:即用两字节表示的字符,其类型关键字为wchar_t。宽字符变量的定义、初始化和赋值如下。wchar_t w;w=LW;/为变量赋值时在char 型字符前加上Lwchar_t v=LV;/定义并初始化一个宽字符型变量布尔型在C+中,可以用布尔(bool)型数据仅有的两个字面常量true(真)和false(假)来表示众多条件、逻辑运算结论的真假判断,其他类型的数据也可以用布尔型变量赋值,注:当且仅当用0 来为变量赋值时,变量才为false;用任何非0 的数值(不仅是1)给布尔型变量赋值时,其都为true。布尔型变量的输出形式默
5、认为整数1 和0,若要输出true 和false,则需要运用输出控制符。2.2 常量和变量 常量常量:包括数值型常量(即常数)和字符型常量。(1)数值型常量:即常数,如1,2,3 等。(2)字符型常量:包含在两个单引号之间的单个字符或包含在两个双引号之间的字符串称为字符常量,如a,Hello World 等。变量变量:即其值可以改变。变量包括变量名和变量值。变量名是存储单元的名字,而变量值则存储在存储单元中。一个变量占据一个存储单元(即一小块内存),这个存储单元的大小由变量值的大小决定。定义变量定义变量:实际上是在内存中为变量划分一个存储空间。定义变量的一般格式如下:类型 变量名;注:定义变量
6、是需规定变量的类型,同时命名,变量需要区分大小写。并且变量名不能和C+的关键字、函数名及类名发生冲突。变量名可含有下划线、数字,但必须以字母或下划线开头。为变量赋初值对变量进行初始化的一般格式如下:类型 变量名=初值;初值可以是常量,也可以是有确定值的表达式。变量也可以为变量赋初值,此时被赋初值的变量中存储的信息与赋初值的变量存储的信息一致。例如:int a=1;int b=a;对多个同一类型的变量赋初值,可以在同一语句中进行操作,此时只需在各个赋值语句之间加上逗号,其格式如下。类型 变量名1=值1,变量名2=值2,变量名n=值n;例如:int a=1,b=2;常变量常变量:在定义语句的最前方
7、加上const,并且必须在定义时为其赋初值以保证此后其值不能改变。在特定情况下需要固定变量的值不变或保护其不受损害,就需要用到常变量。常变量的初值可以是数值,也可以是表达式,例如:int a=1;const int b=1+a;2.3 表达式表达式:包含操作数、操作符。操作数即参与计算过程中的数值,它可以是单个常量或变量、多个常量或变量通过操作符相结合,也可以同时包含二者。注:在处理不同类型的数据时,必须先将各种类型按照统一规定转换后再进行计算。表达式和语句并非同一概念。例如:a=1/表达式int a=1;/语句单从形式上来看,表达式的结尾处没有分号,语句则有;从真正意义上说,表达式从属于语句
8、的一部分,语句通过表达式表达出来。表达式的类型:赋值表达式,条件表达式,逗号表达式a=1 赋值表达式if(a1)a1 为条件表达式c=(a=1,b=a+2,a*b);逗号表达式2.4 运算符的分类算术运算符基本的算术运算符有以下5 个:(1)+:加法运算符。(2)-:减法运算符。(3)*:乘法运算符。(4)/:除法运算符。(5)%:模运算符,或取余运算符。优先级:先乘除后加减,当表达式运算优先级不清晰时,可以使用括号使其清晰。算术运算符的操作数一般是两个,当两个操作数的类型相同时,运算结果同样为整数。算术运算的溢出不同的数据类型在不同的计算机中所占字节数、数值表示范围等均不同,由于计算机的特性
9、不同(即机器数不同),在计算时也会对计算结果造成影响。例如,某台16 位的计算机中,短整型的位数为16 位,其数值表示范围为-32 768+32 767,如果采用如下代码:short a;int b=32780,c=32780;a=b+c;则输出的数一定为一组随机值,即乱码。因为变量b、c相加后的数值远远超出了短整型所能表示的数值范围32 767,但许多计算机在此种情况下不会报警,故输出一组乱码。赋值运算符赋值运算符:即“=”,它是二元运算符,用来处理两个操作数。“=”的右端可以是具体的常量,也可以是已定义的变量、表达式;但“=”的左端必须是能被修改的,它可以是变量、表达式甚至指针,这个能被修
10、改的值实际上就是一个内存地址值,可以通过这个内存地址来进行存放和读写等操作。一般来说,赋值运算符左右两端的数据类型应该相同,若不相同则会进行转换。常见的转换方式有如下几种类型(表示赋值方向)。(1)float 型int 型:将float 型的数据赋值给int 型变量时,计算机会自动舍去浮点型的小数部分。如将1.2 赋值给整型变量,赋值后整型变量的值即为1。(2)float 型double 型:将float 型的数据赋值给double 型变量时,数据在字面上不发生改变,但在内存中的存储形式转换成double 型。(3)int 型float 型:这种情况与float 型double 型的情况类似,
11、数据只是在内存中改变了存储形式。(4)double 型float 型:将double 型的数据赋值给float 型变量,一定要注意二者所能表示数值范围的大小差异,避免发生溢出而产生异常。(5)char 型int 型:将char 型的数据赋值给int 型变量时,会将所给字符所对应的ASCII 码赋值给int 型变量。(6)int 型char 型:将int 型数据在计算机中所表示的二进制形式数据赋值给char 型变量,输出char 型变量时则输出其在ASCII 码表中相对应的字符。自增和自减运算符自增和自减运算符分为两种:前自增、自减运算符和后自增、自减运算符。例如:int a=1;int b=a
12、+;/*先保存a 的值1,再将a 在原来的基础上加1,语句运行完 后a 的值为2,返回值为先前保存的1*/int c=+a;/*在a 的值是2 的基础上加1,再返回加1 后的值,语句运行 完后,a 的值为3,返回值为3*/关系运算符关系运算符是用来比较两个操作数大小关系的二元操作符。关系操作符:有小于()、小于等于(=)、等于(=)、不等于(!=)。关系运算符的两端可以是常量、变量、表达式。每一个关系运算符所对应的关系表达式都有一个布尔型的结果,即true 或false。逻辑运算符逻辑运算符有3 种:逻辑非(!)、逻辑与(&)和逻辑或(|)。逻辑非:是一元运算符,其作用是将所求表达式的相反值赋
13、给所指定的变量,且不管所给的变量属于何种类型,都只有bool 型的两种结果。逻辑与和逻辑或:是二元运算符,其所关联的两个操作数可以是常量、变量、表达式等。与逻辑非的处理方法一致,其逻辑表达式的结果值只有true 和false 两种类型。当&所连接的两个操作数的值都为true 时,其结果值才为true,否则都为false。当|所连接的两个操作数中,只要有一个的值为true,则其结果值便为true,当且仅当两个操作数的值都为false 时,结果值才为false。逻辑与和逻辑或所连接的两个操作数或表达式按照从左向右的结合顺序,前后分别进行判断,其语法格式如下。表达式1&表达式2表达式1|表达式2条件
14、运算符语法格式为:表达式1?表达式2:表达式3;表达式1 是可以判断真假的,表达式2 和表达式3 是整个条件表达式最终值的两种结果。当表达式1 的值为真时,取表达式2 的值为条件表达式的值;当表达式1 的值为假时,取表达式3 的值为条件表达式的值。条件表达式最经典的用法便是比较两个数的大小,其具体用法如下。int a=1,b=2;int max=(ab?a:b);int min=(ab?a:b);逗号运算符 最简单的语法格式为:表达式1,表达式2(整个逗号表达式的值是表达式2)逗号表达式可以不只含有两个子表达式,它可以被推广到n 个子表达式的情形,例如:表达式1,表达式2,表达式n位运算符位运
15、算符:是针对整数的特有运算符。基本的位运算符:有取反运算符()、左移运算符()、与运算符(&)、或运算符(|)、异或运算符()。将位运算符与赋值运算符相结合,还可以形成复合位运算符:=(按右移赋值)、&=(按位与赋值)、|=(按位或赋值)、|(按位异或赋值)。(1)取反运算符:将计算机中以二进制存储的操作数的每一位都取反,即1 取反为0,0 取反为1。(2)左移运算符(左移操作不需要考虑符号位):将操作数最高位去掉,在末尾处补0,所补个数依(右移操作需要考虑符号位):将操作数末尾去掉,在最前端补0 或者1。对于有符号的操作数,补进与原操作数最高位相同的数,即最高位为0,则补0,最高位为1,则补
16、1;而对于无符号的操作数,则统一补0。(4)位与运算符&:对两个整型数据,按逻辑与的规则将两个操作数进行位与操作。(5)位或运算符|:对两个整型数据,按逻辑或的规则将两个操作数进行位或操作。(6)位异或运算符:对两个整型数据,当且仅当相对应的某一位同为0 或同为1 时,其值为0;否则为1。(7)复合位运算符:其用法与复合的算术运算符用法一致。例如:a=1;/等价于a=a1;复合赋值运算符=是基本的赋值运算符,在=前加上某些特定的运算符,可构成复合的赋值运算符。复合赋值运算符:有*=、/=、%=、+=、-=、=、&=、|=、=例如:int a=1;a+=1;上述代码中,表达式a+=1 所表示的含
17、义为:先将整型变量a 的值加1,再将加1 后的值重新赋给a,此时a 的值为2。该表达式也可写成a=a+1,所得结果同样为2。2.5 运算符的优先级和结合性优先级是针对不同级别的运算符而言的,级别高,则优先计算。结合性则是针对同一级别的运算符,有从左自右和从右自左两种结合性。2.6 类型转换类型转换就是对两个不同类型的数据进行处理时所进行的转换。类型转换:分为隐式转换和显式转换两种类型。隐式转换采用隐式转换的情况有:(1)对于单个表达式,存在不同的数据类型。例如:a=1.2+3;(2)对于单个变量,不同类型的表达式为其赋值。例如:int a=1;double b=a+1;(3)对于函数,实参和形
18、参类型不匹配。例如:double test(double a,double b)double d=a-b;return d;using namespace std;int main()double c=test(2,3);/传入的int 型参数会自动转化为double 型 cout c endl;return 0;(4)对于返回值,表达式的返回值和函数的返回值不匹配。例如:double func(int a)return a;/int 型变量a 自动转换为double 型隐式转换在计算机内部实现的规则如图所示:隐式转换的规则一般遵从“由小到大”,这里的小和大指的是存储数值的范围。特殊的隐式转换
19、隐式转换大多用于处理具体数值型的数据,特殊的隐式转换用于处理非具体数值型的数据类型,如bool 型、char 型等。(1)bool 型与其他型的转换 当将bool 型数据转换为其他数据类型时,true 变为1,false 变为0;当其他数据类型的数据转换为bool 型数据时,0 变为false,其他一切非0 数据则变为1。例如:bool a=1;/a 为true int a=true;/a 为1(2)char 型与其他型的转换 由于char 型数据在ASCII 码表中有相应的整数与其对应,故char 型可以和int 型进行转换。例如:char a=66;cout a endl;/输出B int b=a;cout b endl;/输出97显式类型转换显式类型转换由程序员编写,是强制的,不一定符合隐式转换的规则。语法格式有两种:(1)C 语言式的格式转换语法格式如下:类型名 表达式例如:int a/将a 转换成int 类型double(x+y)/将表达式x+y 的值转换成double 型注意:在使用这种转换格式时,若表达式还有多项,括号的使用是必须的,否则只强制转化第一项。(2)使用类型转换运算符static_cast 类型转换运算符static_cast 则是C+自身的类型转换方式。例子:int a=static_cast(1.2);