首页 理论教育 C++语言中学版:二维数组初探

C++语言中学版:二维数组初探

时间:2023-08-13 理论教育 版权反馈
【摘要】:要表示一个班学生的多门课程的成绩,就必须使用二维数组。例6-7下面的程序演示了二维数组的定义、初始化以及数组元素的引用。

C++语言中学版:二维数组初探

一维数组的元素可以是任何C++允许的类型,当一维数组的元素也是一维数组时,就成了数组的数组,就是二维数组了。

比如一个班50名学生的成绩可以定义为一维数组,而学生在学校学习的不止一门学科,而是多门学科,所以在大型考试中每一个学生都有多门学科的成绩,这样每一个学生的成绩也都是一个一维数组。要表示一个班学生的多门课程的成绩,就必须使用二维数组。

1.二维数组的定义

二维数组的定义格式:

数据类型 数组名[整型表达式1][整型表达式2]

例如:“float score[5][4];”定义了一个数组元素为浮点型的二维数组,可以用来表示5名学生的4门学科的成绩,实际上包含了如表6-3所列的20个元素。

表6-3 5名学生4门学科成绩的20个元素

score[i][j]就表示i号学生的j号学科成绩。

可以看到,二维数组实际上是一个二维表格,数组定义中的整型表达式1规定了表格的行数,也规定了数组元素的第一个下标的取值范围;整型表达式2规定了表格的列数,也规定了数组元素的第二个下标的取值范围。

例如:“int a[N][M];”定义了一个二维数组a,a数组包含N行M列,数组元素a[i][j]的下标i、j的取值范围分别是0<=i<N,0<=j<M。

2.二维数组的初始化

二维数组的初始化与一维数组类似,在定义数组时完成。通常是把每一行数据分别写在各自的大括号里。

这里定义了一个4行2列的整型数组并初始化,第一个大括号{1,0}初始化第一行,即d[0][0]、d[0][1];第二个大括号{0,1}初始化第二行,即d[1][0],d[1][1];第三个大括号{-1,0}初始化第三行,即d[2][0]、d[2][1];第四个大括号{0,-1}初始化第四行,即d[3][0]、d[3][1]。

也可以把所有元素数据写在一个大括号里。例如:

但这种方式不够清晰明了,所以尽量不要使用。

3.二维数组元素的引用

从表6-3中可以看到,二维数组元素的引用格式如下:

说明:

(1)要引用二维数组元素,必须给出两个下标的值。

(2)每个下标取值不能超出数组定义中规定的下标范围,否则会导致数组越界错误

例6-7 下面的程序演示了二维数组的定义、初始化以及数组元素的引用。程序清单:

说明:这里用到了函数setw()。在C++中,setw(int n)用来控制输出数据的域宽。

(1)所谓域宽,就是输出的内容(数值或字符等)需要占据多少个字符的位置,如果位置有空余则会自动补足空格。比如要设置a的域宽为2,可以写成“cout<<setw(2)<<a;”,那么输出一位数1的时候输出的就是“ 1”,即在1前面加了一个空格。空格和数字1一共占用了2个字符的位置。如果输出的内容超过setw()设置的长度,则按实际长度输出。

(2)setw()只对紧跟其后的输出数据产生作用。例如上例中的“cout<<setw(5)<<a[i][j];”,其中,setw(5)仅对数据a[i][j]起作用。(www.xing528.com)

(3)使用函数setw()需要包含头文件iomanip。

4.二维数组的操作

对二维数组的操作也有与一维数组类似的求和,求平均值,排序,求最大、最小值,插入、删除等操作;同时,由于二维数组多了一个维度,所以也就多了一些对下标的操作。

例6-8 从键盘输入一个5阶方阵,求对角线上元素之和(每个元素只加一次)。

思路分析:用一个数组a存储这个方阵。那么数组中对角线上元素的下标有什么特点?见表6-4。

表6-4 5阶方阵

从表6-4可以看到,两条对角线上的元素下标分别符合下面的规律:

(1)两个下标相等。

(2)两个下标和为5-1=4。

程序清单:

运行结果如下。输入:

输出:

例6-9 编程产生如下形式的方阵

要求:不允许使用键盘输入语句和静态赋值语句,尽量少用循环。

思路分析:

观察这个方阵的特点,可以看到,两条对角线上的值都是1;两条对角线将整个方阵划分为四个部分,上面的部分值都为2,左面的部分值都为3,右面的部分值都为4,下面的部分值都为5。所以我们只要考察每一部分下标的特点即可。

由例6-8的分析可知:对于n阶方阵,两条对角线上的元素下标分别符合下面的规律:

(1)两个下标相等;(2)两个下标和为n-1。

所以值为2的区域元素a[i][j]的下标满足j>i&&j<n-1-i;

值为3的区域元素a[i][j]的下标满足j<i&&j<n-1-i;

值为4的区域元素a[i][j]的下标满足j>i&&j>n-1-i;

值为5的区域元素a[i][j]的下标满足j>i&&j<n-1-i;

程序清单:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈