资源简介 第10节 矩阵问题模拟演练1.编写程序将某个字符串沿“N”字形排列显示。输入一个字符串,将该字符串沿“N”字形排列显示。例如输入字符串“ABCDEFGHIJKLMNOPQRSTUVWXYZ”,转换成5行的“N”字形排列如图所示:/小张根据排列规律设计了“N”字形排列显示的VB程序,功能如下:在文本框Text1中输入原字符串,在文本框Text2中输入“N”字形的行数row(row大于等于3).单击“转换”按钮Command1后,将字符串沿“N”字形排列显示在列表框List1中。程序运行如图所示。(1)如果原字符串为“0123456789”,转换为3行“N”字形排列,则第一行最后一个字符为 。?实现上述功能的VB程序如下,请在划线处填入合适的代码。Private Sub Command1_Click()Dim span As Integer ’第一行相邻字母在原字符串中的间距Dim space As Integer ’第一行相邻字母间的空格个数Dim row As Integer, i As Integer, s As String, line As Strings = Text1.Text ① ?List1.Clear span = row * 2-2 space = row - 2For i = 1 To row line =“”: j = i Do While j <= Len(s)line = line + Mid(s, j, 1) ’输出第i行第一个字符 If i <> 1 And i<> row Then ’判断结果不为首行和末行时 line=line+ Pad(space - i + 1)’输出字符之前的空格 line=line+ ② ’输出字符? line=line+ Pad(i - 2)’输出字符之后的空格 Else line=line+ Pad(space)’输出首行和末行的空格个数 End If j = j + span ’间隔之后的字符位置Loop ③ ? Next i End Sub’函数Pad(n)的值为n个空格构成的字符串,比如Pad(3)代表3个空格构成的字符串Function Pad(n As Integer) As String’产生n个空格构成的字符串 ’代码略 End Function答案 (1)8 (2)①row=Val(Text2.Text) ②Mid(s,j+(row-i)*2,1)或Mid(s,j+span-2*i+2,1)或Mid(s,j+(space-i+2)*2,1) ③List1.AddItem line解析 (1)根据题意可知,0~9共3行的“N”字形排列如下图所示,第一行最后一个字符为8。0 4 81 3 5 7 9(2)如图所示窗体有2个输入语句,①空应填row=Val(Text2.Text)。仔细观察图例或阅读注释语句可知,首行和末行与其他行的字符个数有区别:如果按字母顺序A~H为一组,I~P为一组,Q~X为一组,可以看到每组首行和末行只有1个字符,其余行每行2个字符,但由于输出时列表框中以行为单位进行输出,所以要按位置取相应的字符,第②空填的就是每组第二个字符在原始字符串的位置。该字符位置与当前行号i有关,也与总的行数row有关,随着行号i增加,取到的字符反而靠前,可以猜测有(row-i)的关系,由于每行有2个字符,且j表示本行(非首末行)本组的第一个字符位置,所以②空填Mid(s,j+(row-i)*2,1),然后用一个具体的值去验证。当然,由于span、space都是由row产生的,相应的也可以用其他2个表达式。第③空用于在列表框list1中输出求得的字符串line,故填List1.AddItem line。2.使用数组a实现在列表框中显示数字的螺旋矩阵,图a中显示的是螺旋矩阵中数组元素的排列顺序,图b 中显示的是矩阵中数组元素对应的赋值情况(以5×5 为例)。小明依据上述描述设计了如下VB程序,在Text1中输入矩阵的行数n (n≤10),单击“生成”按钮Command1,在List1中显示n×n的螺旋矩阵。请回答下列问题:(1)当输入的行数为4时,单击“生成”按钮,则数组元素a(5)的值为 。?//(2)请在划线处填入合适的代码。Function pout(x As Integer) As String ’函数功能用于数字的对齐输出 Dim i As Integer, j As Integer, y As Stringy= Str(x) : j = Len(y)For i = 1 To 5 - j y = y +“”Next i ① ?End FunctionPrivate Sub Command1_Click()Dim a(1 To 100) As IntegerDim i As Integer, j As Integer, m As Integer, n As IntegerDim ts As String, t As Integer, v As Integern = Val (Text1.Text) :v = 1 : t = 1 ’t用于每次填数方向上的位置修正For m = n To 1 Step -2 For i = 1 To m ’向右方向填数 a(t + i - 1)=v ② ? Next i t = t + n - 1 For i = 1 To m-1 ’向下方向填数a(m + t) = vv=v+1 ③ ? Next i t = t - n For i = m - 1 To 1 Step -1 ’向左方向填数a(t + i) = vv=v+1 Next i For i = m - 2 To 1 Step -1 ’向上方向填数a(t - n + 1) = vv=v+1t = t-n Next i t=t+2 Next m For i = 1 To n ’以图a方式在List1中输出数组数据 ts =“”For j = ④ To i * n? ts = ts + pout(a(j))Next jList1.AddItem ts Next i End Sub答案 (1)12 (2)① pout = y ②v=v+1 ③t=t+n ④(i - 1) *n+1解析 (1)由题意可得 4×4 螺旋矩阵如图: 1 2 3 412 13 14 511 16 15 6故对应的数组元素a(5)的值为12。(2)①空填函数名的赋值语句。②空根据算法描述,观察4个循环语句,发现缺少一个计数语句v=v+1。③空较难,在手工填数时按螺旋方式,但程序实现中,在列表框中是按行输出的,所以需要对数组下标进行控制,观察4个对数组元素的赋值语句,发现主要靠变量t、i、n控制数组下标,i是循环次数,n是矩阵行数,t才是每次填数方向上的位置修正变量。观察图a,在自上往下的填数过程中,数组下标的变化刚好相差n,结合向上填数的For循环语句中修正t的赋值语句是t=t-n,故此处应填t=t+n。④空所在的双重For循环用于输出,外重循环控制行数,内重循环控制每行,循环变量的初值就是第i行的起点位置:(i-1)*n+1课件2张PPT。第10节 矩阵问题 矩阵最方便的表示方式就是二维数组。如果用一维数组来表示矩阵(二维数组),则需要对一维数组的下标进行换算。教材研读 展开更多...... 收起↑ 资源列表 模拟演练.docx 第10节 矩阵问题.pptx