1、第2章第2部分1基本数据类型和表达式2.2基本数据类型和表达式综述:类型是所有程序的基础。类型告诉我们数据代表什么意思以及可以对数据执行哪些操作。C+中的数据类型分为两类:基本类型和自定义类型,基本类型是C+编译系统内置的,比如:字符型、整型、双精度型。C+还提供了可用于自定义数据类型的机制,标准库正是利用这些机制定义了许多更复杂实用的类型,比如可变长字符串string、vector等。2.2.1基本数据类型C+标准规定了基本数据类型的最小存储空间(表2-1),但它并不阻止编译器使用更大的存储空间。表2-1 C+基本数据类型类型含义最小存储空间bool布尔型char字符型8位wchar_t宽字
2、符型16位short短整型16位int整型16位long长整型32位float单精度浮点型6位有效数字double双精度浮点型10位有效数字long double扩展精度浮点型10位有效数字C+还定义了一种称为void的特殊类型。void类型没有对应的值,通常用作无返回值函数的返回类型。注意:不同编译器实际分配空间不同,对于数值类型数据,推荐使用int类型和double类型。练习1:使用sizeof操作符测试自己所用编译器对C+基本类型存储空间分配情况。sizeof操作符的作用是返回一个对象或类型名的长度(单位为字节),语法格式:sizeof(类型名或变量名);sizeof 变量名exa2-3
3、:#include/using namespace std;int main() using std:cout; using std:endl; /使用名字空间的另一种方式 int m=12; coutthe size of an int is:sizeof(int)endl; coutthe size of an short is:sizeof(short)endl; coutthe size of an long is:sizeof(long)endl; coutthe size of an char is:sizeof(char)endl; coutthe size of an floa
4、t is:sizeof(float)endl; coutthe size of an double is:sizeof(double)endl; coutthe size of an bool is:sizeof(bool)endl; coutsizeof mendl; /测试变量m所分配存储空间 coutsizeof(m)endl; system(pause); return 0;小结命名空间的三种使用方式:(1)using namespace std; (2)using 命名空间名:对象名,比如using std:cout;(3)形如std:cout“the sum is:”std:end
5、l;练习2:编写简单的小程序,理解命名空间的三种使用方式。2.2.2常量(字面常量)和符号常量C+有两种常量:字面常量与符号常量。直接显式地使用的值称为常量,也称字面常量。称之为字面是因为只能用它的值称呼它,称之为常量是因为它的值不能修改。符号常量指用名字表示的常量,就像表示一个变量一样。但与变量不同的是,常量一旦被初始化,其值就不能改变。例如:#includeusing namespace std;int main() const double pi=3.14159; /定义了一个名为pi的符号常量,且初始化值为3.14159 double r,s=0;/ pi=3.1416; 错,符号常量
6、的值一旦初始化,就不能再改变 coutr; s=pi*r*r; /通过符号常量名pi代替常量3.14159,利于程序修改,可读性强 coutsendl; return 0;1 整型常量可以使用三种进制形式:十进制(默认)、八进制(以数字0开头的常量)和十六进制(以0x或0X开头)。Eax2-4:#includeusing namespace std;int main() int m=12; /12为十进制常数,系统默认 int k=012; /12为八进制常数 int n=0x12; /12为十六进制常数 coutm=mendl; coutk=kendl; coutn=nendl; syste
7、m(pause); return 0;默认情况下,cout以十进制格式显示整数(系统自动进行进制转换),而不管这些整数在程序中是如何书写的,程序运行结果如下:m=12 (12的十进制形式)k=10 (八进制12的十进制形式)n=18 (十六进制12的十进制形式)但是,可以使用控制符dec、hex和oct以指定进制格式显示整数。Exa2-5:修改exa2-4#includeusing namespace std;int main() int m=12; /12为十进制常数,系统默认 int k=012; /12为八进制常数 int n=0x12; /12为十六进制常数 coutm=mendl;
8、coutk=octkendl; /以八进制形式输出 coutn=hexnendl; /以十六进制形式输出 cout12endl; /仍以十六进制形式输出十进制数12 coutdec; /恢复默认的十进制输出形式 system(pause); return 0;也可以用后缀字母L(或l,但不提倡使用小写l,容易和数值1混淆)表示长整型;后缀字母U(或u)表示无符号型。思考:能否以八进制或十六进制输入?练习3:练习十进制、八进制和十六进制形式的输入和输出。2 实型常量两种形式:一般形式和指数形式。一般形式:例如12.5指数形式:例如,0.345E+2表示0.345102 注意:指数形式中不能出现空
9、格;字母E可大写也可小写。实型常量默认为double类型。3 字符常量字符常量是单引号括起来的一个字符,比如a,占一个字节内存,两种:一般字符和特殊字符。特殊字符:两种情况。其一为非打印字符,不可显示,不能直接通过键盘输入到程序中,比如响铃、换行等,其二本身有特殊含义的字符,比如单引号,C+通过特殊的表示方法转义序列来解决。(见P26表2-2)Exa2-6:转义序列(程序使用振铃字符来提请注意,使用换行符使光标前进,使用退格字符使光标向左退一格)#includeusing namespace std;int main() coutaOperation HyperHype is now acti
10、vated!n; coutcode; coutaYou entered code.n; coutaCode verified! Proceed with Plan z3!n; return 0;提示:在可以使用数字转义序列或符号转义序列(如07和a)时,应使用符号序列。数字表示与特定的编码方式(如ASC码)相关,而符号表示适用于任何编码方式,其可读性也更强。练习4:调试、修改Exa2-6,理解转义序列。4 字符串常量用双引号括起来的字符序列。注意与字符常量的区别。(1) 定界符不同;(2) 字符数不同;(3) 存储方式不同,比如a分配一个字节,”a”含两个字符,字母a和结尾标记字符0,分配两个
11、字节。5 布尔常量两个:true(真)和false(假)。2.2.3变量(1)变量提供了程序可以操作的有名字的存储区。C+中的每个变量都有特定的类型,该类型决定了变量的内存大小和布局、能够存储于该内存中的值的取值范围以及可应用在该变量上的操作。C+程序员常常把变量称为“变量”或“对象(object)”。(术语:什么是对象?对象是内存中具有类型的区域。)(2)变量的使用规则:先定义,再使用,使用之前变量中必须有值。定义时可初始化。C+变量名的命名规则:(变量名即变量的标识符:identifier) 在名称中只能使用字母、数字和下划线(-)。 名称的第一个字符不能是数字。 区分大小写字符。 不能将
12、C+关键字用作名称。(课本P22) 不能包含两个连续的下划线,也不能以下划线开头后面紧跟一个大写字母,(C+标准保留了一组标识符用于标准库),最好不要以下划线开头。(3)建议:变量名命名习惯变量命名有许多被普遍接受的习惯,遵循这些习惯可以提高程序的可读性。命名习惯最重要的是保持一致。 变量名一般用小写字母。例如,通常会写成index,而不写成Index或INDEX。 变量名应有一定的含义、容易记忆,如表示差旅费可命名为cost_of_trip或costOfTrip,而不是x,y。 包含多个词的变量名书写为每个词之间添加一个下划线,或者每个内嵌的词的首字母都大写。如cost_of_trip或co
13、stOfTrip。2.2.4运算符与表达式1自增(+)和自减(-)操作符(1)两个运算符都有前置或后置两种使用形式,如i+,+i,i-,-i,单独作为一条语句时,如for循环中作为循环控制变量,前置、后置作用相同,都是将操作数的值加1(减1)后,重新写回该操作数在内存中位置。建议:只有在必要时才使用后置操作符。因为前置操作需要做的工作更少,只需加1后返回加1的结果即可。而后置操作符必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。(2)出现在其他操作中,作用不同。#includeusing namespace std;int main() int i=2,j; j=i+; /先将i的值2赋给j,j=2,然后i加1,i=3 coutj=j i=iendl; j=+i; coutj=j i=iendl; j=-i; coutj=j i=iendl; j=i-; coutj=j i=iendl; return 0;注意:结合内存结构图理解。2组合赋值操作符表2-2组合赋值操作符操作符作用操作符作用+=将L+R赋给L/=将L/R赋给L-=将L-R赋给L%=将L%R赋给L*=将L*R赋给L注:L表示左操作数;R表示右操作数。例如:s=s+2; 等价于 s+=2;课堂练习:2-17;2-21;2-22作业:2-2;2-3;2-5;2-7;2-9;2-10;2-25
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1