一、二维数组
1、二维数组的定义:
数据类型 数组名 [ 常量表达式1] [ 常量表达式2];
常量表达式1-------------------->行
常量表达式2-------------------->列
存储数据:行变化的慢,列变化的快。
我们可以从图上看出,二维数组的存储方式:每一行存储完再进行下一行的存储的。
所以它的行肯定变化慢,每一列的值每次都在变化的。
2、二维数组的引用:
数组名 [下标1] [下标2];
int a[2][3]; int b[4][9];
1)下标可以是整型表达式 例:a [2-1] [2*2-1];
2)下标可以是有值的变量 例:a[2*x-1] [ b[3][1] ]//在数值里放数组的值
3)数组元素可以出现在表达式中 例:b[1][2] = a[2][3]/2;
注意:使用数组时,下标要在数组的范围内,否则会造成数组越界。
3、二维数组的初始化 :
1)分行进行赋初值
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2)把所有元素写在一个花括号内,按顺序赋初值
int a[3][4]={1,2,3,4,5,6,,7,8,9,10,11,12};
3)可以对部分元素赋初值,其他自动取0值。
int a[3][4]={{1},{5,6},{9}};
4)对全部元素赋初值,可不说明第一维的长度,第二维的长度必须说明(分行赋值同理)
int a[ ][4]={1,2,3,4,5,6,,7,8,9,10,11,12};
int a[ ][4]={{1,2,3},{0},{0,10}};
4、练习题:
1)有一个3×4的二维数组a,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
分析:
①.将a[0][0]作为参考赋给max,将其行列下标分别赋给r=c=0;
② 然后用双循环,将其它元素依次与max比较,遇到比max大的就将其赋给max,行列 下标分别赋给r=i、c=j;
③ 全部比较完毕,则a[r][c]便是最大元素及其所在行列值。
#include <stdio.h>
void main()
{ int i,j,r,c,max;
int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}};
max=a[0][0]; r=0;c=0;
for (i=0;i<=2;i++)
for (j=0;j<=3;j++)
if (a[i][j]>max)
{ max=a[i][j];
r=i; c=j; }
printf("max=%d,row=%d,colum=%d\n",a[r][c],r,c);
}