例1 升序数组a中插入数x数组元素保持升序解决该问题VB程序段①处应填入正确语句实现功
in 'n数组a中元素数
do while i>0 and a(i)>x
①
ii1
loop
a(i+1)x
答案a(i+1)a(i)
解析线性表中插入元素问题该算法基方法先找数插入位置i原元素a(i)a(i+1)a(i+2)…a(n)次移表中第i+1i+2i+3…n+1位置便腾出空位置i新元素存入该位置程序循环部分完成位置查找原数移功划线处应填入语句a(i+1)a(i)
例2插入排序基思想排序数值逐插入已排序序序列中直数插入完止新序序列例已知排序组数6071491124366
假设排序程中前3数已完成升序排列构成序序列496071
排序数中第4数(11)插入述序序列新含4数序序列首先应找11插入位置进行插入11放入数组第元素r(0)中元素称监视哨然71起右左查找117171右移位置116060右移位置114949右移位置时11r(0)值较11≥r(0)插入位置r(1)假设11第值r(1)插入位置应该r(1)r(2)间60已右移留出位置正留11面数样方法逐插入该序序列中数n须进行n1趟排序完成
VB程序执行数组元素a(1)值( )
a(1)10a(2)18a(3)12a(4)6a(5)9
for i2 to 5
a(0)a(i)
ji1
do while a(0)>a(j)
a(j+1)a(j)
jj1
loop
a(j+1)a(0)
next i
A10 B18 C6 D9
答案插入排序算法a(0)插入数do循环中插入数a(0)元素移动留出空位存放a(0)说明降序方式插入排序算法a(1)中存放值18
选B
课作业
1n排成圆圈然n逆时针方分编号12…n编号1开始逆时针计数某计数m倍数时该出圈循环直圈中留
现VB6制作模拟报数出列程序程序界面图示文框Text1中输入数n文框Text2中输入出列号m单击钮模拟报数Command1列表框List1中显示出列序编号程序界面
实现述功VB 代码 请划线处填入合适代码
Private Sub Command1_Click()
Dim n As Integer m As Integer
Dim a(1 To 100) As Integer
n Val(Text1Text)
m Val(Text2Text)
For i 1 To n
①
Next
s 0
j 0
Do While s < n
t 0
Do While t
t t + a(j)
Loop
a(j) 0
List1AddItem Str(j)
s s + 1
Loop
Text3Text Str(j)
End Sub
答案 ①a(i)1 ②j j Mod n + 1 者 if jn then n1 else jj+1
解析 模拟报数种典型线性表应程序中维数组表示链表数组元素标编号算法思想先设数组a元素值1然第1元素开始累加累加结果存入变量t累加j号元素时果t值3置a(j)0j号出列出列数加1直出列数n时结束时j值剩编号划线①处元素值设1表示未出列填入语句a(i)1②处计算次轮元素标填入j j Mod n + 1if jn then n1 else jj+1
2利VB程序两组成绩数合组成绩高低排列输出成绩相时第批学生优先输出实现述功VB代码加框处代码错请改正
Dim xm(1 to 1000) as string '存储学生姓名
Dim cj(1 to 1000) as integer '存储学生成绩
Private Sub Form_Load() '该处具体代码省略
'数库读取两批学生数第1批学生数rs1成绩高低序成绩存入cj(1)cj(2)…cj(rs1)中姓名存入xm(1)xm(2)…xm(rs1)中第2批数rs2成绩高低序成绩存入cj(rs1+1)cj(rs1+2)…cj(rs1+rs2)中姓名存入xm(rs1+1)
xm(rs1+2)…xm(rs1+rs2)中
End Sub
Private Sub Command1_Click()
i1
jrs1+1
'程序开始成绩高低逐输出次输出前两段中尚未处理学生中成绩高n1 '①
Do While i
If cj(i)>cj(j) Then
kiii+1
Else
kjjj+1
End If
List1AddItem(″第″+Str(n)+″名″+xm(k)+″成绩″+Str(cj(k)))
Loop
Do While i
List1AddItem(″第″+Str(n)+″名″+xm(i)+″成绩″+Str(cj(i)))
ii+1
Loop
Do While j
List1AddItem(″第″+Str(n)+″名″+xm(j)+″成绩″+Str(cj(j)))
jj+1
Loop
End Sub
答案 ①n0 ②j
Const n10
Dim a(1 To 10) As Integer
Private Sub Form_Load()
'生成n序数显示List1中代码略
End Sub
Private Sub Command1_Click()
Dim t As Integeri As Integerj As Integertemp As Integer
①
For it+1 To n
tempa(i)
For ji To i+1t Step1
②
Next j
a(j) ③
Next i
For i1 To n
List2AddItem Str(a(i))
Next i
End Sub
答案 ①tVal(Text1Text) ②a(j)a(j1) ③temp
解析 ①简单根题目意思序数组a分成两段换位置首先读入数t答案tVal(Text1Text)②程序实现数组a1→t位置t+1→n位置互换双重循环解决问题具体做法第1轮(it+1)a(1)~a(t)次移位置a(t+1)存入a(1)第2轮(it+2)a(2)~a(t+1)次移位置a(t+2)存入a(2)重复直轮(in)a(t)~a(n1)次移位置a(n)存入a(t)程序第2空应该完成j1位置j位置数移动答案a(j)a(j1)③完成t数移动a(j)应该等原存放temp中a(i)值答案temp
4单循环赛制种较公合理赛制度赛程中参赛队伍均相遇次秩序编排采逆时针轮转方法数字1~n次作队伍编号编号U型走分成均等两边(n奇数末尾增加编号0总数偶数)第轮赛秩序例5队伍赛编排情况图a示第二轮固定编号1余编号均逆时针方移动位置该轮赛秩序轮赛秩序类推编号0阵表示轮轮空
现VB程序实现述功文框Text1中输入参赛队伍数n单击编排钮Command1列表框List1中输出轮赛秩序程序运行效果图b示
图a
图b
实现述功VB代码加框处代码错请改正
Private Sub Command1_Click()
Dim team(1 To 20) As String '存储队伍编号
Dim n As Integerc As Integerresult As String
Dim i As Integerj As Integertemp As String
nVal(Text1Text)
For i1 To n
team(i)Str(i)
Next i
cn+n Mod 2 '变量c存储赛编排队伍总数
If c<>n Then team(c)Str(0)
For i1 To c1
result″ ″
For j1 To c\2
resultresult & team(j) & ″″&team(cj) & ″″ '①
Next j
List1AddItem ″第″ & Str(i) & ″ 轮″ & result
'固定编号1余队伍逆时针移动位置
tempteam(c)
For jc To 2 Step 1
team(j+1)team(j) '②
Next j
team(2)temp
Next i
End Sub
答案 ①team(cj+1) ②team(j)team(j1)
解析 程序数组team存储队伍编号初始时候team(i)值i模拟法分析算法6队伍例初始编号123456程序始终位置162534值组成阵表第2轮编号变成162345位置162534表示阵表156423第3轮156234位置162534表示阵表145362……次类推①根算法描述6队伍模拟话两阵队伍阵始终数组team162534位置值标7(c+1)team(j)阵应该team(cj+1)②固定编号1余队伍移动时候先位置值出存放temp数组team2c1位置值逐移动存储3c位置程序c2循环jc时候应该c1位置值存储c位置j2时应该2位置值存储3位置程序应改成team(j)team(j1)
4李学碰数学问题400学序进行编号围成圈12报数(1号位置开始)报2学出列直循环报数问剩位学编号号
例6学编号例12报数(1号位置开始)次出列编号次序246315剩编号5学解决问题李VB编写程序尝试解决中列表List1显示出列序编号文框Text1中显示留编号程序代码请划线处填入合适代码
Private Sub Command1_Click()
Dim sft As Integer
Dim a(1 To 400) As Boolean
For i1 To 400
a(i)False
Next i
s0f0i0
Do While f<399
ii+1
If i401 Then i ①
If a(i)False Then ss+1
If s2 Then
②
List1AddItem Str(i)
a(i)True
f ③
End If
Loop
For i1 To 400
If ④ Then Text1TextStr(i)
Next i
End Sub
答案 ①1 ②s0 ③f+1 ④Not a(i)a(i)False
解析 400围成圈1号开始1212…报数报2出列直剩位学定义a数组元素初值均false表示游戏开始时学生全未出列开始时全列设置变量s初值零接着1号开始两两数计数器s等2前位报2出列数组a前元素值变True表示该位学出列计数器s重置零计数器f表示前止已出列数直循环剩位学f值399a(289)false剩289号学
5n互重复数字值范围[1n]分保存数组元素a(1)a(n)中果数字i保存a(i)认数字i正确位置干相互占位置数字称组正确位置数字单独组6数字231465分保存数组元素a(1)a(6)中231组4组65组该程序功输出组情况运行界面图
(1)数组元素a(1)a(5)值分253145元素总 组
(2)请划线处填入合适代码
Const n10
Dim a(1 To n) As Integer '保存原始数
Dim b(1 To n) As Boolean '数组b标记相应位置没找
Private Sub Command1_Click()
Dim i As Integersum As Integertotal As Integer
sum0total1 'total表示第组
i1
List2Addltem ″第″+Str(total)+″组″
Do While sum
List2Addltem a(i)
b(i)True
①
sumsum+1
Loop
If sum
List2Addltem ″第″+Str(total)+″组″
i1
Do While b(i) '该循环查找组开始位置
ii+1
Loop
End If
Loop
End Sub
Private Sub Form_Load()
Dim i As Integer
Randomize
For i1 To n '产生n样整数范围[1n]
a(i)Int(Rnd n)+1
Do While ③
a(i)Int(Rnd n)+1
Loop
Next i
For i1 To n
ListlAddltem a(i)
b(i)False
Next i
End Sub
Function f(x As Integery As Integer) As Boolean
'该函数功判断x数组a中前y数没重复
Dim j As Integer
fFalse
For j1 To y
If a(j)x Then fTrueExit For
Next i
End Function
答案 (1)2 (2)①ia(i) ②totaltotal+1 ③f(a(i)i1)f(a(i)i1)True
解析 (1)第1组2541第2组3(2)程序逻辑结构复杂函数较时程序运行序阅读代码题中先阅读Form_Load()Function f()生成原始数阅读Command1_Click()理程序逻辑结构
生成原始数时求产生n样整数存储数组a中生成机整数a(i)需先判断否数组a前(i1)元素重复重复存储数组a中
理解相互占位置数字呢处理数组a第i元素时a(i)j表示数字j占位置ia(i)a(j)组元素接处理第j元素令ia(i)样元素跳组元素直跳回该组第元素该组第元素应b(i)True退出循环
6面N(3≤N≤100)房间围成圈时针方分编号12……N相邻两房间间均扇门第i房间居住数a(i)初始时选择房间聚集该房间接着时针方走相邻房间直走居住房间扇门花费1量请确定初始房间花费量例N5a(1)4a(2)7a(3)8a(4)6a(5)4
佳方案初始时聚集2号房间花费量7 0+8 1+6 2+4 3+4 448解决问题明编写VB程序窗体加载时数库中读取N值编号1N房间居住数数存储数组a中点击窗体钮Command1程序枚举种方案(初始房间)计算该方案量文框Text1中输出优方案初始房间编号文框Text2中输出量
实现述功VB代码请划线处填入合适代码
Dim a(1 To 100) As Integer '次存储编号1100房间居住数
Private Sub Form_Load()
'程数库中读取N值房间居住数存储数组a中
'代码略
End Sub
Private Sub Command1_Click()
Dim i As Integerj As Integerw As Integerk as Integer
Dim t As Longans As Long
k0ans32767 'ans 初始化Integer数
For i1 To n
t0
For j0 To n1
w ①
If w0 Then wn
t ②
Next j
If t
anst
End If
Next i
Text1TextStr(k) '起始房间编号
Text2Text ③
End Sub
答案 ①(i+j) Mod n ②t+a(w)*j ③Str(ans)
解析 程序中语句功描述
k0ans32767 'k初始聚集房号初始化0ans需量
For i1 To n '总n初始聚集房间逐计算出需量
t0
For j0 To n1
w(i+j) Mod n '初始聚集房间起步花费j量达房号w房间该房间花费量a(w) j
If w0 Then wn '果w0n号房间wn
tt+a(w) j '累计前房间已满额需量
Next j '直累加完止
If t
anst
End If
Next i '直找花量初始房号止
Text1TextStr(k) '输出花费量初始房号相应量
Text2TextStr(ans)
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档