C语言新教材PPT课堂课件-5-数组.pdf
1第第五五章章 数数组组主主要要内内容容:5.1 5.1 一一维维数数组组5.2 5.2 二二维维数数组组5.3 5.3 数数组组与与循循环环计计算算2用用基基本本数数据据类类型型可可以以解解决决所所有有问问题题吗吗?例例如如:输输入入某某班班50名名学学生生某某课课程程的的成成绩绩,统统计计平平均均成成绩绩及及高高于于平平均均成成绩绩的的人人数数。定定义义50个个独独立立变变量量接接收收50个个成成绩绩?用用1个个变变量量依依次次接接收收各各人人成成绩绩,与与此此同同时时累累计计总总成成绩绩,进进而而求求出出平平均均成成绩绩?数数组组的的引引入入当当统统计计高高于于平平均均成成绩绩的的人人数数时时,需需要要再再次次输输入入50个个成成绩绩吗吗?-不不妥妥!-可可以以!-需需要要!-不不妥妥!解解决决方方法法:用用数数组组!3数数组组是是具具有有一一定定顺顺序序关关系系的的若若干干相相同同类类型型变变量量的的集集合合体体,组组成成数数组组的的变变量量称称为为数数组组元元素素。数数组组属属于于构构造造类类型型。数数组组的的概概念念45.1 5.1 一一维维数数组组l使使用用一一个个下下标标标标识识数数组组元元素素的的数数组组叫叫作作一一维维数数组组。如如:每每个个班班的的学学生生排排成成一一队队,只只需需要要指指出出某某个个学学生生在在队队列列中中的的编编号号,就就可可以以确确定定这这个个学学生生。5一一、一一维维数数组组的的定定义义l格格式式:类类型型名名 数数组组名名 常常量量表表达达式式;int a 10;定定义义a a为为一一维维数数组组,由由1010个个元元素素组组成成,可可独独立立存存放放 1010个个整整型型数数据据。TCTC系系统统为为数数组组a a分分配配1010个个intint型型存存储储单单元元,共共2*10=202*10=20个个字字节节,且且这这些些存存储储单单元元是是连连续续的的。数数组组名名常常量量表表达达式式,数数组组大大小小a1000100210041006100810101012101410161018 地地址址6二二、一一维维数数组组元元素素的的引引用用下下标标法法格格式式:数数组组名名 下下标标 如如有有定定义义:int a 10;a0a1a2a3a4a5a6a7a8a9注注意意:数数组组元元素素的的下下标标从从0开开始始;数数组组元元素素下下标标的的最最大大值值等等于于数数组组的的大大小小减减1。常常量量/变变量量/表表达达式式 如如,a0,a1,am,an,am*n (int m=3,n=2;):下下标标运运算算符符,优优先先级级1 17三三、一一维维数数组组的的初初始始化化l格格式式:类类型型名名 数数组组名名 常常量量表表达达式式=数数据据表表列列 ;例例如如:int a 10 =1,2,3,4,5,6,7,8,9,10 ;全全部部元元素素赋赋初初值值将将花花括括号号中中的的常常量量依依次次赋赋给给a0a0、a1a1、a9 a9 只只能能为为常常量量例例如如:int a 10 =2,3;部部分分元元素素赋赋初初值值将将花花括括号号中中的的常常量量依依次次赋赋给给a0a0、a1a1,其其它它各各数数组组元元素素的的值值均均为为0 0。8一一维维数数组组的的初初始始化化 例例如如:int a =1,2,3,4,5,6,7,8,9,10 ;注注意意:intint a;a;是是不不允允许许的的!对对全全部部元元素素赋赋初初值值时时,可可以以不不指指定定数数组组长长度度,系系统统自自动动按按初初值值个个数数取取长长度度为为10注注意意:若若要要使使数数组组1010个个元元素素具具有有相相同同的的初初值值5,5,intint a=10*5;a=10*5;或或intint a=5*10;a=5*10;都都是是不不允允许许的的!9四四、一一维维数数组组元元素素的的输输入入和和输输出出#include void main()int a10,i;for(i=0;i10;i+)scanf(%d,&ai);printf(n);for(i=0;i10;i+)printf(%3d,ai);printf(n);/*变变量量i作作下下标标,取取值值09*/10举举例例:一一维维数数组组元元素素的的逆逆序序(倒倒序序)输输出出例例5.3#include void main()int a10,i;printf(Please input array a:);for(i=0;i=0;i-)printf(%3d,a i );printf(n);问问题题:如如何何将将数数组组元元素素逆逆序序重重新新存存放放?(例例5.10)115.3(1)一一维维数数组组与与循循环环计计算算l数数组组元元素素逆逆序序重重排排l数数据据查查找找:顺顺序序查查找找法法,折折半半查查找找法法l删删除除/插插入入数数组组元元素素l数数组组元元素素循循环环移移位位l求求数数组组中中最最小小元元素素l求求数数组组中中最最小小元元素素及及其其下下标标l排排序序算算法法:选选择择排排序序法法,直直接接交交换换排排序序法法,冒冒泡泡排排序序法法,改改进进的的冒冒泡泡排排序序法法,插插入入排排序序法法,归归并并排排序序法法12#include void main()int a7=1,2,3,4,11,12,13;int i,temp;for(i=0;i7/2;i+)temp=ai;ai=a6-i;a6-i=temp;for(i=0;i7;i+)printf(%4d,ai);举举例例:数数组组元元素素逆逆序序重重排排P138P138例例5.105.10 将将存存放放在在数数组组中中的的一一组组数数据据按按逆逆序序重重排排。解解1)首首尾尾对对调调 i 6-i 13#include void main()int a7=1,2,3,4,11,12,13;int i,j,temp;for(i=0,j=6;ij;i+,j-)temp=ai;ai=aj;aj=temp;for(i=0;i7;i+)printf(%4d,ai);数数组组元元素素逆逆序序重重排排 例例5.105.10解解1)首首尾尾对对调调程程序序2 i j 14#include void main()int a7=1,2,3,4,11,12,13,b7;int i,j,temp;for(i=0;i7;i+)bi=ai;for(i=0;i7;i+)ai=b6-i;for(i=0;i7;i+)printf(%4d,ai);数数组组元元素素逆逆序序重重排排 例例5.105.10解解2)使使用用辅辅助助数数组组是是否否还还有有其其它它解解法法?-有有!例例如如最最佳佳解解法法是是“首首尾尾对对调调”!15程程序序1:#include void main()int a15=21,13,52,0,-25,6,18,1,36,2,-20,17,9,33,8;int i,x;scanf(%d,&x);for(i=0;i15;i+)if(ai=x)break;if(i15)printf(%4d is found,its at%4d.n,x,i);else printf(Not exist!n);查查找找举举例例1:顺顺序序查查找找法法P133例例5.6 在在一一组组无无序序且且不不重重复复的的数数据据中中查查找找一一个个数数,若若有有则则显显示示该该数数所所在在位位置置,否否则则输输出出提提示示“Not Exist!”。16#include void main()int a15=21,13,52,0,-25,6,18,1,36,2,-20,17,9,33,8;int i,x,f_at,flag=0;/*flag初初值值为为0,表表示示未未找找到到;f_at记记录录找找到到数数所所在在位位置置*/scanf(%d,&x);for(i=0;i15;i+)if(ai=x)flag=1;f_at=i;break;if(flag=1)printf(%4d is found,its at%4d.n,x,f_at);else printf(Not exist!n);顺顺序序查查找找法法程程序序2 2:引引入入一一标标识识变变量量flag,用用1标标识识找找到到,0标标识识未未找找到到17查查找找举举例例2:折折半半查查找找法法(二二分分查查找找法法)折折半半查查找找法法只只能能对对有有序序数数列列进进行行查查找找,方方法法如如下下:假假设设n个个数数按按由由小小到到大大的的顺顺序序存存放放在在数数组组a中中,top、bot分分别别表表示示查查找找区区间间顶顶部部元元素素和和底底部部元元素素的的下下标标(初初值值为为0和和n-1)。取取查查找找区区间间的的中中间间位位置置mid=(top+bot)/2,将将待待查查找找的的数数x与与amid进进行行比比较较,分分以以下下三三种种情情况况分分别别处处理理:x=amid:已已找找到到,退退出出查查找找;xamid:x只只可可能能落落在在amid+1和和abot之之间间,改改置置top=mid+1。、两两种种情情况况将将查查找找区区间间缩缩小小了了一一半半,然然后后重重复复以以上上比比较较,直直到到找找到到或或者者topbot(表表示示查查找找区区间间已已缩缩小小到到零零),退退出出循循环环。例例5.718折折半半查查找找过过程程示示例例19#include void main()int a10=7,9,12,18,21,25,33,39,45,60;int x,top=0,mid,bot=9,flag=0;/*标标识识是是否否找找到到,0表表示示未未找找到到*/scanf(%d,&x);if(x=atop&x=abot)/*若若x位位于于查查找找区区间间则则开开始始查查找找*/while(!flag&topamid)top=mid+1;else bot=mid-1;if(flag=1)printf(%4d is found,its at%4d.n,x,mid);else printf(Not exist!n);折折半半查查找找法法程程序序例例5.720举举例例:删删除除数数列列中中指指定定位位置置上上的的数数例例5.8 在在一一组组不不重重复复数数据据中中,删删除除指指定定位位置置的的数数。分分析析:欲欲删删除除数数组组a中中指指定定位位置置为为del_at的的元元素素,只只需需将将del-at位位置置元元素素之之后后的的所所有有元元素素依依次次向向前前移移动动一一个个位位置置,然然后后将将数数组组元元素素实实际际个个数数减减1。21删删除除数数列列中中指指定定位位置置上上的的数数程程序序例例5.8#include void main()int a12=1,3,5,0,-3,6,9,15,7,2,-8,10;int i,del_at;scanf(%d,&del_at);/*待待删删位位置置起起,各各元元素素值值依依次次被被后后续续元元素素值值替替代代*/for(i=del_at;i11;i+)ai=ai+1;/*输输出出数数组组时时不不包包括括最最后后一一个个元元素素*/for(i=0;i11;i+)printf(%4d,ai);printf(n);22举举例例:插插入入数数到到已已排排序序数数列列中中使使仍仍然然有有序序习习题题5.3假假设设n个个由由小小到到大大排排列列的的数数存存放放在在数数组组a中中,待待插插入入数数存存放放在在x中中。解解决决方方法法之之一一:首首先先在在数数组组a中中查查找找插插入入x的的位位置置;找找到到插插入入位位置置p后后,将将ap到到an-1中中的的数数往往后后顺顺移移一一个个位位置置以以腾腾出出ap放放入入x值值。该该如如何何查查找找插插入入的的位位置置p呢呢?方方法法之之一一:顺顺序序查查找找法法,即即从从首首元元素素开开始始往往后后逐逐一一查查找找,直直到到遇遇到到一一个个元元素素大大于于等等于于x。注注意意:插插入入数数的的位位置置有有三三种种情情况况:有有序序数数列列之之中中的的某某个个位位置置、第第1个个数数之之前前和和最最后后一一个个数数之之后后,算算法法应应覆覆盖盖各各情情况况。23插插入入数数到到有有序序数数列列中中示示例例24#include void main()int a9=1,2,3,4,5,6,7,8,9;int i,j,n,temp;printf(Please input times:);scanf(%d,&n);for(i=1;i=n;i+)temp=a0;for(j=0;j=7;j+)aj=aj+1;/*各各元元素素值值依依次次被被后后续续元元素素值值替替代代*/a8=temp;for(i=0;i9;i+)printf(%4d,ai);举举例例:数数组组元元素素循循环环移移位位例例5.9 将将一一维维数数组组中中元元素素向向左左循循环环移移位位,移移位位次次数数由由键键盘盘输输入入。25举举例例:求求出出一一维维数数组组a中中的的最最小小元元素素#include void main()int a10,i;int amin;for(i=0;i 10;i+)scanf(%d,&a i );/*定定义义数数组组a存存放放若若干干个个数数据据*/amin=a 0;/*a 0 作作为为最最小小值值的的初初值值*/*输输入入数数组组a的的值值*/for(i=1;i 10;i+)if(a i amin)amin=a i;printf(最最小小元元素素为为%d n,amin);/*定定义义amin存存放放最最小小值值*/*记记下下新新的的最最小小值值*/26举举例例:求求出出一一维维数数组组a中中的的最最小小元元素素及及其其下下标标#include void main()int a10,i;int amin ;for(i=0;i 10;i+)scanf(%d,&a i );amin=a 0;min_at=0;/*a 0 作作为为最最小小值值的的初初值值*/for(i=1;i 10;i+)if(a i amin)amin=a i;/*记记下下当当前前最最小小值值的的下下标标*/*记记下下新新的的最最小小值值和和下下标标*/printf(最最小小元元素素下下标标是是%dn,min_at);/*定定义义amin存存放放最最小小值值,min_at 存存放放其其下下标标*/,min_at min_at=i;printf(最最小小元元素素为为%d n,amin);27求求出出一一维维数数组组a中中的的最最小小元元素素及及其其下下标标#include void main()int a10,i;int min_at;for(i=0;i 10;i+)scanf(%d,&a i );min_at=0;/*a 0作作为为最最小小值值初初值值,记记下下其其下下标标*/for(i=1;i 10;i+)if(a i a min_at)min_at=i;/*记记下下新新的的最最小小值值的的下下标标*/printf(最最小小元元素素为为%d,下下标标是是%dn,amin_at,min_at);/*定定义义min存存放放最最小小值值的的下下标标*/另另解解:28排排序序举举例例1:选选择择排排序序法法基基于于选选最最小小(大大)的的排排序序算算法法。假假设设对对5 5个个数数(a0a4)从从小小到到大大排排序序类类例例5.12共共4趟趟“0”“1”“2”“3”29选选择择排排序序法法(升升序序)思思路路对对1010个个数数(a0a9)从从小小到到大大排排序序的的思思路路是是:第第0趟趟定定a0:从从a0a9中中找找最最小小数数的的位位置置min_at,将将amin_at与与a0交交换换,于于是是数数组组a的的最最小小数数交交换换到到了了a0;第第1趟趟定定a1:从从未未排排的的a1a9中中找找最最小小数数的的位位置置min_at,将将amin_at与与a1交交换换,于于是是a1a9中中最最小小数数交交换换到到了了a1;第第i趟趟定定ai:从从未未排排的的aia9中中找找最最小小数数的的位位置置min_at,将将amin_at与与ai交交换换,于于是是aia9中中最最小小数数交交换换到到了了ai;第第8趟趟定定a8与与a9:从从未未排排的的a8、a9中中找找最最小小数数的的位位置置min_at,将将amin_at与与a8交交换换,于于是是a8、a9中中小小数数交交换换到到a8,大大数数交交换换到到a9。共共经经过过了了9 趟趟,完完成成了了10个个数数的的递递增增排排序序。30for(i=0;i9;i+)min_at=i;for(j=i+1;j10;j+)if(ajamin_at)min_at=j;if(min_at!=i)temp=amin_at;amin_at=ai;ai=temp;/*min_at记记下下aia9中中最最小小元元素素的的下下标标(初初值值为为i)*/外外循循环环控控制制趟趟数数,共共9趟趟第第 i 趟趟目目标标:定定ai(此此时时a0ai-1已已定定)第第 i 趟趟目目标标的的实实现现:找找出出aia9中中最最小小数数所所在在位位置置min_at,将将amin_at与与ai交交换换/*若若aia9中中的的最最小小元元素素amin_at不不是是ai,则则与与ai交交换换*/选选择择排排序序法法(升升序序)的的核核心心程程序序段段要要求求:对对10个个数数(a0a9)从从小小到到大大排排序序31选选择择排排序序法法(升升序序)程程序序#include void main()int a10;int i,j,temp,min_at;printf(Input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i9;i+)min_at=i;for(j=i+1;j10;j+)if(ajamin_at)min_at=j;if(min_at!=i)temp=amin_at;amin_at=ai;ai=temp;printf(the sorted numbers:n);for(i=0;i10;i+)printf(%d ,ai);/*输输入入各各数数组组元元素素的的值值*/*选选择择排排序序(升升序序)*/*输输出出排排序序后后的的数数组组*/*定定义义数数组组a存存放放10个个数数据据*/32对对1010个个数数(a0a9)从从小小到到大大直直接接交交换换法法排排序序的的思思路路是是:第第0趟趟定定a0:依依次次将将a0与与a1a9 9中中的的各各元元素素比比较较,并并交交换换不不满满足足顺顺序序要要求求的的各各对对元元素素,于于是是数数组组a的的最最小小数数交交换换到到a0;第第1趟趟定定a1:依依次次将将a1与与a2a9 9中中的的各各元元素素比比较较,并并交交换换不不满满足足顺顺序序要要求求的的各各对对元元素素,于于是是a1a9 9中中最最小小数数交交换换到到a1;第第i趟趟定定ai:依依次次将将ai与与ai+1a9 9中中的的各各元元素素比比较较,并并交交换换不不满满足足顺顺序序要要求求的的各各对对元元素素,于于是是aia9 9中中最最小小数数交交换换到到ai;第第8趟趟定定a8与与a9:将将a8、a9进进行行比比较较,使使两两数数中中的的小小数数在在a8、大大数数在在a9,于于是是排排定定数数组组a的的最最后后两两个个数数。共共经经过过了了9趟趟,完完成成了了10个个数数的的递递增增排排序序。排排序序举举例例2:直直接接交交换换排排序序法法补补充充33直直接接交交换换排排序序法法(升升序序)程程序序#include void main()int a10;int i,j,temp;printf(Input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i9;i+)for(j=i+1;jaj)temp=aj;aj=ai;ai=temp;printf(the sorted numbers:n);for(i=0;i=1;i-)for(j=0;jaj+1)temp=aj;aj=aj+1;aj+1=temp;10个个数数要要9趟趟比比较较,故故外外循循环环9次次:for(i=9;i=1;i-)第第 i 趟趟目目标标:定定ai第第 i 趟趟目目标标的的实实现现:a0ai中中每每对对相相邻邻数数aj与与aj+1进进行行比比较较及及交交换换 第第一一对对相相邻邻数数:a0与与a1 最最后后一一对对相相邻邻数数:ai-1与与ai内内循循环环for(j=0;j=i-1;j+)10个个数数据据存存放放在在a0a9 38冒冒泡泡排排序序法法(升升序序)程程序序#include void main()int a10;int i,j,temp;printf(Input 10 numbers:n);for(i=0;i=1;i-)for(j=0;jaj+1)temp=aj;aj=aj+1;aj+1=temp;printf(the sorted numbers:n);for(i=0;i=1;i-)swap=0;/*swap为为0表表示示本本趟趟尚尚无无相相邻邻元元素素交交换换*/for(j=0;jaj+1)temp=aj;aj=aj+1;aj+1=temp;swap=1;/*swap为为1表表示示本本趟趟已已有有相相邻邻元元素素交交换换*/if(swap=0)break;注注:10个个数数据据存存放放在在a0a9 冒冒泡泡排排序序法法(升升序序)改改进进算算法法的的核核心心程程序序段段41直直接接插插入入排排序序法法的的基基本本思思想想是是:每每次次将将一一个个待待排排序序数数,插插入入到到前前面面已已排排好好序序的的子子序序列列中中的的适适当当位位置置,直直到到全全部部数数插插入入完完成成为为止止。排排序序举举例例5:插插入入排排序序法法补补充充6 6个个数数共共需需5 5趟趟42首首先先各各取取数数组组a和和b的的第第1个个元元素素进进行行比比较较,将将较较小小元元素素存存为为数数组组c的的第第1个个元元素素;接接着着取取刚刚才才比比较较中中较较小小元元素素所所在在数数组组的的下下一一个个元元素素,与与另另一一数数组组中中刚刚才才比比较较中中的的较较大大元元素素进进行行比比较较,将将本本次次的的较较小小元元素素存存为为数数组组c的的第第2个个元元素素;重重复复上上述述比比较较过过程程,直直到到某某一一个个数数组组先先比比较较完完;最最后后将将另另一一个个数数组组中中未未比比完完的的元元素素依依次次存存入入C数数组组的的后后续续元元素素中中,即即完完成成有有序序数数组组的的合合并并。排排序序举举例例6:合合并并排排序序法法例例5.13 将将两两个个已已排排序序(升升序序)的的数数组组a、b,合合并并后后存存放放在在另另一一个个数数组组c中中,且且合合并并后后的的数数组组也也是是有有序序排排列列(要要求求不不能能合合并并后后再再排排序序)。43 0 1 2 3 449136597a:70 1 2 476780b:30 1 2 3 4 5 6 7 8 c:49136597767807有有序序(升升序序)数数组组合合并并3ijjiijiijjikkkkkkkkkki、j分分别别为为待待合合并并数数组组a,b的的元元素素下下标标,k为为合合并并后后数数组组c的的元元素素下下标标,初初值值均均为为首首元元素素下下标标044i=j=k=0;while(i=4&j=6)if(ai=bj)ck=ai;i+;k+;else ck=bj;j+;k+;if(i=4)/*判判断断哪哪个个数数组组先先比比较较完完 */for(m=i;m=4;m+)ck=am;k+;else for(m=j;m=6;m+)ck=bm;k+;有有序序(升升序序)数数组组合合并并的的核核心心程程序序段段假假设设数数组组a有有5个个元元素素,数数组组b有有7个个元元素素455.2 5.2 二二维维数数组组l使使用用两两个个下下标标标标识识数数组组元元素素的的数数组组叫叫作作二二维维数数组组。如如:学学生生坐坐在在教教室室中中,需需要要指指定定一一个个行行号号同同时时还还需需要要指指定定一一个个列列号号,才才可可以以确确定定某某个个学学生生。46一一、二二维维数数组组的的定定义义l格格式式:类类型型名名 数数组组名名 常常量量表表达达式式1 1常常量量表表达达式式2 2;int a 3 4;定定义义a a为为二二维维数数组组,可可独独立立存存放放 3*4=123*4=12个个整整型型数数据据,系系统统要要为为数数组组a a分分配配2*12=242*12=24个个字字节节的的intint型型存存储储单单元元,这这些些存存储储单单元元是是连连续续的的,且且按按行行排排列列。类类型型名名数数组组名名常常量量1,第第一一维维的的大大小小常常量量2,第第二二维维的的大大小小47二二、二二维维数数组组元元素素的的引引用用下下标标可可以以为为常常量量、变变量量、表表达达式式 如如有有定定义义:int a 34,m=3,n=2;a00=10;a0n=30;a0m-n=20;a00a01a02a03a10a11a12a13a20a21a22a23第第0行行第第1行行第第2行行a格格式式:数数组组名名下下标标1 下下标标210203048三三、二二维维数数组组的的初初始始化化1l格格式式1:类类型型名名 数数组组名名 常常量量1常常量量2=数数据据表表列列 ;例例如如:int a34 =1,2,3,4,5,6,7,8,9,10,11,12 ;将将花花括括号号中中的的常常量量依依次次赋赋给给各各个个数数组组元元素素,即即行行012列列 0 1 2 3 49二二维维数数组组的的初初始始化化1例例如如:int a 4=1,2,3,4,5,6,7,8,9,10;可可以以不不指指定定第第一一维维大大小小,此此时时系系统统自自动动根根据据初初值值个个数数定定第第一一维维大大小小注注意意:第第二二维维大大小小不不能能省省略略!例例如如:int a34=2,3;部部分分元元素素赋赋初初值值行行012列列 0 1 2 3 行行012列列 0 1 2 3 50二二维维数数组组的的初初始始化化2l格格式式2:类类型型名名 数数组组名名 常常量量1常常量量2=数数据据表表列列1,数数据据表表列列2,数数据据表表列列n ;例例如如:int a34 =1,2,3,4,5,6,7,8,9,10,11,12 ;将将第第一一个个花花括括号号中中的的常常量量依依次次赋赋给给第第一一行行的的各各个个元元素素,将将第第二二个个花花括括号号中中的的常常量量依依次次赋赋给给第第二二行行的的各各个个元元素素,即即行行012列列 0 1 2 3 51二二维维数数组组的的初初始始化化2例例如如:int a34 =1,2,3,4,5,6 ;对对全全部部行行赋赋初初值值时时,可可以以省省略略第第一一维维大大小小,但但第第二二维维大大小小不不能能省省略略。例例如如:int a 4 =1,2,3,4 ,5,6 ;行行012列列 0 1 2 3 52#include void main()int a34,i,j;for(i=0;i3;i+)/*外外层层循循环环控控制制元元素素行行下下标标*/for(j=0;j4;j+)/*内内层层循循环环控控制制元元素素列列下下标标*/scanf(%d,&a i j);printf(n Array a is:n);for(i=0;i3;i+)for(j=0;j4;j+)printf(%3d,a i j );printf(n);/*每每行行元元素素后后输输出出一一个个换换行行符符*/例例5.4四四、二二维维数数组组数数组组元元素素的的输输入入和和输输出出53#include void main()int a35,i,j;for(i=0;i3;i+)for(j=0;j5;j+)a i j=5*i+j+1;printf(n Array a is:n);for(i=0;i3;i+)for(j=0;j5;j+)printf(%3d,a i j );printf(n);例例5.5 构构造造如如下下矩矩阵阵 1 2 3 4 5 6 7 8 9 1011 12 13 14 15举举例例:特特殊殊矩矩阵阵构构造造545.3(2)二二维维数数组组与与循循环环计计算算l矩矩阵阵转转置置l判判对对称称矩矩阵阵55举举例例:矩矩阵阵转转置置l所所谓谓矩矩阵阵的的转转置置就就是是将将矩矩阵阵的的行行和和列列互互换换。例例5.15主主对对角角线线以以下下元元素素a i j 与与以以上上对对应应元元素素a j i 互互换换56 a00 a01 a02 a03 a04 a10 a11 a12 a13 a14 a20 a21 a22 a23 a24 a30 a31 a32 a33 a34 a40 a41 a42 a43 a44主主对对角角线线元元素素j=i 数数组组元元素素aij的的下下标标特特点点主主对对角角线线以以下下元元素素ji57实实现现矩矩阵阵转转置置的的核核心心程程序序段段for(i=0;i5;i+)for(j=0;ji;j+)temp=aij;aij=aji;aji=temp;例例5.15 设设矩矩阵阵为为55矩矩阵阵 方方法法1)将将主主对对角角线线以以下下元元素素a i j(ji)与与以以上上对对应应元元素素a j i 互互换换此此可可用用1代代替替for(i=0;i5;i+)for(j=i+1;ji)与与以以下下对对应应元元素素a j i 互互换换此此可可用用4代代替替58举举例例:判判对对称称矩矩阵阵l若若二二维维数数组组所所有有第第i i行行j j列列的的元元素素值值均均等等于于第第j j行行i i列列元元素素的的值值即即为为对对称称矩矩阵阵 。例例5.14主主对对角角线线以以下下元元素素a i j 与与以以上上对对应应元元素素a j i 比比较较对对称称矩矩阵阵非非对对称称矩矩阵阵59判判对对称称矩矩阵阵的的核核心心程程序序段段例例5.14 设设矩矩阵阵为为44矩矩阵阵 int flag=1;/*flag用用以以标标识识是是否否对对称称,1表表示示对对称称*/for(i=0;i=4或flag=0退退出出for(i)循循环环*/for(j=0;ji;j+)if(aij!=aji)flag=0;break;/*break退退出出for(j)循循环环*/if (flag)printf(Array a is yes!n);else printf(Array a is no!n);将将主主对对角角线线以以下下元元素素a i j(ji)与与以以上上对对应应元元素素a j i 比比较较