[所有分类]C 程序设计教程3新课件

上传人:我*** 文档编号:142203153 上传时间:2020-08-17 格式:PPT 页数:37 大小:189.50KB
返回 下载 相关 举报
[所有分类]C 程序设计教程3新课件_第1页
第1页 / 共37页
[所有分类]C 程序设计教程3新课件_第2页
第2页 / 共37页
[所有分类]C 程序设计教程3新课件_第3页
第3页 / 共37页
[所有分类]C 程序设计教程3新课件_第4页
第4页 / 共37页
[所有分类]C 程序设计教程3新课件_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《[所有分类]C 程序设计教程3新课件》由会员分享,可在线阅读,更多相关《[所有分类]C 程序设计教程3新课件(37页珍藏版)》请在金锄头文库上搜索。

1、14:44:57,1,C + 程序设计教程(第二版),第三章 数据类型 Chapter 3 Data Types,14:44:57,2,数据类型: 一定的数据在计算机的内部表示; 该数据所表示的值的集合; 在该数据上的一系列操作。 内部数据类型: 1.整型 长整型,短整型,字符型,布尔型 2.浮点型 单精度,双精度,14:44:57,3,第三章内容,整型 ( int Types ) 整型子类 ( sub-int Types ) 浮点型 ( Floating-Point Type ) C-串与string ( C-string / 错,14:44:57,6,. 整型子类( Sub-int Typ

2、es ),字符型: 表示范围: 有符号:-128127 无符号:0255 输出形式与整型数不同: int a = 65; char b = 65; couta“n”; coutb“n”; 结果为: 65 A,14:44:57,7,枚举型: 自定义整数区间,甚至列举单个整数值 enum Week Mon, Tue, Wed, Thu, Fri, Sat, Sun ; 最大特点是可以给每个值指定一个在程序中直接使用的标记(枚举符) 编程中将其当作整数常量用如: int a = 7; if ( a = Sun) cout “Sundayn”;,14:44:57,8,布尔型: 表示范围仅含整数和1,也

3、可以表示成true和false,相当于: enum bool false, true ; 因为条件表达式、逻辑运算的结果都是或,所以,相当大数量的表达式的值与布尔型对应,14:44:57,9,3. 浮点型 ( Floating-Point Types ),浮点数的内部表示: 国际标准IEEE754浮点表示法,它与编程所用的浮点数字面量以及输出的十进制浮点数之间有一个转换关系 浮点数的表示范围: 32位浮点数3.41038 64位浮点数1.810308 浮点数的操作: 常规的加、减、乘、除等操作,14:44:57,10,4. C-串与string ( C-string cout *str end

4、l; / 显示H cout str endl; / 显示Hello,14:44:57,12,C-串不能直接比较,因为字符指针的比较只是地址值的比较而不是C-串的字典序比较: cout(“join”=”join” ? ” : ”not “)”equaln”; / 字面值比较 char* str1=”good”; char* str2=”good”; cout(str1=str2 ? ” : ”not “)”equaln”; / 字符指针比较 char buffer16=”Hello”; char buffer26=”Hello”; cout(buffer1=buffer2 ? ” : ”not

5、“)”equaln”; / 字符数组比较 结果: not equal not equal not equal,14:44:57,13,不得不配备专门操作C-串的库函数: strcpy(s1, s2); /从s2拷贝到s1 strcmp(s1, s2); /比较s1与s2 strcat(s1, s2); /连接s2到s1 strrev(s); /将s倒排 strset(s, c); /将s全置为c strstr(s, “ell”); /查找s中的子串 strchr(s,c); /查找s中的字符 等等,14:44:57,14,但字符指针操作C-串的安全性受到质疑: char* str1; char

6、* str2 = new char5; strcpy(str2, ”ugly”); strcpy(str1,str2); / 错: str1没有空间可储 strcpy(str2, ”Hello”); / 错: str2空间不够大 str2 = ”Hello”; / 错:原来的”ugly”空间脱钩,导致内存泄漏 根源:复制操作须以足够的目的地空间为前提,而所有C-串操作的空间调配都是人为安排的,C-串库函数一概不管,14:44:57,15,类串string串类自定义串 对应字符指针的C-串操作: string a, s1 = Hello ; string s2 = 123; a = s1; /

7、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 )foundn; / find char,14:44:57,16,输入C-串的string承载方式: cin的读入方式总是将前导的空

8、格(所谓空格,即包括空格、回车、水平或垂直制表符等)滤掉,将单词读入,在遇到空格时结束本次输入 getline总是将行末的回车符滤掉,将其整行输入 对字串”Hello, How are you?”的两种输入方式 for ( string s; cins; ) couts” “; coutendl; string s; getline(cin, s); coutsendl;,14:44:57,17,string流: 将string实体看作是一个输入设备给一个像cin这样的取名,作为流来操作,会很有用 例如,如果一个文件aaa.txt,有若干行,每行中含有不知道几个的整数,要输出每行的整数和: i

9、fstream in ( aaa.txt ) ; for ( string s ; getline ( in, s ) ; ) int a, sum=0 ; for ( istringstream sin ( s ) ; sin a ; sum += a ) ; cout sum “n” ; ,14:44:57,18,5. 数组( Arrays ),数组是同类元素的集合,它的元素排列在连续的空间中,按下标来标记 描述数组必须给出元素类型,元素个数 元素个数必须在编程时确定,任何变量都不允许 int aa ; / 表示int a97; int n = 100 ; int an ; / 错: 元素

10、个数必须预知 const int n = 100 ; int an ; / ok int a ; / 错: 无元素个数 int a = 1, 2, 3, 4, 5 ; / ok:通过初始化确定元素个数,14:44:57,19,数组初始化可选,但须遵循语法无初始化的数组按规定取默认值 int array15 = 1, 2, 3, 4, 5, 6 ; / 错: 初始值个数超元素个数 int array25 = 1, , 2, 3, 4 ; / 错: 不能以逗号方式省略 int array35 = 1, 2, 3, ; / 错: 同上 int array45 = ; / 错: 初始值不能为空 int

11、 array55 = 1, 2, 3 ; / ok: 后面元素取0 int array65 = 0 ; / ok: 元素全为0 int array75 ; / ok: 元素值不确定 int a35 = 1, 2, 3, 4, 5 , 2, 3, 4, 5, 6 , 3, 4, 5, 6, 7 ;,14:44:57,20,数组有诸多缺陷,造成编程艰难和不安全 int a5 = 1,2,3,4,5, c5; int b5 = a; / 错:无法拷贝创建 c = a; / 错:无法整体拷贝和局部拷贝 a8 = 10; / 错:无法动态扩容和随意增减元素 for(int i=0; i=5; +i) /

12、 错:无法防范下标溢出 ai = i+1; if(a=c) a0 = 2; / 错:不可比较,14:44:57,21,二维数组的初始化,下标访问及输出 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=0; i2; +i) for(int j=0; j3; +j) coutarray2ij,; coutn; 结果为: array1: 1,2,3,4,5,0, arra

13、y2: 1,2,0,4,0,0,14:44:57,22,.向量( vector ),向量与数组的共同特征是元素的排列在逻辑上是线性序列结构,可以用下标进行访问 向量可以按需创建,拷贝创建,局部拷贝创建,异类拷贝和创建 灵活的初始化 随意扩容和元素增减 可通过异常来进行下标溢出追踪和处理 可比较 等等,14:44:57,23,int n=10; int t5=1,2,3,4,5; vector a(n); /按需创建 vector b(10, 1); /元素赋全,灵活的初始化 vector c(b); / 整体拷贝创建 vector f(t, t+5); /异类拷贝创建 vector d(b.b

14、egin(), b.begin()+3);/局部拷贝创建d为b的前个元素 a.assign(100); /动态扩容至100个元素,14:44:57,24,向量常用操作 a.assign(b.begin(), b.begin()+3); / b的前3个元素赋给a a.assign(4,2); / a向量含4个元素,全初始化为2 int x = a.back(); / a的最后一个元素赋给变量x a.clear(); / a向量清空(不再有元素) if(a.empty() cout”empty”; / a判空操作 int y = a.front(); / a的第一个元素赋给变量y a.pop_ba

15、ck(); / 删除a的最后一个元素 a.push_back(5); / a最后插入一个元素,其值为5 a.resize(10); / a元素个数调至10。多删少补,其值随机 a.resize(10,2);/a元素个数调至10。多删少补,新添元素初值为2 if(a=b) cout”equal”; / a与b的向量比较操作,14:44:57,25,向量操作尤其适合于函数参数传递(-D以上的数组参数的传递十分丑陋): 传递一个矩阵,无论其每行中的元素个数不同.输出之: typedef vector Mat; void print(const Mat (f0310,f0311),14:44:57,26,7. 指针与引用 ( Pointers int iCount = 18; int* iPtr = / 间访操作,14:44:57,27,指针操作与指向数据的类型密切相关 float f = 34.5; int* ip = reinterpret_cast(结果为: fAddr: 1245064=34.5 iAddr: 1245064=1107951616 i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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