《C语言程序设计PPT课件第8章数组》由会员分享,可在线阅读,更多相关《C语言程序设计PPT课件第8章数组(49页珍藏版)》请在金锄头文库上搜索。
1、第第第第8 8 8 8章章章章 数组数组数组数组写丛苍拎了滑握遥惺言秆攘矣尼卵嗜卫默欠瞎痘斋戍划药贩惦占氰搜辩给C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/20242/49本章学习内容本章学习内容 对数组名特殊含义的理解对数组名特殊含义的理解 数组类型,数组的定义和初始化数组类型,数组的定义和初始化 向函数传递一维数组和二维数组向函数传递一维数组和二维数组 排序、查找、求最大最小值等常用算法排序、查找、求最大最小值等常用算法 象缴叉琳手亏切锁姑衙忌积康彭乒钙病缄邱超奢钦浚台茶亨震嚷锹诧杠酌C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/20243/49为什么使用数组
2、为什么使用数组(Array)?【例【例【例【例8.18.18.18.1】要读入】要读入】要读入】要读入10101010人的成绩,然后求平均成绩人的成绩,然后求平均成绩人的成绩,然后求平均成绩人的成绩,然后求平均成绩 需定义需定义需定义需定义10101010个不同名整型变量,需要使用多个个不同名整型变量,需要使用多个个不同名整型变量,需要使用多个个不同名整型变量,需要使用多个scanf()scanf()scanf()scanf() int score1,score2,score10; int score1,score2,score10; scanf(%d,&score1); scanf(%d,&
3、score1); scanf(%d,&score2);scanf(%d,&score2); . . 而用数组,可共用一个而用数组,可共用一个而用数组,可共用一个而用数组,可共用一个scanf()scanf()scanf()scanf()并利用循环语句读取并利用循环语句读取并利用循环语句读取并利用循环语句读取 int score10,i;int score10,i; for (i=0; i10; i+)for (i=0; i10; i+) scanf(%d,&scorei); scanf(%d,&scorei); 保存大量保存大量同类型的同类型的相关数据相关数据峻抑扶脚恒袜焰锹乃挽仔碌葵阜泄浴刹
4、菲懂园馏赖殆娘吴借映宽能兜泰洽C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/20244/498.1一维数组的定义和初始化一维数组的定义和初始化 一维数组的定义一维数组的定义一维数组的定义一维数组的定义 存储类型存储类型存储类型存储类型 数据类型数据类型数据类型数据类型 数组名数组名数组名数组名 整数整数整数整数1 1 1 1 整数整数整数整数2 2 2 2 整数整数整数整数n;n;n;n;a9a8a7 a1a0数组首地址数组首地址intint a10; a10; 定义一个有定义一个有定义一个有定义一个有1010个个个个intint型元素的数组型元素的数组型元素的数组型元素的数组
5、系统在内存分配连续的系统在内存分配连续的系统在内存分配连续的系统在内存分配连续的1010个个个个intint空间给此数组空间给此数组空间给此数组空间给此数组 直接对直接对直接对直接对a a a a的访问,就是访问此数组的首地址的访问,就是访问此数组的首地址的访问,就是访问此数组的首地址的访问,就是访问此数组的首地址基类型基类型下标从下标从0开始开始箱鞭挪访抛精蹈此聊芦寨词吓佑粥吕慌燎择蛔柠妇鸦撕配卫赏齿秦野嫁框C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/20245/498.1一维数组的定义和初始化一维数组的定义和初始化a9a8a7 a1a0intint a10; a10; 数组
6、大小必须是值为正的常量,不能为变量数组大小必须是值为正的常量,不能为变量数组大小必须是值为正的常量,不能为变量数组大小必须是值为正的常量,不能为变量 一旦定义,不能改变大小一旦定义,不能改变大小一旦定义,不能改变大小一旦定义,不能改变大小 数组大小最好用宏来定义,以适应未来可能数组大小最好用宏来定义,以适应未来可能数组大小最好用宏来定义,以适应未来可能数组大小最好用宏来定义,以适应未来可能的变化的变化的变化的变化#define#define SIZESIZE 10 10 intint a aSIZESIZE; 一维数组的定义一维数组的定义一维数组的定义一维数组的定义 存储类型存储类型存储类型存
7、储类型 数据类型数据类型数据类型数据类型 数组名数组名数组名数组名 整数整数整数整数1 1 1 1 整数整数整数整数2 2 2 2 整数整数整数整数n;n;n;n;搐宴锈曝臭赛侦刃藤案原添魂芯赚火屏鸽馒嘛恫规椰屉桌骡十铸舰陇臃躯C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/20246/498.1一维数组的定义和初始化一维数组的定义和初始化 数组定义后的初值仍然是随机数数组定义后的初值仍然是随机数 一般需要我们来初始化一般需要我们来初始化 int int a5 = 12, 34, 56 ,78 ,9 ; a5 = 12, 34, 56 ,78 ,9 ; int int a5 = 0
8、 ; a5 = 0 ; int int a = 11, 22, 33, 44, 55 ; a = 11, 22, 33, 44, 55 ;辱镭穷查蛋充欲毡场捷首啡看率萌狰羌但太矾坚莆卜疵埠阵赠唬讫概沮诲C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/20247/498.1一维数组的定义和初始化一维数组的定义和初始化 数组的引用数组的引用 数组名数组名数组名数组名 下标下标下标下标 数组下标数组下标数组下标数组下标(index)(index)(index)(index)都是从都是从都是从都是从0 0 0 0开始开始开始开始 使用使用使用使用aa0 0 、a1a1、a2a2、a9a9这
9、样的形式这样的形式这样的形式这样的形式访问每个元素访问每个元素访问每个元素访问每个元素 下标既可是常量,也可是整型表达式,允许快速下标既可是常量,也可是整型表达式,允许快速下标既可是常量,也可是整型表达式,允许快速下标既可是常量,也可是整型表达式,允许快速随机访问,如随机访问,如随机访问,如随机访问,如aiai可以像使用普通变量一样使用它们可以像使用普通变量一样使用它们可以像使用普通变量一样使用它们可以像使用普通变量一样使用它们腐簇扬曼斜烬变警穿看莽稗转佩皂镶款忽囱哦悬插染梆丧换龚汞低卿诲病C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/20248/49如何使两个数组的值相等?如何
10、使两个数组的值相等?main() int a4 = 1,2,3,4, b4; b = a; 解决方法解决方法方法方法1:1:逐个元素赋值逐个元素赋值 b0=a0; b1=a1; b2=a2; b3=a3;方法方法2:2:通过循环赋值通过循环赋值 int i; for (i=0;i4;i+) bi = ai; 原因原因: :数组名表示数组的首地址数组名表示数组的首地址, ,其值不可改变其值不可改变! !枯谴率必女啃凹贬粹绸判戮偏屋灶炸鸳禁挽坎搬桐绥娥丽蓉纱麦饭闪逝算C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/20249/498.1一维数组的定义和初始化一维数组的定义和初始化 【例
11、【例【例【例8.28.28.28.2】编程实现显示用户输入的月份(不包括】编程实现显示用户输入的月份(不包括】编程实现显示用户输入的月份(不包括】编程实现显示用户输入的月份(不包括闰年的月份)拥有的天数闰年的月份)拥有的天数闰年的月份)拥有的天数闰年的月份)拥有的天数 肪蛆蜘纸荐佯文深著埂嘎零翘咸顶能埃用兜永站诲拒挫伸跨多灭郁较枷倒C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202410/498.1一维数组的定义和初始化一维数组的定义和初始化 下标越界是下标越界是大忌大忌!编译程序不检查是否越界编译程序不检查是否越界编译程序不检查是否越界编译程序不检查是否越界下标越界,将访问数
12、组以外的空间下标越界,将访问数组以外的空间下标越界,将访问数组以外的空间下标越界,将访问数组以外的空间那里的数据是未知的,不受我们掌控,可能带那里的数据是未知的,不受我们掌控,可能带那里的数据是未知的,不受我们掌控,可能带那里的数据是未知的,不受我们掌控,可能带来严重后果来严重后果来严重后果来严重后果康焰霉绥滨馋炽禁军涯书吕钮霉仪疤罚疆厦寄窜坦蓉伪拍道疏芹拖干稳盂C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202411/49b0b0b1b1b2b2b3b3b4b4b5b5b6b6b7b7b8b8b9b9c ca a【例【例8.3】当下标值小于当下标值小于0或超过数组长度时或超过
13、数组长度时 会出现什么情况?会出现什么情况?运行程序或单步执行观察变量变化情况可以看到,运行程序或单步执行观察变量变化情况可以看到,变量变量c c和和a a的值因数组越界而被悄悄破坏了的值因数组越界而被悄悄破坏了12345612078910114040444448484c4c5050545458585c5c6060646468686c6c屹庭敬洱伤海泊贴豢涛横腥龄拷遏茹惟竣忆欣赴顺恼朴喂邓膛静暇绒序需C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202412/498.2二维数组的定义和初始化二维数组的定义和初始化 一维数组一维数组一维数组一维数组 用一个下标确定各元素在数组中的顺
14、序用一个下标确定各元素在数组中的顺序用一个下标确定各元素在数组中的顺序用一个下标确定各元素在数组中的顺序 可用排列成一行的元素组来表示可用排列成一行的元素组来表示可用排列成一行的元素组来表示可用排列成一行的元素组来表示 如如如如 int a5; int a5; 二维数组二维数组二维数组二维数组用两个下标确定各元素在数组中的顺序用两个下标确定各元素在数组中的顺序用两个下标确定各元素在数组中的顺序用两个下标确定各元素在数组中的顺序可用排列成可用排列成可用排列成可用排列成i i i i行,行,行,行,j j j j列的元素组来表示列的元素组来表示列的元素组来表示列的元素组来表示 如如如如 int b
15、23; int b23; n n n n维数组维数组维数组维数组用用用用n n n n个下标来确定各元素在数组中的顺序个下标来确定各元素在数组中的顺序个下标来确定各元素在数组中的顺序个下标来确定各元素在数组中的顺序 如如如如 int c324;int c324;n3n3n3n3时,维数组无法在平面上表示其各元素的位置时,维数组无法在平面上表示其各元素的位置时,维数组无法在平面上表示其各元素的位置时,维数组无法在平面上表示其各元素的位置a0a0a1a1a2a2a3a3a4a4b00b00b01b01b02b02b10b10b11b11b12b12言蝴秀持哪韩百泽雕捧桶懊痛冈朝牧进钧悔苔纷湛锤烦挎
16、柠仅搬捧冠靡侣C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202413/49【例】以下程序的运行结果是什么?【例】以下程序的运行结果是什么?【例】以下程序的运行结果是什么?【例】以下程序的运行结果是什么?int main()int main() int a3=1,2,3,4,5,6,0; int a3=1,2,3,4,5,6,0; printf(%d,%d,%dn,a11,a21,a31); printf(%d,%d,%dn,a11,a21,a31); return 0; return 0; 1 2 34 5 06 0 00 0 0结果:结果:5, 0, 0【例】若【例】若in
17、t a 3=1, 2, 3, 4, 5, 6, 7,则则a数组的第一维大小是多少?数组的第一维大小是多少? 1 2 34 5 67 0 0二维数组的初始化二维数组的初始化吟围胡怯堤贪灌何埃堵收吧赃琅开妻粗鲁毛账迭畜佛买社峭楷探钥敦糯单C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202414/49数组的数据类型和存储类型数组的数据类型和存储类型 根据数组的根据数组的根据数组的根据数组的数据类型数据类型数据类型数据类型,为每一元素安排相同长度的存储单元,为每一元素安排相同长度的存储单元,为每一元素安排相同长度的存储单元,为每一元素安排相同长度的存储单元 根据数组的根据数组的根据数组
18、的根据数组的存储类型存储类型存储类型存储类型,将其安排在内存的动态存储区、静态,将其安排在内存的动态存储区、静态,将其安排在内存的动态存储区、静态,将其安排在内存的动态存储区、静态存储区或寄存器区存储区或寄存器区存储区或寄存器区存储区或寄存器区 用用用用sizeofsizeof(a)(a)来获得数组来获得数组来获得数组来获得数组a a所占字节数所占字节数所占字节数所占字节数shortshort缨厕抚昨炽羔彤龚冈蛙莫糊野话致赠虚撰响首梧苦裕崎敞傀卵澎熄膝项皱C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202415/49short int a23;a0a1a10 a11a12a00
19、 a01a02存放顺序:存放顺序:存放顺序:存放顺序:按行存放按行存放按行存放按行存放先顺序存放第先顺序存放第先顺序存放第先顺序存放第0 0 0 0行元素,再存放第行元素,再存放第行元素,再存放第行元素,再存放第1 1 1 1行元素行元素行元素行元素a00a01a02a10a11a12需知道数组每行列数才能从起始地址开始正确读出数组元素需知道数组每行列数才能从起始地址开始正确读出数组元素二维数组的存储结构二维数组的存储结构二维数组的存储结构二维数组的存储结构虾引冬磺影宇藤仇刃臭左镁副尖摆嚣踢虞吨鳃宵醇射吵谤梁艇万险锡胸炕C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202416/
20、49二维数组实例二维数组实例 【例【例【例【例8.48.48.48.4】从键盘输入某年某月(包括闰年),编程输出该年】从键盘输入某年某月(包括闰年),编程输出该年】从键盘输入某年某月(包括闰年),编程输出该年】从键盘输入某年某月(包括闰年),编程输出该年的该月拥有的天数的该月拥有的天数的该月拥有的天数的该月拥有的天数岿搐淌摔迎础胁诵超抬堆皋寓屹熊挡祁葬去谜浩抠宙必痈余涌瘩退点迁腹C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202417/498.3向函数传递一维数组向函数传递一维数组 传递传递传递传递整个数组整个数组整个数组整个数组给另一个函数,可给另一个函数,可给另一个函数,可
21、给另一个函数,可将数组的将数组的将数组的将数组的首地址首地址首地址首地址作为参数传过去作为参数传过去作为参数传过去作为参数传过去用用用用数组名数组名数组名数组名作函数参数作函数参数作函数参数作函数参数只复制一个地址只复制一个地址只复制一个地址只复制一个地址自然比复制全部数自然比复制全部数自然比复制全部数自然比复制全部数据效率高据效率高据效率高据效率高由于首地址相同,故实参数组与形由于首地址相同,故实参数组与形由于首地址相同,故实参数组与形由于首地址相同,故实参数组与形参数组参数组参数组参数组占用同一段内存占用同一段内存占用同一段内存占用同一段内存在该函数内,不仅可以在该函数内,不仅可以在该函数
22、内,不仅可以在该函数内,不仅可以读读读读这个数组这个数组这个数组这个数组的元素,还可以的元素,还可以的元素,还可以的元素,还可以修改修改修改修改它们它们它们它们昨窿积婴僧嘘蒂吮止椭吞环胎织蚤直东去鸡剪金辩目坍晰涂巨叛炔憾辨大C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202418/49 简单变量和数组作函数参数简单变量和数组作函数参数的区别的区别盾龋踪姻诊隔劣唐巾奎陛醒签连烯亿童求题淡愁恳淋敞麦佣蒋蜒些刘告叼C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202419/49【例【例8.5】计算平均分】计算平均分 计数计数计数计数控制的循环控制的循环控制的循环控制的循
23、环鬃痘逐塑使哟杭锄傲术奋鹤姬槽焊粤擞彭秒帝泛屁很阂拔域扯柿咀罪夕厩C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202420/49【例【例8.5】计算平均分】计算平均分 计数计数计数计数控制的循环控制的循环控制的循环控制的循环揭匿秃碌袱眺脖监幸汝睛禾哟迈蟹循辕玩从湘班丧腻槐唤掣霖被亥延凶魁C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202421/49【例【例8.6】计算平均分】计算平均分当输入负值时,表示输入结束当输入负值时,表示输入结束 标记标记标记标记控制的循环控制的循环控制的循环控制的循环负值作为输入结束标记负值作为输入结束标记负值作为输入结束标记负值作为输
24、入结束标记分镑琳坪腕吾赖寨占妊敦司刺莽烁丈贿寅搪弯戊闹新谣瘁妊煮匈逾悬澄窍C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202422/49【例【例8.6】计算平均分】计算平均分当输入负值时,表示输入结束当输入负值时,表示输入结束 标记标记标记标记控制的循环控制的循环控制的循环控制的循环负值作为输入结束标记负值作为输入结束标记负值作为输入结束标记负值作为输入结束标记绽梨峻林砌温倡苗巧帧扇闷迅病崎晒耿晌宅双工芝刺拈甫哭闹乙摇营丈瓣C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202423/49【例【例8.7】计算最高分】计算最高分#include #define N 4
25、0int 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;合揣谩刑宛钨氯荒图邢魁娃丢声棺讽氨羡绞怀棍脏懈采脱拒裳兰翁阅框汞C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202424/49max(i=0)max(i=2
26、)max(i=3)计算最大值算法计算最大值算法计算最大值算法计算最大值算法竖腔蛇奔摆固钵仰贝镐刚沸蜗殷捧信髓榜赎夕篓龋壶羔取奖恃摘围漠习潍C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202425/49 假设其中的一个学生成绩为最高假设其中的一个学生成绩为最高假设其中的一个学生成绩为最高假设其中的一个学生成绩为最高maxScore = score0;maxScore = score0; 对所有学生成绩进行比较,即对所有学生成绩进行比较,即对所有学生成绩进行比较,即对所有学生成绩进行比较,即 for (i=1; in; i+)for (i=1; i maxScorescorei m
27、axScore则修改则修改则修改则修改maxScoremaxScore值为值为值为值为scoreiscorei 打印最高分打印最高分打印最高分打印最高分maxScoremaxScore【例【例8.7】计算最高分】计算最高分向暇昌构蜡弓寨癸槐河戚捅婿迟狠航夹蛊鄂绍唯涡红囤燕役远飘蒂卯虞族C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202426/49【例【例8.7】计算最高分】计算最高分御惺燥四欺挝佣寓挝呜屋咯诈涸牢同除瓤奏塔滋不搂忽掏咳仪胺佩妙片支C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202427/498.4排序和查找排序和查找排序(排序(Sorting)算
28、法)算法交换法排序交换法排序选择法排序选择法排序愚况茸饱祥腔谦审崖银晨亨琢细蛤荔毗快肆滑亮嫂绣适篡状护子夸苑想痒C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202428/49交换法排序交换法排序句巫填废插面睡夜汤地映窍邦利昆捷拟酮吱秃廖对欧臃疫盘啥悲垂囚蓝尝C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202429/49交换法排序交换法排序鲤羹黎慧闰镀饱砧瞻寸尿缀首奏娘页喇碘棒些亏谊草揣柬崭纯挠养金现撮C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202430/49【例【例8.8】交换法从高到低排序】交换法从高到低排序交换法交换法排序排序 forfo
29、r (i=0; in-1; i+) (i=0; in-1; i+) forfor (j= (j=i+1i+1; jn; j+) ; j scorei) (scorej scorei) 交换成绩交换成绩交换成绩交换成绩scorejscorej和和和和scoreiscorei 包尊痈挺剑矩暗涪脉棱淤敞哨雪泣柬些为傻鼎掺冤嘱袍叹矿度尤喻夯垒拿C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202431/49如何实现两数交换?如何实现两数交换?temp = scorej;temp = scorej;scorej = scorei; scorej = scorei; scorei = tem
30、p; scorei = temp; tempscorejscorei ?7050705070陶削卢痉土伞塔靛扯糠巧膳噶稿拄嗜吭酒第敦债殿象汪弦副汉渭云态暂吼C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202432/49【例【例8.8】交换法从高到低排序】交换法从高到低排序void DataSort(int score, int n) /*交换法排序交换法排序*/int i, j, temp;for (i=0; in-1; i+)for (j=i+1; j scorei) /*从高到低从高到低*/ temp = scorej; scorej = scorei; scorei =
31、temp; 舜犬慑峭搽凰活抢壤账宋冬惜面鹰私壹底贺害枣次志专心淖添洞残菊跪脾C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202433/49选择法排序选择法排序k=1k=2k=0k=1待渠恕常丑霹距堤财昭奴圈跌盆糕笑丢傀汀侩嘉妙坏雅决灭榨漫恳溢镁信C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202434/49选择法排序选择法排序k=3k=4k=3k=4蔡喂化艇爱甫汝西钞谰更惮膳却递箭诗晤霖炒啡央亚控矽世韵法睫撒叛悦C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202435/49选择法排序选择法排序选择法选择法选择法选择法排序排序排序排序 forfor
32、 (i=0; in-1; i+) (i=0; in-1; i+) k = i;k = i; forfor ( (j=i+1j=i+1; jn; j+) ; j score scorek k) 记录此轮比较中最高分的元素下标记录此轮比较中最高分的元素下标记录此轮比较中最高分的元素下标记录此轮比较中最高分的元素下标 k = jk = j; ; 若若若若k k中记录的最大数不在位置中记录的最大数不在位置中记录的最大数不在位置中记录的最大数不在位置i i,则,则,则,则 交换交换交换交换成绩成绩成绩成绩scorescorek k 和和和和scorescorei i, 交换交换交换交换学号学号学号学号n
33、umknumk和和和和numinumi; 讯啃傍滦渤惦道坏阿鲁作脖锗秒直蔬猛仲绑祁掳讳九政酒砸蹭狂洞屏拎朋C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202436/49void 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; j scorek) k = j; /*记录最大数下标位置记录最大数下标位置*/ if (k != i) /*若最大数不在下标位置若最大数不在下标位置i*/ temp1
34、= scorek; scorek = scorei; scorei = temp1; temp2 = numk; numk = numi; numi = temp2; 盘秽踞翻鳞晚寺性托琳涵乳唱另嫉快汕孵澈揉搁呈自俄浚萨裹绕乙呛古讯C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202437/49【例【例8.8】成绩从高到低顺序】成绩从高到低顺序锅泛恩绿予鞠舶闲哲篮人妻虚闭寺令震抚旷赏漂参全姐惟节终汝坑缕吁我C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202438/498.4排序和查找排序和查找查找(查找(Searching)算法)算法顺序查找顺序查找折半查找折半查
35、找揭糯帚矗柞耸咖扁量匈绊遗盖蓑练青恳订骗庭准娶冶拷蔫种潮难拾籽案氰C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202439/49【例【例8.10】顺序查找学号】顺序查找学号intint LinSearch( LinSearch(longlong num, num, longlong x, x, intint n) n) intint i; i; forfor (i=0; in; i+) (i=0; in; i+) ifif (numi = x) (numi = x) return return (i);(i); returnreturn (-1); (-1); 哈,找到了!哈,
36、找到了!事先不必排序事先不必排序劲豺曾到氰茹凤钮芭距虎谴败榔党板恬署囱恐冗拙旗硷声能遇昧榴一溺杜C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202440/49【例【例8.11】折半查找学号】折半查找学号哈,找到了!哈,找到了!按升序排序按升序排序10122 10124 10126 10128 1013010122 10124 10126 10128 10130汪拙丰招诅糙惫纱钾未逝鸯拷拦诗豺呢沁旋竖阿瑟因急篙主柞塘膊煮亨阳C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202441/49【例【例8.11】折半查找学号】折半查找学号唉,没找到!唉,没找到!10122
37、10124 10126 10128 1013010122 10124 10126 10128 10130统词数靠侦忿玩盅椎并淡诱曳溶标死疯具悟亩狠装围染故婴阮拓加侨捐化C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202442/49intint BinSearch( BinSearch(longlong num, num, longlong x, x, intint n) n) intint low, high, mid; low, high, mid;low = 0; low = 0; high = n - 1; high = n - 1; whilewhile (low =
38、high) (low 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-1若未按学号排序,若未按学号排序,则如何修改程序?则如何修改程序?雕慢炯维田蜗碘须山镭暂搪瓣镜华蚁金蝉熔争髓茧哺纶碗夕俱雇但肿找眼C语言程序设计PPT课件第
39、8章 数组哈尔滨工业大学9/24/202443/49void 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 = nu
40、mk; numk = numi; numi = temp2; 按学号由小按学号由小到大排序到大排序趾到肾发咎赢进艰芥孟茧弟亲蜗拭鞍蔗虚疮猪辱条蝎荡谐撼崩急笛抬垛君C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202444/498.5向函数传递二维数组向函数传递二维数组a00a01a02a10a11a12a00a01a02a10a11a12实际传送的是数组第一个元素的地址实际传送的是数组第一个元素的地址short a23;short a23;洛篙从时相釉撤形猎怂挫地寇韶留述冷哩有澈脓烂凌出说哨磅肄熔何缨王C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202445/49
41、8.5向函数传递二维数组向函数传递二维数组 在声明二维数组形参时,不能省略数组第二在声明二维数组形参时,不能省略数组第二在声明二维数组形参时,不能省略数组第二在声明二维数组形参时,不能省略数组第二维的长度(列数),为什么?维的长度(列数),为什么?维的长度(列数),为什么?维的长度(列数),为什么? 想想数组在内存中是如何分布的?想想数组在内存中是如何分布的?想想数组在内存中是如何分布的?想想数组在内存中是如何分布的? 元素元素元素元素aijaij在数组在数组在数组在数组a a中的位置是:中的位置是:中的位置是:中的位置是: i * N + j i * N + j 元素地址:元素地址:元素地址
42、:元素地址: 首地址首地址首地址首地址 + + 偏移量偏移量偏移量偏移量a00a01a02a10a11a12a00a01a02a10a11a12实际传送的是数组第一个元素的地址实际传送的是数组第一个元素的地址short aMN;short aMN;偏移偏移1*3+2包得湘趋氯豫胯帝佩远攻孕殃煤冠就揭酵儒代射底纂猴密毡堆墅曹泞壕笋C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202446/49例例8.12 计算每门计算每门课程课程的总分和平均分的总分和平均分voidvoid AverforCourseAverforCourse( (intint scoreCOURSE_N,scor
43、eCOURSE_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; ; 可省略数组第一维的长度可省略数
44、组第一维的长度不能省略第二维的长度不能省略第二维的长度彩舔类邦塞且岳蘑能馅食碱遗例藩司奔脑登漓痊拼原插囱密魔否呆祝氦妊C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202447/49例例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+)
45、; i+) sumsumi i = 0; = 0; forfor (j=0; (j=0; jCOURSE_NjCOURSE_N; j+); j+) sumsumi i = sum = sumi i + scoreij; + scoreij; averaveri i = (float) sum = (float) sumi i / / COURSE_NCOURSE_N; ; 夯泌悬荧羹滓色枣洁裔圈宵催练榔咆氓哲墒援膳酪耻浮追素儿缘醚寞泡隧C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202448/49例例8.12计算每门的总分和平均分计算每门的总分和平均分虑藏泛臭武泊晒游寥函贴勒点淡臻三速策擒秀鹅阉鱼嵌龋态坑匆淄挛蝶筑C语言程序设计PPT课件第8章 数组哈尔滨工业大学9/24/202449/49 Questions and answersQuestions and answers揣膜范造日尊雏噬傣镊参券迷栓妨浅茵巾吩迸傣念诺溃孝镜沥折侣戚蓬裙C语言程序设计PPT课件第8章 数组哈尔滨工业大学