数组与函数(二)之二维数组

二维数组

定义

定义二维数组的方法跟一位数组相似,使用方括号指定每个维度的元素个数:

类型 数组名 [常量表达式] [常量表达式]
int a[6][6]; // 6 * 6,6 行 6 列
char b[4][5]; // 4 * 5,4 行 5 列
double c[6][3]; // 6 * 3,6 行 3 列

访问

  • 数组名 [下标] [下标]
a[0][0]; // 访问 a 数组中第 1 行第 1 列的元素
b[1][3]; // 访问 b 数组中第 2 行第 4 列的元素
c[3][3]; // 访问 c 数组中第 4 行第 4 列的元素

注意:使用下标访问数组中的元素,同样要注意访问越界的问题
比如 int a [3] [4],其“行下标”的取值范围是 0~2,“列下标”的取值范围是 0~3,超出任何一个下标的访问都会造成越界。

二维数组的遍历

for(i=0;i<3;i++){
	for(j=0;j<5;j++){
		a[i][j]=i*j;
	}
}
  • a[i][j]是一个int,表示第i行第j列上的单元

初始化

#include <stdio.h>

int main()
{
	
	int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
	int i,j;
	
	for(i = 0;i < 3;i++)
	{
		for(j = 0;j < 4;j++)
		{
			printf("%d",a[i][j]);
		}
		printf("\n");
	}
	
	return 0;
}

结果如下:
在这里插入图片描述

  • 每行一个{ },逗号分隔,最后的逗号可以存在,如果省略,表示补零。

  • 由于二维数组在内存中是线性存放的,因此可以将所有的数据写在一个花括号内:

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[3][4] = {{1}, {5}, {9}};

这样写是只对各行的第 1 列元素赋初值,其余元素初始化为 0。

  • 如果希望整个二维数组初始化为 0,那么直接在大括号里写一个 0 即可:
int a[3][4] = {0};
  • C99 同样增加了一种新特性:指定初始化的元素。这样就可以只对数组中的某些指定元素进行初始化赋值,而未被赋值的元素自动初始化为 0:
int a[3][4] = {[0][0] = 1, [1][1] = 2, [2][2] = 3};
  • 二维数组的初始化,列数是必须给出的,行数可以由编译器来数:
int a[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

列子:成绩的录入

#include <stdio.h>

int main()
{
	int a[4][5] = {
			{80,92,85,86,99},
			{78,65,89,70,99},	
			{67,78,76,89,99},	
			{88,68,98,90,99}		
	};
	
	int i,j;
	
	for(i = 0;i < 4;i++)
	{
		for(j = 0;j < 5;j++)
		{
			printf(" %d",a[i][j]);
			
		}
		printf("\n");
	}
	
	
	
	return 0;
}

结果如下:
在这里插入图片描述
矩阵的转置:

#include <stdio.h>

int main()
{
	int a[4][5] = {
			{80,92,85,86,99},
			{78,65,89,70,99},	
			{67,78,76,89,99},	
			{88,68,98,90,99}		
	};
	
	int i,j;
	
	for(i = 0;i < 5;i++)
	{
		for(j = 0;j < 4;j++)
		{
			printf(" %d",a[j][i]);
			
		}
		printf("\n");
	}
	
	
	
	return 0;
}

结果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值