谭浩强版C++教程第2章.ppt

上传人:灯火****19 文档编号:135428885 上传时间:2020-06-15 格式:PPT 页数:72 大小:259.50KB
返回 下载 相关 举报
谭浩强版C++教程第2章.ppt_第1页
第1页 / 共72页
谭浩强版C++教程第2章.ppt_第2页
第2页 / 共72页
谭浩强版C++教程第2章.ppt_第3页
第3页 / 共72页
谭浩强版C++教程第2章.ppt_第4页
第4页 / 共72页
谭浩强版C++教程第2章.ppt_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《谭浩强版C++教程第2章.ppt》由会员分享,可在线阅读,更多相关《谭浩强版C++教程第2章.ppt(72页珍藏版)》请在金锄头文库上搜索。

1、第2章数据类型与表达式 2 1C 的数据类型2 2常量2 3变量2 4C 的运算符2 5算术运算符与算术表达式2 6赋值运算符与赋值表达式2 7逗号运算符与逗号表达式 计算机处理的对象是数据 而数据是以某种特定的形式存在的 例如整数 浮点数 字符等形式 不同的数据之间往往还存在某些联系 例如由若干个整数组成一个整数数组 数据结构指的是数据的组织形式 例如 数组就是一种数据结构 不同的计算机语言所允许使用的数据结构是不同的 处理同一类问题 如果数据结构不同 算法也会不同 例如 对10个整数排序和对包含10个元素的整型数组排序的算法是不同的 C 可以使用的数据类型如下 2 1C 的数据类型 数据类

2、型基本类型整型短整型 shortint 整型 int 长整型 longint 字符型 char 浮点型单精度型 float 双精度型 double 长双精度型 longdouble 布尔型 bool 构造类型枚举类型 enum 数组类型结构体类型 struct 共用体类型 union 类类型 class 指针类型引用类型空类型 void 布尔型就是逻辑型 空类型就是无值型 C 的数据包括常量与变量 常量与变量都具有类型 由以上这些数据类型还可以构成更复杂的数据结构 例如利用指针和结构体类型可以构成表 树 栈等复杂的数据结构 C 并没有统一规定各类数据的精度 数值范围和在内存中所占的字节数 各C

3、 编译系统根据自己的情况作出安排 书中表2 1列出了VisualC 数值型和字符型数据的情况 说明 1 整型数据分为长整型 longint 一般整型 int 和短整型 shortint 在int前面加long和short分别表示长整型和短整型 2 整型数据的存储方式为按二进制数形式存储 例如十进制整数85的二进制形式为1010101 则在内存中的存储形式如图2 1所示 图2 1 3 在整型符号int和字符型符号char的前面 可以加修饰符signed 表示 有符号 或unsigned 表示 无符号 如果指定为signed 则数值以补码形式存放 存储单元中的最高位 bit 用来表示数值的符号 如

4、果指定为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的数值范围不同

5、对float分配4个字节 对double和longdouble分配8个字节 5 表中类型标识符一栏中 方括号 包含的部分可以省写 如short和shortint等效 unsignedint和unsigned等效 常量的值是不能改变的 一般从其字面形式即可判别是否为常量 常量包括两大类 即数值型常量 即常数 和字符型常量 如12 0 3为整型常量 4 6 1 23为实型常量 包含在两个单撇号之间的字符为字符常量 如 a x 这种从字面形式即可识别的常量称为 字面常量 或 直接常量 2 2常量2 2 1什么是常量 数值常量就是通常所说的常数 在C 中 数值常量是区分类型的 从字面形式即可识别其类型

6、 1 整型常量 整数 的类型在上一节中已知道 整型数据可分为int shortint longint以及unsignedint unsignedshort unsignedlong等类别 整型常量也分为以上类别 为什么将数值常量区分为不同的类别呢 因为在进行赋值或函数的参数虚实结合时要求数据类型匹配 那么 一个整型常量怎样从字面上区分为以上的类别呢 2 2 2数值常量 1 一个整数 如果其值在 32768 32767范围内 认为它是shortint型 它可以赋值给shortint型 int型和longint型变量 2 一个整数 如果其值超过了上述范围 而在 2147483648 2147483

7、647范围内 则认为它是longint型 可以将它赋值给一个int或longint型变量 3 如果某一计算机系统的C 版本 例如VisualC 确定int与longint型数据在内存中占据的长度相同 则它们能够表示的数值的范围相同 因此 一个int型的常量也同时是一个longint型常量 可以赋给 型或longint型变量 4 常量无unsigned型 但一个非负值的整数可以赋值给unsigned整型变量 只要它的范围不超过变量的取值范围即可 一个整型常量可以用3种不同的方式表示 1 十进制整数 如1357 432 0等 在一个整型常量后面加一个字母l或L 则认为是longint型常量 例如1

8、23L 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等 它一般由整数部分和

9、小数部分组成 可以省略其中之一 如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 1

10、4159e0 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个赋值语句中 用了不同形式的浮点数 但其作用是相同的 在程序中不论把浮点数写成小数形式还是指数形式 在内存中都是以指数形式 即浮点

11、形式 存储的 例如不论在程序中写成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的幂

12、次来表示指数部分的 对于以指数形式表示的数值常量 也都作为双精度常量处理 1 普通的字符常量用单撇号括起来的一个字符就是字符型常量 如 a D 都是合法的字符常量 在内存中占一个字节 注意 字符常量只能包括一个字符 如 AB 是不合法的 字符常量区分大小写字母 如 A 和 a 是两个不同的字符常量 撇号 是定界符 而不属于字符常量的一部分 如cout a 输出的是一个字母 a 而不是3个字符 a 2 2 3字符常量 2 转义字符常量除了以上形式的字符常量外 C 还允许用一种特殊形式的字符常量 就是以 开头的字符序列 例如 n 代表一个 换行 符 cout n 将输出一个换行 其作用与 cout

13、 endl 相同 这种 控制字符 在屏幕上是不能显示的 在程序中也无法用一个一般形式的字符表示 只能采用特殊形式来表示 常用的以 开头的特殊字符见书中表2 2 3 字符数据在内存中的存储形式及其使用方法将一个字符常量存放到内存单元时 实际上并不是把该字符本身放到内存单元中去 而是将该字符相应的ASCII代码放到存储单元中 如果字符变量c1的值为 a c2的值为 b 则在变量中存放的是 a 的ASCII码97 b 的ASCII码98 如图2 4 a 所示 实际上在内存中是以二进制形式存放的 如图2 4 b 所示 图2 4 既然字符数据是以ASCII码存储的 它的存储形式就与整数的存储形式类似 这

14、样 在C 中字符型数据和整型数据之间就可以通用 一个字符数据可以赋给一个整型变量 反之 一个整型数据也可以赋给一个字符变量 也可以对字符数据进行算术运算 此时相当于对它们的ASCII码进行算术运算 例2 1将字符赋给整型变量 includeusingnamespacestd intmain inti j i和j是整型变量i A 将一个字符常量赋给整型变量ij B 将一个字符常量赋给整型变量jcout i j n 输出整型变量i和j的值 n 是换行符return0 执行时输出6566i和j被指定为整型变量 但在第5和第6行中 将字符 A 和 B 分别赋给i和j 它的作用相当于以下两个赋值语句 i

15、 65 j 66 因为 A 和 B 的ASCII码为65和66 在程序的第5和第6行是把65和66直接存放到i和j的内存单元中 因此输出65和66 可以看到 在一定条件下 字符型数据和整型数据是可以通用的 但是应注意字符数据只占一个字节 它只能存放0 255范围内的整数 例2 2字符数据与整数进行算术运算 下面程序的作用是将小写字母转换为大写字母 includeusingnamespacestd intmain charc1 c2 c1 a c2 b c1 c1 32 c2 c2 32 cout c1 c2 endl return0 运行结果为AB a 的ASCII码为97 而 A 的ASCI

16、I码为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 4 字符串常量用双撇号括起来的部分就是字符串常量 如 abc Hello a b Li ping 都是字符串常量 字符串常量 abc 在内存中占4个字节 而不是3个字节 见图2 5 图2 5编译系统会在字符串最后自动加一个 0 作为字符串结束标志 但 0 并不是字符串的一部分 它只作为字符串的结束标志 如cout abc endl 输出3个字符abc 而不包括 0 注意 a 和 a 代表不同的含义 a 是字符串常量 a 是字符常量 前者占两个字节 后者占1个字节 请分析下面的程序片段 charc 定义一个字符变量c a 正确c a 错误 c只能容纳一个字符字符串常量要用字符数组来存放 见第5章 请思考 字符串常量 abc n 包含几个字符

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号