资源预览内容
第1页 / 共53页
第2页 / 共53页
第3页 / 共53页
第4页 / 共53页
第5页 / 共53页
第6页 / 共53页
第7页 / 共53页
第8页 / 共53页
第9页 / 共53页
第10页 / 共53页
亲,该文档总共53页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C+教程第四章 复杂数据及运算清华大学 郑 莉学习目标 掌握数组的初始化及使用; 掌握地址的概念及指针变量的应用; 掌握引用使用; 学会使用枚举、结构体等数据结构。2目录4.1 数组4.1.1 一维数组的声明和使用4.1.2 多维数组的声明和使用 4.2 指针4.2.1 数据在内存中的地址4.2.2 指针及指针运算3目录(续)4.3 字符串4.3.1 以数组存放C风格的字符串4.3.2 string类型的字符串4.4 枚举类型(不讲)4.5 运算优先级与类型转换(已讲)4引言 为什么会用到复杂数据类型 数组 结构体 枚举 指针数组 当需要处理大量同一类型的数据时。 多数时候,对大批量同类型数据的处理,所用的 方法都是相同的。 例如:某门课程,一个班级的40个学生成绩。 int score1, score2. int score40;结构体(5.5.1) 当需要将一组相关的不同类型的数据作为一个整 体来存储和处理时。 例如:学生信息 struct student int num; string name; char gender; ;枚举(不讲) 当需要模拟整数的某个有限子集的时候 例如:表示一星期的7天 int day;/用整型常量0,1,2,3,4,5,6表示星 期天到星期六。但是int的范围不仅仅是0到6。 enum week Sun, Mon, Tue, Wen, Thu, Fri, Sat;week day;指针(难点)存放地址的类型 1)当函数之间需要共享大量数据的时候,以参数 合返回值在函数之间传递数据会造成很大的开销 ,传递地址比较高效。 2)对于处理大批量数据的程序,需要在运行时动 态申请内存。 动态申请的内存空间与普通变量不同,不能命名, 没有变量名,需要用内存地址去访问动态申请的内 存空间。关于本章例题 为什么要使用复杂数据类型,前面几张幻灯片讲 了根本原因。 本章介绍数组与指针的用法。 本章所用的例题,有些题,也许你会觉得不用复 杂数据类型也可以做出来,甚至可能不用复杂数 据类型会更简单,这些做法仅仅是为了教大家学 会使用复杂数据类型。 在自己写程序的时候,在没有题目特别规定的要 求时,可自行选择合适的做法。4.1 数组 为什么要使用数组? 什么是数组:数组是具有一定顺序关系的若干对 象的集合体,组成数组的对象称为该数组的元素 。 同一数组的各元素具有相同的类型。 数组可以由除了void型以外的任何一种类型构成。问题的提出v统计某一地区每岁年龄的人数,以及总人数,假定不超过120岁。v用120个变量: int age1, age2, age3, . age119, age120程序age1=0; age2=0; coutx; cout0) 程序结构庞大,机械重复 , 于是引入数组4.1.1 一维数组的声明和使用 一维数组类型声明的语法形式为: T Namesize T:类型名,如int型,float型等; Name:数组名; size:常量表达式,表示数组的大小。 数组大小的确定 1. 如果在对一维数组进行初始化时给出了全部初始 值,则数组声明中的元素个数可以省略,编译器会 根据初始值的个数,自动计算出元素个数。 2. 可以用符号常量或常量表达式来说明数组元素的 个数。144.1 数组一维数组的定义数组(整体)int a10;数组名数组元素个数数组类型引用时不能超出下标 最大值引用下标int i=3, j=2, a10; 引用 ai, ai+2, ai+j, a0, a1, a2, . a9数组是一个整体概念,数组元素是个体概念,此例:每一个元素都是一个整数注意: 下标从09统计各年龄段的人数v问题:统计某一地区每岁年龄的人数,以 及总人数,假定不超过120岁。a0, a1, a2, . a1191 岁人数2 岁人数3 岁人数120 岁 人 数定义其他类型数组float b5;char c20;b0, b1, . b4c0, c1, . c19定义引用数组初始化v在定义数组时赋初值int a3=1,3,5; float b2=3.14,5.18; char c5=a, b, c, d, e; 亦可int a =1,2,3,4,5; 编译系统自动确定元素个数int b10=1,2; 前两个元素的值为1、2,其他元素为0数组在内存中的存放在内存中占据: 一片连续的存储区 例: int a20;VC+中,一个整型变量占用 4 个字节内存。.内存a0.a1a2a18a19例4-1:声明并初始化一个具有5个 整数的序列 #include using namespace std;void main() int array5=1,2,3,4,5; for(int i=0;i #include using namespace std; const int size=5; int main() double arrayA=1.1,3,2.4,5.5,9.14; double arrayBsize; for (int i=0; i yi;v输出:for(i=0;i=yi)一维数组应用v逆序v数的分解v求Fibonacci数列问题v排序v插入v查找(顺序、折半)v合并多维数组 一维数组是最基本的数组,一个数组又可以作为元素去 构成更复杂的数组,即“数组的数组”。 例如:表示矩阵或二维表格,要用二维数组。类似嵌套的感觉01234567891011121314每一行都是一 个一维数组将3个一维数组 当成元素构成了 二维数组问题课程1 课程2 课程3 学生1 89 78 56 学生2 88 99 100 学生3 72 80 61 学生4 60 70 75二维表格求每门课程的平均成绩,一列的平均值求一个学生的平均成绩,一行的平均值 4.1.2 多维数组的声明和使用 多维数组类型声明的语法形式为 T Namesize1size2; 其中 T:类型名,如int型,float型等; Name:数组名; size1,size2:为常量表达式,分别表示各维度的大 小。 344.1 数组二维数组的定义数组(整体 )int a43;数组名行数列数数组类型元素的引用int a43 代表12个简单变量:a00 a01 a02a10 a11 a12a20 a21 a22a30 a31 a32行号从 0 开始,列号也从 0 开始,元素的引用问题: 课程1 课程2 课程3 学生1 89 78 56学生2 88 99 100 学生3 72 80 61学生4 60 70 75二维表格元素(个体)int a43 代表12个简单变量如 a00 、a12、a32aij行下标列下标二维数组在内存中的存储v占据一片连续存储区a00 a01 a02a10 a11 a12a20 a21 a22a30 a31 a32按行存放第0 行a00 a01 a02 a10 a11 a12第 1 行a30 a31 a32第 3 行.内存4-3:编写程序模拟一个55的矩阵 ,对元素赋值并输出#include #include using namespace std; void main() int array55; for(int i=0;i #include using namespace std; int main() int arrayA32=2,4,1,6,8,9; int arrayB2=2,4,1,6,8,9,1,10; int arrayC32=2,4,1; int arrayD32=2,4,1; cout“the members of arrayA are:“endl;int i; for(i=0; i3; i+) for (int j=0; j2; j+) coutsetw(4)arrayAij; coutendl;cout“the members of arrayB are:“endl;444.1 数组4.1.2多维数组的声明和使用for(i=0; i4; i+) for (int j=0; j2; j+) coutsetw(4)arrayBij; coutendl; cout“the members of arrayC are:“endl; for(i=0; i3; i+) for (int j=0; j2; j+) coutsetw(4)arrayCij; coutendl; cout“the members of arrayD are:“endl; for(i=0; i3; i+) for (int j=0; j2; j+) coutsetw(4)arrayDij; coutendl; 454.1 数组4.1.2多维数组的声明和使用 例4-4(续 )运行结果: th
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号