版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 数据类型和表达式2内容提要内容提要n基本数据类型;基本数据类型;n常量和变量;常量和变量; n标识符命名;标识符命名; n常用运算符和表达式;常用运算符和表达式;n运算符的优先级与结合性运算符的优先级与结合性 3n数据为什么要区分类型?数据为什么要区分类型?n不同类型的数据代表不同的不同类型的数据代表不同的n数据表示形式数据表示形式n合法的取值范围合法的取值范围n占用内存空间大小占用内存空间大小n可参与的运算种类可参与的运算种类 n从基本数据类型到抽象数据类型从基本数据类型到抽象数据类型n无数据类型无数据类型n基本数据类型基本数据类型 n构造数据类型构造数据类型 n抽象数据类型抽象数据
2、类型 2.1基本数据类型基本数据类型 4C+数据类型数据类型5常用的基本数据类型常用的基本数据类型n整型整型intint整数,在目前绝大多数机器上占整数,在目前绝大多数机器上占4个字节。个字节。n浮点型浮点型floatfloat单精度浮点数,一般是单精度浮点数,一般是4个字节长个字节长n浮点型浮点型doubledouble双精度浮点数,一般是双精度浮点数,一般是8个字节长个字节长n字符型字符型charchar字符,一般是字符,一般是1个字节长个字节长用来表示用来表示256个个ASCII字符,或者字符,或者0255的整数的整数6数据类型修饰符数据类型修饰符nshort short 短型短型sho
3、rt intshort int,短整数,一般,短整数,一般2 2个字节。个字节。通常简写为通常简写为shortshortnlong long 长型长型long intlong int,长整数,一般是,长整数,一般是4 4个字节。个字节。通常简写为通常简写为longlonglong doublelong double,长双精度,长双精度( (高精度高精度) )浮点数,一般浮点数,一般1010个字节。个字节。nsigned signed 有符号有符号用来修饰用来修饰charchar、intint、shortshort和和longlong,说明他们是有符号的整数,说明他们是有符号的整数( (正整数、
4、正整数、0 0和负整数和负整数) )。一般缺省都是有符号的一般缺省都是有符号的,所以这个,所以这个修饰符通常省略修饰符通常省略nunsigned unsigned 无符号无符号用来修饰用来修饰charchar、intint、shortshort和和longlong,说明他们是无符号的整数,说明他们是无符号的整数( (正整数和正整数和0)0)7常用数据类型取值范围常用数据类型取值范围VC+编译器编译器8整型的存储方式整型的存储方式整数整数在存储单元中按照在存储单元中按照补码形式存放补码形式存放n正数的补码是数的二进制正数的补码是数的二进制n负数的补码先将数绝对值写成二进负数的补码先将数绝对值写成
5、二进制形式制形式n再对所有二进制位取反,再加再对所有二进制位取反,再加1915 14 13 12 11 109876543210有符号数有符号数无符号数无符号数0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 132767327670 1 1 1 1 1 1 1 1 1 1 1 1 1 1 032766327660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1-1(补码补码)655351 1 1 1 1 1 1 1 1 1 1 1 1 1
6、1 0-2655341 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1-32767327691 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-327683276801 11 11 11 11 11 11 11short型:型:最大最大:3276710 00 00 00 00 00 00 00最小最小:-3276811 11 11 11 11 11 11 11unsigned short型:型:最大最大:6553500 00 00 00 00 00 00 00最小最小:0取值范围取值范围 -2 21515-2-21515-1-1取值范围取值范围 0-20-21616-1
7、-1有符号数与无符号数有符号数与无符号数11浮点型的存储方式浮点型的存储方式n浮点数在内存中是以指数形式浮点数在内存中是以指数形式( (即浮点形即浮点形式式) )存储的,如存储的,如0.314159e30.314159e3n存储单元中用二进制数来表示小数部分,存储单元中用二进制数来表示小数部分,用用2 2的幂次来表示指数部分的的幂次来表示指数部分的n小数部分占的位数越多,数的有效数字小数部分占的位数越多,数的有效数字越多,精度也就越高越多,精度也就越高n指数部分占的位数越多,能表示的数值指数部分占的位数越多,能表示的数值范围越大范围越大12n年龄年龄:_n保险总额保险总额:_n性别性别:_字符
8、型数据字符型数据n23n98340n M nint/floatnchar13n n5 np n$ n2 n2 n2 + 2 = 4 值符号值符号值符号0空字符44,9132空格45-9233!46.933447/9435#48 570 9 95-36$58:9637%59;97 122a z38&6012541)63?12642*64127DEL (Delete键)43+65 90A Z 字符型数据字符型数据(ASCII码表)码表)14字符型数据(字符型数据(char)n字符型数据实际上是作为字符型数据实际上是作为整型数据整型数据在内存中存储的。在内存中存储的。n计算机是以字符编码的形
9、式处理字符的,因此,我们在计算机内计算机是以字符编码的形式处理字符的,因此,我们在计算机内部是以部是以ASCII码码的形式表示所有字符的。所以的形式表示所有字符的。所以7位二进制数即可表示位二进制数即可表示出一个字符,出一个字符,我们用一个字节的容量(我们用一个字节的容量(8位)存储一个字符。位)存储一个字符。n例如:字符例如:字符A的的ASCII码为码为0 x41或或65,在内存中表示为:,在内存中表示为:01000001n字符1和整数1是不同的概念:字符1只是代表一个形状为1的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节整数1是以整数存储方式(二进制补码方式)存储的
10、,占2个或4个字节0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 1字符型数据(字符型数据(char)请问请问: 1+1=? b 982.2 常量和变量常量和变量例子引入:求华氏温度例子引入:求华氏温度 100F 对应的对应的摄氏温度摄氏温度 摄氏温度 C=(5/9)(F-32) 程序解析程序解析求华氏温度 100F 对应的摄氏温度。摄氏温度 C=(5/9)(F-32) #include int main(void) int celsius, fahr; /定
11、义变量 fahr = 100; /变量使用 celsius = 5 * (fahr - 32) / 9; cout “fahr =” fahr “ celsius =”celsius; /输出结果 return 0; 输出输出: :fahr =fahr =100100 celsius = celsius = 373718n程序运行时其值不能改变的量程序运行时其值不能改变的量(即常数)即常数)整型常量整型常量实型常量实型常量字符常量字符常量字符串常量字符串常量布尔常量布尔常量常量常量(Constant)19整型常量整型常量整型常量整型常量 1818、-31-31长整型常量长整型常量 123123
12、l l、123L123L、123456123456l l、123456L123456L无符号整型常量无符号整型常量 123u123u、 123U123U20八进制与十六进制常量八进制与十六进制常量n以数字以数字“0 0”开始的整型常量是八进制数开始的整型常量是八进制数022022、-037-037010010和和1010大小不一样大小不一样 8 108 10因为八进制并不常用,所以此种表示法比较少见因为八进制并不常用,所以此种表示法比较少见n以以“0 x0 x”或者或者“0X0X”开始的整型常量是十六进制开始的整型常量是十六进制AFAF和和afaf用来表示十进制的用来表示十进制的1015101
13、5十六进制的形式比较常用,尤其在进行位一级的十六进制的形式比较常用,尤其在进行位一级的控制的时候控制的时候0 x120 x12、-0 x1F, -0 x1f-0 x1F, -0 x1f21浮点型常量浮点型常量浮点型常量浮点型常量默认默认doubledouble型型十进制小数形式十进制小数形式 123.45123.45、456.78456.78指数形式指数形式 1.2e-21.2e-2、4.5e34.5e3单精度实型常量单精度实型常量 123.45f123.45f、 456.78F456.78F、1e-2f1e-2f、4.5e3F4.5e3F长双精度型常量长双精度型常量 123.45l123.4
14、5l、 456.78L456.78L、1e-2l1e-2l、4.5e3L4.5e3L22字符常量字符常量n字符常量的表示方法字符常量的表示方法:用单撇号括起来的一个字a,A,5,%,$ ,#单引号内只能有一个字符,除非用单引号内只能有一个字符,除非用“” n注意:注意:字符常量只能包括一个字符,如AB 是不合法的。字符常量区分大小写字母,如A和a是两个不同的字符常量撇号()是定界符,而不属于字符常量的一部分。如couta;输出的是一个字母“a”,而不是3个字符“a ”。23字符常量字符常量-转义字符转义字符nC+还允许用一种特殊形式的字符常量,就是以 “”开头的字符序列。n例如,n代表一个“换
15、行”符。 “coutn; ” 将输出一个换行,其作用与“coutendl; ” 相同。n这种“控制字符”,在屏幕上是不能显示的。在程序中也无法用一个一般形式的字符表示,只能采用特殊形式来表示。 24字符常量字符常量-转义字符转义字符25字符常量字符常量-转义字符转义字符n转义字符虽然包含转义字符虽然包含2个或多个字符,但它只代个或多个字符,但它只代表一个字符。表一个字符。编译系统在见到字符编译系统在见到字符“”时,会时,会接着找它后面的字符,把它处理成一个字符,接着找它后面的字符,把它处理成一个字符,在内存中只占一个字节。在内存中只占一个字节。 26字符常量字符常量-转义字符转义字符n典型转义
16、字符典型转义字符 :n换行换行 b 退格退格 t 下一个制表符(下一个制表符(tab)位置)位置ncout“c:tctc”; 输出输出 c:tctc coutI say Thank you!n;输出: I say Thank you!n可以用转义字符表示任一一个可以用转义字符表示任一一个ASCII字符字符 ddd (八进制)八进制) xhh (十六进制)(十六进制)n101 x41 x61 141 27#includevoid main(void) char c1,c2,c3,c4; char n1,n2; c1=a;/字符常量字符常量 c2=97;/十进制十进制 c3=x61;/转义字符转义
17、字符 c4=0141;/八进制八进制 等价于等价于c4=141 coutc1=c1tc2=c2endl; coutc3=c3tc4=c4endl; n1=n; /转义字符:回车转义字符:回车 n2=t; /转义字符:下一个输出区转义字符:下一个输出区(Tab) cout使用转义字符使用转义字符n; coutc1=c1n2c2=c2n1; coutc3=c3n2c4=c4n1;输出:输出:c1=a c2=a c3=a c4=a使用转义字符使用转义字符c1=a c2=a c3=a c4=a28字符串字符串(String)常量常量n用双引号括住的由0个或多个字符组成的字符序列I am a strin
18、g表示空字符串转义字符也可以在字符串中使用引号只作为字符串开始和结束的标志C+语言内部用0表示字符串的结束除注释外,是唯一可以出现中文的地方nx和x是不同的n里定义了一系列专门的字符串处理函数29字符串字符串(String)常量常量 字符串常量abc在内存中占4个字节编译系统会在字符串最后自动加一个0作为字符串结束标志。但0并不是字符串的一部分,它只作为字符串的结束标志。如 coutabcendl; 输出3个字符abc,而不包括0。30符号常量符号常量n为了编程和阅读的方便,在为了编程和阅读的方便,在C+程序设计程序设计中,常用一个符号名代表一个常量,称为中,常用一个符号名代表一个常量,称为符
19、号常量,即以标识符形式出现的常量符号常量,即以标识符形式出现的常量n#define 标识符标识符 字符串字符串不是语句,而是一种编译预处理命令不是语句,而是一种编译预处理命令#include #define PI 3.14159#define R 5.3main()coutarea = PI * R * Rendl;coutcircumference = “ 2 * PI * R endl;31使用符号常量的好处使用符号常量的好处n含义清楚,增强可读性含义清楚,增强可读性n在需要改变一个常量时能做到在需要改变一个常量时能做到“一一改全改改全改”。 #include #define PI 3.1
20、4159#define R 5.3main()coutarea = PI * R * Rendl;coutcircumference = “ 2 * PI * R endl;32const常量常量n用用const修饰定义的变量为常量修饰定义的变量为常量const float pi = 3.1415926; nconst常量只能在定义时赋值,常量只能在定义时赋值,不能不能改变其值改变其值#include main()const float pi = 3.1415926; const float r = 5.3; coutarea = pi * r * rendl;coutcircumferenc
21、e = 2 * pi * r endl;33const常量常量nconst常量和常量和符号符号常量,都可以用来表示一个永常量,都可以用来表示一个永远不会改变的数,区别:远不会改变的数,区别:const常量内存中有以它命名的存储单元,内常量内存中有以它命名的存储单元,内存中不存在存中不存在符号符号常量命名的存储单元常量命名的存储单元const常量有数据类型,符号常量没有常量有数据类型,符号常量没有编译器对编译器对const常量做类型检查,对符号常量常量做类型检查,对符号常量做字符串替换做字符串替换程序解析程序解析求华氏温度 100F 对应的摄氏温度。摄氏温度 C=(5/9)(F-32) #inc
22、lude int main(void) int celsius, fahr; /定义变量定义变量 fahr = 100; /变量使用变量使用 celsius = 5 * (fahr - 32) / 9; cout “fahr =” fahr “ celsius =”celsius; /输出结果输出结果 return 0; 输出输出: :fahr =fahr =100100 celsius = celsius = 373735变量变量n变量的属性变量的属性n变量名变量名n变量类型变量类型n变量的值变量的值n变量的存储单元变量的存储单元地址地址n变量的类型决定了变量的类型决定了n占用内存空间大小占
23、用内存空间大小n内存中能够存放的类型数据内存中能够存放的类型数据n数据存放形式数据存放形式n合法的取值范围合法的取值范围n可参与的运算种类可参与的运算种类36变量变量 在程序运行期间其值可以改变的量称为在程序运行期间其值可以改变的量称为变量变量。一个变量应该有一个一个变量应该有一个名字名字,并在内存中占据,并在内存中占据一定的一定的存储单元存储单元,在该存储单元中存放,在该存储单元中存放变量变量的值的值。请注意区分变量名和变量值这两个不。请注意区分变量名和变量值这两个不同的概念,同的概念,37变量声明变量声明n使用变量的基本原则使用变量的基本原则变量必须先定义,后使用变量必须先定义,后使用所有
24、变量必须在使用前定义、赋初值所有变量必须在使用前定义、赋初值n声明的顺序无关紧要声明的顺序无关紧要n一条声明语句可声明若干个同类型的变量一条声明语句可声明若干个同类型的变量 int i,j,k; int i,j,k;n声明变量,是初始化变量的最好时机声明变量,是初始化变量的最好时机不被初始化的变量,其值为危险的随机数不被初始化的变量,其值为危险的随机数charchar esc = a; esc = a;intint i = 1,sum = 0; i = 1,sum = 0;floatfloat eps = 1.0e-5; eps = 1.0e-5;变量的定义与使用变量的定义与使用变量必须先变量
25、必须先定义定义,后,后使用使用。#include int main(void) int celsius, fahr; fahr = 100; celsius = 5 * (fahr - 32) / 9; cout “fahr =” fahr “ celsius =”celsius; return 0;n应该先赋值,后引用应该先赋值,后引用39标识符命名标识符命名(变量名规则变量名规则)n由英文字母、数字和下划线组成,大小写敏感由英文字母、数字和下划线组成,大小写敏感n不可以不可以是数字开头是数字开头n直观,见名知意,便于记忆和阅读直观,见名知意,便于记忆和阅读最好使用英文单词或其组合最好使用英
26、文单词或其组合切忌使用汉语拼音切忌使用汉语拼音 n下划线和大小写通常用来增强可读性下划线和大小写通常用来增强可读性variable_name UnixVariableName, variableName Windows40n在在C+中,大写字母和小写字母被认为是两个不同中,大写字母和小写字母被认为是两个不同的字符。因此,的字符。因此,sum和和SUM是两个不同的变量名。是两个不同的变量名。n不允许使用关键字作为标识符的名字不允许使用关键字作为标识符的名字 int, float, for, while, if等等n某些功能的变量采用习惯命名,如:某些功能的变量采用习惯命名,如:for语句所采语句
27、所采用的循环变量习惯用用的循环变量习惯用i, j, k标识符命名标识符命名( (变量名规则变量名规则) )41合法的变量名:sum, average, total, day, month, Student_name, tan, BASIC, li_ling不合法的标识符和变量名:M.D.John, $123, #33, 3G64, Ling li, C+, Zhang-ling, U.S.A.标识符命名标识符命名( (变量名规则变量名规则) )42使用变量要注意:使用变量要注意:n不要对变量所占的内存空间字节数想当然不要对变量所占的内存空间字节数想当然用用sizeof获得变量或者数据类型的长度
28、获得变量或者数据类型的长度#include main()printf(Data type Number of bytesn);printf(- -n);printf(char %dn, sizeof(char);printf(int %dn, sizeof(int);printf(short int %dn, sizeof(short);printf(long int %dn, sizeof(long);printf(float %dn, sizeof(float);printf(double %dn, sizeof(double);43由于由于char在内存中的形式与整型数据相同,所以,在内
29、存中的形式与整型数据相同,所以,可以直接用其整可以直接用其整型值给变量赋值。型值给变量赋值。以下的赋值形式均是等同的。以下的赋值形式均是等同的。grade=A; grade=65 ; grade=0 x41; grade=0101;#includevoid main(void) char a,b; a=A; /输入输入ASCII码码 b=65; /输入十进制数输入十进制数 couta=aendl; coutb=bendl;输出:输出:a=Ab=An即在内存中的表示均是相同即在内存中的表示均是相同的的0100000144请问请问: 1+1=? #include main() char ch ;c
30、h = 1 + 1 ; cout ch=ch (int)chendl;输出:输出:ch=b 9845char型与型与int型之间的关系型之间的关系 n小写字母转换为大写字母小写字母转换为大写字母 #include main()char ch = b; ch = b - 32; printf(%c, %dn, ch, ch);#include main()char ch = b; ch = b - (a - A) ; printf(%c, %dn, ch, ch);46char型与型与int型之间的关系型之间的关系 n小写字母转换为大写字母小写字母转换为大写字母 #include main()c
31、har ch = b; ch = b - 32; cout ch (int)chendl;#include main()char ch = b; ch = b - (a - A) ; cout ch (int)chendl;47#includevoid main(void)int int10,int8,int16; /定义定义3个整型变量个整型变量int10=10;/默认为十进制默认为十进制int8=010;/八进制八进制int16=0 x10;/十六进制十六进制coutint10=int10endl;coutint8=int8endl;coutint16=int16endl;输出输出int1
32、0=10int8=8int16=1648#includevoid main(void)float a, b;double c, d;a=0.01;b=3.45678e-2;c=3.45678e-2;d=9.7654e-5;couta=atb=bendl;coutc=ctd=dendl;a=0.01 b=0.0345678c=0.0345678 d=9.7654e-005Press any key to continue492.3 C+运算符运算符n算术运算符算术运算符 +(加加)-(减减) *(乘乘) /(除除) %(整除求余整除求余)+(自加自加) -(自减自减)n关系运算符关系运算符 (大
33、于大于)(小于小于) (等于等于)(大于或等于大于或等于)(小于或等于小于或等于)!(不等于不等于)n逻辑运算符逻辑运算符 (逻辑与逻辑与) |(逻辑或逻辑或) !(逻辑非逻辑非)n赋值运算符赋值运算符(及其扩展赋值运算符及其扩展赋值运算符)n条件运算符条件运算符 (?:) n逗号运算符逗号运算符(,)502.3 C+运算符运算符n位运算符位运算符 (按位右移按位右移) (按位与按位与) |(按位或按位或) (按位异或按位异或) (按位取反按位取反)n指针运算符指针运算符 (*)n引用运算符和地址运算符引用运算符和地址运算符 ()n求字节数运算符()求字节数运算符()n强制类型转换运算符(强制
34、类型转换运算符( (类型类型) 或类型或类型( ))n 成员运算符成员运算符 (.)n 指向成员的运算符指向成员的运算符 (-)n 下标运算符下标运算符 ( )n 其他其他 (如函数调用运算符()(如函数调用运算符()51优先级和结合性优先级和结合性n根据参与运算的操作数的数量,可分为单目运算根据参与运算的操作数的数量,可分为单目运算符、双目运算符、三目运算符符、双目运算符、三目运算符n左结合左结合:同一优先级的运算符进行混合运算时,:同一优先级的运算符进行混合运算时,按从左向右的顺序进行计算,即运算符的结合性按从左向右的顺序进行计算,即运算符的结合性为左结合。为左结合。右结合类似右结合类似n
35、通常,单目运算符的优先级高于双目运算符;位通常,单目运算符的优先级高于双目运算符;位运算符的优先级高于逻辑运算符运算符的优先级高于逻辑运算符n参见参见C+运算符优先级及结合性列表运算符优先级及结合性列表522.4算术运算符算术运算符 及算术表达式及算术表达式n+,-,*,/加、减、乘、除运算加、减、乘、除运算四则混合运算中,先算乘除,后算加减,四则混合运算中,先算乘除,后算加减,相同优先级按从左向右的顺序计算,相同优先级按从左向右的顺序计算,左结合左结合n-,+取负值(正值)运算符,右结合取负值(正值)运算符,右结合n%取模运算(求余运算)取模运算(求余运算)%两侧应为整型数据两侧应为整型数据
36、7%4=3n注:操作数类型影响算术运算的结果注:操作数类型影响算术运算的结果6/46.0/4n注:注:C语言表达式与数学表达式的区别语言表达式与数学表达式的区别53算术运算符算术运算符 n注意:两个整数相除的结果为整数,如5/3的结果值为1,舍去小数部分。如果除数或被除数中有一个为负值,则舍入的方向是不固定的。 例如,-5/3在有的C+系统上得到结果-1,有的C+系统则给出结果-2。多数编译系统(VC+6.0 )采取“向零取整向零取整”的方法,即5/3的值等于1,-5/3的值等于-1,取整后向零靠拢。 n如果参加+, -, *, / 运算的两个数中有一个数为float型数据,则运算的结果是do
37、uble型,因为C+在运算时对所有float型数据都按double型数据处理54用算术运算符和括号将运算对象(也称操作数)连用算术运算符和括号将运算对象(也称操作数)连接起来的、符合接起来的、符合C+语法规则的式子,称语法规则的式子,称C+算术算术表达式表达式。运算对象包括常量、变量、函数等。例:b+a*b/c-1.5+aC+语言规定了运算符的优先级和结合性。在求解表达式时,先按运算符的优先级别高低次序执行,例如先乘除后加减。如有表达式a-b*c,b的左侧为减号,右侧为乘号,而乘号优先于减号,因此,相当于a-(b*c)。如果在一个运算对象两侧的运算符的优先级别相同,如a-b+c,则按规定的“结
38、合方向结合方向”处理。算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性55C+规定了各种运算符的结合方向(结合性),算术运算符的结合方向为“自左至右”,即先左后右,因此计算a-b+c a-b+c ,b先与减号结合,执行a-b的运算,再执行加c的运算。“自左至右的结合方向”又称“左结合性”,即运算对象先与左面的运算符结合。关于“结合性”的概念在其他一些高级语言中是没有的,是C和C+的特点之一,希望能弄清楚。 算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性56函数名函数名功功 能能函数名函数名功功 能能sqrt(x)计算计算x的平方根,的平方根,x应大应大
39、于等于于等于0 exp(x)计算计算ex的值的值fabs(x)计算计算x的绝对值的绝对值pow(x,y) 计算计算xy的值的值log(x)计算计算lnx的值的值sin(x)计算计算sinx的值,的值,x为弧为弧度值度值log10(x) 计算计算lgx的值的值cos(x)计算计算cosx的值,的值,x为弧为弧度值度值常用的标准数学函数常用的标准数学函数 math.h57在表达式中常遇到不同类型数据之间进行运算,如:10+a+1.5-8765.1234*b在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则按图所示表达式中各类数值型数据间的混合运算表达式中各类数值型数据间的混合
40、运算58假设已指定为整型变量,为float变量,为double型变量,为long型,有下面表达式:10+a+i*f-d/e运算次序为: 进行10+a的运算,先将转换成整数97,运算结果为107。进行i*f的运算。先将i与f都转换成double型,运算结果为double型。整数107与i*f的积相加。先将整数107转换成双精度数(小数点后加若干个0,即107.00000),结果为double型。将变量e转换成double型,d/e结果为double型。将10+a+i*f的结果与d/e的商相减,结果为double型。上述的类型转换是由系统自动进行的类型转换是由系统自动进行的。表达式中各类数值型数据
41、间的混合运算表达式中各类数值型数据间的混合运算59 增一和减一增一和减一( (自增和自减自增和自减) )运算符运算符nn+,n-,+n,-n+让参与运算的变量加让参与运算的变量加1,-让参与运算的变量减让参与运算的变量减1,操作数只能是变量操作数只能是变量 5+或(或(a+b)+错错作为后缀运算符时,先取作为后缀运算符时,先取n的值,然后加的值,然后加/减减1+和和-作为后缀运算符,作为后缀运算符,结合方向是结合方向是“自左至右自左至右”作为前缀运算符时,先加作为前缀运算符时,先加/减减1,然后取,然后取n的值的值+和和-作为前缀运算符,作为前缀运算符,结合方向是结合方向是“自右至左自右至左”
42、nm = n+; 等价于等价于m=n;n=n+1;nm = +n; 等价于等价于n=n+1; m=n;i=3;i=3;couti+; 输出输出3i=3;cout+i; 输出输出460n良好的程序设计风格提倡:在一行语句中,一良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次加个变量只能出现一次加1或者减或者减1运算运算过多的加过多的加1和减和减1运算混合,不仅可读性差,而且因运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不为编译器实现的方法不同,导致不同编译器产生不同的运行结果同的运行结果Sum =(+a) + (a+); /*晦涩,可读性差晦涩,可读性差*/
43、增一和减一增一和减一( (自增和自减自增和自减) )运算符运算符61n在表达式中可以利用强制类型转换运算符将一个表达式表达式转换成所需类型 前面用到的:cout(int)ch;(ch类型未变)n强制类型转换的一般形式为:(类型名) (表达式)如:(double) (将a转换成double类型) (int) (x+y) (将x+y的值转换成整型) (float) (5%3) (将5%3的值转换成float型)()含义?含义?强制类型转换运算符强制类型转换运算符62在C+还增加了以下形式: 类型名(表达式)如int(x) 或 int(x+y)强制类型转换运算符强制类型转换运算符63有两种类型转换隐
44、式类型转换隐式类型转换(自动类型转换)(自动类型转换):在运算时不必用户指定,系统自动进行的类型转换,如:若f为float型,i为int型,f+i+3+6.5。强制类型转换强制类型转换,当自动类型转换不能实现目的时,可以用强制类型转换。如:若x为float型,”x%3”不合法,必须用“(int)x%3”强制转换。及前面例子中的 cout(int)ch;强制类型转换运算符强制类型转换运算符642.5 2.5 赋值运算符和赋值表达式赋值运算符和赋值表达式n赋值符号“”就是赋值运算符,它的作用是将一个数据赋给一个变量。n赋值运算符结合方式:赋值运算符结合方式:自右而左自右而左n由赋值运算符将一个变量
45、和一个表达式连接起来的式子称为“赋值表达式” 形式为: 如:b=a+3*5;65赋值运算符和赋值表达式赋值运算符和赋值表达式赋值表达式中的“表达式”可以是赋值表达式a=(b=5) 相当于 a=b=5(右结合性右结合性)a=b=c=5 (赋值表达式值为5,a,b,c值均为5)a=5+(c=6)(表达式值为11,a值为11,c值为6)a=(b=4)+(c=6) (表达式值为10,a值为10,b为4,c等于6)a=(b=10)/(c=2) (表达式值为5,a等于5,b等于10,c等于2)66复合赋值运算符复合赋值运算符n在赋值符“”之前加上其他运算符,可以构成复合的运算符。如果在“”前加一个“”运算
46、符就成了复合运算符“” a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*(y+8) 不是x=x*y+8 x%=3 等价于 x=x%367复合赋值运算符复合赋值运算符理解: a+= b (其中a为变量,b为表达式) a+= b (将有下划线的“a+”移到“=”右侧) a = a + b (在“=”左侧补上变量名a) 注意,如果如果b是包含若干项的表达式,则相当于它是包含若干项的表达式,则相当于它有括号有括号。如 x %= y+3 x %= (y+3) x = x%(y+3)(不要错认为x=x%y+3)68复合赋值运算符复合赋值运算符凡是二元(二目)运算符,都可以与赋值符一起组合成复合
47、赋值符。C+可以使用以下几种复合赋值运算符:,*,&,|其中后5种是有关位运算的。C+之所以采用这种复合运算符,一是为了简化程序,使程序精炼,二是为了提高编译效率(这样写法与“逆波兰”式一致,有利于编译,能产生质量较高的目标代码)。 69bmw=2002bmw=2002n=左边必须是变量名。n若“ = ” 两边变量类型不同,在赋值时要进行类型转换。n转换原则:根据左边变量的类型转换。赋值过程中的类型转换赋值过程中的类型转换70赋值过程中的类型转换赋值过程中的类型转换如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时会自动进行类型转换。(1) 将浮点型数据(包括单、双精度)
48、赋给整型变量时,舍弃其小数部分。Int i=3.5 i的值为3(2) 将整型数据赋给浮点型变量时,数值不变,但以指数形式存储到变量中。float f=23 23转换成浮点数存f中(3) 将一个double型数据赋给float变量时,要注意数值范围不能溢出。 71赋值过程中的类型转换赋值过程中的类型转换(4) 将signed(有符号)型数据赋给长度相同的unsigned(无符号)型变量,将存储单元内容原样照搬(连原有的符号位也作为数值一起传送)。#include int main( ) unsigned short a; short int b=-1; a=b; couta=aendl; ret
49、urn 0;运行结果为运行结果为a=a=655356553572赋值过程中的类型转换赋值过程中的类型转换赋给b的值是-1,怎么会得到65535呢?请看图所示的赋值情况。 -1的补码形式为1111111111111111(即全部16个二进制位均为1),将它传送给a,而a是无符号型变量,16个位全1是十进制的65535。 73赋值过程中的类型转换赋值过程中的类型转换(5) 将unsigned(无符号) 型数据赋给长度相同signed(有符号)的型变量,将存储单元内容原样照搬.#include int main( ) unsigned short a=65535; short int b; b=a;
50、 coutb=bendl; return 0;运行结果为运行结果为b=-1b=-1741 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1short a=-1;unsigned char b; b=a;b=255b=255short a=-1;char b;b=a;b=-1b=-1b ba a1 1 1 1 1 1 1 1 (6)整型的多字节少字节赋值,低位原样照搬赋值过程中的类型转换赋值过程中的类型转换75赋值过程中的类型转换赋值过程中的类型转换另例: 将一个int、short或long型数据赋给一个char型变量,只将其低8位原封不动地送到char型变量(发生截断)。例如shor
51、t i=289;char c;c=i; /将一个short型数据赋给一个char型变量赋值情况见图。coutc;输出:!输出:! 对应的对应的ASCII码为码为3376(7)整型的少字节多字节赋值 unsignedunsigned数据在向多字节扩展时,总是数据在向多字节扩展时,总是高位补高位补0 00 0 0 0 0 0 0 0 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1unsigned char a=255; short b;b=a;输出:输出:255255a ab b赋值过程中的类型转换赋值过程中的类型转换771 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
52、1 1 1 1 1 1 1 1有符号型,符号扩展有符号型,符号扩展char a=-1;char a=-1;short b;short b;b=a;b=a;多字节如果是多字节如果是signedsigned,转换后,数据的符号不变。,转换后,数据的符号不变。a ab b(8)整型的少字节多字节赋值 signedsigned数据在向多字节扩展时,数据在向多字节扩展时,则转换后扩展少字节则转换后扩展少字节的最高位。的最高位。赋值过程中的类型转换赋值过程中的类型转换b=-1b=-1780 0 0 0 0 0 0 0 0 1 1 1 1 1 1 10 1 1 1 1 1 1 1有符号型,符号扩展有符号型,
53、符号扩展char a=127;char a=127;short b;short b;b=a;b=a;多字节如果是多字节如果是signedsigned,转换后,数据的符号不变。,转换后,数据的符号不变。a ab b(8)整型的少字节多字节赋值 signedsigned数据在向多字节扩展时,数据在向多字节扩展时,则转换后扩展少字节则转换后扩展少字节的最高位。的最高位。赋值过程中的类型转换赋值过程中的类型转换b=127b=127791 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1有符号型,符号扩展有符号型,符号扩展char a=-1;char a=-1;u
54、nsigned short b;unsigned short b;b=a;b=a;a ab b(8)整型的少字节多字节赋值 signedsigned数据在向多字节扩展时,数据在向多字节扩展时,则转换后扩展少字节则转换后扩展少字节的最高位。的最高位。赋值过程中的类型转换赋值过程中的类型转换b=65535b=65535802.62.6逗号运算符与逗号表达式逗号运算符与逗号表达式n表达式表达式1, 表达式表达式2, ., 表达式表达式nn逗号表达式的求解过程是:先求解表达式逗号表达式的求解过程是:先求解表达式1,再求,再求解表达式解表达式2。etc,整个整个逗号表达式的值是表达逗号表达式的值是表达式
55、式n的值。的值。n逗号运算符优先级最低,结合性为自左向右逗号运算符优先级最低,结合性为自左向右 int x=50,y=50; y=(x=x-5,x/5); 计算后的计算后的y值为值为 9 y=(a=3*5,a*4),a+5) 计算后的计算后的y值为值为 20 y=(a=3*5,a*4),a+5 计算后的计算后的y值为值为 60 812.62.6逗号运算符与逗号表达式逗号运算符与逗号表达式n逗号表达式无非是把若干个表达式逗号表达式无非是把若干个表达式“串联串联”起来。起来。n在许多情况下,在许多情况下,使用逗号表达式的目的只是想分别使用逗号表达式的目的只是想分别得到各个表达式的值得到各个表达式的
56、值,而并非一定需要得到和使用,而并非一定需要得到和使用整个逗号表达式的值整个逗号表达式的值n主要用在循环语句中,同时对多个变量赋初值等主要用在循环语句中,同时对多个变量赋初值等 for (i = 0 , j = 0; i j; i+, j+)822.7 2.7 逻辑常量和逻辑变量逻辑常量和逻辑变量C+增加了逻辑型数据。逻辑型常量只有两个:false(假)和true(真)。逻辑型变量要用类型标识符bool来定义,它的值只能是true和false之一。 bool found,flag=false; /定义逻辑变量found和flag /并使flag的初值为falsefound=true; /将逻辑
57、常量true赋给逻辑变量found由于逻辑变量是用关键字bool来定义的,因此又称为布尔变量布尔变量。逻辑型常量又称为布尔常布尔常量量。所谓逻辑型,就是布尔型。832.7 2.7 逻辑常量和逻辑变量逻辑常量和逻辑变量在编译系统处理逻辑型数据时,将false处理为0,将true处理为1。逻辑型变量在内存中占1个字节,用来存放0或1.因此,逻辑型数据可以与数值型数据进行算术运算。如果将一个非零的整数赋给逻辑型变量,则按“真”处理,如flag=123; /赋值后flag的值为truecout,=,=,=,!=大于,大于等于,小于,小于等于,等于,不等大于,大于等于,小于,小于等于,等于,不等于于关系
58、运算符运算出的结果为关系运算符运算出的结果为0和非和非00,表示假,即该关系不成立,表示假,即该关系不成立非非0,表示真,即该关系成立,表示真,即该关系成立绝大多数编译器,关系运算得到的非绝大多数编译器,关系运算得到的非0结果为结果为12.82.8关系运算符与关系表达式关系运算符与关系表达式x = 15 =比较 x 和 15 的大小比较的结果:真 假当 x 取值9.5时, x = 15的结果是:?当 x 取值21.3时, x = 15的结果是:? 关系运算 比较运算,比较两个操作数n关系运算符x y x y x = y x != yn关系表达式:用关系运算符将2个表达式连接起来的式子。如:x
59、= 1n区分区分= = 和和=a=5; a=5; 赋值运算赋值运算 a= =5a= =5;判断是否相等;判断是否相等运用关系表达式运用关系表达式表示比较的数学式 C+关系表达式x10 x10 x10 x = 10 x = 10 x = 10 x = 10 x != x != 1010 x = 10 x = 10用关系表达式描述条件用关系表达式描述条件判断判断 x x 是否为负数是否为负数x 0 x 0判断判断 x x 是否不为零是否不为零x != 0 x != 0例例 应避免对应避免对实数实数作相等或不等的判断作相等或不等的判断如如 1.0/3.01.0/3.0* *3.0=1.0 3.0=1
60、.0 结果为结果为 0 0可改写为:可改写为:fabs(1.0/3.0fabs(1.0/3.0* *3.0-1.0)1e-63.0-1.0),=,=,=,!=左结合左结合 = = 的优先级高于的优先级高于= = != = !=算术运算符的优先级高于关系运算符的优先级算术运算符的优先级高于关系运算符的优先级关系运算符的优先级高于赋值运算符的优先级关系运算符的优先级高于赋值运算符的优先级 ca+b 等效于等效于 c(a+b) ab=c 等效于等效于 (ab)=c a=bc 等效于等效于 a=(bc 等效于等效于 a=(bc)88设设a=2 b=3 c=1a=2 b=3 c=1a2 a2 0 0ab+c ab+c 0 0a=2 a=2 1 1(ab)=c (ab dd=ab d的值为的值为0 0f=abc ff=abc f为为0 0a=a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 金东区海棠东路武义江大桥改造工程桥梁荷载试验检测招标文件
- 信阳市2026届高三第二次联考语文试卷含解析
- 教育研究方法基础(第4版)课件 第7-12章 教育统计与教育测验-教育研究成果表述
- 【海口市L大酒店餐饮部员工满意度的影响因素研究11000字(论文)】
- 26年基础护理服务等级认定课件
- 【2026】软件资格考试信息处理技术员(基础知识、应用技术)合卷(初级)备考要点精析年
- 26年银发哮喘持续状态案例课件
- 26年银发疾病话题规避技巧课件
- GEO优化系统测评:2026年品牌提及率提升TOP3平台深度解析与选型指南
- 安全注射培训
- 网约车停运损失费起诉状模板
- 门面装修合同
- 临床疗效总评量表(CGI)
- 抑郁症临床路径(2012年版)
- 泵-容积泵的特点及应用
- 中西方沟通的差异课件
- 扫描电子显微镜(SEM)
- (财务内部审计)审计底稿程序表
- 【北师大版】四年级数学下册全册23套试卷(解析版)
- 2023年国家义务教育质量监测工作应急预案
- 高考语文思辨类作文总体写作指导-高考语文思辨类作文写作全面指导
评论
0/150
提交评论