版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算基础C+语言实现,计算机的主要作用是对数据进行分析和处理。当数据中含有多条记录或多个属性时,如何将数据有效地存储在计算机中以方便后继的分析和处理,是利用计算机解决实际问题时要考虑的一个重要内容。本章重点介绍多记录数据和多属性数据的存储结构,以及如何使用C+实现这些数据的存储和处理。通过本章的学习,读者一方面能够根据自己的问题,判断出应该采用哪种数据结构;另一方面能够使用C+提供的相应语句,编写程序解决问题。本章还介绍枚举,并给出一个应用程序实例,该实例涉及基本的排序算法的思想,给读者以启发,激发读者利用计算思维解决更多、更复杂的问题的兴趣。,第4章 结构化数据,2,在实际生活中,经常遇到对
2、多条同一性质的记录进行处理和分析的情况,此时会涉及多记录数据的存储。例如,设甲班共有N名学生,要统计甲班某门课程考试中各个成绩范围的学生人数,其具体过程为: 提供原始数据,即N名学生的考试成绩。 设定初始状态,即在查看学生成绩前将各个成绩范围的学生人数置为0。 开始统计分析,即依次查看每名学生成绩并根据成绩更新相应成绩范围的学生人数。 待处理的原始数据中包含了N名学生的成绩,此时就要首先解决这种多记录数据的存储问题。,4.1 多记录数据的存储,3,在有的问题中,不仅待处理的是多记录数据,而且处理结果也是多记录数据。例如,设乙班共有M名学生、期末考试共考核C门课程,要分别统计乙班每名学生在C门课
3、程上的总成绩,其具体过程为: 提供原始数据,即M名学生在C门课程上的考试成绩。 设定初始状态,即在查看学生成绩前分别将每名学生的总成绩置为0。 开始统计分析,即对每名学生依次将其在C门课程上的成绩加到其总成绩上。 待处理的原始数据中包含了M名学生在C门课程上的考试成绩(即共MC个成绩),处理结果中包含了M名学生的总成绩,原始数据和处理结果中都涉及多记录数据的存储问题。,4.1 多记录数据的存储,4,根据数据自身的特性,可以将数据分为一维数据、二维数据、三维数据本书重点介绍易于从直观上理解的一维数据和二维数据。 4.1.1 一维数据 一维数据是指数据元素的值由一个因素唯一确定。,4.1 多记录数
4、据的存储,5,1. 一维数据问题实例 【例4-2】表4-2是各成绩级别所对应的成绩范围。设甲班共有N名学生,统计甲班某门课程考试中各成绩级别的学生人数。 问题求解思路: N名学生中每名学生的考试成绩由学生编号唯一确定,如图4-1所示。因此,待处理的原始数据是一维数据。解决该问题需要3步,其中第2步是第3章中所讲的迭代与选择的嵌套过程,根据学生成绩将相应成绩等级的学生人数增1。解决该问题的算法如表4-3所示。,4.1 多记录数据的存储,6,4.1 多记录数据的存储,7,2. 用C+提供的一维数组存储一维数据 对于一维数据的存储问题,C+提供了相应的一维数组,用户可以使用该数据结构存储待处理数据或
5、处理结果,编写程序完成问题的求解。 (1) 一维数组的定义 数组本质上是一组变量,即数组的每一个元素都是一个变量。与前面学习过的简单变量一样,在使用数组之前,必须先给出数组的定义。一维数组的定义形式为: ;,4.1 多记录数据的存储,8,指定了数组中每一个元素的类型,既可以是前面学习的int、float等基本数据类型,也可以是后面将要学习的指针、结构体、类等数据类型;的命名规则与简单变量的命名规则相同;方括号中的用来指明该数组中元素的数量,即数组的长度,它必须是整型常量、整型符号常量或枚举常量(关于枚举常量可参考4.3节)。 例如,如果要存储10名学生的成绩,就可以定义一个一维数组: int
6、score10; 或 const int SIZE = 10; int scoreSIZE; 上面的语句定义了一个名为score的一维数组,该数组的长度为10,共包含10个int类型的元素,可以用来存储10名学生的成绩。,4.1 多记录数据的存储,9,(2) 一维数组的初始化 同简单变量一样,在定义数组的同时可以为数组中的各个元素赋初值。一维数组的初始化形式为: =初值1, 初值2, , 初值N; 例如,在上述定义存储10名学生成绩的数组的同时,可以为其进行初始化: int score10=97, 85, 68, 95, 99, 73, 86, 75, 62, 53; 提示: score=97
7、, 88, 68, 95, 99, 73, 86, 75, 62, 53;/错误:初始化列表只能在数组定义时使用,4.1 多记录数据的存储,10,(3) 一维数组中元素的访问方法 一个数组包含多个元素,访问一维数组中某个元素的形式为: 方括号中的用来表明要访问元素的位置,可以是常量表达式、也可以是变量表达式,但必须是整数。对于长度为N的一维数组,其取值范围为0N-1。,4.1 多记录数据的存储,11,例如,对于上述定义并初始化的一维数组score,可以按如下方式访问其中的某个元素: coutscore; / 错误:对数组元素的访问只能逐个进行,如 / cinscore1;,4.1 多记录数据的
8、存储,12,【例4-4】根据表4-3给出的算法,编写程序,定义一维数组存储待处理数据,用C+提供的for语句和if语句实现求各成绩级别学生人数的问题。 参考程序如下: #include using namespace std; int main() int score10=97, 85, 68, 95, 99, 73, 86, 75, 62, 53; /定义一维数组score存储待处理的数据 int A, B, C, D, E;/定义变量保存各成绩等级的学生人数 int i;,4.1 多记录数据的存储,13,A=B=C=D=E=0; /在查看学生成绩前将各成绩级别的学生人数 /置为0依次查看每
9、名学生成绩并根据成绩更 /新相应成绩级别的学生人数 for (i=0; i=90 ,4.1 多记录数据的存储,14,cout成绩级别A的学生人数:Aendl 成绩级别B的学生人数:Bendl 成绩级别C的学生人数:Cendl 成绩级别D的学生人数:Dendl 成绩级别E的学生人数:Eendl; return 0; ,4.1 多记录数据的存储,15,4.1.2 二维数据 二维数据是指数据元素的值由两个因素共同确定。二维数据可以看作是由多个一维数据组成。,4.1 多记录数据的存储,16,1. 二维数据问题实例 【例4-5】设乙班共有M名学生,期末考试共考核语文、数学、英语3门课程,分别统计乙班每名
10、学生在这3门课程上的总成绩。 问题求解思路: M名学生中每名学生的考试成绩由学生编号和课程名共同确定,如图4-3所示。因此,待处理的原始数据是二维数据。解决该问题需要两步,其中第1步是第3章中所讲的迭代过程,对每名学生将其在3门课程上的成绩相加得到总成绩。解决该问题的算法如表4-4所示。,4.1 多记录数据的存储,17,2. 用C+提供的一维数组或二维数组存储二维数据 对于二维数据的存储问题,用户既可以使用C+提供的一维数组,也可以使用C+提供的二维数组,下面用一个实例讲解如何使用一维数组来存储二维数据。,4.1 多记录数据的存储,18,【例4-6】根据表4-4给出的算法,编写程序,定义两个一
11、维数组分别存储待处理的二维数据和处理后得到的一维数据,用C+提供的for语句实现求每名学生总成绩的问题。 参考程序如下: #include using namespace std; int main() int score6=90, 95, 85, 97, 89, 83;/定义一维数组 /score存储两名学生在3门课程上的成绩,第1名学生 /在3门课程上的成绩分别为90、95、85,第2名学生在 /3门课程上的成绩分别为97、89、83,4.1 多记录数据的存储,19,int total2;/定义一维数组total存储每名学生在3门课程 /上的总成绩 int i; /对每名学生将其在3门课程
12、上的成绩相加得到总成绩 for (i=0; i2; i+) totali=score3*i+score3*i+1+score3*i+2; /将每名学生的总成绩输出到屏幕上 for (i=0; i2; i+) cout第i+1名学生的总成绩为: totalistr; /从键盘输入abc cout using namespace std;,4.1 多记录数据的存储,26,int main() char str20;/定义一维字符型数组str存储待处理的数 int digitNum=0; /定义用于存储数字字符个数的变量 /digitNum并初始化为0 int N; /定义用于存储字符串长度的变量N
13、 int i; coutstr; /从键盘输入任一字符串保存在str中,如 /a2c3b69e0,4.1 多记录数据的存储,27,/输入字符串内容预先不确定,此处编写程序求字符串长度 for (N=0; N=0 ,4.1 多记录数据的存储,28,在实际生活中,待处理的数据往往具有多个属性,此时会涉及多属性数据的存储。例如,设甲班共有N名学生,每名学生的基本信息包括学号、姓名、入学成绩等多个属性,要查找入学成绩最高的学生并显示其基本信息,其具体过程为: 提供原始数据,即N名学生的基本信息。 设定初始状态,即假设第1名学生的入学成绩最高。 开始数据处理,即依次查看第2N名学生,将每名学生的入学成绩
14、与当前保存的最高入学成绩比较,如果高于最高入学成绩,则将最高入学成绩更新为该名学生的入学成绩。 待处理的原始数据中包含了N名学生的基本信息,每名学生的基本信息包括学号、姓名、入学成绩等多个属性,此时除了涉及4.1节中讲到的多记录数据的存储问题、还涉及多属性数据的存储问题。,4.2 多属性数据的存储,29,在有的问题中,数据的某个属性仍然是一个多属性数据。例如,在学生的基本信息中添加出生日期属性,出生日期本身又是一个多属性数据,由年、月、日3个属性构成。要查找在X年Y月出生的学生并显示其基本信息,其具体过程为: 提供原始数据,即N名学生的基本信息。 开始数据处理,即依次查看每名学生看其出生日期的
15、年份和月份是否与X和Y相同: 如果相同,则显示该名学生的信息。如果所有学生都不满足查找条件,则查找失败。,4.2 多属性数据的存储,30,1. 多属性数据问题实例 【例4-12】在N名学生中查找入学成绩最高的学生并显示其基本信息,每一名学生的基本信息包括学号、姓名、入学成绩。 问题求解思路: N名学生中每名学生的基本信息由学号唯一确定,因此,待处理的原始数据是一维数据。另外,每名学生又包含多个属性,涉及多属性数据的存储。解决该问题需要3步,其中第2步是第3章中所讲的迭代与选择的嵌套过程,m中始终保存着当前所看到的前i名学生中具有最高入学成绩的学生位置。解决该问题的算法如表4-7所示。,4.2
16、多属性数据的存储,31,4.2 多属性数据的存储,32,2. 用C+提供的结构体存储多属性数据 对于多属性数据的存储问题,C+提供了相应的结构体,用户可以根据待解决问题定义结构体类型,并使用结构体类型定义变量实现多属性数据的存储。 (1) 结构体类型的定义 结构体类型定义的一般形式为: struct ;,4.2 多属性数据的存储,33,其中,struct是关键字,表示结构体类型定义的开始。就是定义的结构体类型的名称。包含了若干个成员的声明,每个成员的声明形式为: ; 一个结构体类型定义的最后必须以分号结束。 例如,如果一名学生的基本信息包括学号、姓名和入学成绩,就可以定义一个学生结构体类型:,
17、4.2 多属性数据的存储,34,struct Student char num8; char name10; int score; ; 上面的语句定义了一个名为Student的结构体类型,声明了3个成员: 一维字符型数组成员num和name分别用于保存学生的学号和姓名,int型成员score用于保存学生的入学成绩。,4.2 多属性数据的存储,35,(2) 结构体变量的定义 与使用int等基本数据类型定义变量一样,使用结构体类型可以定义相应的结构体变量存储多属性数据。结构体变量的定义方法有两种。 先定义结构体类型,再定义结构体变量 例如,前面定义结构体类型Student后,就可以利用Studen
18、t类型定义结构体变量: Student s1, s2; 上面的语句定义了两个Student类型的结构体变量s1和s2,使用它们可以存储两名学生的基本信息。 定义结构体类型的同时定义结构体变量(略),4.2 多属性数据的存储,36,(3) 结构体变量的初始化 同其他类型的变量一样,在定义结构体变量的同时可以为结构体变量中的各个成员赋初值。结构体变量的初始化形式为: =成员1初值, 成员2初值, , 成员N初值; 例如,在上述定义存储结构体变量s1和s2的同时,可以为其进行初始化: Student s1=1210101, Zhangsan, 615, s2=1210102, Lisi, 608;,
19、4.2 多属性数据的存储,37,提示: 在C+中,初始化列表只能在定义结构体变量时使用,后面要对结构体变量中的成员赋值则只能逐个进行。例如,下面的语句是错误的: s1=1210103, Wangwu, 610;/错误:初始化列表只 /能在定义结构体变量时使用 (4) 结构体变量的使用 一个结构体变量包含多个成员,访问结构体变量中某个成员的形式为: . 其中,“.”是成员运算符。,4.2 多属性数据的存储,38,例如,对于上述定义并初始化的结构体变量s1和s2,可以按如下方式访问其中的某个成员: s2.score; /将从键盘输入的数据保存在s2的3个成员中,如
20、 /输入1210103 Wangwu 610,则s2中的成员 /num、 name和score存储的数据分别为 /1210103、Wangwu和610,4.2 多属性数据的存储,39,提示: 在C+中,对结构体变量中成员的访问只能逐个进行、不能整体进行。例如,下面的语句是错误的: couts2;/错误:对结构体变量中成员的访问只能逐个进行 相同类型的结构体变量之间可以整体赋值,例如,下面的语句是正确的: s1=s2;/正确:将s2各成员的值赋给s1的各成员,4.2 多属性数据的存储,40,如果结构体变量中的某个成员仍然是结构体类型的,则要对数据成员进行多层引用。例如: struct Date
21、int year,month,day; struct Student char num8,name10; int score; Date birthday; ; 则要访问学生stu的出生年份,应使用stu.birthday.year。,4.2 多属性数据的存储,41,(5) 结构体数组 同其他类型定义数组的形式一样,可以定义结构体类型的数组。例如,如果要操作多名学生的信息,可以定义Student结构体类型的数组: Student stu3; 上面的语句定义了Student类型的结构体数组stu,它有3个元素stu0、stu1、stu2,每个元素都是一个结构体变量,可以用于保存一名学生的信息。使用stui.num、、stui.score(其中i的取值为0、1、2)等形式访问某名学生的学号、姓名和入学成绩。 对结构体数组也可以在定义的同时进行初始化,例如: Student stu3=1210101, Zhangsan, 615, 1210102, Lisi, 608, 1210103, Wangwu, 610;,4.2 多属性数据的存储,42,【例4-14】根据表4-7给出的算法,编写程序,定义学
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 沪教版语文一下《小蝌蚪找妈妈》课件3
- 人教新课标六上《索溪峪的“野”》课件之二
- 危大工程专项安全管理制度及台账模板
- 年产xx吨茶饮料生产项目可行性研究报告
- 中小学网络工程施工方案
- 实验室特殊时段安全培训课件
- 建筑给排水管道维护与保养方案
- 阳台防水方案
- 实验室合规管理专项培训课件
- 酿造酱油扩产项目可行性研究报告
- GB/T 12729.1-2026香辛料和调味品名称
- 2026广东深圳市交易集团限公司选聘28人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年焊工技术比赛模拟试题(含答案)
- 第5课 生命最宝贵 课件(内嵌视频)2026-2027学年道德与法治四年级上册统编版
- 铁矿选矿技术概述培训课件
- 2026中国医生AI行为与态度调研报告抢先版
- 2026报关员面试题目及答案
- 小学一年级同音字大全(带拼音+组词+字义区分课本高频)
- 2026中国人工智能辅助心电图诊断准确率验证研究
- 重庆航天科工集团笔试题
- 中国慢性肾脏病诊疗指南2025版
评论
0/150
提交评论