已阅读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贵州黔西县度青年就业见习招募249人易考易错模拟试题(共500题)试卷后附参考答案
- 2025荆州市产业投资发展集团限公司工作人员招聘【22人】易考易错模拟试题(共500题)试卷后附参考答案
- 2025福建闽江学院辅导员(编制内)招考6人重点基础提升(共500题)附带答案详解
- 2025福建宁德市城建集团限公司第二批招聘28人易考易错模拟试题(共500题)试卷后附参考答案
- 2025甘肃省水务投资限责任公司招聘23人易考易错模拟试题(共500题)试卷后附参考答案
- 2025甘肃平凉市住房和城乡建设局下属事业单位引进招聘紧缺人才5人易考易错模拟试题(共500题)试卷后附参考答案
- 2025烟草机械限责任公司招聘应届毕业生【17人】易考易错模拟试题(共500题)试卷后附参考答案
- 2025湖北荆门市招硕引博254人(企业岗位)易考易错模拟试题(共500题)试卷后附参考答案
- 2025湖北广电网络鹤峰支公司招聘【9人】易考易错模拟试题(共500题)试卷后附参考答案
- 2025年全国青少年禁毒知识竞赛题库附含答案
- 2024年社区警务规范考试题库
- 立德树人背景下德育教育赋能初中班级管理的实践研究
- 《冠脉造影》课件
- DB45T+2871-2024++既有住宅加装电梯安全技术规范
- 小学生法制教育课件
- 银行防抢劫应急预案演练方案范文(5篇)
- 红色简约中国英雄人物李大钊课件
- 原位固化法管道修复方案
- (完整版)人教版初中语文文言文大全(原文)
- 班车租赁服务投标方案(技术方案)
- HSK标准教程1-第一课lesson1
评论
0/150
提交评论