第七章数组 7-1一维数组的定义和引用 定义方式:类型说明符数组名常量表达]; 如:inta[5]; 注意:数组引用时,只能引用数组的元素,而 不能引用整个数组。数组元素的表示形式为 数组名下标 maino f int i, a[ 10 for(i=0;i=0;i--) printf(”%d”),ai);}
第七章 数组 7-1 一维数组的定义和引用 定义方式: 类型说明符 数组名[常量表达]; 如:int a [ 5 ] ; 注意:数组引用时,只能引用数组的元素,而 不能引用整个数组。数组元素的表示形式为: 数组名[下标] main( ) { int i, a[10] ; for ( i =0 ; i = 0 ; i --) printf(”%d ”,a[ i ]) ; }
例如 维数组的存储方式 nta[10]; float b5; a[0] a[ l1 a[2] a[3] a[4] a[5] a[6] a[7 a[8] a[9] b[O]b[]b[2]b[3]b[4] 特别 提示 数组元素的下标总是从0开始的
例如: int a[10]; float b[5]; 一维数组的存储方式 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] b[0] b[1] b[2] b[3] b[4] 数组元素的下标总是从0 开始的。 特别 提示
维数组的初始化 对数组 nta[10]={0,1,2,3,4,5,6,7,8,9}; 方法: 在定a012345678时初值 在对fmta1=246.10 可以不指定 数组长mta1=2.406109度与初值的 个数不术mta10=(000000略。 可以果ta10=0 素赋初值, 而数组的 inta[10]={100} 4.如果 nta[10]={2,2,2,2,2,2,2,2,2,2} 素值为0, 可以写成 int a inta[10]={2} inta[10]={102
对数组元素的初始化有以下 4 种方法: 1. 在定义数组时对数组元素赋以初值。 2. 在对全部数组元素赋初值时,可以不指定 数组长度。但若被定义的数组长度与初值的 个数不相同,则数组长度不能省略。 3. 可以只给一部分连续的数组元素赋初值, 而数组的其他元素的值为0。 4. 如果要使一个数组中的全部元素值为0, 可以写成: int a[10]={0}; 一维数组的初始化 int a[10]={0,1,2,3,4,5,6,7,8,9}; int a[ ]={0,1,2,3,4,5,6,7,8,9}; int a[10]={2,4,6,8,10}; int a[10]={2,0,4,0,6,8,10}; int a[10]={0,0,0,0,0,0,0,0,0,0}; int a[10]={0}; int a[10]={10*0}; int a[10]={2,2,2,2,2,2,2,2,2,2}; int a[10]={2}; int a[10]={10*2};
例:求10个整数中的最大值。 define 10 maino f int i, max int a[n printf(" Please input 5 integers: In) for(=0;imax)maxed printf("inThe max number is: %d", max)
例:求 10 个整数中的最大值。 #define N 10 main() { int i,max; int a[N]; printf("Please input 5 integers:\n"); for(i=0;imax) max=a[i]; printf("\nThe max number is: %d",max); }
例:冒泡法排序设有5个数排序: 排序后 的数组 原数组12 5656 56 78 56 2525 78 56 第1次 大循环2512782525 后数组3 7812 12 12 78 3 3 3 3 大循环 第1次第2次第3次第4次 小循环(比较)4次3次2次1次
例:冒泡法排序 设有5 个数排序: 12 56 25 3 78 56 25 12 78 3 56 25 78 12 3 56 78 25 12 3 78 56 25 12 3 大循环 第1次 第2次 第3次 第4次 原数组 第1次 大循环 后数组 排序后 的数组 小循环(比较) 4次 3次 2次 1次
main 大循环4次 f int a[51,i j printf("Input 5 numbers: In") for(1=0; 1/; 1++) scanf( %od, &aiD; for(=13j<=4j++) 小循环 {for(i=1:<=5-ji++) if(ai]ai+ID 元素上小下大则互换 {t=a[j:a[=a计+au-」-u2yf for(i=0; 1<5; 1++) printf(n%d,, aiD)
main( ) { int a[5],i ,j ,t ; printf(”Input 5 numbers:\n”); for ( i=0;i<5;i++) scanf(”%d”,&a[i]); for (j=1;j<=4;j++) { for(i=1;i<=5-j;i++) if (a[i]<a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t;} } for(i=0;i<5 ;i++) printf(”\n%d”,a[i]); } 大循环4次 小循环 元素上小下大则互换
7-2二维数组 二维数组的定义的一般形式: 类型说明符数组名[常量表达式][常量表达式] 如 float a[3]4] 数组a共有12个元素,即 a0][0]aO[1],a0[2]2a[0[3l, a[lo], a[lll], a[l[ 2], a[13] a2]0],a[2][1],a[21[2],a[2][3, 在内存中的排列次序即如此,多维数组依此 类推
7-2 二维数组 二维数组的定义的一般形式: 类型说明符 数组名[常量表达式] [常量表达式] 如 float a [3][4] ; 数组a共有12个元素,即 a[0][0], a[0][1], a[0][2],a[0][3], a[1][0], a[1][1], a[1][2],a[1][3], a[2][0], a[2][1], a[2][2],a[2][3], 在内存中的排列次序即如此,多维数组依此 类推
二维数组的初始化 可以 nta3]4]={1,2,3,4},{5,6,7,8},{9,10,11,12}; nta3]4123456,78910112 扑nta41={123,45,6,789,10,1112 分mnta311246,8,10} 元 inta3][4]={1}{0,2},{0,0,3}; 折12341「10001「10001且 时567820000200 度 9101112468100030
可以用以下 4 种方法对二维数组初始化: 1. 分行对二维数组元素赋初值。 2. 按数组元素的排列顺序对各元素赋初值,不 分行。 3. 可以只给一部分元素赋初值,而数组的其他 元素的值为 0。 4. 如果对数组的全部元素赋初值,则定义数组 时对第一维的长度可以不指定,但第二维的长 度不能省略。 二维数组的初始化 int a[3][4]={{1,2,3,4}, {5,6,7,8}, {9,10,11,12}}; int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int a[3][4]={{1},{2},{4,6,8,10}}; int a[3][4]={{1},{0,2},{0,0,3}}; 1 2 3 4 5 6 7 8 9 10 11 12 1 0 0 0 2 0 0 0 4 6 8 10 1 0 0 0 0 2 0 0 0 0 3 0
二维数组程序举例 main( inta2][3={{1,3,5},{7,9,11}}; int b3]2]; int i,j; printf((” array a:n“); for(i=0;i<=1;i++) for(=0j<=2j++) print”%5d“,a[i);b[i=a[j,} printf((“n”) }(未完)
二维数组程序举例 main( ) { int a[2][3]={ {1,3,5}, {7,9,11} }; int b[3][2]; int i,j; printf(”array a :\n “); for (i=0;i<=1;i++) { for (j=0;j<=2;j++) { printf(”%5d“,a[i][j]); b[i][j]=a[i][j]; } printf(“\n”); }(未完)
二维数组程序举例(续) printf(” array b: n“) for(i=0,i=2,i++) {for(j=0,j=1;j++) print(”%5d“,b[][i]) printf((ln” 十进制5位整数形式 换行
二维数组程序举例(续) printf(”array b :\n “) ; for ( i=0; i<=2; i++ ) { for ( j=0; j<=1; j++ ) printf(”%5d“ , b[i][j] ); printf(“\n”); } } 十进制 5位整数形式 换行