数据的组织结构(一)(1)

上传人:沈*** 文档编号:148068195 上传时间:2022-09-04 格式:PPTX 页数:36 大小:176.60KB
收藏 版权申诉 举报 下载
数据的组织结构(一)(1)_第1页
第1页 / 共36页
数据的组织结构(一)(1)_第2页
第2页 / 共36页
数据的组织结构(一)(1)_第3页
第3页 / 共36页
资源描述:

《数据的组织结构(一)(1)》由会员分享,可在线阅读,更多相关《数据的组织结构(一)(1)(36页珍藏版)》请在装配图网上搜索。

1、第第4 4章章 数据的组织结构(一)数据的组织结构(一)4.3 字符串的组织 4.2 利用一维数组组织数据的应用实例 4.1 数组类型 4.4 常用的字符串标准函数及应用实例 4.5 二维数组 课前复习课前复习 前三章 数据类型 -数据结构的一种方式 学习新的数据的组织形式-数据结构的另一种方式4.1 4.1 数组类型数组类型 数组类型的应用背景(1)同时存在若干个用来描述同一性质且不同个体的数据。(2)只有将这些数据组织在一起形成批量数据,共同参与处理,很多操作才具有实际意义。l例如:在某个部门中,需要由全体职工推选一名办公室主任。假设有10名候选人准备参与竞选。希望编写一个程序,统计每个候

2、选人的得票数量及选举结果。一维数组类型的定义 l定义格式:;例如:int vote10;lC语言规定:数组的下标从0开始,因此,表示这10个数据的下标为09 l变量一经定义,系统就要为它分配相应的存储空间。在C程序中,系统将会为每个数组型变量分配一片连续的存储空间,所需要分配的存储空间总数将取决于包含的元素个数和每个元素需要的存储空间。一维数组的初始化l基本格式为:=,.,;l例如:float score5=9.2,9.1,8.7,9.1,8.5;说明:1)为数组型变量中的每一个元素都提供了一个初始值。此时,可以省略方括号内的数组元素数量。系统将根据花括号中包含的初值数目推测出数组含有的元素数

3、量。float score =9.2,9.1,8.7,9.1,8.5;2)对数组型变量的前面若干个元素赋予初值。此时可以使用下面这种书写形式:int letter26=10,9,8,7;它的执行结果是:将10、9、8、7分别赋予letter数组中下标为0、1、2、3的元素,后面的所有元素赋予初值0。3)将数组型变量中的每一个元素赋予初值0。此时,可以使用下面这种简化的书写形式:int vote10=0;一维数组元素的引用及基本操作1.数组元素的引用l 2.数组的赋值l利用赋值语句为数组赋值 for(i=0;i10;i+)votei=0;l调用标准输入函数为数组赋值 for(i=0;i13;i+

4、)scanf(“%f”,&scorei);3.数组的输出 for(i=0;i10;i+)printf(“%5d”,votei);按照条件对数据进行筛选 l在遇到的许多问题中,经常需要从众多的数据中挑选出来满足一定条件的数据,这就是数据的筛选操作。在C程序中,参与筛选操作的批量数据可以采用一个一维数组型变量组织,筛选的条件用逻辑表达式表示。4.2 4.2 利用一维数组组织数据的应用实例利用一维数组组织数据的应用实例例1:在某个公司中,计划由职工们推选一名办公室主任。假设有10名候选人准备参与竞选。希望编写一个程序,输入一组选举人的投票信息,统计每个候选人的得票数目及选举结果。问题分析l用一维数组

5、记录每位候选人的得票数量。l投票通过循环输入介于110之间的整型数值来模拟的。例如,输入3代表某个职工选举编码为3的候选人。l找出最多的得票数量之后,从所有的候选人中筛选出得票数量与最高得票数量相同的人。算法描述 开始 职工投票 输出得票最高的所有人选 计算最高得票数量 输出选票 结束#include#define NUM 10 /*候选人人数候选人人数*/main()int voteNUM=0;int code,i,winner;/*职工投票职工投票*/printf(nEnter your selection:n);do scanf(%d,&code);if(codeNUM)/*检验输入的编

6、码是否有效检验输入的编码是否有效*/printf(nInvalid vote.);else if(code!=0)votecode-1=votecode-1+1;/*累加票数累加票数*/while(code!=0);程序代码/*输出选票输出选票*/printf(n The amount of votes is:);for(i=0;iNUM;i+)printf(%4d,votei);/*计算最高得票数量计算最高得票数量*/winner=0;for(i=1;ivotewinner)winner=i;/*输出得票最高的所有候选人输出得票最高的所有候选人*/printf(nThe winner:);f

7、or(i=winner;iNUM;i+)if(votei=votewinner)printf(%3d,i+1);根据需求对数据进行统计 l为了满足特定的需要,对一组数据的某些特征进行统计是一项经常遇到的基本操作。例如,统计一段文本中某个字符出现的频率;统计学生考试的平均成绩等等都属于统计操作。统计操作的结果往往是通过对所有数据进行扫描、判断或综合加工得到的。在C程序中,参与统计操作的批量数据可以用一维数组来组织,具体统计过程可以通过逻辑判断、累计、算术运算等基本操作手段实现。例2:在一段文本中,可能会出现各式各样的字符。编写一个程序,从键盘读入一行文本,完成统计每个英文字母出现频率的操作。问题

8、分析l用一维数组构造26个用于记录每个字母出现次数的累加器。l对于输入的文本字符,可以在读取时检查一下是否为英文字母,而不需要将其存储起来。算法描述 开始 ch=getchar()输出统计结果 相应累加器加 1 结束 是大写 是小写 相应累加器加 1 ch!=n Y N Y N N Y#include#define NUM 26 main()int letterNUM=0;char ch;int i;printf(nEnter text linen);while(ch=getchar()!=n)if(A=ch&ch=Z)/*检测是否为大写字母检测是否为大写字母*/letterch-A=lett

9、erch-A+1;else if(a=ch&ch=z)/*检测是否为小写字母检测是否为小写字母*/letterch-a=letterch-a+1;/*输出每个英文字母出现的次数输出每个英文字母出现的次数*/for(i=0;iNUM;i+)printf(n%c:%d,A+i,letteri);程序代码 例3:每年中央电视台都要举办青年歌手大奖赛。假设有13位评委参与评分工作。计算每位歌手最终得分的方法是:首先去掉一个最高分和一个最低分,然后计算剩余11个分数的平均值,所得结果就是选手的最终得分。希望编写一个程序,帮助工作人员计算每个歌手的分数。问题分析l用一维数组存储 13位评委给出的分数l寻找

10、最高分和最低分l计算剩余11个分数的平均分 算法描述 开始 输入13 位评委的分数 输出歌手的分数 计算最高、最低分及总分 结束 计算歌手的最终分数#include#define NUM 13 main()float scoreNUM;*/int i,minValue,maxValue;float sum;/*输入输入13位评委给出的分数位评委给出的分数*/printf(nEnter 13 score:);for(i=0;iNUM;i+)scanf(%f,&scorei);程序代码/*找出最高分、最低分,并同时累加找出最高分、最低分,并同时累加13个分数的总和个分数的总和*/minValue=

11、score0;maxValue=score0;sum=score0;for(i=1;iNUM;i+)if(scoreimaxValue)maxValue=scorei;sum=sum+scorei;/*计算并输出歌手的最终得分计算并输出歌手的最终得分*/sum=(sum-minValue-maxValue)/(NUM-2);printf(nFinal score is%6.2f,sum);查找问题 l所谓查找是指根据某个给定的条件,在一组数据中搜索是否存在满足该条件的数据的过程。如果存在,则表示查找成功,给出成功的标志;否则表示查找不成功,给出失败的标志。在程序中,查找操作的结果经常被用来作为

12、是否执行某项后续操作的决策依据。例4:已知某个班级35名学生的某门课程的考试成绩。请编写一个程序,查看在这个班级中是否存在不及格的学生。问题分析l用一维数组记录每位学生的考试成绩,下标表示每个学生的编号,元素内容表示考试成绩。l查找可以通过从前往后依次查看每个元素内容的过程实现。算法描述 开始 结束 顺序查找不及格的学生 显示 35 名学生的成绩 存在不及格学生 输出 Not all pass 输出 All pass 随机产生 35 名学生的成绩 Y N#include#include#define NUM 35 /*学生人数学生人数*/main()int scoreNUM;int i;/*随

13、机产生随机产生35个考试成绩个考试成绩*/randomize();for(i=0;iNUM;i+)scorei=random(100);/*显示显示35名学生的考试成绩名学生的考试成绩*/for(i=0;iNUM;i+)printf(nNo.%d:%d,i+1,scorei);程序代码/*顺序查找是否存在不及格的学生顺序查找是否存在不及格的学生*/for(i=0;iNUM;i+)if(scorei60)break;/*输出查找结果输出查找结果*/if(iNUM)printf(nNot all pass.);else printf(All pass.);例5:已知一个按非递减有序排列的整型数列(

14、12,23,30,45,48,50,67,82,91,103)。请编写一个程序,查找其中是否存在与给定key相等的数值。问题分析l二分查找是指每次用key与位于查找区间中央位置的元素进行比较,比较结果将会产生下面三种情形之一:1.如果相等,说明查找成功。2.如果key小于中央位置的元素,说明如果存在这样的元素,应该位于查找区间的前半部分。此时可以将查找区间缩减为原来的一半,并在这一半的区间中继续用相同的方式查找。3.如果key大于中央位置的元素,说明如果存在这样的元素,应该位于查找区间的后半部分。同样可以将查找区间缩减为原来的一半,并在这一半的区间中继续用相同的方式查找。l可以看出,用key与

15、当前查找区间中央位置的元素比较后,不是找到了,就是将查找区间缩小了一半。直到查找区间不存在了,说明没有要找的key。算法描述 开 始 结 束 二 分 查 找 key 输 入 key 存 在 key 输 出 成 功 信 息 输 出 失 败 信 息 构 造 非 递 减 数 列 Y N 中央位置mid 0low,NUM-1high low=high valuemidkey valuemid=key mid+1low mid-1high Y Y Y N N N#include#define NUM 10main()int valueNUM=12,23,30,45,48,50,67,82,91,103;

16、/*非递减整型数列非递减整型数列*/int low,high,mid,key;printf(nEnter a key:);/*输入查找的数值输入查找的数值*/scanf(%d,&key);low=0;high=NUM-1;while(low=high)mid=(low+high)/2;if(valuemid=key)break;if(valuemidkey)low=mid+1;else high=mid-1;if(low=high)printf(n%d is found at%d.,key,mid);/*确认确认break出口出口*/else printf(n%d is not found.,

17、key);/*确认循环正常出口确认循环正常出口*/程序代码 排序问题 l将一组无序的数列重新排列成非递减或非递增的顺序是一种经常需要的操作。例如,在管理学生成绩的应用程序中,可以用一个数列表示一个班级的学生成绩,并按照从高到低的顺序重新排列,以便确定获得奖学金的学生。例6:假设用户通过键盘输入一个整型数列。请编写一个程序,将其按照从小到大的顺序重新排列。问题分析l首先从n个数据中选择一个最小的数据,并将它交换到第1个位置;然后再从后面n-1个数据中选择一个最小的数据,并将它交换到第2个位置;以此类推,直至最后从两个数据中选择一个最小的数据,并将它交换到第n-1个位置为止,整个排序操作结束。算法

18、描述 选 择 最 小 值 minValue 0 i iNUM-1 minValue!=i 交 换 Y Y N N 开 始 输 入 待 排 序 整 数 数 列 显 示 整 数 数 列 i+1 i i minValue 显 示 排 序 后 的 结 果 结 束#include#define NUM 10 /*参与排序的数据个数参与排序的数据个数*/main()int dataNUM;/*存放参与排序的所有整数存放参与排序的所有整数*/int i,j,minValue,temp;/*通过键盘输入待排序的整型数列通过键盘输入待排序的整型数列*/printf(nEnter%d integers.,NUM)

19、;for(i=0;iNUM;i+)scanf(%d,&datai);/*显示原始整型数列显示原始整型数列*/printf(n%d integers are:,NUM);for(i=0;iNUM;i+)printf(%5d,datai);程序代码 for(i=0;iNUM-1;i+)minValue=i;for(j=i+1;jNUM;j+)if(datajdataminValue)minValue=j;if(minValue!=i)/*交换交换*/temp=datai;datai=dataminValue;dataminValue=temp;/*输出排序后的结果输出排序后的结果*/printf(

20、nOrdering list is:n);for(i=0;iNUM;i+)printf(%5d,datai);小结与作业小结与作业 一维数组的定义、初始化、赋值、引用 一维数组的应用 课后作业9、静夜四无邻,荒居旧业贫。22.9.422.9.4Sunday,September 04,202210、雨中黄叶树,灯下白头人。1:50:471:50:471:509/4/2022 1:50:47 AM11、以我独沈久,愧君相见频。22.9.41:50:471:50Sep-224-Sep-2212、故人江海别,几度隔山川。1:50:471:50:471:50Sunday,September 04,202

21、213、乍见翻疑梦,相悲各问年。22.9.422.9.41:50:471:50:47September 4,202214、他乡生白发,旧国见青山。2022年9月4日星期日上午1时50分47秒1:50:4722.9.415、比不了得就不比,得不到的就不要。2022年9月上午1时50分22.9.41:50September 4,202216、行动出成果,工作出财富。2022年9月4日星期日1时50分47秒1:50:474 September 202217、做前,能够环视四周;做时,你只能或者最好沿着以脚为起点的射线向前。上午1时50分47秒上午1时50分1:50:4722.9.49、没有失败,只有

22、暂时停止成功!。22.9.422.9.4Sunday,September 04,202210、很多事情努力了未必有结果,但是不努力却什么改变也没有。1:50:471:50:471:509/4/2022 1:50:47 AM11、成功就是日复一日那一点点小小努力的积累。22.9.41:50:471:50Sep-224-Sep-2212、世间成事,不求其绝对圆满,留一份不足,可得无限完美。1:50:471:50:471:50Sunday,September 04,202213、不知香积寺,数里入云峰。22.9.422.9.41:50:471:50:47September 4,202214、意志坚强

23、的人能把世界放在手中像泥块一样任意揉捏。2022年9月4日星期日上午1时50分47秒1:50:4722.9.415、楚塞三湘接,荆门九派通。2022年9月上午1时50分22.9.41:50September 4,202216、少年十五二十时,步行夺得胡马骑。2022年9月4日星期日1时50分47秒1:50:474 September 202217、空山新雨后,天气晚来秋。上午1时50分47秒上午1时50分1:50:4722.9.49、杨柳散和风,青山澹吾虑。22.9.422.9.4Sunday,September 04,202210、阅读一切好书如同和过去最杰出的人谈话。1:50:471:50

24、:471:509/4/2022 1:50:47 AM11、越是没有本领的就越加自命不凡。22.9.41:50:471:50Sep-224-Sep-2212、越是无能的人,越喜欢挑剔别人的错儿。1:50:471:50:471:50Sunday,September 04,202213、知人者智,自知者明。胜人者有力,自胜者强。22.9.422.9.41:50:471:50:47September 4,202214、意志坚强的人能把世界放在手中像泥块一样任意揉捏。2022年9月4日星期日上午1时50分47秒1:50:4722.9.415、最具挑战性的挑战莫过于提升自我。2022年9月上午1时50分2

25、2.9.41:50September 4,202216、业余生活要有意义,不要越轨。2022年9月4日星期日1时50分47秒1:50:474 September 202217、一个人即使已登上顶峰,也仍要自强不息。上午1时50分47秒上午1时50分1:50:4722.9.4MOMODA POWERPOINTLorem ipsum dolor sit,eleifend nulla ac,fringilla purus.Nulla iaculis tempor felis amet,consectetur adipiscing elit.Fusce id urna blanditut cursus.感 谢 您 的 下 载 观 看感 谢 您 的 下 载 观 看专家告诉

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