7.1.1C程序设计 引例: 从键盘依次输入10个整数,累计求和。 main() { int i,s,x; for(s=0,i=1;i=0; i - -) printf(“%d”, a[i]); } for (i=0; imax) max=a[i]; min=a[0]; for(i=0; imax) max=a[i]; printf(“max=%d\n”, max); } 7.1.14C程序设计 4、一维数组的初始化 数组的初始化就是在定义数组的同时给其数组元素赋初值。 格式:数据类型标识符 数组名[元素个数]={数值1,数值2, 数值n}; 说明: 花括号{ }中的数值是给数组元素赋初值的数值。赋值是按对应次序进行, 并且用逗号“,”分开。 如:int x[5]={3,4,7,8,10};则x[0]=3,x[1]=4,x[2]=7,x[3]=8,x[4]=10 花括号{ }中的数值的个数要少于等于数组元素的个数。此时,多余的数 组元素初始化的数值为0。 如:int x[5]={ 3,4,7 };则x[0]=3, x[1]=4, x[2]=7, x[3]=0, x[4]=0。 花括号{ }中的数值的个数多于数组元素的个数是语法错误。 在数组定义中,可缺省方括号中的元素个数,由花括号中所赋初始值的数值 个数来决定数组元素个数。 如: int y[ ]={ 6,4,1,7,8,10 }; 等价于int y[6]={ 6,4,1,7,8,10 }; 7.1.15C程序设计 任意给10个数,按由小到大对其排序,并输出结果。采用“起泡”排序法. 起泡法的思路:将相邻两个数比较,将小的数调到前头(或将大的数调到后面)。 第一趟: 第1次 第2次 第3次 第4次 第5次 结果 9 8 8 8 8 8 8 9 5 5 5 5 5 5 9 4 4 4 4 4 4 9 2 2 2 2 2 2 9 0 0 0 0 0 0 9 5、一维数组的应用举例 若有6个数,分别是9,8,5,4,2,0。 第一趟 (见下图): 第一次,将第1个数8和第2个数9进行比较,将小的数调到前头,即8和9对调位置。 第二次,将第2个数9和第3个数5进行比较,将小的数调到前头,既9和5对调位置。 第三次、第四次、第五次,如此进行共5次,结果得到8-5-4-2-0-9的顺序,最大的 数9成为最下面的一个数。最大的数位置“沉底”,小数向上“浮起”一个位置。 7.1.16C程序设计 第二趟对余下的5个数(8-5-4-2-0)按上述的方法进行下去。经过四次比较,得 到次大的数8。如此进行下去。6个数要比较5趟。结果得到:5-4-2-0-8的顺序 ,次大的数8“沉底”。 第一趟,比较五次。第二趟,比较四次。第三趟,比较三次。 第五趟, 比较一次。第n趟,比较n-1次。 如果有n个数,则进行n-1趟比较。在第i趟的比较中要进行n-i次两两比较。 第二趟: 第1次 第2次 第3次 第4次 结果 8 5 5 5 5 5 8 4 4 4 4 4 8 2 2 2 2 2 8 0 0 0 0 0 8 第三趟: 结果 4 2 0 5 第四趟: 结果 2 0 4 第五趟: 结果 0 2 最后6个数的排序结果是: 0-2-4-5-8-9(从小到大)。 第二趟(见下图): 7.1.17C程序设计 程序: main( ) { int a[10]; int i,j,t; printf(“input 10 numbers :\n”); for(i=0;ia[i+1]) { t =a[i]; a[i]=a[i+1]; a[i+1]=t; } printf(“the sorted numbers:\n”); for(i=0;ia[i+1]) { t =a[i]; a[i]=a[i+1]; a[i+1]=t; } printf(“the sorted numbers:\n”); for(i=1;i11;i++) pintf(“%d ”,a[i]); } //将10个数输入数组a[11]中。 //j是趟次循环变量(外循环变量), //i是每次循环变量(内循环变量)。 //(按下标排序)前后两数进行比较, //前者大于后者,则两数交换位置。即 //小数在前,大数在后。 input 10 numbers: 1 0 4 8 12 65 -76 100 -45 123 the sorted numbers: -76 -45 0 1 4 8 12 65 100 123 7.1.19C程序设计 7.2 多维数组 数组名后有两个下标数组叫二维数组,有三个下标的数组叫三维数 组,下标个数大于或等于2的数组叫多维数组。 1、多维数组的定义 多维数组定义的格式: 数据类型 数组名[下标1][下标2]…[下标n]; 说明: Ø 数据类型、数组名的说明同一维数组的说明。 Ø 下标为整型常量或整型常量表达式。 Ø 数组元素个数为:下标1下标2 下标n 。 Ø 下标值从0开始。 7.1.20C程序设计 x 是二维数组,共有6个元素 (2×3=6),它们是: x[0][0], x[0][1], x[0][2], x[1][0], x[1][1], x[1][2]。 其全部元素数值均为 int 型。 x[0]: x[1]: X 二维数组例: int x[2][3]; 7.1.21C程序设计 三维数组例: float y[2][3][4]; y 是三维数组,共有24个元素(2×3×4=24),它们是: y[0][0][0] y[0][0][1] y[0][0][2] y[0][0][3] y[0][1][0] y[0][1][1] y[0][1][2] y[0][1][3] y[0][2][0] y[1][2][1] y[0][2][2] y[0][2][3] y[1][0][0] y[1][0][1] y[1][0][2] y[1][0][3] y[1][1][0] y[1][1][1] y[1][1][2] y[1][1][3] y[1][2][0] y[1][2][1] y[1][2][2] y[1][2][3] 其全部元素数值均为 float 型。 7.1.22C程序设计 对于三维数组,也是按下标先后顺序(从最小下标值开始)存放。 如: float y[2][3][4]; 先放第一下标为0的行,y[0][0][0] y[0][0][1] y[0][0][2] y[0][0][3] y[0][1][0] y[0][1][1] y[0][1][2] y[0][1][3] . y[0][2][0] y[1][2][1] y[0][2][2] y[0][2][3] 再放第一下标为1的行,y[1][0][0] y[1][0][1] y[1][0][2] y[1][0][3] . y[1][1][0] y[1][1][1] y[1][1][2] y[1][1][3] y[1][2][0] y[1][2][1] y[1][2][2] y[1][2][3] 2 多维数组的存储形式 多维数组在内存中按下标顺序依次存储在内存的连续空间中。 对于二维数组,是按下标先后顺序(从最小下标值开始)存放。 如: int x[2][3]; 先放第一下标为0的行,即 x[0][0], x[0][1], x[0][2], 再放第一下标为1的行,即 x[1][0], x[1][1], x[1][2]. 7.1.23C程序设计 例:int z[4][10],a[4][5][7],b[4][5],i,j,k,m; z[1][0]=1; a[i][2*k-1][m+3]=z[1][0]; b[0][0]=10; b[4][5]=z[1][0]; 3 多维数组的引用 同一维数组一样,先定义、后引用;不能对一个多维数组的整体进行引用, 只能对具体的数组元素进行引用。其引用的格式为: 二维数组的引用格式: 数组名[下标1][下标2] 三维数组的引用格式: 数组名[下标1][下标2][下标3] 说明: Ø 下标值必须大于等于0的整型常量、常量表达式、变量或变量表达式。 Ø 数组中要特别注意下标越限。因为程序编译系统不检查数组下标越限问题, 所以程序设计者应特别注意。 7.1.24C程序设计 例:二维数组 int x[2][3]={1,2,3,4,5,6}; 初始化结果是: x[0][0]=1 x[0][1]=2 x[0][2]=3 x[1][0]=4 x[1][1]=5 x[1][2]=6 也可写成:int x[ ][3]={1,2,3,4,5,6};即第一下标省略,但第二下标不能省略。 例:三维数组 int y[2][3][4]={1,2,3,4,5,6,7,8,9,10,11,12,13, 14,15,16,17,18,19,20,21,22,23,24}; 初始化结果是: y[0][0][0]=1 y[0][0][1]=2 y[0][0][2]=3 y[0][0][3]=4 y[0][1][0]=5 y[0][1][1]=6 y[0][1][2]=7 y[0][1][3]=8 y[0][2][0]=9 y[1][2][1]=10 y[0][2][2]=11 y[0][2][3]=12 y[1][0][0]=13 y[1][0][1]=14 y[1][0][2]=15 y[1][0][3]=16 y[1][1][0]=17 y[1][1][1]=18 y[1][1][2]=19 y[1][1][3]=20 y[1][2][0]=21 y[1][2][1]=22 y[1][2][2]=23 y[1][2][3]=24 4 多维数组的初始化 7.1.25C程序设计 5、多维数组的应用举例 1 2 3 4 5 6 a= 1 4 2 5 3 6 b= 例: 将一个二维数组行和列元素互换,存到另一个 二维数组中。 main( ) { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2], i, j; for (i=0; i=2; i++) { for (j=0;j=1;j++) printf(“%5d”,b[i][j]); printf(“\n”); } } for(i=0;i=1;i++) for(j=0;j=2;j++) b[j][i]=a[i][j] ;
展开阅读全文