![[工学]C语言程序设计-第八章.ppt_第1页](http://file.renrendoc.com/FileRoot1/2019-1/3/f3a24537-6c6c-4b4f-96e5-6ec1a3d57a0e/f3a24537-6c6c-4b4f-96e5-6ec1a3d57a0e1.gif)
![[工学]C语言程序设计-第八章.ppt_第2页](http://file.renrendoc.com/FileRoot1/2019-1/3/f3a24537-6c6c-4b4f-96e5-6ec1a3d57a0e/f3a24537-6c6c-4b4f-96e5-6ec1a3d57a0e2.gif)
![[工学]C语言程序设计-第八章.ppt_第3页](http://file.renrendoc.com/FileRoot1/2019-1/3/f3a24537-6c6c-4b4f-96e5-6ec1a3d57a0e/f3a24537-6c6c-4b4f-96e5-6ec1a3d57a0e3.gif)
![[工学]C语言程序设计-第八章.ppt_第4页](http://file.renrendoc.com/FileRoot1/2019-1/3/f3a24537-6c6c-4b4f-96e5-6ec1a3d57a0e/f3a24537-6c6c-4b4f-96e5-6ec1a3d57a0e4.gif)
![[工学]C语言程序设计-第八章.ppt_第5页](http://file.renrendoc.com/FileRoot1/2019-1/3/f3a24537-6c6c-4b4f-96e5-6ec1a3d57a0e/f3a24537-6c6c-4b4f-96e5-6ec1a3d57a0e5.gif)
已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第第8 8章章 数组数组 *2/49 本章学习内容本章学习内容 对数组名特殊含义的理解对数组名特殊含义的理解 数组类型,数组的定义和初始化数组类型,数组的定义和初始化 向函数传递一维数组和二维数组向函数传递一维数组和二维数组 排序、查找、求最大最小值等常用算法排序、查找、求最大最小值等常用算法 *3/49 为什么使用数组为什么使用数组(Array)?(Array)? 【例例8.18.1】要读入要读入1010人的成绩,然后求平均成绩人的成绩,然后求平均成绩 需定义需定义1010个不同名整型变量,需要使用多个个不同名整型变量,需要使用多个scanfscanf() () intint score1,score2,score10; score1,score2,score10; scanf(“%d“, scanf(“%d“, scanf(“%d“,scanf(“%d“, 而用数组,可共用一个而用数组,可共用一个scanfscanf() ()并利用循环语句读取并利用循环语句读取 intint score10,i; score10,i; for (i=0; i #define N 40 int ReadScore(int score); int FindMax(int score, int n); int main() int scoreN, max, n; n = ReadScore(score); printf(“Total students are %dn“, n); max = FindMax(score, n); printf(“The highest score is %dn“, max); return 0; *24/49 max(i=0) max(i=2)max(i=3) 计算最大值算法计算最大值算法 *25/49 假设其中的一个学生成绩为最高假设其中的一个学生成绩为最高 maxScore = score0;maxScore = score0; 对所有学生成绩进行比较,即对所有学生成绩进行比较,即 for (i=1; i maxScorescorei maxScore 则修改则修改maxScoremaxScore值为值为scoreiscorei 打印最高分打印最高分maxScoremaxScore 【例例8.78.7】计算最高分计算最高分 *26/49 【例例8.78.7】计算最高分计算最高分 *27/49 8.48.4排序和查找排序和查找 排序(排序(SortingSorting)算法)算法 交换法排序交换法排序 选择法排序选择法排序 *28/49 交换法排序交换法排序 *29/49 交换法排序交换法排序 *30/49 【例例8.88.8】交换法从高到低排序交换法从高到低排序 交换法交换法排序排序 forfor (i=0; i scorei) (scorej scorei) “ “交换成绩交换成绩scorejscorej和和scorei“scorei“ *31/49 如何实现两数交换?如何实现两数交换? temp = scorej;temp = scorej; scorej = scorei; scorej = scorei; scorei = temp;scorei = temp; temp scorejscorei ? 7050 70 5070 *32/49 【例例8.88.8】交换法从高到低排序交换法从高到低排序 void DataSort(int score, int n) /*交换法排序*/ int i, j, temp; for (i=0; i scorei) /*从高到低*/ temp = scorej; scorej = scorei; scorei = temp; *33/49 选择法排序选择法排序 k=1 k=2 k=0 k=1 *34/49 选择法排序选择法排序 k=3 k=4 k=3k=4 *35/49 选择法排序选择法排序 选择法选择法排序排序 forfor (i=0; i score scorek k) 记录此轮比较中最高分的元素下标记录此轮比较中最高分的元素下标 k = jk = j; ; 若若k k中记录的最大数不在位置中记录的最大数不在位置i i,则,则 “ “交换交换成绩成绩scorescorek k 和和scorescorei i“, “ “交换交换学号学号numknumk和和numi“numi“; *36/49 void DataSort(int score, long num, int n) /*选择法*/ int i, j, k, temp1; long temp2; for (i=0; i scorek) k = j; /*记录最大数下标位置*/ if (k != i) /*若最大数不在下标位置i*/ temp1 = scorek; scorek = scorei; scorei = temp1; temp2 = numk; numk = numi; numi = temp2; *37/49 【例例8.88.8】成绩从高到低顺序成绩从高到低顺序 *38/49 8.48.4排序和查找排序和查找 查找(查找(SearchingSearching)算法)算法 顺序查找顺序查找 折半查找折半查找 *39/49 【例例8.108.10】顺序查找学号顺序查找学号 intint LinSearch( LinSearch(longlong num, num, longlong x, x, intint n) n) intint i; i; forfor (i=0; i nummid) (x nummid) low = mid + 1; low = mid + 1; elseelse ifif (x nummid) (x nummid) high = mid - 1; high = mid - 1; elseelse returnreturn (mid); (mid); returnreturn(-1); (-1); 找到时返回 下标位置 找不到时 返回-1 若未按学号排序, 则如何修改程序? *43/49 void DataSort(int score, long num, int n) /*选择法*/ int i, j, k, temp1; long temp2; for (i=0; in-1; i+) k = i; for (j=i+1; jn; j+) if (numj numk) k = j; /*记录最大数下标位置*/ if (k != i) /*若最大数不在下标位置i*/ temp1 = scorek; scorek = scorei; scorei = temp1; temp2 = numk; numk = numi; numi = temp2; 按学号由小 到大排序 *44/49 8.58.5向函数传递二维数组向函数传递二维数组 a00 a01 a02 a10 a11 a12 a00 a01 a02 a10 a11 a12 实际传送的是数组第一个元素的地址 short a23;short a23; *45/49 8.58.5向函数传递二维数组向函数传递二维数组 在声明二维数组形参时,不能省略数组第二在声明二维数组形参时,不能省略数组第二 维的长度(列数),为什么?维的长度(列数),为什么? 想想数组在内存中是如何分布的?想想数组在内存中是如何分布的? 元素元素aijaij在数组在数组a a中的位置是:中的位置是: i * N + j i * N + j 元素地址:元素地址: 首地址首地址 + + 偏移量偏移量 a00 a01 a02 a10 a11 a12 a00 a01 a02 a10 a11 a12 实际传送的是数组第一个元素的地址 short aMN;short aMN; 偏移1*3+2 *46/49 例例8.12 8.12 计算每门计算每门课程课程的总分和平均分的总分和平均分 voidvoid AverforCourseAverforCourse( (intint scoreCOURSE_N,scoreCOURSE_N, intint sum, sum, floatfloat aver, aver, intint n) n) intint i, j; i, j; forfor (j=0; (j=0; jCOURSE_NjCOURSE_N; j+); j+) sumsumj j = 0; = 0; forfor (i=0; (i=0; inin; i+); i+) sumsumj j = sum = sumj j + scoreij; + scoreij; averaverj j = (float) sum = (float) sumj j / / n n; ; 可省略数组第一维的长度 不能省略第二维的长度 *47/49 例例8.12 8.12 计算每门计算每门学生学生的总分和平均分的总分和平均分 voidvoid AverforStudAverforStud( (intint scoreCOURSE_N,scoreCOURSE_N, intint sum, sum, floatfloat aver, aver, intint n) n) intint i, j; i, j; forfor (i=0; (i=0; inin; i+); i+) sumsumi i = 0; = 0; forfor (j=0; (j=0; jCOURSE_NjCOURSE_N; j+)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财务考试题及答案
- 中级英语写作知到智慧树答案
- 汽车维修工中级模拟习题(附参考答案)
- 成人护理学皮肤、运动、神经系统测试题(附答案)
- 药品注册管理办法试题(附答案)
- 化工总控工职业技能鉴定模拟练习题含答案
- 中学化学习题研究知到智慧树答案
- 2025年外墙清洗与外墙玻璃清洁服务合同范本
- 2025年二手车出口业务代理合同样本
- 2025版智慧城市建设招标投标服务合同
- 2025年广东省中考历史试卷(含答案)
- GB 2536-2025电工流体变压器和开关用的未使用过的矿物绝缘油
- 武汉市养犬管理暂行办法
- 2025年网格员招聘笔试题库含答案
- 造型基础教学课件
- 抗菌型PE(聚乙烯)保鲜膜行业深度调研及发展项目商业计划书
- 行政单位固定资产培训
- 园林绿化监理质量控制措施
- 2022年版新课程标准解析与教学指导
- 无人机操控与维护专业教学标准(中等职业教育)2025修订
- 企业运费管理制度
评论
0/150
提交评论