收藏 分销(赏)

谭浩强版《C++程序设计》-第2章n.pptx

上传人:w****g 文档编号:4173680 上传时间:2024-08-12 格式:PPTX 页数:63 大小:349.02KB
下载 相关 举报
谭浩强版《C++程序设计》-第2章n.pptx_第1页
第1页 / 共63页
谭浩强版《C++程序设计》-第2章n.pptx_第2页
第2页 / 共63页
谭浩强版《C++程序设计》-第2章n.pptx_第3页
第3页 / 共63页
谭浩强版《C++程序设计》-第2章n.pptx_第4页
第4页 / 共63页
谭浩强版《C++程序设计》-第2章n.pptx_第5页
第5页 / 共63页
点击查看更多>>
资源描述

1、第第2章章 数据类型与表达式数据类型与表达式(数据对象定义与处理)(数据对象定义与处理)2.1 C+的数据类型的数据类型2.2 常量常量2.3 变量变量2.4 C+的运算符的运算符2.5 算术运算符与算术表达式算术运算符与算术表达式2.6 赋值运算符与赋值表达式赋值运算符与赋值表达式2.7 逗号运算符与逗号表达式逗号运算符与逗号表达式(1)处理什么?)处理什么?处理对象的结构与处理对象的结构与定义(数据,字符,定义(数据,字符,字符串)。字符串)。(2)如何处理?)如何处理?算术运算、关系算术运算、关系(比较)运算、逻(比较)运算、逻辑运算等的实现。辑运算等的实现。q计算机处理的对象是数据计算

2、机处理的对象是数据,而数据是有类型的而数据是有类型的(例如整数、浮点数、字符等形式)。(例如整数、浮点数、字符等形式)。数据结构指数据结构指的是数据的组织形式的是数据的组织形式。例如,数组就是一种数据结。例如,数组就是一种数据结构。不同的数据类型,其处理的算法一般不同,其构。不同的数据类型,其处理的算法一般不同,其所占的计算机内存单元大小也不同。所占的计算机内存单元大小也不同。C+可以使用可以使用的的数据类型数据类型如下:如下:2.1 C+的数据类型的数据类型数据类型数据类型基本类型基本类型整型整型短整型短整型(short int)整型整型(int)长整型长整型(long int)字符型字符型

3、(char)浮点型浮点型 单精度型单精度型(float)双精度型双精度型(double)长双精度型长双精度型(long double)布尔型布尔型(bool)逻辑型逻辑型构造类型构造类型枚举类型枚举类型(enum)数组类型数组类型结构体类型结构体类型(struct)共用体类型共用体类型(union)类类型类类型(class)指针类型指针类型引用类型引用类型空类型空类型(void)无值型无值型qC+的数据包括常量与变量,常量与变量都具有的数据包括常量与变量,常量与变量都具有类型。类型。q由以上这些数据类型还可以构成更复杂的数据结由以上这些数据类型还可以构成更复杂的数据结构。例如利用指针和结构体类

4、型可以构成表、树、构。例如利用指针和结构体类型可以构成表、树、栈等复杂的数据结构。栈等复杂的数据结构。qC+并没有统一规定并没有统一规定各类数据的精度、数值范围各类数据的精度、数值范围和在内存中所占的字节数和在内存中所占的字节数,各,各C+编译系统根据自编译系统根据自己的情况作出安排。己的情况作出安排。书书中表中表2.1列出了列出了Visual C+数值型和字符型数据数值型和字符型数据的情况的情况。说明说明:(1)整型数据分为长整型整型数据分为长整型(long int)、一般整型一般整型(int)和短整型和短整型(short int)。在在int前面加前面加long和和short分别表示长整型

5、和短整型。分别表示长整型和短整型。(2)整型数据的存储方式为按二进制数形式存储,整型数据的存储方式为按二进制数形式存储,例如十进制整数例如十进制整数85的二进制形式为的二进制形式为1010101,则在,则在内存中的存储形式如图内存中的存储形式如图2.1所示。所示。图图2.1(3)在整型符号在整型符号int和字符型符号和字符型符号char的前面的前面,可以可以加修饰符加修饰符signed(表示表示“有符号有符号”)或或unsigned(表示表示“无符号无符号”)。如果指定为。如果指定为signed,则数值以则数值以补码形补码形式式存放,存储单元中的最高位存放,存储单元中的最高位(bit)用来表示

6、数值用来表示数值的符号的符号。如果指定为。如果指定为unsigned,则数值没有符号,则数值没有符号,全部二进制位都用来表示数值本身全部二进制位都用来表示数值本身。例如短整型数。例如短整型数据占两个字节据占两个字节,见图,见图2.2。图图2.2有符号时,能存储的最大值为有符号时,能存储的最大值为215-1,即,即32767,最,最小值为小值为-32768。无符号时,能存储的最大值为。无符号时,能存储的最大值为216-1,即,即65535,最小值为,最小值为0。有些数据是没有负值的,。有些数据是没有负值的,可以使用可以使用unsigned,它存储正数的范围比用它存储正数的范围比用signed时要

7、大一倍。时要大一倍。(4)浮点型浮点型(又称实型又称实型)数据分为数据分为单精度单精度(float)、双双精度精度(double)和长双精度和长双精度(long double)3种,在种,在Visual C+6.0中,对中,对float提供提供6位有效数字,对位有效数字,对double提供提供15位有效数字,并且位有效数字,并且float和和double的数的数值范围不同。对值范围不同。对float分配分配4个字节,对个字节,对double和和long double分配分配8个字节。个字节。常量的值是不能改变的常量的值是不能改变的。常量包括两大类,即。常量包括两大类,即数值数值型常量型常量(即

8、常数即常数)和和字符型常量字符型常量。如。如12,0,-3为整为整型常量,型常量,4.6,-1.23为实型常量,包含在两个为实型常量,包含在两个单撇单撇号号之间的字符为字符常量,如之间的字符为字符常量,如a,x。这种这种从字面形式即可识别的常量称为从字面形式即可识别的常量称为“字面常量字面常量”或或“直接常量直接常量”。2.2 常量常量 2.2.1 什么是常量什么是常量数值常量就是通常所说的数值常量就是通常所说的常数常数。在。在C+中,数值常中,数值常量是区分类型的,从字面形式即可识别其类型。量是区分类型的,从字面形式即可识别其类型。1.整型常量整型常量(整数)的类型整数)的类型整型数据可分为

9、整型数据可分为int,short int,long int以及以及unsigned int,unsigned short,unsigned long等类别。整型常量等类别。整型常量也分为以上类别。也分为以上类别。2.2.2 数值常量数值常量一个整型常量可以用一个整型常量可以用3 3种不同的方式表示种不同的方式表示:(1)十进制整数十进制整数。如。如1357,-432,0等。在一个整型等。在一个整型常量后面加一个字母常量后面加一个字母l或或L,则认为是则认为是long int型常量。型常量。例如例如123L,421L,0L等,这往往用于函数调用中。等,这往往用于函数调用中。如果函数的形参为如果函

10、数的形参为long int,则要求实参也为则要求实参也为long int型,此时用型,此时用123作实参不行,而要用作实参不行,而要用123L作实参。作实参。(2)八进制整数八进制整数。在常数的开头加一个。在常数的开头加一个数字数字0,就表,就表示这是以八进制数形式表示的常数。如示这是以八进制数形式表示的常数。如020表示这表示这是八进制数是八进制数20,即(,即(20)8,它相当于十进制数,它相当于十进制数16。(3)十六进制整数十六进制整数。在常数的开头加一个。在常数的开头加一个数字数字0和一和一个英文字母个英文字母X(或或x),就表示这是以十六进制数形式就表示这是以十六进制数形式表示的常

11、数。如表示的常数。如0X20表示这是十六进制数表示这是十六进制数20,即,即(20)16,它相当于十进制数,它相当于十进制数32。2.浮点数的表示方法浮点数的表示方法一个浮点数可以用一个浮点数可以用两种不同的方式表示两种不同的方式表示:(1)十进制小数形式十进制小数形式。如。如21.456,-7.98等。它一般由等。它一般由整数部分和小数部分组成,可以省略其中之一整数部分和小数部分组成,可以省略其中之一(如如78.或或.06,.0),但不能二者皆省略。,但不能二者皆省略。C+编译系统编译系统把用这种形式表示的浮点数一律把用这种形式表示的浮点数一律按双精度常量处理按双精度常量处理,在内存中占在内

12、存中占8个字节。如果在实数的数字之后加字个字节。如果在实数的数字之后加字母母F或或f,表示此数为单精度浮点数表示此数为单精度浮点数,如,如1234F,-43f,占占4个字节。如果加字母个字节。如果加字母L或或l,表示此数为长双表示此数为长双精度数精度数(long double),在在Visual C+6.0中占中占8个字个字节。节。(2)指数形式指数形式(即浮点形式即浮点形式)一个浮点数可以写成指数形式,如一个浮点数可以写成指数形式,如3.14159可以表示可以表示为为0.314159101,3.14159100,31.415910-1,314.15910-2等形式。在程序中应表示为:等形式。

13、在程序中应表示为:0.314159e1,3.14159e0,31.4159e-1,314.159e-2,用用字字母母e表示其后的数是以表示其后的数是以10为底的幂为底的幂,如,如e12表示表示1012。其一般形式为其一般形式为数符数符 数字部分数字部分 指数部分指数部分a=0.314159e1;a=3.14159e0;a=31.4159e-1;a=314.159e-2;以上以上4个赋值语句中,用了不同形式的浮点数,但个赋值语句中,用了不同形式的浮点数,但其作用是相同的。其作用是相同的。在程序中不论把浮点数写成小数形式还是指数形式,在程序中不论把浮点数写成小数形式还是指数形式,在内存中都是在内存

14、中都是以指数形式以指数形式(即浮点形式即浮点形式)存储的存储的。例。例如不论在程序中写成如不论在程序中写成314.159或或314.159e0,31.4159e1,3.14159e2,0.314159e3等形式,等形式,在内存在内存中都是以规范化的指数形式存放中都是以规范化的指数形式存放,如图,如图2.3所示。所示。图图2.3数字部分必须小于数字部分必须小于1,同时,小数点后面第一个数,同时,小数点后面第一个数字必须是一个非字必须是一个非0数字,数字,例如不能是例如不能是0.0314159。因。因此此314.159和和314.159e0,31.4159e1,3.14159e2,0.314159

15、e3在内存中表示成在内存中表示成0.314159103。存储单存储单元分为两部分,一部分用来存放数字部分,一部分元分为两部分,一部分用来存放数字部分,一部分用来存放指数部分。用来存放指数部分。1.普通的字符常量普通的字符常量用用单撇号括起来的一个字符就是字符型常量单撇号括起来的一个字符就是字符型常量。如。如a,#,%,D都是合法的字符常量,都是合法的字符常量,在内存中占一个字节。在内存中占一个字节。2.2.3 字符常量字符常量2.转义字符常量转义字符常量除了以上形式的字符常量外,除了以上形式的字符常量外,C+还允许用一种特还允许用一种特殊形式的字符常量,就是殊形式的字符常量,就是以以 “”开头

16、的字符序开头的字符序列列。例如,。例如,n代表一个代表一个“换行换行”符。符。“coutn;”将输出一个换行,其作用与将输出一个换行,其作用与“coutendl;”相同。这种相同。这种“控制字符控制字符”,在屏,在屏幕上是不能显示的。在程序中也无法用一个一般形幕上是不能显示的。在程序中也无法用一个一般形式的字符表示,只能采用特殊形式来表示。式的字符表示,只能采用特殊形式来表示。常用的以常用的以“”开头的特殊字符见书中表开头的特殊字符见书中表2.2。3.字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法将一个字符常量存放到内存单元时,是将将一个字符常量存放到内存单元时,

17、是将该字符相该字符相应的应的ASCII代码代码放到存储单元中。如果字符变量放到存储单元中。如果字符变量c1的值为的值为a,c2的值为的值为b,则在变量中存放的则在变量中存放的是是a的的ASCII码码97,b 的的ASCII码码98,如图,如图2.4(a)所示,实际上在内存中是以二进制形式存放所示,实际上在内存中是以二进制形式存放的,如图的,如图2.4(b)所示。所示。图图2.4在在C+中字符型数据和整型数据之间可以通用中字符型数据和整型数据之间可以通用。一。一个字符数据可以赋给一个整型变量,反之,一个整个字符数据可以赋给一个整型变量,反之,一个整型数据也可以赋给一个字符变量。也可以对字符数型数

18、据也可以赋给一个字符变量。也可以对字符数据进行算术运算,此时相当于对它们的据进行算术运算,此时相当于对它们的ASCII码进码进行算术运算。行算术运算。例例2.1 将字符赋给整型变量。将字符赋给整型变量。#include using namespace std;int main()int i,j;/i和和j是整型变量是整型变量i=A;/将一个字符常量赋给整型变量将一个字符常量赋给整型变量ij=B;/将一个字符常量赋给整型变量将一个字符常量赋给整型变量jcouti jn;/输出整型变量输出整型变量i和和j的值,的值,return 0;执行时输出执行时输出 65 66i和和j被指定为整型变量。但在第

19、被指定为整型变量。但在第5和第和第6行中,将字行中,将字符符A和和B分别赋给分别赋给i和和j,它的作用相当于以它的作用相当于以下两个赋值语句:下两个赋值语句:i65;j66;因为因为A和和B的的ASCII码为码为65和和66。注意注意:仅在一定条件下仅在一定条件下,字符型数据和整型数据是,字符型数据和整型数据是可以通用的。因为可以通用的。因为字符数据只占一个字节,它只能字符数据只占一个字节,它只能存放存放02550255范围内的整数范围内的整数。例例2.2 字符数据与整数进行算术运算。下面程序的字符数据与整数进行算术运算。下面程序的作用是将小写字母转换为大写字母。作用是将小写字母转换为大写字母

20、。#include using namespace std;int main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;coutc1 c2endl;return 0;运行结果为运行结果为A Ba的的ASCII码为码为97,而,而A的的ASCII码为码为65,b为为98,B为为66。从从ASCII代码表中可以看到每一个小写字母比它相代码表中可以看到每一个小写字母比它相应的大写字母的应的大写字母的ASCII代码大代码大32。ASCII代码表见附录代码表见附录A4.字符串常量字符串常量用用双撇号括起来的部分就是字符串常量。双撇号括起来的部分就是字符串常量。如如a

21、bc,Hello!,a+b,Liping。abc在内存中占在内存中占4个字节个字节(而不是而不是3个字节个字节),见,见图图2.5。图图2.5编译系统会在字符串最后自动加一个编译系统会在字符串最后自动加一个00作为作为字符串结束标志字符串结束标志。但。但0并不是字符串的一部分,并不是字符串的一部分,它只作为它只作为字符串的结束标志字符串的结束标志。注意:注意:aa和和aa代表不同的含义代表不同的含义。前者占两个字节,后者占前者占两个字节,后者占1个字节。个字节。字符串常量要用字符数组来存放,见第字符串常量要用字符数组来存放,见第5章。章。请思考请思考:字符串常量字符串常量abcn包含几个字符包

22、含几个字符?不不是是5个而是个而是4个字符,其中个字符,其中“n”是一个转义字符。是一个转义字符。但它在内存中占但它在内存中占5个字节个字节(包括一个包括一个“0”字符字符)。编译系统遇到编译系统遇到“”时就会把它认作转义字符的标时就会把它认作转义字符的标志,把它和其后的字符一起作为一个转义字符。志,把它和其后的字符一起作为一个转义字符。为了编程和阅读的方便,在为了编程和阅读的方便,在C+程序设计中,程序设计中,常用常用一个符号名代表一个常量,称为符号常量一个符号名代表一个常量,称为符号常量,即以标,即以标识符形式出现的常量。识符形式出现的常量。例例2.3 符号常量的使用。符号常量的使用。#d

23、efine PRICE 30 /注意这不是语句,末尾不要加分号注意这不是语句,末尾不要加分号int main()int num,total;num=10;total=num*PRICE;couttotal=totalendl;return 0;2.2.4 符号常量符号常量注意!符号常量虽然有名字,但它不是变量注意!符号常量虽然有名字,但它不是变量。它的值在其作用域它的值在其作用域(在本例中为主函数在本例中为主函数)内是不能改内是不能改变的,也不能被赋值。如用赋值语句变的,也不能被赋值。如用赋值语句“PRICE=40;”给给PRICE赋值是错误的。赋值是错误的。使用符号使用符号常量的好处是:常量

24、的好处是:(1)含义清楚。含义清楚。(2)在需要改变一个常量时能做到在需要改变一个常量时能做到“一改全改一改全改”。在程序在程序运行期间其值可以改变的量称为变量运行期间其值可以改变的量称为变量。一个。一个变量应该有一个名字,并在内存中变量应该有一个名字,并在内存中占据一定的存储占据一定的存储单元单元,在该存储单元中存放变量的值。请注意区分,在该存储单元中存放变量的值。请注意区分变量名和变量值变量名和变量值这两个不同的概念,见图这两个不同的概念,见图2.6。图图2.6 2.3 变量变量 2.3.1 什么是变量什么是变量用来标识变量、符号常量、函数、数组、类型等实用来标识变量、符号常量、函数、数组

25、、类型等实体名字的有效字符序列称为体名字的有效字符序列称为标识符标识符(identifier)。)。变量名是标识符的一种,变量的名字必须遵循标识变量名是标识符的一种,变量的名字必须遵循标识符的符的命名规则命名规则。C+规定标识符只能由规定标识符只能由字母、数字和下划线字母、数字和下划线3种字种字符组成,且第一个字符必须为字母或下划线符组成,且第一个字符必须为字母或下划线。下面。下面列出的是合法的标识符,也是合法的变量名:列出的是合法的标识符,也是合法的变量名:sum,average,total,day,month,Student_name,tan,BASIC,li_ling下面是不合法的标识符

26、和变量名:下面是不合法的标识符和变量名:2.3.2 变量名规则变量名规则M.D.John,$123,#33,3G64,Ling li,C+,Zhang-ling,U.S.A.注意注意,在,在C+中,大写字母和小写字母被认为是两中,大写字母和小写字母被认为是两个不同的字符。个不同的字符。v一般地,变量名用小写字母表示,应注意变量名一般地,变量名用小写字母表示,应注意变量名不能与不能与C+的关键字、系统函数名和类名相同。的关键字、系统函数名和类名相同。v在国外软件开发工作中,常习惯在变量前面加一在国外软件开发工作中,常习惯在变量前面加一个字母以表示该变量的类型,如个字母以表示该变量的类型,如iCo

27、unt表示这是一表示这是一个整型变量,个整型变量,cSex表示这是一个字符型变量。表示这是一个字符型变量。vC+没有规定标识符的长度(字符个数),有的没有规定标识符的长度(字符个数),有的系统取系统取32个字符,超过的字符不被识别。个字符,超过的字符不被识别。在在C+语言中,要求对所有用到的变量语言中,要求对所有用到的变量必须必须“先定先定义,后使用义,后使用”。定义变量的一般形式是定义变量的一般形式是 变量类型变量类型 变量名表列;变量名表列;v变量名表列指的是一个或多个变量名的序列。如变量名表列指的是一个或多个变量名的序列。如float a,b,c,d,e;定义定义a,b,c,d,e为单精

28、度型变量。为单精度型变量。v可以在定义变量时指定它的初值。如可以在定义变量时指定它的初值。如 float a=83.5,b,c=64.5,d=81.2,e;/对变量对变量a,c,d指定指定了初值,了初值,b和和d未指定初值未指定初值2.3.3 定义变量定义变量vC+规定,只要在第一次使用该变量前进行定义规定,只要在第一次使用该变量前进行定义即可。即可。int a;/定义变量定义变量a(在使用在使用a之前定义之前定义)a=3;/执行语句,对执行语句,对a赋值赋值float b;/定义变量定义变量b(在使用在使用b之前定义之前定义)b=4.67;/执行语句,对执行语句,对b赋值赋值char c;/

29、定义变量定义变量c(在使用在使用c之前定义之前定义)c=A;/执行语句执行语句,对,对c赋值赋值vC+要求对变量作要求对变量作强制定义的目的强制定义的目的是:是:(1)保证程序中变量名使用的正确性保证程序中变量名使用的正确性。例如,如果在声明部分写了例如,如果在声明部分写了int student;而在执行语句中错写成而在执行语句中错写成statent。如如statent=30;在编译时检查出在编译时检查出statent未经定义,作为错误处理。未经定义,作为错误处理。输出输出“变量变量statent未经声明未经声明”的信息,便于用的信息,便于用户发现错误,避免变量名使用时出错。户发现错误,避免变

30、量名使用时出错。(2)根据确定类型,在编译时就能为其分配相应的根据确定类型,在编译时就能为其分配相应的存储单元存储单元。如指定和为。如指定和为int型,一般的编译型,一般的编译系统对其各分配系统对其各分配4个字节,并按整数方式存储数个字节,并按整数方式存储数据。据。(3)编译时,便于进行变量运算的合法性检查编译时,便于进行变量运算的合法性检查。例如,整型变量例如,整型变量a和和b,可以进行求余运算:可以进行求余运算:a%b是是“求余求余”(见(见24 节),得到节),得到a/b的余数。的余数。如果将如果将a和和b指定为实型变量,则不允许进行指定为实型变量,则不允许进行“求余求余”运算,在编译时

31、会给出有关的出错信息。运算,在编译时会给出有关的出错信息。变量初始化:变量初始化:定义变量时对它赋予一个初值。定义变量时对它赋予一个初值。初值可以是常量,也为具有确定值的表达式。如初值可以是常量,也为具有确定值的表达式。如float a,b=5.78*3.5,c=2*sin(2.0);表示定义了表示定义了a,b,c为单精度浮点型变量,对为单精度浮点型变量,对b初始化初始化为为5.78*3,对对c初始化为初始化为2*sin(2.0)。在编译连接后,从标准函数库得到正弦函数在编译连接后,从标准函数库得到正弦函数sin(2.0)的值,因此变量的值,因此变量c有确定的初值。变量有确定的初值。变量a未初

32、始化。未初始化。q如果未初始化,则该变量的初值是一个不可预测如果未初始化,则该变量的初值是一个不可预测的值的值,即随机值。,即随机值。2.3.4 为变量赋初值为变量赋初值 q初始化不是在编译阶段完成的,而是在程序运行初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋予初值的,相当于执行一个赋值时执行本函数时赋予初值的,相当于执行一个赋值语句。语句。例如,例如,int a=3;相当于以下两个语句相当于以下两个语句:int a;/指定为整型变量指定为整型变量 a=3;/赋值语句,将赋给赋值语句,将赋给 q对多个变量赋予同一初值,对多个变量赋予同一初值,必须分别指定必须分别指定。不能写成不能

33、写成float a=b=c=4.5;而应写成而应写成 float a=4.5,b=4.5,c=4.5;或或float a,b,c=4.5;a=b=c;在定义变量时,如果加上关键字在定义变量时,如果加上关键字const,则变量的值则变量的值在程序运行期间不能改变,这种变量称为在程序运行期间不能改变,这种变量称为常变量常变量(constant variable)。例如,例如,const int a=3;/用用const来声明这种变量的值不能改变,来声明这种变量的值不能改变,指定其值始终为指定其值始终为3v在定义常变量时必须同时对它初始化在定义常变量时必须同时对它初始化(即指定其即指定其值值),此后

34、它的值不能再改变。常变量不能出现在,此后它的值不能再改变。常变量不能出现在赋值号的左边。例如上面一行不能写成赋值号的左边。例如上面一行不能写成const int a;a=3;/常变量不能被赋值常变量不能被赋值2.3.5 常变量常变量const int b=3+6,c=3*cos(1.5);/b的值被指定为的值被指定为9,c的值被的值被指定为指定为3*cos(1.5)但应注意,由于使用了系统标准数学函数但应注意,由于使用了系统标准数学函数cos,必必须将包含该函数有关的信息的须将包含该函数有关的信息的头文件头文件“cmath”(或或math.h)包含到本程序单位中来,可以在本程序单包含到本程序单

35、位中来,可以在本程序单位的开头加上以下位的开头加上以下#include命令:命令:#include 或或#include 常变量常变量又称为又称为只读变量只读变量(read-only-variable)。v请区别用请区别用#define命令定义的符号常量和用命令定义的符号常量和用const定义的常变量。定义的常变量。符号常量只是用一个符号代替一个字符串,在预编符号常量只是用一个符号代替一个字符串,在预编译时把所有符号常量替换为所指定的字符串,它没译时把所有符号常量替换为所指定的字符串,它没有类型,在内存中并不存在以符号常量命名的存储有类型,在内存中并不存在以符号常量命名的存储单元。而常变量具有

36、变量的特征,它具有类型,在单元。而常变量具有变量的特征,它具有类型,在内存中存在着以它命名的存储单元,可以内存中存在着以它命名的存储单元,可以用用sizeof运算符测出其长度运算符测出其长度。与一般变量惟一的不同是指定。与一般变量惟一的不同是指定变量的值不能改变。变量的值不能改变。v用用#define命令定义符号常量是命令定义符号常量是C语言所采用的方语言所采用的方法,法,C+把它保留下来是为了和把它保留下来是为了和C兼容。兼容。C+的程的程序员一般喜欢用序员一般喜欢用const定义常变量。定义常变量。C+的运算符十分丰富,运算十分灵活方便。例如的运算符十分丰富,运算十分灵活方便。例如把赋值号

37、把赋值号(=)也作为运算符处理,这样,也作为运算符处理,这样,a=b=c=4就就是合法的表达式,这是与其他语言不同的。是合法的表达式,这是与其他语言不同的。C+提供了以下运算符:提供了以下运算符:(1)算术运算符算术运算符 +(加加)-(减减)*(乘乘)/(除除)%(整除求余整除求余)+(自加自加)-(自减自减)(2)关系运算符关系运算符(大于大于)(小于小于)(等于等于)(大于或等于大于或等于)(小于或等于小于或等于)!(不等于不等于)2.4 C+的运算符的运算符()逻辑运算符逻辑运算符(逻辑与逻辑与)|(逻辑或逻辑或)!(逻辑非逻辑非)()位运算符位运算符(按位右移按位右移)(按位与按位与

38、)|(按位或按位或)(按位异或按位异或)(按位取反按位取反)()赋值运算符赋值运算符(及其扩展赋值运算符及其扩展赋值运算符)()条件运算符条件运算符(?:)()逗号运算符逗号运算符(,)()指针运算符指针运算符(*)(9)引用运算符和地址运算符引用运算符和地址运算符()(10)求字节数运算符()求字节数运算符()(11)强制类型转换运算符(强制类型转换运算符((类型类型)或类型或类型())(12)成员运算符成员运算符(.)(13)指向成员的运算符指向成员的运算符(-)(14)下标运算符下标运算符()(15)其他其他(如函数调用运算符()(如函数调用运算符()在本章中主要介绍算术运算符与算术表达

39、式,赋值在本章中主要介绍算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,运算符与赋值表达式,逗号运算符与逗号表达式,其他运算符将在以后各章中陆续介绍。其他运算符将在以后各章中陆续介绍。(加法运算符。如(加法运算符。如3+5,+3)(减法运算符。如(减法运算符。如5-2,-3)*(乘法运算符。如乘法运算符。如3*5)(除法运算符。如(除法运算符。如5/3)(模运算符,或称求(模运算符,或称求余运算符,两侧均应为整余运算符,两侧均应为整型数据型数据,如的值为)。,如的值为)。2.5 算术运算符与算术表达式算术运算符与算术表达式 2.5.1 基本的算术运算符基本的算术运算符需

40、要说明:需要说明:多数多数编译系系统采取采取“向零取整向零取整”的方法,即的方法,即5/3的的值等等于于1,-5/3的的值等于等于-1,取整后向零靠,取整后向零靠拢。在表达式中常遇到在表达式中常遇到不同类型数据之间进行运算不同类型数据之间进行运算,如,如10+a+1.5-8765.1234*b在进行运算时,在进行运算时,不同类型的数据要先转换成同一类不同类型的数据要先转换成同一类型,然后进行运算。转换的规则型,然后进行运算。转换的规则按图按图2.7所示。所示。图图2.72.5.3 表达式中表达式中不同类型数据间不同类型数据间的混合运算的混合运算例:为整型变量,为例:为整型变量,为float变量

41、,为变量,为double型型变量,为变量,为long型,有下面表达式:型,有下面表达式:10+a+i*f-d/e;运算次序为运算次序为:进行进行10+a,先将,先将转换成整数转换成整数97,运算结,运算结果为果为107。进行进行i*f的运算。先将的运算。先将i与与f都转换成都转换成double型,运型,运算结果为算结果为double型。型。整数整数107与与i*f的积相加。先将整数的积相加。先将整数107转换成双精转换成双精度数(即度数(即107.00000),结果为),结果为double型。型。将变量将变量e转换成转换成double型,型,d/e结果为结果为double型。型。将将10+a+

42、i*f的结果与的结果与d/e的商相减,结果为的商相减,结果为double型。上述的型。上述的类型转换是由系统自动进行的类型转换是由系统自动进行的。自增自增(+)和自减和自减(-)运算符,作用是使变量的值增运算符,作用是使变量的值增1或减或减1,注意前增量与后增量的区别!注意前增量与后增量的区别!v+i(在在使用使用i之前之前,先使,先使i的值加的值加1,如果,如果i的原值的原值为为3,则执行,则执行j=+i后,后,j的值为的值为4)-i(在使用在使用i之前,先使之前,先使i的值减的值减1,如果,如果i的原值为的原值为3,则执行,则执行j=-i后,后,j的值为的值为2)vi+(在在使用使用i之后

43、之后,使,使i的值加的值加1,如果,如果i的原值为的原值为3,则执行,则执行j=i+后,后,j的值为的值为3,然后,然后i变为变为4)i-(在使用在使用i之后,使之后,使i的值减的值减1,如果,如果i的原值为的原值为3,则,则执行执行j=i-后,后,j的值为的值为3,然后,然后i变为变为2)2.5.4 自增和自减运算符自增和自减运算符+i是先执行是先执行ii+1后,再使用后,再使用i的值;而的值;而i+是先使是先使用用i的值后,再执行的值后,再执行ii+1。正确地使用正确地使用+和和-,可以使程序简洁、清晰、高效,可以使程序简洁、清晰、高效。请请注意注意!:(1)自增运算符自增运算符(+)和自

44、减运算符和自减运算符(-)只能用于变只能用于变量,而不能用于常量或表达式。量,而不能用于常量或表达式。(2)+和和-的结合方向是的结合方向是“自右至左自右至左”,见附录,见附录B。(3)常用于循环语句中,使循环变量自动加常用于循环语句中,使循环变量自动加1。也用。也用于指针变量,使指针指向下一个地址。于指针变量,使指针指向下一个地址。有时程序编制者还可以利用强制类型转换运算符将有时程序编制者还可以利用强制类型转换运算符将一个表达式转换成所需类型。例如:一个表达式转换成所需类型。例如:(double)(将(将a转换成转换成double类型)类型)(int)()(x+y)(将将x+y的值转换成整型

45、)的值转换成整型)(float)(5%3)(将将5%3的值转换成的值转换成float型)型)强制类型转换的一般形式为强制类型转换的一般形式为(类型名)(表达式)(类型名)(表达式)2.5.5 强制类型转换运算符强制类型转换运算符C+还增加了以下形式:还增加了以下形式:类型名(表达式)类型名(表达式)如如int(x)或或 int(x+y)类型名不加括号,而变量或表达式用括号括起来。类型名不加括号,而变量或表达式用括号括起来。(例例2.4 强制类型转换。强制类型转换。#include using namespace std;int main()float x;int i;x=3.6;i=(int)

46、x;coutx=x,i=iendl;return 0;运行结果如下:运行结果如下:3.6,i=3的型仍为的型仍为float型,值仍等于型,值仍等于3.6。由上可知,有两种类型转换,一种是在运算时不必由上可知,有两种类型转换,一种是在运算时不必用户指定,系统自动进行的类型转换,如用户指定,系统自动进行的类型转换,如3+6.5。第二种是强制类型转换。第二种是强制类型转换。当自动类型转换不能实现当自动类型转换不能实现目的时,可以用强制类型转换目的时,可以用强制类型转换。此外,在函数调用。此外,在函数调用时,有时为了使实参与形参类型一致,可以用强制时,有时为了使实参与形参类型一致,可以用强制类型转换运

47、算符得到一个所需类型的参数。类型转换运算符得到一个所需类型的参数。赋值符号赋值符号“”就是赋值运算符,它的作用就是赋值运算符,它的作用是将一是将一个数据赋给一个变量个数据赋给一个变量。如。如“a=3”的作用是执行一的作用是执行一次赋值操作(或称赋值运算)。把常量次赋值操作(或称赋值运算)。把常量3赋给变量赋给变量a。也可以也可以将一个表达式的值将一个表达式的值赋给一个变量。赋给一个变量。2.6 赋值运算符与赋值表达式赋值运算符与赋值表达式 2.6.1 赋值运算符赋值运算符如果赋值运算符两侧的类型不一致,但都是数值型如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在或字符型时,在赋值时会

48、自动进行类型转换赋值时会自动进行类型转换。2.6.2 赋值过程中的类型转换赋值过程中的类型转换(1)将一个将一个int、short或或long型数据赋给一个型数据赋给一个char型型变量,只将其低变量,只将其低8位原封不动地送到位原封不动地送到char型变量型变量(发生截断)。例如(发生截断)。例如short int i=289;char c;c=i;/将一个将一个int型数据赋给一个型数据赋给一个char型变量型变量赋值情况见图赋值情况见图2.8。为方便起见,以一个。为方便起见,以一个int型数据型数据占两个字节占两个字节(16位位)的情况来说明。的情况来说明。图图2.8(2)将将signe

49、d(有符号有符号)型数据赋给型数据赋给长度相同长度相同的的unsigned(无符号无符号)型变量,将存储单元内容原样照型变量,将存储单元内容原样照搬(连原有的符号位也作为数值一起传送)。搬(连原有的符号位也作为数值一起传送)。例例2.5 将有符号数据传送给无符号变量。将有符号数据传送给无符号变量。#include using namespace std;int main()unsigned short a;short int b=-1;a=b;couta=aendl;return 0;运行结果为运行结果为65535赋给赋给b的值是的值是-1,怎么会得到,怎么会得到65535呢?请看图呢?请看图

50、2.9所示的赋值情况。所示的赋值情况。图图2.9-1的的补码形式为补码形式为11111111111111111111111111111111(即全部即全部16个二个二进制位均为进制位均为1),将它传送给,将它传送给a,而而a是无符号型变量,是无符号型变量,16个位全个位全1是十进制的是十进制的65535。如果。如果b为正值,且在为正值,且在032767之间,则赋值后数值不变。之间,则赋值后数值不变。不同类型的整型数据间的赋值归根结底就是一条:不同类型的整型数据间的赋值归根结底就是一条:按存储单元中的存储形式直接传送按存储单元中的存储形式直接传送。C和和C+使用灵活,在不同类型数据之间赋值时,使

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服