版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、19:42:181C + 程序设计教程(第二版)第三章 数据类型 Chapter 3 Data Types19:42:182数据类型:一定的数据在计算机的内部表示;该数据所表示的值的集合;在该数据上的一系列操作。内部数据类型: 1.整型长整型,短整型,字符型,布尔型 2.浮点型单精度,双精度19:42:183第三章内容 整型 ( int Types ) 整型子类 ( sub-int Types ) 浮点型 ( Floating-Point Type ) C-串与string ( C-string & string ) 数组 ( Arrays ) 向量 ( vectors ) 指针与引用 ( P
2、ointer & References ) 19:42:1841. 整型 ( int Types )整型数的内部表示:二进制补码 位数既定的二进制补码运算没有加减的区别;对于溢出,只是简单的舍弃而不是错误整型数的表示范围:取决于二进制位数整型数的操作:+,-,*,/,%,=,!,=,=,=,&,|,&=,|=,&,|,&=,|=,!=,=,+=,-=,*=,/=,%=,+,-,,,? :19:42:185编译器的机器字长总是与整型的位长有关如: 32位编译器的整型数一定为32位长整型字面值分八进制,十进制和十六进制不同表示如: 0123 / 8进制 0 x12af3 / 16进制 12345
3、/ 10进制 超过表示范围的整型数其值不可预料或者出错如: int a = 12345678912345678912345; / 错19:42:186. 整型子类( Sub-int Types )字符型:表示范围: 有符号:-128127 无符号:0255 输出形式与整型数不同: int a = 65; char b = 65; couta“n”; coutb“n”; 结果为: 65 A 19:42:187枚举型: 自定义整数区间,甚至列举单个整数值 enum Week Mon, Tue, Wed, Thu, Fri, Sat, Sun ; 最大特点是可以给每个值指定一个在程序中直接使用的标记
4、(枚举符) 编程中将其当作整数常量用如: int a = 7; if ( a = Sun) cout “Sundayn”; 19:42:188布尔型:表示范围仅含整数和1,也可以表示成true和false,相当于: enum bool false, true ;因为条件表达式、逻辑运算的结果都是或,所以,相当大数量的表达式的值与布尔型对应19:42:1893. 浮点型 ( Floating-Point Types )浮点数的内部表示: 国际标准IEEE754浮点表示法,它与编程所用的浮点数字面量以及输出的十进制浮点数之间有一个转换关系浮点数的表示范围:32位浮点数3.41038 64位浮点数1
5、.810308浮点数的操作: 常规的加、减、乘、除等操作19:42:18104. C-串与string ( C-string & string )C-串结构每个字符占据1个字节一个C-串是一个字符序列,用来表示各种名字或者文字说明C-串的字符序列的最后总是添加有一个结束标志.即在6个字符的字串(“Hello!”)其空间存储有7个字节左边三图是不同细节的同一空间结构描述Hello!0 72 101 108 108 111 33 00100100001100101011011000110110001101111001000010000000019:42:1811知道了C-串首地址,即可知道整个串,
6、所以可以藉字符首址(字符指针)来操作C-串,但要注意,串的第一个字符与整个串的操作不同,如,C-串的输出操作: char* str = ”Hello”; cout *str endl; / 显示H cout str endl; / 显示Hello19:42:1812C-串不能直接比较,因为字符指针的比较只是地址值的比较而不是C-串的字典序比较: cout(“join”=”join” ? ” : ”not “)”equaln”; / 字面值比较 char* str1=”good”; char* str2=”good”; cout(str1=str2 ? ” : ”not “)”equaln”;
7、/ 字符指针比较 char buffer16=”Hello”; char buffer26=”Hello”; cout(buffer1=buffer2 ? ” : ”not “)”equaln”; / 字符数组比较 结果:not equal not equal not equal19:42:1813不得不配备专门操作C-串的库函数:strcpy(s1, s2); /从s2拷贝到s1strcmp(s1, s2); /比较s1与s2strcat(s1, s2); /连接s2到s1strrev(s); /将s倒排 strset(s, c); /将s全置为cstrstr(s, “ell”); /查找s
8、中的子串strchr(s,c); /查找s中的字符 等等19:42:1814但字符指针操作C-串的安全性受到质疑:char* str1;char* str2 = new char5;strcpy(str2, ”ugly”);strcpy(str1,str2); / 错: str1没有空间可储strcpy(str2, ”Hello”); / 错: str2空间不够大str2 = ”Hello”; / 错:原来的”ugly”空间脱钩,导致内存泄漏根源:复制操作须以足够的目的地空间为前提,而所有C-串操作的空间调配都是人为安排的,C-串库函数一概不管19:42:1815类串string串类自定义串对
9、应字符指针的C-串操作: string a, s1 = Hello ; string s2 = 123; a = s1; / copy cout(a=s1 ? : not)equaln; / compare couta+s2endl; / concatenate reverse(a.begin(), a.end(); coutaendl; / reverse couta.replace(0,9,9,c)endl; / set cout(s1.find(ell)!= -1 ? : not )foundn;/ find string cout(s1.find(c)!= -1 ? : not )的读
10、入方式总是将前导的空格(所谓空格,即包括空格、回车、水平或垂直制表符等)滤掉,将单词读入,在遇到空格时结束本次输入getline总是将行末的回车符滤掉,将其整行输入对字串”Hello, How are you?”的两种输入方式 for ( string s; cins; ) couts” “; coutendl; string s; getline(cin, s); couts a ; sum += a ) ; cout sum “n” ; 19:42:18185. 数组( Arrays ) 数组是同类元素的集合,它的元素排列在连续的空间中,按下标来标记描述数组必须给出元素类型,元素个数元素个
11、数必须在编程时确定,任何变量都不允许 int aa ; / 表示int a97; int n = 100 ; int an ; / 错: 元素个数必须预知 const int n = 100 ; int an ; / ok int a ; / 错: 无元素个数 int a = 1, 2, 3, 4, 5 ; / ok:通过初始化确定元素个数19:42:1819数组初始化可选,但须遵循语法无初始化的数组按规定取默认值 int array15 = 1, 2, 3, 4, 5, 6 ; / 错: 初始值个数超元素个数int array25 = 1, , 2, 3, 4 ; / 错: 不能以逗号方式省
12、略int array35 = 1, 2, 3, ; / 错: 同上int array45 = ; / 错: 初始值不能为空int array55 = 1, 2, 3 ; / ok: 后面元素取0int array65 = 0 ; / ok: 元素全为0int array75 ; / ok: 元素值不确定int a35 = 1, 2, 3, 4, 5 , 2, 3, 4, 5, 6 , 3, 4, 5, 6, 7 ; 19:42:1820数组有诸多缺陷,造成编程艰难和不安全 int a5 = 1,2,3,4,5, c5; int b5 = a; / 错:无法拷贝创建 c = a; / 错:无法整
13、体拷贝和局部拷贝 a8 = 10; / 错:无法动态扩容和随意增减元素 for(int i=0; i=5; +i) / 错:无法防范下标溢出 ai = i+1; if(a=c) a0 = 2; / 错:不可比较 int a5 = 1; / 初始化呆板,无法获得全初值19:42:1821二维数组的初始化,下标访问及输出 int array123=1,2,3,4,5; int array223=1,2,4; coutarray1: ; for(int i=0; i2; +i) for(int j=0; j3; +j) coutarray1ij,; coutnarray2: ; for(int i=
14、0; i2; +i) for(int j=0; j3; +j) coutarray2ij,; coutn;结果为: array1: 1,2,3,4,5,0, array2: 1,2,0,4,0,0,19:42:1822.向量( vector ) 向量与数组的共同特征是元素的排列在逻辑上是线性序列结构,可以用下标进行访问 向量可以按需创建,拷贝创建,局部拷贝创建,异类拷贝和创建 灵活的初始化 随意扩容和元素增减 可通过异常来进行下标溢出追踪和处理 可比较 等等19:42:1823int n=10;int t5=1,2,3,4,5;vector a(n); /按需创建vector b(10, 1)
15、; /元素赋全,灵活的初始化vector c(b); / 整体拷贝创建vector f(t, t+5); /异类拷贝创建vector d(b.begin(), b.begin()+3);/局部拷贝创建d为b的前个元素a.assign(100); /动态扩容至100个元素19:42:1824向量常用操作a.assign(b.begin(), b.begin()+3); / b的前3个元素赋给aa.assign(4,2); / a向量含4个元素,全初始化为2int x = a.back(); / a的最后一个元素赋给变量xa.clear(); / a向量清空(不再有元素)if(a.empty()
16、cout”empty”; / a判空操作int y = a.front(); / a的第一个元素赋给变量ya.pop_back(); / 删除a的最后一个元素a.push_back(5); / a最后插入一个元素,其值为5a.resize(10); / a元素个数调至10。多删少补,其值随机a.resize(10,2);/a元素个数调至10。多删少补,新添元素初值为2if(a=b) cout”equal”; / a与b的向量比较操作19:42:1825向量操作尤其适合于函数参数传递(-D以上的数组参数的传递十分丑陋):传递一个矩阵,无论其每行中的元素个数不同.输出之:typedef vecto
17、rvector Mat;void print(const Mat& a) for(int i=0; ia.size(); +i) for(int j=0; jai.size(); +j) coutaij ; coutendl; 19:42:18267. 指针与引用 ( Pointers & Reference ) 指针指向存放数据的地址指针必须初始化或者赋值(指向了数据)后,才能进行间接访问(间访)操作int* ip;int iCount = 18;int* iPtr = &iCount; / 初始化ip = &iCount; / 赋值*ip = 8; / 间访操作19:42:1827指针操作
18、与指向数据的类型密切相关 float f = 34.5; int* ip = reinterpret_cast(&f); cout“fAddr: ”&f”f“n”; cout“iAddr: ”ip”*ip“n”; *ip = 100; cout“ int: ”*ip“n”; cout“float: ”f34.5 iAddr: 1245064=1107951616 int: 100 float: 1.4013e-4319:42:1828指针加减整数的操作表示空间位置上的挪动但是挪动的字节数与其数据类型相关:对float指针加6实际增加了24个字节对long int指针加5实际增加了20个字节对char指针减7实际减少了7个字节对double指针减2实际减少了16个字节19:42:1829数组名本身就是表示元素集合的首地址可以将数组名赋给指针 int a3; for(int i=0; i3; +i) ai = i*2; for(int* iP=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二手房专业独家代理权合同模板版
- 2025年智能汽车分期付款抵押合同
- 2025年度个人与企业间设备分期借款合同2篇
- 二零二五年度棉花种植保险合同4篇
- 2025年度土地租赁合同租赁期满后续约协议
- 二零二五年度体育休闲用地及体育场馆房屋转让合同
- 二零二五年度口红租赁与品牌授权合作合同3篇
- 二零二五年度医疗设备融资租赁合同模板9篇
- 2025年教育培训机构兼职招生销售合同3篇
- 2025年度办公楼保洁服务合同规范集3篇
- 华为HCIA-Storage H13-629考试练习题
- Q∕GDW 516-2010 500kV~1000kV 输电线路劣化悬式绝缘子检测规程
- 辽宁省抚顺五十中学2024届中考化学全真模拟试卷含解析
- 2024年湖南汽车工程职业学院单招职业技能测试题库及答案解析
- 家长心理健康教育知识讲座
- GB/T 292-2023滚动轴承角接触球轴承外形尺寸
- 2024年九省联考高考数学卷试题真题答案详解(精校打印)
- 军人结婚函调报告表
- 民用无人驾驶航空器实名制登记管理规定
- 北京地铁6号线
- 航空油料计量统计员(初级)理论考试复习题库大全-上(单选题汇总)
评论
0/150
提交评论