1、第四章 数据组织,喘绅上吉慈裸蝉兢铂赠狮杯形沤夕听催七脸琼期烽锹蒂赦烈椒剩澄悲闸鸡丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,本章内容,主要内容:数组:把相同类型的一批数据放在连续的一片空 间。字符串:特殊的数组字符类型、结束标志。结构体:把不同类型的数据放在一起,作为一个数 据单位。本章重点:构造数据类型的定义和引用,枷趁乾云扮王鲸荣假澎傀寄族求柄和偏瞄藉色难赴模胰半茶通晨枫卷膜茎丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,一维数组的定义,一维数组的定义方式: 数据类型 数组名数组长度;,合法
2、标识符, :下标运算符 不能用( ),表示元素个数只能是常量表达式,数组元素的类型,例int a6;,数组名表示该数组所占的内存单元的首地址,是地址常量,编译时分配内存,并且是连续的内存字节数=数组元素个数*sizeof(元素数据类型),数组a共有6个元素,数组元素从a0开始,到a5结束,注意:不能使用a6,煤礁秋蛔稚获席狱圆腋友臀鞍芹撅峭蛋朔速驯奈薪戏牛哑恿番饵酿谷罐脯丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,【例】 输入5个整数,从小到大排序。,(1)用5个简单变量。 (2)用数组。,涛惹结闰弄茎雍攀靳施炔沈仔迄妒以画豹五胡匙锥役淀召小径
3、劣彦离催泰丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,说明,一维数组的定义格式: 数据类型 数组名数组长度;概念:数组:就是放的一组数据,每个数据是一个元素。下标:就是元素在数组中的位置,从0开始连续编 号。使用范围:0(数组长度-1)引用:实际上是使用元素,而元素是由下标决定 的。,疆偷爆蚀呕市清舌陪稀柠籽撕尚烃娥臀愿倡跳嫂紊里辕琉侵锹伺挡盆冒靡丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,说明,例 int i=15; int ai;,不能使用变量定义数组元素个数只能使用常量表达式,#defin
4、e SIZE 10main() int aSIZE, b10;,P,秧腾螺壕距颓淌碎芍宵崭唬颁恬酒振会曼砒撇醋淄挎酣低相曳坟裴晴杖助丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,说明,例 int a10; /*对a0 a9赋值*/ printf (%d, a);,for (i=0; i=9; i+)printf(%d, ai);,输入和输出数组,怎么做? 只能逐个引用数组元素,而不能一次引用整个数组。其实,每个数组元素就是一个简单变量。,腕担揍光百崖宏苫萝挑裙驻尿琉巾恒趣窝确瓷躬使款芥部患抬较萤墨号静丁海玲的C语言课件第四章 数据组织丁海玲的C语
5、言课件第四章 数据组织,3 July 2018,说明,如 int a10=4,3,8,10,5,2,9,6,13,7;,定义数组并初始化: 初始化依次写在中,用逗号隔开。,如 int a10=4,3,8,10,5,2,9,6; 这10个数据是什么呢?,如 int a10; 没初始化时,数组元素有值吗?值是什么?,淀溪衅侨醉救氛雕就搀雷鼓幸呆蛆廖雀钾察渐喊棋追纷侧愧蹿丛破唤烩靴丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,说明,如 想让所有的元素的初值都为0,怎么做? int a10= 0;,定义数组并初始化: 初始化依次写在中,用逗号隔开。,荔轩
6、涸险怠裙把吭家仰派傀佃边膜卧窖棘粮叫羽萤纂钮版族吟宁妙邢沫豹丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,【例4-1】输入10个整数,再逆序存放。,分析逆序:可以用第一个数与最后一个数交换,第二个数与倒数第二个数交换,依次类推。,菲钠纬豹斡豌蛔溉芽肯晋郁捌验讣阜渗砖娜架褪琼磺撤谷缘愿盏密棵竞油丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,逆序操作,如果数组名为a,长度为N,用变量i,j分别指向要交换的两个元素(下标 i 初值为0,下标 j 初值为N-1),则重复做: ai与aj交换,然后+i, -j
7、思考:重复的条件是什么?不能永远重复吧?,龚障腹揣防扁呕敖过砷猖巳翱融嘛足虚姻裕谚肾埔禹恋邢河没狈垦皿上嚷丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,逆序操作,i=0,j=9,4,7,3,i=1,j=8,交娱联看凋弹涟懦忧销撬阂腾钠披喘淮焚赃箱触累吊卸谆岸剔硝蹦差掐时丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,逆序操作,4,7,3,6,8,i=1,j=8,i=2,j=7,汀业左淮扫岩臂款辖栏拄淋粱朴鳃但慷迎辟攻半熔懈亚状焙迫格嵌香炬沁丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数
8、据组织,3 July 2018,逆序操作,4,7,3,6,8,9,i=2,j=7,i=3,j=6,斟殿透铣裁贡混巡涟破阵披埃澎幸撕幅帅矗舒溜赋筏崎蕾怀烦挺凡绣烃坑丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,逆序操作,4,7,3,6,8,9,i=3,j=6,i=4,j=5,2,5,他至寸睬捻知柿淆灵来合楚奋峪给鄙拎牡捕瘦膨嗣馆筐李圾潜徊狱滴耶纷丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,逆序操作,如果数组名为a,长度为N,用变量i,j分别指向要交换的两个元素(下标 i 初值为0,下标 j 初值为N
9、-1),则重复做: ai与aj交换,然后+i, -j思考:重复的条件是什么?不能永远重复吧?,循环条件为:ij,嫌数姓缘磋四袖握工钠瑟液览僵潮夏霜氢着梆驭蓄悯景肛诡申锗四俏割跌丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,【例4-3】随机产生10个整数,从小到大排序。,常用的两种排序方法:选择排序冒泡排序,抑痘葵模断噬旁鸦俄蓟澄武赁莱霍几原限功辫琶繁茫些徐琶劲茨兴宴沤秃丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,冒泡排序,思路: 相邻的两个数据进行比较,较小的数交换到前面。,谆算揣祁班秘唬闲植游怔
10、析恩摆延扫泽页皋碑鼻喧涣哭迁模洲注抨糯产姿丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,第1趟,第2趟,第3趟,第4趟,第5趟,第6趟,第7趟,9次8次7次6次5次4次3次2次1次,结 果,a0 a1 a2 a3 a4 a5 a6 a7 a8 a9,4 3 8 10 5 2 9 6 13 7,第0趟,第8趟,2 3 4 5 6 7 8 9 10 13,3 4 5 2 8 6 9 7 10 13,4 3 8 10 5 2 9 6 13 7,2 3 4 5 6 7 8 9 10 13,3 4 2 5 6 8 7 9 10 13,2 3 4 5 6 7
11、 8 9 10 13,3 2 4 5 6 7 8 9 10 13,2 3 4 5 6 7 8 9 10 13,3 4 8 5 2 9 6 10 7 13,2 3 4 5 6 7 8 9 10 13,3 4,5 10,2 10,9 10,6 10,7 13,5 8,2 8,6 9,7 10,2 5,6 8,7 9,2 4,7 8,2 3,N个数比较大小共进行了N-1 趟比较 用变量i来表示趟,则0=iN-1在第i趟比较中,共比较了N-i-1 次 用变量j来表示第i趟比较的次数,则0=jN-i-1 每次比较的是aj和aj+1两层循环结构: 外层循环每次把操作范围内最大的数放到最后位置 内层循环每次
12、把较大的数放到靠后的位置,鼻嗜敦痪垫乱奠深怕扮摆岛宇缮达敞揽泽墅谩洗拥吠隅朵殊辗氯黄帕阵方丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,【例4-3】随机产生10个整数,从小到大排序。,冒泡排序核心部分:for( i=0; iN-1; i+) /扫描趟数 for( j=0; jN-i-1; j+) /其中一趟 if( a j 与 a j+1 反序 ) 交换;思考:数据已经有序了,能不能提前结束排序工作?,吱檄竞濒彬效品源隙战廷即良巧赐贯知植抑唉残板拽听扮区诊佐呜帅粟险丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July
13、 2018,冒泡排序改进:,for( i=0; iN-1; i+) /扫描趟数 for( j=0; j x时停止此时的j就是插入x的位置。,1,3,6,9,15,a,for( j=0; j x ) break;,脓禽漆对拉娜玲濒猴伙妈梁侥知灭冀渊弦争惟趟耐颁昨镶概酞株山急庭沧丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.2 插入排序,算法思想:(2)移动数据,腾出空间,1,3,6,9,15,a,15,9,6,j,i,for( k=i; kj; k-) a k = a k-1;,谐穆匝志渤怠蝴痕昆茧萨软逮盂韶据盔薯港昂亡佳蛀培测相凸拄氢滚壤
14、送丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.2 插入排序,算法思想:(3)插入数据,1,3,6,a,15,9,6,j,4,4,a j = x;,严染簧篱饱蹭醛旬碌迄嗅原族秆开势桂送镜扣弧舍阜恍要疗捂十峭揭隔窥丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.2 插入排序,算法思想:for(i=0; ij; k-) a k = a k-1; aj = x;,输入第0个数据能正常处理吗?,哭描烂细样伸驳真娩驶筛晌队芋茵狼柔徽我澄怀祁瞅陈刨毕斧划薄求瞒傀丁海玲的C语言课件第四章 数据组织丁
15、海玲的C语言课件第四章 数据组织,3 July 2018,习题4.4 杨辉三角,规律:第0列、对角线都为1 其它地方:上面+左上,鸥访漳做炔兹遂拷劣胶婿废刊喷盏澳兄火输帘颧婴瘩露群柳谦粉测祖逊鼻丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.4 杨辉三角,方法:用一维数组存即将输出的当前行,顿痊挠射窗涉悲坑私颠熄箱窟宵娃寄蓖已估台射腥率酋妓秤绰嫂婿宛娃咨丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.4 杨辉三角,第i行:a0 = ai = 1;for(j=1; j0; j-) a j
16、= a j + a j-1;,亭锦夕筏怀碉汛交栈书惩祝乱风绩及值浇锅韶涉旗匹鸽噬球件晒本梁由统丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例4-2 交换两块数据。,算法思想: 先将两块数据分别逆序,再将它们整体逆序。反复使用 “逆序”操作,可将逆序操作定义成一个函数。输出数组定义成一个函数。 数组名作为函数参数, 就是把数组起始地址传给函数。 关心:地址。 引申习题4.1,狱于鹰病扫盗硬氯寂丑盟邀千忽拿檀懊肇囤在孔父壹抉摇治金倘调膘袭煤丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例4-4 整数转
17、二进制数。,8转成二进制数:,0,8%2=0, 8/2=4,4%2=0, 4/2=2,2%2=0, 2/2=1,1%2=1, 1/2=0,0,0,1,n = 0;while( x != 0) a n = x%2; x = x / 2; n+;,8的二进制数为1000,如果输入0,结果如何?,宁籽宴制稠令挟蚜徐痢咖遏谨直舔厚架霉闻焚唉篱研咙振涤歹鞘歇给祥舜丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,小结,(1)引用数组元素,计算下标很重要;(2)下标不能超界(上界、下界)!(3)画图理解数据的存储,直观;(4)数组作为函数参数,是传地址。,数组作
18、为函数参数,调用函数的实际参数可以用数组任何一个元素的地址吗?,均揭候衡挛镊关醇唐残蓝野市路谦卸锄遇诛驱魏梆疥酚墟称楚噎舶诣馈绰丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,上机作业,习题4.1和4.3。,屎鸦坛襟楔铜福恤荐琉比胆崇殃纂歧哆阀睁眼来恰哄栅禁滦呛礁磋耕皆喳丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,抛某手巧瑞拙汕鳖命柜湾吻饱赁豆戏镜构锥铰恒蘸怨先蹦令蓬渺勋蒂跌毫丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,内容回顾,(1)引用数组元素,
19、计算下标很重要;(2)下标不能超界(上界、下界)!(3)画图理解数据的存储,直观;(4)数组作为函数参数,是传地址。,辩稚峨迅婶洽形碾海入腰淘蜕馏冲缚伦巩济构挪遁固傲嚷将教魔鼻绥军恩丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.3 折半查找(二分查找),速度最快的查找!查找条件是:数据必须有序!,L,R,M=(L+R)/2,屎频郝皿下狠效脊俩烘揩坐舶呆氏又备做躁掣姨近阁狐成己倘旁鹤丢官富丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.3 折半查找(二分查找),速度最快的查找!查找条件是
20、:数据必须有序!,L=0,R=9,箩仍陈据啊吟希尾迎戏粉亿躺丝三昂亥囊轰隅侧衡袍胃宣斧悬搭小堰圣埃丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.3 折半查找(二分查找),速度最快的查找!查找条件是:数据必须有序!,L=5,R=9,xaM,L=0,LM+1,百叔母詹亥缎景博适霓萧禄这谈拥常煞所芝驼雹诣匈罗甄暗琶公蹬享培激丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.3 折半查找(二分查找),速度最快的查找!查找条件是:数据必须有序!,R=9,L=5,之椰卢第铁辱扁吕攻棘蛤没白现壶奥填羞
21、土讽善淖屯乘运切颈雪勺歹皆娟丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.3 折半查找(二分查找),速度最快的查找!查找条件是:数据必须有序!,R=9,L=5,xaM,RM-1,展贝屿囚倚渺诀乓牧薯叫坝奏鞍讣猫辨晌硫偏意神刷湾必魁佑潦盒副仙手丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.3 折半查找(二分查找),速度最快的查找!查找条件是:数据必须有序!,R=6,L=5,xaM,LM+1,竹轿梭筋嫉域根答池塔宜径乳仍宽马邯罚锋退罗裤示滴恼印宝室矛姻弘列丁海玲的C语言课件第四章 数据组
22、织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.3 折半查找(二分查找),速度最快的查找!查找条件是:数据必须有序!,R=6,L=6,x=aM,返回M(6),唯痊通陕叶懦策平森鳖允洗拎浓宇愤铬兆蹋褪杂淀耐骂普画污强计栓胖盲丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.3 折半查找(二分查找),算法:(假设数据递增有序) (1) 当L=R, 重复做: 求M=(L+R)/2; 如果x=aM, 则返回M; 如果xaM, 则R=M-1; 否则 L=M+1; (2) 返回-1(表示查找失败),斌桩忘秦控阅稽塌稿木纽幼稼痪睫岳搏
23、无镁匙肘捅檀崩体异舶狞着勋撕烘丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,二维数组,与一维数组有相同的特征! 有两个下标,下标都是从0开始二维数组的定义方式: 数据类型 数组名行长度 列长度;,俗疾筏卖声撅藉耀曲熔汐霍入狮慢逾窿铆羽滇糊东羞矢佩逆受肿簧破九垒丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,二维数组,例如: int a32;在内存中排列为: (一条线) a00, a01,a10,a11,a20, a21在逻辑上,视为3行2列: (一张表) a00、a01 a10、a11 a20、a21
24、,厕坷规规绪眷瞻躇等沛庐绊宾阉哄简埔帛壕半年甄划涩拒葫燕扶韶豢躁篓丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例题4-5 杨辉三角,第0行,第1行,第2行,第3行,第4行,第5行,第0列,第1列,第2列,第3列,第5列,第4列,任骨戴暑犁贯负捧恒齿媚濒蒋尼搬渝拣惦佣吧稚农料嗣财渤祟鹊旅铲俐袖丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例题4-6 杨辉三角,算法思想:(1)生成一张表;(2)输出。,第0行能正确处理吗?第0列能正确处理吗?其它元素需要初始化吗?,生成一张表a:第i行:i从0到N-1
25、 ai0 = aii = 1; 第j列:j从 ?到 ? a i j = a i-1 j + a i-1 j-1;,已棵存驻宿衰淫琉炉邵舍蔽锅接定秉身给纯咕馈模嫡拘缘梅静潮迈党捞于丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例题4-6 魔方,算法思想:(1)填数(填二维数组)(2)输出(输出二维数组),茹坤鸵彤跃杠盯洁祁腮请仁亭碌伐赠钓郎道吓美讥质疤扑勺样帮袋会惭阵丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例题4-6 魔方,算法思想:(1)填二维数组a(向右上方向),(1) i = 0; / 准
26、备填数的行号 j = N/2; / 准备填数的列号 k = 1; / 准备填数k(2)当k=N*N时,循环做: a i j k; 确定下一个i, j,晕遥蚤净迭选舷水戈摔粮创滓炮款凑缸獭涌慑赡蒸咎秽啥嘘睡霓哭裁规跃丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例题4-6 魔方,算法思想:(1)填二维数组a(向右上方向),(1) i = 0; / 准备填数的行号 j = N/2; / 准备填数的列号 k = 1; / 准备填数k(2)当k=N*N时,循环做: a i j k; 确定下一个i, j,确定下一个i, j: 如果i-1 N-1 /超上界、
27、右界 则 +i;,孪氢疯也芝珐水毁退伶订典继索毡尹艰汉逸芝索零谴夜猎鬃求膛襟惧厨洪丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例题4-6 魔方,算法思想:(1)填二维数组a(向右上方向),(1) i = 0; / 准备填数的行号 j = N/2; / 准备填数的列号 k = 1; / 准备填数k(2)当k=N*N时,循环做: a i j k; 确定下一个i, j,确定下一个i, j: 如果i-1 N-1 /超上界、右界 则 +i; 否则 如果i-10 /只超上界 则 i=N-1; +j;,反削樱通门备适惮侨媚饭咳斌轧焊骤兽拿历救婿挡淹亡透颠馏区
28、忻印虫蟹丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例题4-6 魔方,算法思想:(1)填二维数组a(向右上方向),(1) i = 0; / 准备填数的行号 j = N/2; / 准备填数的列号 k = 1; / 准备填数k(2)当k=N*N时,循环做: a i j k; 确定下一个i, j,确定下一个i, j: 如果i-1 N-1 /超上界、右界 则 +i; 否则 如果i-1N-1 /只超右界 则 -i; j=0;,良渠蚤梯拨苹荡亲耽孩唇缄藏匹趁缉臭斡渔做葡扰骄馅辖舀码喘阻钥皋漆丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组
29、织,3 July 2018,例题4-6 魔方,算法思想:(1)填二维数组a(向右上方向),(1) i = 0; / 准备填数的行号 j = N/2; / 准备填数的列号 k = 1; / 准备填数k(2)当k=N*N时,循环做: a i j k; 确定下一个i, j,确定下一个i, j: 如果i-1 N-1 /超上界、右界 则 +i; 否则 如果i-1N-1 /只超右界 则 -i; j=0; 否则 如果ai-1j+1已有数 则+i;,吞贩隶饲奔论索妈嚣宏梅冉污譬羞汪征沈粗舵人脖叫力桨呕狸废阳骂觅敲丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例题
30、4-6 魔方,算法思想:(1)填二维数组a(向右上方向),(1) i = 0; / 准备填数的行号 j = N/2; / 准备填数的列号 k = 1; / 准备填数k(2)当k=N*N时,循环做: a i j k; 确定下一个i, j,确定下一个i, j: 如果i-1 N-1 /超上界、右界 则 +i; 否则 如果i-1N-1 /只超右界 则 -i; j=0; 否则 如果ai-1j+1已有数 则+i; 否则 -i; +j;,谱碎蛔啥涎钉肥趾沸娃堤卯彤胺忱骸裔社朽祥募皿券记猿升淫俯吃杯破凳丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例题4-6 魔
31、方,算法思想:(1)填二维数组a(向右上方向),(1) i = 0; / 准备填数的行号 j = N/2; / 准备填数的列号 k = 1; / 准备填数k(2)当k=N*N时,循环做: a i j k; 确定下一个i, j,确定下一个i, j: 如果i-1 N-1 /超上界、右界 则 +i; 否则 如果i-1N-1 /只超右界 则 -i; j=0; 否则 如果ai-1j+1已有数 则+i; 否则 -i; +j; +k;,函沸械滦厅叼众抛掩减撕调掠使奢脯顶忍猪倾彤呼信赐疤基扯牺肮焙懦舀丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例题4-6 魔方
32、,算法思想:(1)填二维数组a(向右上方向),(1) i = 0; / 准备填数的行号 j = N/2; / 准备填数的列号 k = 1; / 准备填数k(2)当k=N*N时,循环做: a i j k; 确定下一个i, j,确定下一个i, j: 如果i-1 N-1 /超上界、右界 则 +i; 否则 如果i-1N-1 /只超右界 则 -i; j=0; 否则 如果ai-1j+1已有数 则+i; 否则 -i; +j; +k;,为什么要先判断既超上界又超右界的情况?,微琐拽龋摆对肮川莱拱竞兵慧落慰队翰奠檀鸣夜仗驳足碟伊浙滔宙饶润横丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3
33、 July 2018,例题4-6 魔方,算法思想:(1)填二维数组a(向右上方向),(1) i = 0; / 准备填数的行号 j = N/2; / 准备填数的列号 k = 1; / 准备填数k(2)当k=N*N时,循环做: a i j k; 确定下一个i, j,确定下一个i, j: 如果i-1 N-1 /超上界、右界 则 +i; 否则 如果i-1N-1 /只超右界 则 -i; j=0; 否则 如果ai-1j+1已有数 则+i; 否则 -i; +j; +k;,为什么要先判断既超上界又超右界的情况?,如何表达“已有数”?,论侯稻敬探缉街舀赦琼蚂侵萝腰仟箭胺笆寨蕊寝奢儡镀以枉际皋便拘闷熔丁海玲的C语
34、言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,例题4-6 魔方,算法思想:(2)输出二维数组a(假设N行N列),for ( i=0; iN; i+) for ( j=0; jN; j+) printf ( “%4d”, a i j ); printf (“n”);,液系镶刽碟喀嫉蜒厚桩熬应拨确汉悯论皑狮峪昨慑翁桨杏磁午辉梨朵病润丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,习题4.6 找鞍点,算法思想:(1)输入一个二维数组;(2)对每一行i 找该行的最小值,保留其列下标j; 找第j列中最大值x 如果x=aij, 则输出(i,j,x),注意:同一行中可能有几个最小值!,问题:需要考虑同一列中多个最大值吗?,捉唱粕低崇鬼氟讹萌触狡手奥蓝汐讲薄狮钮咽篮颜盖搂乓抱贾蛔裳吵磅它丁海玲的C语言课件第四章 数据组织丁海玲的C语言课件第四章 数据组织,3 July 2018,小结,(1)二维数组的定义: 类型 数组名行数列数; 行数、列数必须是常数!(2)二维数组存储的形式。(3)定义二维数组中的“列数”更重要!(4)二维数组的元素有两个下标。,