C++面向对象程序设计谭浩强第2章数据类型与表达式.docx

上传人:b****3 文档编号:2791747 上传时间:2022-11-15 格式:DOCX 页数:21 大小:98.64KB
下载 相关 举报
C++面向对象程序设计谭浩强第2章数据类型与表达式.docx_第1页
第1页 / 共21页
C++面向对象程序设计谭浩强第2章数据类型与表达式.docx_第2页
第2页 / 共21页
C++面向对象程序设计谭浩强第2章数据类型与表达式.docx_第3页
第3页 / 共21页
C++面向对象程序设计谭浩强第2章数据类型与表达式.docx_第4页
第4页 / 共21页
C++面向对象程序设计谭浩强第2章数据类型与表达式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C++面向对象程序设计谭浩强第2章数据类型与表达式.docx

《C++面向对象程序设计谭浩强第2章数据类型与表达式.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计谭浩强第2章数据类型与表达式.docx(21页珍藏版)》请在冰豆网上搜索。

C++面向对象程序设计谭浩强第2章数据类型与表达式.docx

C++面向对象程序设计谭浩强第2章数据类型与表达式

第2章数据类型与表达式

2.1C++的数据类型

2.2常量

2.3变量

2.4C++的运算符

2.5算术运算符与算术表达式

2.6赋值运算符与赋值表达式

2.7逗号运算符与逗号表达式

2.1C++的数据类型

计算机处理的对象是数据,而数据是以某种特定的形式存在的(例如整数、浮点数、字符等形式)。不同的数据之间往往还存在某些联系(例如由若干个整数组成一个整数数组)。数据结构指的是数据的组织形式。例如,数组就是一种数据结构。不同的计算机语言所允许使用的数据结构是不同的。处理同一类问题,如果数据结构不同,算法也会不同。例如,对10个整数排序和对包含10个元素的整型数组排序的算法是不同的。

C++可以使用的数据类型如下:

C++的数据包括常量与变量,常量与变量都具有类型。由以上这些数据类型还可以构成更复杂的数据结构。例如利用指针和结构体类型可以构成表、树、栈等复杂的数据结构。

C++并没有统一规定各类数据的精度、数值范围和在内存中所占的字节数,各C++编译系统根据自己的情况作出安排。书中表2.1列出了VisualC++数值型和字符型数据的情况。

说明:

(1)整型数据分为长整型(longint)、一般整型(int)和短整型(shortint)。在int前面加long和short分别表示长整型和短整型。

(2)整型数据的存储方式为按二进制数形式存储,例如十进制整数85的二进制形式为1010101,则在内存中的存储形式如图2.1所示。

图2.1

(3)在整型符号int和字符型符号char的前面,可以加修饰符signed(表示“有符号”)或unsigned(表示“无符号”)。如果指定为signed,则数值以补码形式存放,存储单元中的最高位(bit)用来表示数值的符号。如果指定为unsigned,则数值没有符号,全部二进制位都用来表示数值本身。例如短整型数据占两个字节,见图2.2。

图2.2

有符号时,能存储的最大值为215-1,即32767,最小值为-32768。无符号时,能存储的最大值为216-1,即65535,最小值为0。有些数据是没有负值的,可以使用unsigned,它存储正数的范围比用signed时要大一倍。

(4)浮点型(又称实型)数据分为单精度(float)、双精度(double)和长双精度(longdouble)3种,在VisualC++6.0中,对float提供6位有效数字,对double提供15位有效数字,并且float和double的数值范围不同。对float分配4个字节,对double和longdouble分配8个字节。

(5)表中类型标识符一栏中,方括号[]包含的部分可以省写,如short和shortint等效,unsignedint和unsigned等效。

常量的值是不能改变的,一般从其字面形式即可判别是否为常量。常量包括两大类,即数值型常量(即常数)和字符型常量。如12,0,-3为整型常量,4.6,-1.23为实型常量,包含在两个单撇号之间的字符为字符常量,如′a′,′x′。这种从字面形式即可识别的常量称为“字面常量”或“直接常量”。

2.2常量

2.2.1什么是常量

2.2.2数值常量

数值常量就是通常所说的常数。在C++中,数值常量是区分类型的,从字面形式即可识别其类型。

1.整型常量(整数)的类型

在上一节中已知道:

整型数据可分为int,shortint,longint以及unsignedint,unsignedshort,unsignedlong等类别。整型常量也分为以上类别。为什么将数值常量区分为不同的类别呢?

因为在进行赋值或函数的参数虚实结合时要求数据类型匹配。

那么,一个整型常量怎样从字面上区分为以上的类别呢?

(1)一个整数,如果其值在-32768~+32767范围内,认为它是shortint型,它可以赋值给shortint型、int型和longint型变量。

(2)一个整数,如果其值超过了上述范围,而在-2147483648~+2147483647范围内,则认为它是longint型,可以将它赋值给一个int或longint型变量。

(3)如果某一计算机系统的C++版本(例如VisualC++)确定int与longint型数据在内存中占据的长度相同,则它们能够表示的数值的范围相同。因此,一个int型的常量也同时是一个longint型常量,可以赋给int型或longint型变量。

(4)常量无unsigned型。但一个非负值的整数可以赋值给unsigned整型变量,只要它的范围不超过变量的取值范围即可。

一个整型常量可以用3种不同的方式表示:

(1)十进制整数。如1357,-432,0等。在一个整型常量后面加一个字母l或L,则认为是longint型常量。例如123L,421L,0L等,这往往用于函数调用中。如果函数的形参为longint,则要求实参也为longint型,此时用123作实参不行,而要用123L作实参。

(2)八进制整数。在常数的开头加一个数字0,就表示这是以八进制数形式表示的常数。如020表示这是八进制数20,即(20)8,它相当于十进制数16。

(3)十六进制整数。在常数的开头加一个数字0和一个英文字母X(或x),就表示这是以十六进制数形式表示的常数。如0X20表示这是十六进制数20,即(20)16,它相当于十进制数32。

2.浮点数的表示方法

一个浮点数可以用两种不同的方式表示:

(1)十进制小数形式。如21.456,-7.98等。它一般由整数部分和小数部分组成,可以省略其中之一(如78.或.06,.0),但不能二者皆省略。C++编译系统把用这种形式表示的浮点数一律按双精度常量处理,在内存中占8个字节。如果在实数的数字之后加字母F或f,表示此数为单精度浮点数,如1234F,-43f,占4个字节。如果加字母L或l,表示此数为长双精度数(longdouble),在GCC中占12个字节,在VisualC++6.0中占8个字节。

(2)指数形式(即浮点形式)

一个浮点数可以写成指数形式,如3.14159可以表示为0.314159×101,3.14159×100,31.4159×10-1,

314.159×10-2等形式。在程序中应表示为:

0.314159e1,3.14159e0,31.4159e-1,314.159e-2,用字母e表示其后的数是以10为底的幂,如e12表示1012。

其一般形式为

数符数字部分指数部分

上面各数据中的0.314159,3.14159,31.4159,314.159等就是其中的数字部分。可以看到:

由于指数部分的存在,使得同一个浮点数可以用不同的指数形式来表示,数字部分中小数点的位置是浮动的。例如:

a=0.314159e1;

a=3.14159e0;

a=31.4159e-1;

a=314.159e-2;

以上4个赋值语句中,用了不同形式的浮点数,但其作用是相同的。

在程序中不论把浮点数写成小数形式还是指数形式,在内存中都是以指数形式(即浮点形式)存储的。例如不论在程序中写成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.314159e3在内存中表示成0.314159×103。存储单元分为两部分,一部分用来存放数字部分,一部分用来存放指数部分。为便于理解,在图2.3中是用十进制表示的,实际上在存储单元中是用二进制数来表示小数部分,用2的幂次来表示指数部分的。

对于以指数形式表示的数值常量,也都作为双精度常量处理。

2.2.3字符常量

1.普通的字符常量

用单撇号括起来的一个字符就是字符型常量。如′a′,′#′,′%′,′D′都是合法的字符常量,在内存中占一个字节。

注意:

①字符常量只能包括一个字符,如′AB′是不合法的。

②字符常量区分大小写字母,如′A′和′a′是两个不同的字符常量。

③撇号(′)是定界符,而不属于字符常量的一部分。如cout<<′a′;输出的是一个字母“a”,而不是3个字符“′a′”。

2.转义字符常量

除了以上形式的字符常量外,C++还允许用一种特殊形式的字符常量,就是以“\”开头的字符序列。例如,′\n′代表一个“换行”符。“cout<<′\n′;”将输出一个换行,其作用与“cout<

常用的以“\”开头的特殊字符见书中表2.2。

3.字符数据在内存中的存储形式及其使用方法

将一个字符常量存放到内存单元时,实际上并不是把该字符本身放到内存单元中去,而是将该字符相应的ASCII代码放到存储单元中。如果字符变量c1的值为′a′,c2的值为′b′,则在变量中存放的是′a′的ASCII码97,′b′的ASCII码98,如图2.4(a)所示,实际上在内存中是以二进制形式存放的,如图2.4(b)所示。

图2.4

既然字符数据是以ASCII码存储的,它的存储形式就与整数的存储形式类似。这样,在C++中字符型数据和整型数据之间就可以通用。一个字符数据可以赋给一个整型变量,反之,一个整型数据也可以赋给一个字符变量。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算。

例2.1将字符赋给整型变量。

#include

usingnamespacestd;

intmain()

{inti,j;//i和j是整型变量

i=′A′;//将一个字符常量赋给整型变量i

j=′B′;//将一个字符常量赋给整型变量j

cout<

return0;

}

执行时输出

6566

i和j被指定为整型变量。但在第5和第6行中,将字符′A′和′B′分别赋给i和j,它的作用相当于以下两个赋值语句:

i=65;j=66;

因为′A′和′B′的ASCII码为65和66。在程序的第5和第6行是把65和66直接存放到i和j的内存单元中。因此输出65和66。

可以看到:

在一定条件下,字符型数据和整型数据是可以通用的。但是应注意字符数据只占一个字节,它只能存放0~255范围内的整数。

例2.2字符数据与整数进行算术运算。下面程序的作用是将小写字母转换为大写字母。

#include

usingnamespacestd;

intmain()

{charc1,c2;

c1=′a′;

c2=′b′;

c1=c1-32;

c2=c2-32;

cout<

return0;

}

运行结果为

AB

′a′的ASCII码为97,而′A′的ASCII码为65,′b′为98,′B′为66。从ASCII代码表中可以看到每一个小写字母比它相应的大写字母的ASCII代码大32。C++符数据与数值直接进行算术运算,′a′-32得到整数65,′b′-32得到整数66。将65和66存放在c1,c2中,由于c1,c2是字符变量,因此用cout输出c1,c2时,得到字符A和B(A的ASCII码为65,B的ASCII码为66)。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1