数组(二)

二维数组

引言

什么是二维数组,所谓二维又是个什么意思?

在介绍二维数组之前,我们先来回顾一下一维数组,它长什么样子呢:

在这里插入图片描述

或者想象成一行N列也是可以的。

那二维数组长什么样子呢:

十行三列

相信大家看过这两个表格之后对一维和二维有了初步的认识,那么下面让我们总结一下,所谓一维数组就是只有行的概念或者又有列的概念,而二维数组具备了行与列二者的概念,有时候我们神之力可以理解一维数组是二维数组的一种特殊形式。

定义二维数组

在上一篇文章中我们知道了一维数组的定义,形如:int a[3];为定义一个一维数组的语句,这里二维数组的定义语句在外观上是非常相似的,但因为二维数组引入了行与列的概念后,它就成了这个样子:

float a[3][4];

这里定义了一个名字为a的类型为浮点型的三行四列的二维数组。

一般教材会给出这样的定义:类型名 数组名 [常量表达式] [常量表达式]

对于 a[3][4]来说,它的元素最大个数是行与列的乘积也就是:3*4=12个,具体的排布规律如下图:

在这里插入图片描述

是的,同为数组,当然也应该具备同样的下表概念,0为开始。

引用二维数组元素

如果给你了你一二维数组,让你提取数组里面的一页元素,你会如何判断他是哪一个元素吗?

在这里插入图片描述

[2] [2]的字母是哪一个?我们知道,在引用数组的时候所有的下表都是从0开始数的[2] [2]真正所代表的是这个位置:

在这里插入图片描述

所以,若是我们想引用最右下角的B那就要用[3] [3]的命令来进行使用该元素。

二维数组的初始化

对于二维数组的初始化C++同样提供了非常灵活的几种初始化方案:

  1. 按行给二维数组全部赋初值:

    int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    

    可以看到在初始化语句中三行四列的语句中全部的到元素填充,观察到在整个初始化语句中{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. 可以给部分元素赋值:

    int a[3][4] = {{1},{2},{3}};
    

    与之对应的数组元素,除了第一列,其他全为0:

    在这里插入图片描述

  4. 行缺省:

    int [][4] = {1,2,3,4,5,6,7,8};
    

    对于这样的语句也是合法的,编译器会自动根据列与元素的数量与个数来计算行的数值。

程序例题
  1. 将一个2*3的二维数组a的行和列

    转憨厚=
    转换后 :
    在这里插入图片描述

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
	char  a[2][3] = {'1','2','3','A','B','C'};
	char  b[3][2];
	int  i, j;
	cout << "array a:" << endl;
	for (i = 0; i <= 1; i++) {
		for (j = 0; j <= 2; j++) {
			cout << a[i][j] << " ";
			b[j][i] = a[i][j];
		}
		cout << endl;
	}

	cout << "array b:" << endl;
	for (i = 0;i <= 2; i++) {
		for (j = 0; j <= 1; j++) {
			cout << b[i][j] << " ";
		}
		cout << endl;
	}
}



array a:
1 2 3
A B C
array b:
1 A
2 B
3 C
  1. 有一个3*4的矩阵,要求求出其中最大的值,以及所在的行号与列号。
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
	int a[3][4] = { {12,14,76,2},{-45,32,55,0},{123,66,98,-88} };
	int max = a[0][0], i, j,max_i,max_j;
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 4; j++) {
			if (a[i][j] > max) {
				max = a[i][j];
				max_i = i;
				max_j = j;
			}
		}
	}
	cout << "the max is:" << max << " and it located :" << "a" << "[" << max_i << "]" << "[" << max_j << "]";
}



the max is:123 and it located :a[2][0]
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值