版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1重谈变量重谈变量 在源程序中,变量是用于存取数据的标识符,具有不同的类型,如:int num;float x,y;double r; 在程序执行过程中,变量是相应存储单元(或一组存储单元)的名字 变量的类型决定 变量占用的存储单元数量 存储单元中二进制数据如何构成变量的值(变量的内容) 变量定义就是建立变量名和存储单元之间的对应关系 变量使用 在等号左边,给变量赋值(存储数据到存储单元) 在“&”表达式中,求得变量的地址(存储单元的地址) 在其他地方,取变量值参与运算(读取存储单元中的数据)第1页/共36页2变量与内存变量与内存int main()int m;int n;double dbl
2、;m = 123;n = 321;dbl = m * n;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0 xFAC2AB2Cm0 xFAC2AB20dbl011110110000000000000000000000000100000100000001000000000000000000000000000000000000000000000000011000000100011111100
3、011010000000 xFAC2AB28n第2页/共36页3数组的定义和使用数组的定义和使用当我们需要处理100个人甚至更多人的年龄时,在程序中该如何来表示这100个甚至更多的数据?定义100个变量吗?int x1, x2, x3, , x100;要是1000个人,10000个人呢?第3页/共36页41.数组的定义和使用数组的定义和使用 什么是数组 如何声明数组 如何给数组赋值 如何遍历与访问数组中的内容 数组的用途 多维数组第4页/共36页51.1 什么是数组什么是数组 数组是一种复合数据类型 数组从整体上定义了一组类型相同的变量 数组中的每个元素都可作为变量使用 数组元素的类型是相同的
4、 数组的元素顺序地存储在连续的内存空间中当要处理很多类型相同的数据时,可利用数组以避免在程序中定义大量的变量第5页/共36页61.2 数组的声明数组的声明 数组声明方法如下: 数据类型 变量名 数组元素个数 = = 数组元素初值; 其中“= = 数组元素初值”部分可以省略 一些数组声明的例子:int score5;char cards4 = a, 0, r, W;float point2 = 2.56, 23.43;double distances4 ;第6页/共36页7数组在内存中的布局数组在内存中的布局主存储器score00score10000score2score3score4主存储器c
5、ards0a0rWcards1cards2cards3int score5;char cards4;第7页/共36页8数组在内存中的布局数组在内存中的布局float point2;double distances4 ;第8页/共36页9数组元素数组元素 声明一个数组变量相当于声明一组变量,这组变量中的每一个都可以通过“数组变量名数组变量名 下标下标 ”形式来访问。例如:score0, score1, score2 等等。 这组变量在内存中是连续存放的,它们的下标从0开始计数。 在数组中(设N是数组的元素总数) 第一个数组元素的下标是0 最后一个数组元素的下标是N-1第9页/共36页101.3
6、数组元素的赋值与访问数组元素的赋值与访问 每个数组元素,就是一个变量。 每个数组元素占用的空间大小是由定义数组变量时给定的类型决定的 cards每个元素占1字节(char类型的长度) distance每个元素占8字节(double 类型的长度)。 数组元素的赋值可以在定义时给定初始值,也可以在程序中给数组元素赋值 在给数组元素赋值时,可以把数组元素看作单个变量,例如:score0 = 67;score3 = 89;distance2 = 356.24;cards0 = b; 给数组元素赋值,数据类型必须匹配。 数组元素可以用在任何单个变量可能出现的地方。例如:int score1, score
7、N;score1 = score0;scoreN= score3;第10页/共36页111.4 数组的遍历数组的遍历可以用一个循环语句给数组的所有元素赋值,或顺序访问它的每个元素。int student100;int odd=0, even=0;for (int i=0; i studenti;for (int i=0; i100;i+) studenti = i+1;if (studenti % 2) = 0) even+;else odd+;第11页/共36页121.5 数组的用途数组的用途 当程序要处理一组类型相同、含义类似的数据时应该使用数组. 例如: 过年了,村里要庆祝一下。村长对村
8、里的128个村民说:做一个游戏,让每个人把出生年+月+日得到一个数。如:1968年10月28日= 1968 + 10 + 28 = 2006。然后把这个数报上来。村里有一笔钱要作为游戏的奖金,数额为M元。如果有人报上来的数字与M相同,就把这笔钱发给这些人。如果只有一个人得奖,奖金都归这个人。如果有多于一个人得奖,则他们平分这笔钱。现在让我们来写一段程序算算都有哪些人得到了奖金?得到多少?第12页/共36页13问题求解问题求解 声明一个数组存放所有村民上报的数据 声明一个数组存放获奖者的编号(幸运者数组) 声明一个整数存放获奖者人数 村民顺序报上数字,其相应的编号就是存放其数据的数组元素下标:0
9、,1,2, 报上数字与幸运数相等,则 记录编号到幸运者数组中 获奖者人数加1 最后,打印出获奖者编号和获得的奖金数额第13页/共36页14#include using namespace std;const int LUCKY_M = 2006; /幸运数字幸运数字const int POPULATION = 128; /村民人数村民人数int main( ) int peoplePOPULATION; /记录所有村民上报的年、月、日相加之和记录所有村民上报的年、月、日相加之和 int luckyPeoplePOPULATION;/幸运者数组,记录获奖者编号幸运者数组,记录获奖者编号 int
10、nLucky=0; /获奖者人数获奖者人数 for (int i=0; i peoplei; /读入村民报的数字,数组下标就是村民的编号读入村民报的数字,数组下标就是村民的编号 for (int i=0; iPOPULATION; i+) if (peoplei = LUCKY_M) luckyPeoplenLucky = i; /假设村民从假设村民从0 0开始编号开始编号 nLucky+; for (int i=0; inLucky; i+)/输出获奖者编号及所获奖金数额输出获奖者编号及所获奖金数额 cout luckyPeoplei LUCKY_M / nLucky endl;第14页/共
11、36页15数组使用中的注意事项数组使用中的注意事项 数组必须初始化(或赋值)后方可使用 在C+中可用type aryN = 0形式给ary赋初值0 数组元素下标范围从0到N-1,避免访问越界 整个数组占用字节数可用“sizeof(数组变量)”获得 声明数组时尽量用常量指明数组长度 数组长度与数组占用字节数是两个不同的概念 数组长度是数组中包含的元素的个数 数组占用字节数是数组在内存中占用的存储单元数第15页/共36页161.6 多维数组多维数组 二维数组的声明:数组的数组 类型类型 变量名变量名 数组行数数组行数数组列数数组列数=初值列表初值列表,初值列表初值列表 二维数组的例子:intmat
12、rix1010 = 0;intn2323 = 1,2,3,2,4,6;double scoresSTUDENT_NUMCOURSE_NUM; 其他多维数组可以此类推第16页/共36页17多维数组在内存中的布局多维数组在内存中的布局主存储器n2300123246n2301n2302n2312n2310n2311n230n231n23第17页/共36页18多维数组应用举例多维数组应用举例11 计算全年级180名学生每个学生8门课的平均成绩和每门课全年级平均成绩 求解过程 定义一个1808的二维数组记录各门课成绩 录入每个人各门课成绩 计算每名学生的平均成绩并打印出来 计算每门课程的平均成绩并打印出
13、来第18页/共36页19学生学生 课程课程0 01 12 2.0 0838361614141.1 1888896966868.2 2676781817070.3 3777767677373.4 4808067678383.5 5838383837373.6 6767678786262.7 7717149497272.8 8949462627272.9 9757581816767.1010404079797878.1111616178787474.1212898993936565.1313868677777272.1414797976767373.求学生的平均分求课程平均分第19页/共36页20
14、#include #include using namespace std;const int STUDENT_NUM = 180; /学生人数学生人数const int COURSE_NUM = 8; /课程门数课程门数int main( ) float scoresSTUDENT_NUMCOURSE_NUM; /原始成绩原始成绩 for (int i=0; iSTUDENT_NUM; i+) /录入学生成绩:录入学生成绩:这是一个二重循环这是一个二重循环 for (int j=0; j scoresij; /读入每门课成绩读入每门课成绩 for (int i=0; iSTUDENT_NUM
15、; i+) /计算学生平均成绩计算学生平均成绩 float sum = 0; /总成绩总成绩 for (int j=0; jCOURSE_NUM; j+) sum+= scoresij; cout Student i : fixed setprecision(3) sum/COURSE_NUM endl; for (int j=0; jCOURSE_NUM; j+) /计算课程平均成绩计算课程平均成绩 float sum = 0; /总成绩总成绩 for (int i=0; iSTUDENT_NUM; i+) sum += scoresij; cout Course j : fixed set
16、precision(3) sum/STUDENT_NUM endl; 第20页/共36页21多维数组应用举例多维数组应用举例 课后思考题:(POJ 2713) 在一个正方形的灰度图片上,肿瘤是一块矩形的区域,肿瘤的边缘所在的像素点在图片中用0表示。其它肿瘤内和肿瘤外的点都用255 表示。现在要求你编写一个程序,计算肿瘤内部的像素点的个数(不包括肿瘤边缘上的点)。已知肿瘤的边缘平行于图像的边缘。第21页/共36页222. 结构的定义和使用结构的定义和使用 通常,我们需要将多个不同类型、但相互之间有着内在联系的数据组合成一个有机的整体,对这个整体进行各种操作。比如, 一个学生的学号、姓名、性别、年
17、龄、各门功课的成绩等数据,这些数据都与一个学生相关联。 如果将这些数据定义为各独立的简单变量:Number、Name、Sex、Age、Course1、Course2、 这样就难以反映它们之间的内在联系。 应该把它们组织成一个组合项,在一个组合项中包含若干各类型不同(当然也可以相同)的数据项。这个组合项就是结构结构。第22页/共36页232. 结构的声明和使用结构的声明和使用 结构类型及其声明 结构类型变量及其访问 结构类型的应用 结构分量的类型 结构的内存布局、大小与对齐第23页/共36页242.1 结构类型及其声明结构类型及其声明 把多个紧密关联的变量顺序组织在一起,定义成一个新的复合类型结
18、构类型 声明一个结构类型struct结构类型名 类型1 1 分量名1;1;类型2 2 分量名2;2;. ; ; 结构分量的类型可以相同,也可不同 同一个结构内的分量名不可相同 不同结构内的分量名可以重用struct point float x; float y;第24页/共36页252.2 结构类型变量的声明结构类型变量的声明 定义新结构只是定义了一个新类型 系统并不为这个新类型分配内存空间 系统只会为该类型的变量按结构的定义分配空间。 结构类型变量定义的两种形式: 用已定义的结构定义变量,例如:struct point point1;struct point point1;struct po
19、int point2;struct point point2; 定义结构的同时定义结构类型的变量,例如:struct roof struct roof float x, y;float x, y;int p;int p; roof1, roof2; roof1, roof2;第25页/共36页262.3 结构类型变量的访问结构类型变量的访问 结构类型变量的值由其各个分量构成 对分量的访问一般通过变量名.分量名完成 结构赋值及访问的例子:float dx, dy;struct point float x, y; p1, p2, points2;p1.x = p1.y = 3.5f;p2.x =
20、p2.y = 1.5f;dx= p1.x - p2.x;dy= p1.y - p2.y;points0 = p1; /结构变量本身可以作为一个整体来访问结构变量本身可以作为一个整体来访问points1 = p2;第26页/共36页27示例:用结构求解救援过程示例:用结构求解救援过程 在图的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。图中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表示。救生船每次从大本营出发,以速度50米/分钟时向下一个屋顶,达到一个屋顶后,救下其上的所有人,每人上船1分钟,船原路返回,达到大本营,每人下船0.5分钟。假设原点与任意一个屋顶的连线不穿过其它
21、屋顶。假设屋顶数为50,给定屋顶数以及每个屋顶的坐标和人数,求出所有人都到达大本营并登陆所用的时间。并输出所有屋顶的坐标和人数。第27页/共36页28NiiiipspeedyxtotalTime122)5 . 01 (2(第28页/共36页29#include #include const int NUM = 50; const float SPEED = 50.0; const float UP = 1.0; const float DOWN = 0.5;int main()struct roof float x, y;/ 屋顶坐标屋顶坐标int p;/ 屋顶上的人数屋顶上的人数roofsN
22、UM;int roof_num;/ 屋顶数屋顶数 printf(Please input roof_num:); scanf(%d, &roof_num);float x, y;int p;for (int i=0;iroof_num;i+) /用循环输入每一个屋顶的位置及人数用循环输入每一个屋顶的位置及人数scanf(%f%f%d,&x, &y, &p);roofsi.x = x; roofsi.y = y; roofsi.p = p;double totalTime = 0;/ 救援总时间救援总时间for (int i=0; iroof_num; i+) /用循环处理每一个屋顶,计算救援时
23、间用循环处理每一个屋顶,计算救援时间x = roofsi.x; y = roofsi.y; p = roofsi.p;totalTime += 2 * sqrt(x*x + y*y) / SPEED; / 计算从大本营到屋顶的双程航行时间计算从大本营到屋顶的双程航行时间totalTime += p * (UP + DOWN); / 计算被求人员上船和下船所耗费的总时间计算被求人员上船和下船所耗费的总时间printf(Total Time is: %.2lfn, totalTime); / 打印出救援总时间打印出救援总时间for (int i=0; iroof_num; i+) / 依次打印出各
24、屋顶的位置及人数依次打印出各屋顶的位置及人数printf(Roof ID: %d %.2f %.2f %dn, i+1, roofsi.x, roofsi.y, roofsi.p);第29页/共36页302.3 结构应用示例学生成绩统计 定义一个结构,包含学生的所有信息。struct student int number; char name8; char sex; int age; float course8; ;struct student class1160;第30页/共36页312.4 复合类型的结构分量复合类型的结构分量结构分量的类型可以是任何类型 结构类型分量struct point float x, y;struct roof struct point location; int p;roof1; (roof1.location).x 数组类型分量struct city struct point int x, y; location; char na
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水资源综合实践课程设计
- 2024版脚手架建筑工程合同范本
- 2025年外研版高三数学下册月考试卷
- 2025年度物业管理服务合同:某大型商业综合体物业管理3篇
- 烟道工程专项施工方案
- 家庭健康饮食与营养均衡常识
- 2024年金融机构与教育机构融资担保合同2篇
- 少年宫组织中小学生社团的课外体育运动现状调查与提高教学质量报告
- 2024新劳务派遣协议-金融风控领域专业人才派遣服务3篇
- 2024年露台租赁协议2篇
- 居家养老上门服务投标方案(技术方案)
- 物理化学习题(含答案)
- 某公司廉洁自律管理规定全套
- 精密仪器设计基础
- 2023年个股期权从业人员考试(二级)真题模拟汇编(共170题)
- 公路工程勘察设计投标方案(技术方案)
- 诺基亚4G基站配置及常见故障处理课件
- 施工升降机卸料平台计算书
- 微信小程序开发完整全套教学课件
- 大学生创新创业基础大赛案例精简版PPT完整全套教学课件
- 中医基础理论期末考试题
评论
0/150
提交评论