问题描述:
编写一个程序,将一个 M 行 N 列的矩阵转置。
解题思路:
所谓矩阵转置,可以看下面这个例子:
|1 2 3 |
A = |4 5 6 |
|7 8 9 |
|10 11 12 | 转置后内容为
|1 4 7 10 |
B = |2 5 8 11 |
|3 6 9 12 | 即行列互换,即B(j,i)=A(i,j)
程序代码:
Dim M, N As Integer
M = Val(InputBox("请输入矩阵行数"))
N = Val(InputBox("请输入矩阵列数"))
Dim A(), B() As Integer
ReDim A(M, N), B(N, M)
Randomize
Print "矩阵A:"
For i = 1 To M
For j = 1 To N
A(i, j) = Int(Rnd * 90 + 10)
Print Tab(4 * j); A(i, j);
B(j, i) = A(i, j)
Next
Print
Next
Print "转置后的矩阵B:"
For i = 1 To N
For j = 1 To M
Print Tab(4 * j); B(i, j);
Next
Next
Print
另外,若是 N 行 N 列矩阵,且不使用 B 数组,其解题思路应该是这样的:
对第 i 行第 j 列的每个数,A(i, j) 与 A(j, i) 互换,注意,j 的取值范围只能是 1 到 i。
程序代码如下:
Dim N As Integer
N = Val(InputBox("请输入 N 阶矩阵的行、列数"))
Dim A() As Integer
ReDim A(N, N)
Randomize
Print "矩阵A:"
For i = 1 To N
For j = 1 To N
A(i, j) = Int(Rnd * 90 + 10)
Print Tab(4 * j); A(i, j);
Next
Print
Next
For i = 1 To N
For j = 1 To i
t = A(j, i)
A(j, i) = A(i, j)
A(i, j) = t
Next
Next
Print "转置后的矩阵A:"
For i = 1 To N
For j = 1 To N
Print Tab(4 * j); A(i, j);
Next
Next
Print