ArrayStructure数组和结构实用教案

上传人:牛*** 文档编号:63443966 上传时间:2022-03-18 格式:PPT 页数:37 大小:929.50KB
收藏 版权申诉 举报 下载
ArrayStructure数组和结构实用教案_第1页
第1页 / 共37页
ArrayStructure数组和结构实用教案_第2页
第2页 / 共37页
ArrayStructure数组和结构实用教案_第3页
第3页 / 共37页
资源描述:

《ArrayStructure数组和结构实用教案》由会员分享,可在线阅读,更多相关《ArrayStructure数组和结构实用教案(37页珍藏版)》请在装配图网上搜索。

1、1重谈变量重谈变量(binling)(binling) 在源程序中,变量是用于存取数据的标识符,具有不同的类型,如:int num;float x,y;double r; 在程序执行过程中,变量是相应存储单元(cn ch dn yun)(或一组存储单元(cn ch dn yun))的名字 变量的类型决定 变量占用的存储单元(cn ch dn yun)数量 存储单元(cn ch dn yun)中二进制数据如何构成变量的值(变量的内容) 变量定义就是建立变量名和存储单元(cn ch dn yun)之间的对应关系 变量使用 在等号左边,给变量赋值(存储数据到存储单元(cn ch dn yun)) 在

2、“&”表达式中,求得变量的地址(存储单元(cn ch dn yun)的地址) 在其他地方,取变量值参与运算(读取存储单元(cn ch dn yun)中的数据)第1页/共36页第一页,共37页。2变量变量(binling)(binling)与内存与内存int main()int m;int n;double dbl;m = 123;n = 321;dbl = m * n;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

3、CCCCCCCCCCCCCC0 xFAC2AB2Cm0 xFAC2AB20dbl011110110000000000000000000000000100000100000001000000000000000000000000000000000000000000000000011000000100011111100011010000000 xFAC2AB28n第2页/共36页第二页,共37页。3数组的定义数组的定义(dngy)(dngy)和使用和使用当我们需要处理100个人甚至更多人的年龄时,在程序中该如何来表示这100个甚至更多的数据(shj)?定义100个变量吗?int x1, x2, x3

4、, , x100;要是1000个人,10000个人呢?第3页/共36页第三页,共37页。41.数组的定义数组的定义(dngy)和使用和使用 什么是数组 如何(rh)声明数组 如何(rh)给数组赋值 如何(rh)遍历与访问数组中的内容 数组的用途 多维数组第4页/共36页第四页,共37页。51.1 什么什么(shn me)是数组是数组 数组是一种复合数据类型 数组从整体上定义了一组类型相同的变量 数组中的每个元素都可作为变量使用 数组元素的类型是相同的 数组的元素顺序地存储在连续的内存空间中当要处理很多类型相同的数据时, 可利用数组以避免(bmin)在程序中定义大量的变量第5页/共36页第五页,

5、共37页。61.2 数组的声明数组的声明(shngmng) 数组声明方法如下: 数据类型 变量名数组元素(yun s)个数= 数组元素(yun s)初值; 其中“= 数组元素(yun s)初值”部分可以省略 一些数组声明的例子: int score5; char cards4 = a, 0, r, W; float point2 = 2.56, 23.43; double distances4 ;第6页/共36页第六页,共37页。7数组在内存数组在内存(ni cn)(ni cn)中的布局中的布局主存储器score00score10000score2score3score4主存储器cards0a

6、0rWcards1cards2cards3int score5;char cards4;第7页/共36页第七页,共37页。8数组在内存数组在内存(ni cn)(ni cn)中的布局中的布局float point2;double distances4 ;第8页/共36页第八页,共37页。9数组元素数组元素(yun s)(yun s) 声明一个数组变量相当于声明一组变量,这组变量中的每一个都可以通过“数组变量名下标”形式来访问(fngwn)。例如:score0, score1, score2 等等。 这组变量在内存中是连续存放的,它们的下标从0开始计数。 在数组中(设N是数组的元素总数) 第一个数

7、组元素的下标是0 最后一个数组元素的下标是N-1第9页/共36页第九页,共37页。101.3 数组元素数组元素(yun s)的赋值与访问的赋值与访问 每个数组元素,就是一个变量。 每个数组元素占用的空间大小是由定义(dngy)数组变量时给定的类型决定的 cards每个元素占1字节(char类型的长度) distance每个元素占8字节(double 类型的长度)。 数组元素的赋值可以在定义(dngy)时给定初始值,也可以在程序中给数组元素赋值 在给数组元素赋值时,可以把数组元素看作单个变量,例如:score0 = 67; score3 = 89; distance2 = 356.24; car

8、ds0 = b; 给数组元素赋值,数据类型必须匹配。 数组元素可以用在任何单个变量可能出现的地方。例如: int score1, scoreN; score1 = score0; scoreN= score3;第10页/共36页第十页,共37页。111.4 数组的遍历数组的遍历(bin l) 可以用一个循环语句给数组的所有元素赋值,或顺序(shnx)访问它的每个元素。 int student100; int odd=0, even=0; for (int i=0; i studenti; for (int i=0; i100;i+) studenti = i+1; if (studenti %

9、 2) = 0) even+; else odd+; 第11页/共36页第十一页,共37页。121.5 数组的用途数组的用途(yngt) 当程序要处理一组类型相同、含义类似的数据时应该使用数组. 例如(lr): 过年了,村里要庆祝一下。村长对村里的128个村民说:做一个游戏,让每个人把出生年+月+日得到一个数。如:1968年10月28日= 1968 + 10 + 28 = 2006。然后把这个数报上来。村里有一笔钱要作为游戏的奖金,数额为M元。如果有人报上来的数字与M相同,就把这笔钱发给这些人。如果只有一个人得奖,奖金都归这个人。如果有多于一个人得奖,则他们平分这笔钱。现在让我们来写一段程序算

10、算都有哪些人得到了奖金?得到多少?第12页/共36页第十二页,共37页。13问题问题(wnt)求解求解 声明一个数组存放所有村民上报的数据 声明一个数组存放获奖者的编号(幸运者数组) 声明一个整数存放获奖者人数 村民顺序报上数字(shz),其相应的编号就是存放其数据的数组元素下标:0,1,2, 报上数字(shz)与幸运数相等,则 记录编号到幸运者数组中 获奖者人数加1 最后,打印出获奖者编号和获得的奖金数额第13页/共36页第十三页,共37页。14#include using namespace std;const int LUCKY_M = 2006; /幸运数字const int POPU

11、LATION = 128; /村民人数int main( ) int peoplePOPULATION; /记录所有村民上报的年、月、日相加之和 int luckyPeoplePOPULATION;/幸运者数组,记录获奖者编号 int nLucky=0; /获奖者人数 for (int i=0; i peoplei; /读入村民报的数字,数组下标就是村民的编号 for (int i=0; iPOPULATION; i+) if (peoplei = LUCKY_M) luckyPeoplenLucky = i; /假设(jish)村民从0开始编号 nLucky+; for (int i=0;

12、inLucky; i+)/输出获奖者编号及所获奖金数额 cout luckyPeoplei LUCKY_M / nLucky endl;第14页/共36页第十四页,共37页。15数组使用数组使用(shyng)(shyng)中的注意事项中的注意事项 数组必须初始化(或赋值)后方可使用 在C+中可用type aryN = 0形式给ary赋初值0 数组元素下标范围从0到N-1,避免访问越界(yu ji) 整个数组占用字节数可用“sizeof(数组变量)”获得 声明数组时尽量用常量指明数组长度 数组长度与数组占用字节数是两个不同的概念 数组长度是数组中包含的元素的个数 数组占用字节数是数组在内存中占用

13、的存储单元数第15页/共36页第十五页,共37页。161.6 多维数组多维数组 二维数组的声明:数组的数组 类型 变量名数组行数数组列数=初值列表(li bio),初值列表(li bio) 二维数组的例子: intmatrix1010 = 0; intn2323 = 1,2,3,2,4,6; double scoresSTUDENT_NUMCOURSE_NUM; 其他多维数组可以此类推第16页/共36页第十六页,共37页。17多维数组在内存多维数组在内存(ni cn)(ni cn)中的布局中的布局主存储器n2300123246n2301n2302n2312n2310n2311n230n231n

14、23第17页/共36页第十七页,共37页。18多维数组应用多维数组应用(yngyng)(yngyng)举例举例11 计算全年级180名学生每个学生8门课的平均成绩和每门课全年级平均成绩 求解(qi ji)过程 定义一个1808的二维数组记录各门课成绩 录入每个人各门课成绩 计算每名学生的平均成绩并打印出来 计算每门课程的平均成绩并打印出来第18页/共36页第十八页,共37页。19学生学生 课程课程0 01 12 2.0 0838361614141.1 1888896966868.2 2676781817070.3 3777767677373.4 4808067678383.5 58383838

15、37373.6 6767678786262.7 7717149497272.8 8949462627272.9 9757581816767.1010404079797878.1111616178787474.1212898993936565.1313868677777272.1414797976767373.求学生(xu sheng)的平均分求课程(kchng)平均分第19页/共36页第十九页,共37页。20#include #include using namespace std;const int STUDENT_NUM = 180; /学生人数const int COURSE_NUM =

16、 8; /课程门数int main( ) float scoresSTUDENT_NUMCOURSE_NUM; /原始(yunsh)成绩 for (int i=0; iSTUDENT_NUM; i+) /录入学生成绩:这是一个二重循环 for (int j=0; j scoresij; /读入每门课成绩 for (int i=0; iSTUDENT_NUM; i+) /计算学生平均成绩 float sum = 0; /总成绩 for (int j=0; jCOURSE_NUM; j+) sum+= scoresij; cout Student i : fixed setprecision(3)

17、 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 setprecision(3) sum/STUDENT_NUM endl; 第20页/共36页第二十页,共37页。21多维数组应用多维数组应用(yngyng)(yngyng)举例举例 课后思考题:(POJ 2713) 在一个正方形的灰度图片上,肿瘤是一块矩形的区域,肿瘤的边缘(binyun)

18、所在的像素点在图片中用0表示。其它肿瘤内和肿瘤外的点都用255 表示。现在要求你编写一个程序,计算肿瘤内部的像素点的个数(不包括肿瘤边缘(binyun)上的点)。已知肿瘤的边缘(binyun)平行于图像的边缘(binyun)。第21页/共36页第二十一页,共37页。222. 结构结构(jigu)的定义和使用的定义和使用 通常,我们需要将多个不同类型、但相互之间有着内在联系的数据组合成一个有机的整体,对这个整体进行各种操作(cozu)。比如, 一个学生的学号、姓名、性别、年龄、各门功课的成绩等数据,这些数据都与一个学生相关联。 如果将这些数据定义为各独立的简单变量:Number、Name、Sex

19、、Age、Course1、Course2、 这样就难以反映它们之间的内在联系。 应该把它们组织成一个组合项,在一个组合项中包含若干各类型不同(当然也可以相同)的数据项。这个组合项就是结构。第22页/共36页第二十二页,共37页。232. 结构结构(jigu)的声明和使用的声明和使用 结构类型及其声明 结构类型变量及其访问 结构类型的应用 结构分量的类型 结构的内存(ni cn)布局、大小与对齐第23页/共36页第二十三页,共37页。242.1 结构结构(jigu)类型及其声明类型及其声明 把多个紧密关联的变量顺序组织在一起,定义成一个新的复合类型结构(jigu)类型 声明一个结构(jigu)类

20、型 struct结构(jigu)类型名 类型1 分量名1; 类型2 分量名2; . ; 结构(jigu)分量的类型可以相同,也可不同 同一个结构(jigu)内的分量名不可相同 不同结构(jigu)内的分量名可以重用struct point float x; float y;第24页/共36页第二十四页,共37页。252.2 结构类型结构类型(lixng)变量的声明变量的声明 定义新结构只是定义了一个新类型(lixng) 系统并不为这个新类型(lixng)分配内存空间 系统只会为该类型(lixng)的变量按结构的定义分配空间。 结构类型(lixng)变量定义的两种形式: 用已定义的结构定义变量,

21、例如: struct point point1; struct point point2; 定义结构的同时定义结构类型(lixng)的变量,例如: struct roof float x, y; int p; roof1, roof2;第25页/共36页第二十五页,共37页。262.3 结构结构(jigu)类型变量的访问类型变量的访问 结构类型变量的值由其各个(gg)分量构成 对分量的访问一般通过变量名.分量名完成 结构赋值及访问的例子: float dx, dy; struct point float x, y; p1, p2, points2; p1.x = p1.y = 3.5f; p2

22、.x = p2.y = 1.5f; dx= p1.x - p2.x; dy= p1.y - p2.y; points0 = p1; /结构变量本身可以作为一个整体来访问 points1 = p2;第26页/共36页第二十六页,共37页。27示例示例(shl)(shl):用结构求解救援过程:用结构求解救援过程 在图的原点是大本营,救生船每次从大本营出发,救了人之后将人送回大本营。图中的点代表屋顶,每个屋顶由其位置坐标和其上的人数表示。救生船每次从大本营出发,以速度50米/分钟时向下一个屋顶,达到(d do)一个屋顶后,救下其上的所有人,每人上船1分钟,船原路返回,达到(d do)大本营,每人下船

23、0.5分钟。假设原点与任意一个屋顶的连线不穿过其它屋顶。假设屋顶数为50,给定屋顶数以及每个屋顶的坐标和人数,求出所有人都到达大本营并登陆所用的时间。并输出所有屋顶的坐标和人数。第27页/共36页第二十七页,共37页。28NiiiipspeedyxtotalTime122)5 . 01 (2(第28页/共36页第二十八页,共37页。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

24、float x, y;/ 屋顶坐标int p;/ 屋顶上的人数roofsNUM;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+) /用循环

25、处理每一个屋顶,计算(j sun)救援时间x = roofsi.x; y = roofsi.y; p = roofsi.p;totalTime += 2 * sqrt(x*x + y*y) / SPEED; / 计算(j sun)从大本营到屋顶的双程航行时间totalTime += p * (UP + DOWN); / 计算(j sun)被求人员上船和下船所耗费的总时间printf(Total Time is: %.2lfn, totalTime); / 打印出救援总时间for (int i=0; iroof_num; i+) / 依次打印出各屋顶的位置及人数printf(Roof ID: %

26、d %.2f %.2f %dn, i+1, roofsi.x, roofsi.y, roofsi.p);第29页/共36页第二十九页,共37页。302.3 结构(jigu)应用示例学生成绩统计 定义一个结构,包含学生(xu sheng)的所有信息。 struct student int number; char name8; char sex; int age; float course8; ; struct student class1160;第30页/共36页第三十页,共37页。312.4 复合类型的结构复合类型的结构(jigu)分量分量结构分量的类型可以(ky)是任何类型结构类型分量st

27、ruct point float x, y;struct roof struct point location; int p;roof1; (roof1.location).x数组类型分量struct city struct point int x, y; location; char name32;分量的类型不能是未定义的结构类型不能定义两个同名的结构类型(在同一作用域内)第31页/共36页第三十一页,共37页。322.5 结构结构(jigu)的内存布局的内存布局 结构分量在内存(ni cn)中顺序存放 struct square struct point int x, y; p1, p2;

28、 sq1; sq1.p1.x = 10; sq1.p1.y = 20; sq1.p2.x = 100; sq1.p2.y = 200;主存储器sq1.p1.x1020100200*sq1.p1.ysq1.p2.xsq1.p2.y第32页/共36页第三十二页,共37页。33结构结构(jigu)(jigu)的大小的大小 结构的大小并不完全决定(judng)于分量 struct char_frequency char c; int frequency; ; sizeof(strcut char_frequency)通常为8,而非5 这是编译器在编译时的一个特殊要求第33页/共36页第三十三页,共37

29、页。34结构结构(jigu)(jigu)使用中的注意事项使用中的注意事项 结构名不能相重、结构内分量名也不能相重 结构占用内存字节数不等同于分量占用字节总数 只把真正相互紧密关联的分量定义在同一个结构中 结构分量可以是任何数据类型,但不能是未定义的类型 结构也可用作数组的元素类型(结构数组) struct roof float x, y; int p; roofs100; 数组也可作为结构的分量类型 使用结构变量(binling)时首先要对分量进行初始化或赋值第34页/共36页第三十四页,共37页。35小结小结(xioji)(xioji) 回顾了变量与存储单元间的关系 介绍了数组的定义与用法

30、通过数组可定义大量类型(lixng)相同的变量 数组元素通过“变量下标”形式访问 数组的大小(数组元素的个数)是预先确定的,即数组定义中数组个数必须是整数常量 介绍了结构的定义与用法 结构把一组紧密相关的变量组织成一个整体 结构的分量通过变量.分量形式访问第35页/共36页第三十五页,共37页。36感谢您的观赏(gunshng)!第36页/共36页第三十六页,共37页。NoImage内容(nirng)总结1。在程序执行过程中,变量是相应存储单元(或一组存储单元)的名字。第1页/共36页。第2页/共36页。要是1000个人,10000个人呢。第3页/共36页。第10页/共36页。如果只有一个人得奖,奖金都归这个人。其它肿瘤内和肿瘤外的点都用255 表示。第28页/共36页。scanf(%d, &roof_num)。2.3 结构(jigu)应用示例学生成绩统计。结构(jigu)占用内存字节数不等同于分量占用字节总数。第35页/共36页第三十七页,共37页。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!