一、二维数组的定义
1、格式:int a[ 整型常量表达式1 ] [ 2 ];
- 表达式1:行——表达式2:列
- 例如:int arr[3][4];
二、二维数组元素的引用
1、格式:a[i][j];
2、下标表达式:常量、变量、整型表达式、元素、函数调用
三、二维数组的初始化
1、对全部元素(按行)初始化
- int a[3][3]={1,2,3,4,5,6,7,8,9}
- int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}
- int a[][3]={{1,2,3},{4,5,6},{7,8,9}}
- 第一行数可以省略
2、对部分元素(按行)初始化
- int a[3][4]={{1},{5},{9}}; 没有初始化的按0
- int a[3][4]={{1},{0,6},{0,0,11}};
3、不允许提供的初值个数多于数组元素个数
4、第一位长度数可以省略
四、二维数组元素的赋值
1、初始化方式
2、使用循环赋值
- 数组元素有规律时:
int a[2][3];
for(i=0;i<2;i++) //控制行
for(j=0;j<3;j++) //控制列
a[i][j]=i+j;
- 数组元素无规律时:
for(i=0;i<2;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
五、二维数组举例
处理一般的使用双重循环实现
1、《键盘输入4*4的矩阵,并按矩阵形式输出》
//输出4*4
#include<stdio.h>
void main()
{
int a[4][4];
int i,j;
for(i=0;i<4;i++) //数组的赋值
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
{
for(j=0;j<4;j++) //遍历输出
printf("%4d",a[i][j]);
printf("\n");
}
}
2、《将一个二维数组行和列的元素互换,存到另一个二维数组中》
#include<stdio.h>
void main()
{
int a[2][3],b[3][2];
int i,j;
printf("请给数组赋值3*2:\n");
for(i=0;i<2;i++) //数组的赋值
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("原数组:\n");
for(i=0;i<2;i++) //处理每一行中的元素
{
for(j=0;j<3;j++) //处理每一列的元素
{
printf("%4d",a[i][j]); //输出a的各个元素
b[j][i]=a[i][j]; //a元素赋给b相应的元素
}
printf("\n");
}
printf("调换之后:\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf("%4d",b[i][j]); //输出b的各个元素
printf("\n");
}
}
3、《在不使用其他数组的情况下,将一个二维数组行和列的元素互换》
4、《统计每个人的平均成绩和各门课程的平均成绩》
5、《杨辉三角形》
//杨辉三角形
#include<stdio.h>
#define M 10
int main()
{
int i,j;
int a[M][M];
for(i=0;i<M;i++)
{
a[i][0]=1; //每一行第一个数为1
a[i][i]=1; //对角线,每一行最后一个数为1
}
for(i=2;i<M;i++) //从第3行开始处理
{
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0;i<M;i++) //输出数组
{
for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
return 0;
}
下节《字符数组》