例1 矩阵A行列互相交换产生矩阵称A转置矩阵程称矩阵转置 VB6程序实现矩阵转置请划线处填入正确语句实现功
Const m 4
Const n 5
Dim a(1 To m * n) As Integer
Dim b(1 To m * n) As Integer
Private Sub Command1_Click()
Dim i As Integer j As Integer
List1Clear
List2Clear
Randomize
For i 1 To m * n '生成源矩阵
a(i) Int(Rnd() * 89 + 10)
Next
For i 1 To m '显示源矩阵
s ″ ″
For j 1 To n
s ①
Next
List1AddItem s
Next
For i 1 To n '生成显示转置矩阵
s ″″
For j 1 To m
b((i 1) * m + j) ②
s s + Str(b((i 1) * m + j))
Next
List2AddItem s
Next
End Sub
答案①s+Str(a((i1)*n+j)) ②a((j1)*n+i)
解析程序维数组a保存矩阵数Amn转置矩阵Anm矩阵中元素aij应维数组元素a((i1)*n+j)转置应元素aji应维数组元素a((j1)*m+i)①处应填入语句s + Str(a((i 1) * n + j))②处应填入语句a((j 1) * n + i)
例2(2017·11浙江选考)数组a生成数组b方法描述
(1)数组a中n元素次分割出干数块数块m×m元素m值8值2分割时数块进行分割
(2)分割出数块方阵转换法进行转换次转换数块次存储数b中
(3)数组a分割剩余元素(数4)直接序存储数组b中
例n140时次分割出3数块元素数分64(8×8)64(8×8)9(3×3)剩余元素3
方阵转换法程数块中m×m元素行序排列成数字方阵该数字方阵中列序转换元素次序3×3数块例转换程图示
明述描述设计VB程序请回答列问题
(1)n120时分割出第3数块元素数
(2)请划线处填入合适代码
Const n 120
Dim a(1 To n) As Integer
Dim b(1 To n) As Integer
Private Sub Command1_Click()
Dim m As Integer i As Integer
Dim Start As Integer '前未分割数第1元素标
Dim Left As Integer '前未分割数数
Dim pa As Integer '数组a标
Dim pb As Integer '数组b标
'读取n转换前数次存储a(1)a(2)…a(n)中代码略
m 8
Start 1
Left n
Do While Left > 3
If Left < m * m Then
m ①
Else
pa Start
pb Start
For i 1 To m * m
b(pb) a(pa)
pb pb + 1
If i Mod m 0 Then
②
Else
pa pa + m
End If
Next i
③
Start Start + m * m
End If
Loop
For i Start To n
b(i) a(i)
Next i
'次输出转换数b(1)b(2)…b(n)中代码略
End Sub
答案 (1)4 (2)①m1int[sqr(left)] ② papam* (m1)+1paStart+i\m ③leftleftm* m
解析 (1)n120时次分割出 3 数块元素数分 64(8×8)49(7×7)4(2×2)剩余元素 3 第 3 数块 4 元素
(2)①剩余数量 Left < m * m意味着前剩余数量够分割成m×m次尝试 m1 方块例Left50m8够分割成 8×8次尝试 7×7
② m3 时例
i1 时执行 b(1)a(1)计算 a 次标 pa4
i2 时执行 b(2)a(4)计算 a 次标 pa7
i3 时执行 b(3)a(7)计算 a 次标 pa2
i4 时执行 b(4)a(2)计算 a 次标 pa5
……
通变量i找出变量i次数组a标间关系通观察发现段pa值公差3需计算出段首项该段面次pa+3分析出段首项标 pai\3+1面次 papa+3推广n数m×m 方阵中段首项标pai\m+start面次 papa+m
③执行Else部分意味着m×m分割成功分割剩余数量left减m*m例Left50m77×7分割剩余507*71
课作业
1某程序功数组a中存放n n1099间机整数n行n列形式列表框List1中显示(第行次显示a(1)~a(n)第二行次显示a(n+1)~a(2 n)次类推)文框Text1中输入某矩形区域左角位置(x1y1)(注x1表示列号y1表示行号)文框Text2中输入右角位置(x2y2)单击垂直翻转钮Command1(x1y1)(x2y2)角顶点矩形区域中数进行垂直翻转列表框List2中显示程序运行界面图示
(1)述描述设计VB程序请划线处填入合适代码
Const n5
Dim a(1 To n^2) As Integerb(1 To n^2) As Integer
Private Sub Form_Load()
'产生n n1099间机整数存数组aList1中显示代码略
End Sub
Private Sub Command1_Click()
Dim i As Integerj As Integervalue As Stringc As Stringxy(1 To 4) As Integer
sText1Text+″″+Text2Text
value″ ″j0
For i1 To Len(s)
cMid(si1)
If c>″0″ And c<″9″ Then
valuevalue+c
Else
①
xy(j)Val(value)value″ ″
End If
Next i
xy(4)Val(value)
For i1 To n
For j1 To n
If j>xy(1) And j
Else
b((i1) n+j)a((i1) n+j)
End If
Next j
Next i
List2Clearc″ ″
For i1 To n n
cc+Str(b(i))
if ③ then
List2AddItem c
c″ ″
end if
Next i
End Sub
(2)10 10元素构成数组a果输入左角位置(23)右角位置(67)垂直翻转元素a(23)新数组中位置
答案 (1)①jj+1 ②a((xy(2)+xy(4)i1)*n+j) ③i mod n0 (2)63
解析 ①处循环存放s中4位置数分离出次存入数组元素xy(1)xy(2)xy(3)xy(4)中具体方法次s中取字符c果数字存入value果表明已完整位置①处填jj+1然value存入xy(j)value清空提取位置准备
②处双重循环完成垂直翻转功中数组a存放变换前矩阵数数组b存放变换矩阵数变量i代表翻转矩阵行号j代表列号果(ji)变换区外b((i1) n+j)a((i1) n+j)果变换区换算方法根称原理变换前列号变变换前j列行号xy(2)+xy(4)i中xy(2)变换区左角行号xy(4)右角行号变换前元素号(xy(2)+xy(4)i1) n+j②处填a((xy(2)+xy(4)i1) n+j)
③处循环输出变换矩阵数行求显示n数循环次存放数c中果存满n数输出③处填i mod n0
2某编写VB程序功程序启动时产生n n150间机整数存数组an8时产生64机整数行优先方式8行8列形式列表框List1中显示(第行次显示a(1)~a(8)第二行次显示a(9)~a(16)次类推)文框Text1中输入某矩形区域左角位置(x1y1)(注x1表示行号y1表示列号)文框Text2中输入右角位置(x2y2)单击水翻转钮Command1(x1y1)(x2y2)角顶点矩形区域中数进行水翻转列表框List2中显示程序运行界面图1示变换前数区域值图2示变换值图3示
图1
10
44
8
2
6
28
13
9
2
30
22
25
14
40
26
46
46
47
24
1
18
45
29
15
41
图2
6
2
8
44
10
30
2
9
13
28
26
40
14
25
22
1
24
47
46
46
41
15
29
45
18
图3
实现述功VB程序请回答列问题
(1)根题意知次程序运行时数组元素a(12)值 (填写数值)
(2)请划线处填入合适代码
Const n8
Dim a(1 To n^2) As Integerb(1 To n^2) As Integer
Function adj(s As Stringn As Integer)As String
'该函数功字符串s前添加干空格实现右齐代码略
End Function
Private Sub Form_Load()
'产生n n150间机整数存数组aList1中显示代码略
End Sub
Private Sub Command1_Click()
Dim x1 As Integery1 As Integerx2 As Integery2 As Integer
Dim i As Integerj As Integervalue As Integerline As String
value0
sText1Text
For i1 To Len(s)
If Mid(si1)>″0″And Mid(si1)<″9″ Then
①
Else
x1valuevalue0
End If
Next i
y1value
'读取Text2中输入矩形区域右角位置处理行号存x2列号存y2代码略
For i1 To n
For j1 To n
If i>x1 And i
Else
b((i1) n+j)a((i1) n+j)
End If
Next j
Next i
For i1 To n^2
lineline+adj(Str(b(i))3)
If ③ Then
List2AddItem line
line″ ″
End If
Next i
End Sub
答案 (1)8 (2)①valuevalue 10+Val(Mid(si1))
②a((i1) n+y1+y2j) ③i Mod n0
解析 (1)a(12)第2行第4列数组元素a(12)值8
(2)第①空考查遍历程中数字字串转换成十进制数值代码形式变量名变量名*R+前分离数字R表示进制处R10①处代码应valuevalue 10+Val(Mid(si1))
②通两层循环控制数组元素赋值变量i控制行j控制列第(ij)位置元素应维数组中元素标(i1) n+j第②题考察二维方阵行列位置维数组标间转换方阵第(ij)位置元素应赋值方阵第(iy1+y2j)位置元素②处代码应a((i1) n+y1+y2j)
③维数组二维方阵形式输出行输出n元素第③空考查输出时控制条件循环变量i值n倍数时需输出行值清空line否a(i)拼接line中③处代码应i Mod n0
3王设计时针旋转矩阵程序功运行程序时文框Text1中输入矩阵规模n点击产生矩阵钮Command1列表框List1中显示n×n矩阵该矩阵数1开始连续然数组成点击旋转矩阵钮Command2该矩阵时针旋转90度显示列表框List2中点次旋转矩阵钮Command2列表框List2中显示矩阵时针旋转90度程序运行界面图示
(1)运行程序文框Text1中输入5点击产生矩阵钮Command1连续点击三次Command2钮列表框List2中第行显示容
(2)实现程序代码请划线处填入合适代码
Dim n As Integerst As String
Dim a(1 To 100) As Integer
Dim b(1 To 100) As Integer
Private Sub Command1_Click()
nVal(Text1Text)
For i1 To n n
a(i)i
Next i
For i1 To n
st″ ″
For j1 To n
stst+adj(Str(a((i1) n+j))3)
Next j
List1AddItem st
Next i
End Sub
Private Sub Command2_Click()
List2Clear
For i1 To n
st″ ″
For j1 To n
b((i1) n+j) ①
stst+adj(Str(b((i1) n+j))3)
Next j
List2AddItem st
Next i
For i1 To n n
a(i) ②
Next i
End Sub
'adj函数功字符串a前加入适空格a长度n位
Function adj(a As Stringn As Integer) As String
Dim sa As String
naLen(a)saa
For i1 To nna
sa″ ″+sa
Next i
adj ③
End Function
答案 (1)5 10 15 20 25 (2)①a((nj) n+i)
②b(i) ③sa
解析 (1)略 (2)①处双重循环功矩阵时针旋转90度数组a存放旋转前数数组b存放旋转数变量i表示旋转数行号j表示列号通表找出旋转前行列变化规律(n3例)inj+1ji
旋转行列号(ij)
旋转前行列号
(11)
(13)
(12)
(23)
(13)
(33)
(21)
(12)
(22)
(22)
(23)
(32)
……
①处填a((nj) n+i)②处循环数组b中数存入a次旋转作准备②处填b(i)③处定义函数返回结果
4皇势力范围国际象棋皇攻击范围位置直线角线图示
VB设计定义函数定皇位置p1方棋子位置p2(位置编号图示编号左右左起第1格①)判断皇否攻击方棋子果返回true行返回false程序请划线处填入正确语句
Function judge(p1 As Integerp2 As Integer) As Boolean
Dim f As Booleanx1 As Integery1 As Integer
Dim x2 As Integery2 As Integer
x1p1 Mod 8
y1p1\8
x2p2 Mod 8
y2p2\8
If x1x2 Or y1y2 Or Then
fTrue
Else
fFalse
End If
judgef
End Function
答案 abs(x1x2)abs(y1y2)
解析 皇攻击范围知果皇横坐标x1方棋子横坐标x2相者皇坐标y1方棋子坐标y2相者皇方棋子横坐标差绝值等坐标差绝值皇攻击方棋子划线处应填abs(x1x2)abs(y1y2)
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档