内容正文:
矩阵专题
※ 矩阵翻转
例1:(七彩阳光16题)某程序功能如下:数组a中存放了n*n个两位随机正整数,按n行n列在列表框List1 中 显示(即第一行自左向右依次显示a(1)~a(n),第二行自左向右依次显示a(n+1) ~a(2*n),„„)。 按(行号,列号)的形式在文本框Text1 中输入某矩形区域的左上角位置(x1,y1),在文本框Text2 中 输入右下角位置(x2,y2),单击“水平翻转”按钮Command1,对以(x1,y1)和(x2,y2)为对角顶点的矩 形区域中的数据进行水平翻转,并将变换后的n*n个数据保存到数组b中,最后在列表框list2 中按照 List1的格式显示数组b中的数据。
程序运行界面如图所示。
(1)对于有8*8个元素构成的数组a,如果输入左上角位 置是(2,3),右下角位置是(7,5),水平翻转后,则元素a(27)的值在新数组保存在元素b( )(填写下标) 中。
(2)依据上述描述设计的VB 程序如下,请在划线处填 入合适代码。
Const n = 6
Dim a(1 To n ^ 2) As Integer, b(1 To n ^ 2) As Integer
Private Sub Form_Load()
'产生n*n个两位随机正整数,保存数组a,显示在List1中,代码略。
End Sub
Private Sub Command1_Click()
Dim i As Integer, j As Integer, xy(1 To 4) As Integer Dim s As String, tmp As String, c As String
s = Text1.Text + "," + Text2.Text + ","
tmp = "": j = 0
For i = 1 To Len(s)
c = Mid(s, i, 1)
If c >= "0" And c <= "9" Then
tmp = tmp + c
Else
j = j + 1
①
tmp = ""
End If
Next i
For i = 1 To n
For j = 1 To n
If i>= xy(1) And i<= xy(3) And j >= xy(2) And j <= xy(4) Then
b((i - 1) * n + j) = ②
Else
b((i - 1) * n + j) = a((i - 1) * n + j)
End If
Next j
Next i
List2.Clear: c = ""
For i = 1 To n * n
c = c + Str(b(i))
If ③ Then
List2.AddItem c
c = ""
End If
Next i
End Sub
练1:(2020年6月北斗星联盟16)小王设计了一个利用矩阵“翻转法”实现矩阵逆序输出的程序,其功能为:运行程序时,在文本框Text1中输入矩阵大小n,点击“产生矩阵”按钮Command1,在列表框List1中显示一个n×n的矩阵,该矩阵数据为随机两位正奇数。点击“翻转矩阵”按钮Command2,该矩阵翻转(水平翻转和垂直翻转均要实现)后显示在列表框List2中,再点一次“翻转矩阵”按钮Command2,列表框List2中显示的矩阵被还原为初始状态。程序运行界面如图所示。
实现上述功能的VB程序如下,请回答下列问题:
(1)在上图的程序运行界面基础上,再连续两次单击Command2按钮,则列表框List2中第一行显示
(2)实现此程序的代码如下,请完成程序填空。
Dim n,L,i,j As Integer
Dim a(1 To 100) As Integer
Dim b(1 To 100) As Integer
Private Sub Command1_Click( )
n=Val(Text1. Text)
Randomize
For i=1 To n*n
a(i)= ① +1
Next i
For i=1 To n
L=""
Forj=1 To n
L=L+" "+Str(a((i-1)*n+j))
Next j
List1.AddItem L
Next i
End Sub
Private Sub Command2_Click()
List2.Clear
For i=1 To n
L=""
For j=1 To n
b((i-1)*n+j)= ②
L=L+""+Str(b((i-1)*n+j))
Next j
List2.AddItemL
Next i
For i=1 To n*n
a