文章目录
- 前言
- 一、多维数组的定义
- 二、多维数组的初始化
- 三、多维数组的使用(以二维数组为例)
- 1. 矩阵转置问题
- 三、课后练习
- 1. 求一个m*n矩阵中所有元素的累加和
- 2. 查找并输出一个m*n矩阵中的最小元素以及其在矩阵中的位置
- 3. 将m*n矩阵A复制为m*n矩阵B(深度复制)
- 4. n阶方阵的对角线元素求和
- 2. 螺旋方阵生成问题
- 总结
前言
本课主要介绍如下内容。
- 二维数组的定义
- 二维数组的初始化
- 二维数组的使用举例
一、多维数组的定义
二、多维数组的初始化
三、多维数组的使用(以二维数组为例)
1. 矩阵转置问题
A=a(i, j),A为一个 m × n m \times n m×n阶矩阵,若 B = A T B=A^T B=AT,即B=b(j, i)=a(i, j),则称B为A的转置矩阵。
编写程序,输入一个 m × n m \times n m×n阶矩阵A,求 B = A T B=A^T B=AT。
三、课后练习
1. 求一个m*n矩阵中所有元素的累加和
2. 查找并输出一个m*n矩阵中的最小元素以及其在矩阵中的位置
3. 将mn矩阵A复制为mn矩阵B(深度复制)
4. n阶方阵的对角线元素求和
n阶方阵对角线有两条对角线——主对角线和次对角线。编程分别求一个n阶方阵的两条对角线上元素之和。
A = ( a 11 a 12 a 13 a 14 a 21 a 22 a 23 a 24 a 31 a 32 a 33 a 34 a 41 a 42 a 43 a 44 ) (3) A = \begin{pmatrix} a_{11} & a_{12} & a_{13} & a_{14}\\ a_{21} & a_{22} & a_{23} & a_{24}\\ a_{31} & a_{32} & a_{33} & a_{34}\\ a_{41} & a_{42} & a_{43} & a_{44} \end{pmatrix} \tag{3} A= a11a21a31a41a12a22a32a42a13a23a33a43a14a24a34a44 (3)
代码如下:
#include <iostream>
using namespace std;
int main() {const int n=4;int diagonal1=0, diagonal2=0;int a[][n] = {{60, 61, 62, 63},{70, 71, 72, 73},{80, 81, 82, 83},{90, 91, 92, 93}}; for(int i=0; i<n; i++) {for(int j=0; j<n; j++) {cout << a[i][j] << ' ';}cout << endl;}for(int i=0; i<n; i++) {for(int j=0; j<n; j++) {if(i==j) diagonal1 += a[i][j];if(i+j==n-1) diagonal2 += a[i][j];}}cout << diagonal1 << ' ' << diagonal2 << endl;return 0;
}
2. 螺旋方阵生成问题
所谓螺旋方阵,是值对任意给定的n,将1到 n × n n \times n n×n的数字从左上角第一个格子开始,按顺时针螺旋方向顺序填入 n × n n \times n n×n的方阵中,见图1所示。
图1 5阶螺旋方阵
代码如下(示例):
#include <iostream>
#include <iomanip>
//#include <cmath>
using namespace std;
//printing a screwing square matrix
int main() {int k = 1; // 方阵递增数,从1开始int m, n; // m:轮数, n:阶数cin >> n; // 输入阶数int matrix[n][n]; // 螺旋矩阵// m = ceil(n/2.0); // 确定轮数m = (n+1)/2;// m轮顺时针圈for(int i=0; i<m; i++) { // 1.往右:x = i, y值从i开始递增for(int y=i; y<n-i; y++)matrix[i][y] = k++;// 2.往下:注意x从i+1开始递增,y=n-1-ifor(int x=i+1; x<n-i; x++)matrix[x][n-1-i] = k++;// 3.往左:x = n-1-i, y从n-1-1-i递减for(int y=n-2-i; y>=i; y--)matrix[n-1-i][y] = k++;// 4.往上:x从n-1-1-i递减到i+1, y=ifor(int x=n-2-i; x>=i+1; x--)matrix[x][i] = k++;}cout << endl;for(int x = 0; x < n; x++) {for(int y = 0; y < n; y++)cout << setw(8) << matrix[x][y];cout << endl << endl;}return 0;
}
下面是当n=9时,程序输出的螺旋方正。
总结
二维数组在使用中也是按元素逐个使用,使用时要给出行、列两个下标。当然,我们也可以以访问一维数组的方式来访问二维数组。在较大型复杂的项目中,将二维数组转换为一维数组来运行却可以大大简化代码的书写,使代码更加简洁美观,看起来更加工整,提高可读性。特别是在使用二维数组作为函数参数传递的时候,通过将二维数组转换为一维数组的访问方式 ,就能起到提高函数通用性,简化代码编写的目的,具体可以参考本人整理的文章——《定义矩阵相乘和转置的通用函数》。