资源简介 第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 展开更多...... 收起↑ 资源列表 模拟演练.docx 第10节 矩阵问题.pptx 模拟演练.docx 模拟演练.docx 第1节 数论.pptx 模拟演练.docx 第2节 进制问题.pptx 模拟演练.docx 第3节 字符串问题.pptx 模拟演练.docx 第4节 加密问题.pptx 模拟演练.docx 第5节 子序列问题.pptx 模拟演练.docx 第6节 高精度计算问题.pptx 模拟演练.docx 第7节 其他排序算法.pptx 模拟演练.docx 第8节 数组问题.pptx 模拟演练.docx 第9节 环问题.pptx