- 基础理论
- 数据及数据库技术
- 人工智能
- 算法理论
- 算法实例
- 面向对象程序设计 VB开发工具
- 算法实例的程序实现
- + 算法及算法的表示方法
- 计算机解决问题的步骤化
- 算法的表示方法
- 多媒体理论
- 基础软件操作
- 算法软件操作
- 多媒体软件操作
- 网络技术应用
学校需要统计学生的作业完成数,需要将学生的完成数按从高到低显示,下列程序模拟该信息处理过程,程序在数据库stud中找到的学生信息(编号和完成次数),并将所有学生按照完成数从高到低显示。先将所有学生的编号和完成次数从数据库stud的info表中ID和finshed两字段中取出分别保存在数组a和数组b中,第i个学生的编号保存在a(i)中,对应的作业完成次数保存在b(i)中。
数据库文件“stud.accdb”信息如图1所示。

图1
程序界面如图2所示,左边列表框List1中显示所有学生信息(包括编号和完成次数),单击“排序”按钮(Command1),所有编号按照作业完成次数从高到低显示在列表框List2中。

图2
代码如下:
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim n As Integer
Dim a(500) As String
Dim b(500) As Integer
Private Sub Form_Load()
Dim i As Integer
conn.ConnectionString=“Provider=Microsoft.ACE.OLEDB.12.0;DATA Source=”& App.Path & “/stud.accdb”
conn.Open
Set rs.ActiveConnection=conn
rs.Open “SELECT*FROM info”
n=0
Do While Not rs.EOF ’到记录集最后一条记录后退出循环
n=n+1
a(n)=rs.fields(“id”)
b(n)=rs.fields(“finshed”)
rs.MoveNext ’移动到下一条记录
Loop
For i=1 To n
List1.AddItem a(i)+“”+Str(b(i))
Next i
rs.Close
conn.Close
Set rs=Nothing
Set conn=Nothing
End Sub
Private Sub Command1_Click()
Dim i As Integer,j As Integer,t1 As Integer,t2 As String,k As Integer
For i=1 To n-1 ’n表示学生总数
k=i ’k保存第i大的数,一开始假定是a(i)
For j=i+1 To n
If b(k)<b(j) Then k=j ’比较完成数
①____
If ____②____ Then
t1=b(i):b(i)=b(k):b(k)=t1 ’交换完成次数
t2=a(i):a(i)=a(k):a(k)=t2 ’交换编号
End If
Next i
For i=1 To n ’在列表框List2中输出排序结果
List2.AddItem a(i)+“ ”+Str(b(i))
Next i
End Sub
(1)当“Form_Load()”事件处理过程运行结束时,变量n的值为:________。
(2)加虚线框中的代码采用的排序算法为: ______________________________。
(3)为实现上述功能,程序中划线处的代码为:
①________;②________。
数据库文件“stud.accdb”信息如图1所示。

图1
程序界面如图2所示,左边列表框List1中显示所有学生信息(包括编号和完成次数),单击“排序”按钮(Command1),所有编号按照作业完成次数从高到低显示在列表框List2中。

图2
代码如下:
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim n As Integer
Dim a(500) As String
Dim b(500) As Integer
Private Sub Form_Load()
Dim i As Integer
conn.ConnectionString=“Provider=Microsoft.ACE.OLEDB.12.0;DATA Source=”& App.Path & “/stud.accdb”
conn.Open
Set rs.ActiveConnection=conn
rs.Open “SELECT*FROM info”
n=0
Do While Not rs.EOF ’到记录集最后一条记录后退出循环
n=n+1
a(n)=rs.fields(“id”)
b(n)=rs.fields(“finshed”)
rs.MoveNext ’移动到下一条记录
Loop
For i=1 To n
List1.AddItem a(i)+“”+Str(b(i))
Next i
rs.Close
conn.Close
Set rs=Nothing
Set conn=Nothing
End Sub
Private Sub Command1_Click()
Dim i As Integer,j As Integer,t1 As Integer,t2 As String,k As Integer
For i=1 To n-1 ’n表示学生总数
k=i ’k保存第i大的数,一开始假定是a(i)
For j=i+1 To n
If b(k)<b(j) Then k=j ’比较完成数
①____
If ____②____ Then
t1=b(i):b(i)=b(k):b(k)=t1 ’交换完成次数
t2=a(i):a(i)=a(k):a(k)=t2 ’交换编号
End If
Next i
For i=1 To n ’在列表框List2中输出排序结果
List2.AddItem a(i)+“ ”+Str(b(i))
Next i
End Sub
(1)当“Form_Load()”事件处理过程运行结束时,变量n的值为:________。
(2)加虚线框中的代码采用的排序算法为: ______________________________。
(3)为实现上述功能,程序中划线处的代码为:
①________;②________。
观察如下VB程序段:
Function fx(n As Integer) As Long
If n=1 Then
fx=1
Else
fx=2*fx(n-1)
End If
End Function
Private Sub Command1_Click()
Dim n As Integer,x As Long
n=Val(Text1.Text)
x=fx(n)
Text2.Text=Str(x)
End Sub
若在文本框Text1中输入数字5,单击命令按钮Command1后,在文本框Text2显示的内容为( )
Function fx(n As Integer) As Long
If n=1 Then
fx=1
Else
fx=2*fx(n-1)
End If
End Function
Private Sub Command1_Click()
Dim n As Integer,x As Long
n=Val(Text1.Text)
x=fx(n)
Text2.Text=Str(x)
End Sub
若在文本框Text1中输入数字5,单击命令按钮Command1后,在文本框Text2显示的内容为( )
A.2 | B.8 | C.16 | D.32 |
某超市商品信息管理系统中有1万条商品资料记录(已经索引排序),假设从中取出一条记录并与待查项进行比较所花的时间为20毫秒,则用对分法在该系统中查找任意一个指定商品最多花费的时间约为( )
A.13毫秒 | B.14毫秒 |
C.280毫秒 | D.14万毫秒 |
下列VB程序实现如下功能:程序运行时,在文本框Text1和Text2中分别输入x和n的值,单击命令按钮Command1后,调用函数f计算s=x+++…+的值,并在文本框Text3中显示计算结果。请在划线上填入合适的代码。
Private Sub Command1_Click( )
Dim x As Single,n As Integer,s As __①__
x=Val(Text1.Text)
n=Val(Text2.Text)
s=f(x,n)
Text3.Text=str(s)
End Sub
Private Function f(x As Single,n As Integer) As Single
Dim sum As Single,i As Integer,t As Single
sum = 0
t=1
For i=1 To n
t=t*x/i
sum=sum+t
Next i
____②____
End Function
填写划线①处代码_____________________________________。
填写划线②处代码______________________________________。
Private Sub Command1_Click( )
Dim x As Single,n As Integer,s As __①__
x=Val(Text1.Text)
n=Val(Text2.Text)
s=f(x,n)
Text3.Text=str(s)
End Sub
Private Function f(x As Single,n As Integer) As Single
Dim sum As Single,i As Integer,t As Single
sum = 0
t=1
For i=1 To n
t=t*x/i
sum=sum+t
Next i
____②____
End Function
填写划线①处代码_____________________________________。
填写划线②处代码______________________________________。
下列问题不能用算法描述的是( )
A.已知a、b、c的值,求一元二次方程ax2+bx+c=0(a≠0)的实数根 |
B.计算某个班级学生身高的平均值 |
C.列出方程y=2x+1的所有实数解 |
D.根据三角形三边长度求三角形面积 |
用VB编写一个字符串分行程序,功能如下:单击“分行”按钮Command1,将文本框Text1中的英文文本在列表框List1中分行显示(分行时单词不得跨行,每行字符尽可能多但不超过40个),并在标签Label1中输出总行数,运行效果如图所示。分行算法如下:
(1)将文本框中的字符串保存到变量s中;
(2)当s中字符个数超过40时,循环执行下列①②③步,否则跳转到(3):
①如果第41个字符不是英文字母,则分行位置p=40;否则,向左逐个查找,直至找到第一个非英文字母,将其位置作为分行位置p;
②截取s的前p个字符,作为新增行显示在列表框List1中,同时总行数加1;
③将s中未分行部分重新赋值给变量s。
(3)将s作为新增行显示在列表框List1中,同时总行数加1。

实现上述功能的VB程序如下,请在画线处填入合适代码。
Private Sub Command1_Click( )
Dim s As String,c As String
Dim r As Integer,total As Integer,p As Integer
total=0
s=__(1)__
Do While Len(s)>40
r=41
c=Mid(s,r,1)
If Not((c>=“a” And c<=“z”)Or(c>=“A” And c<=“Z”)) Then
p=40
Else
’从第41个字符开始向左找到第1个非英文字母,并将其位置值赋给p
Do While(c>=“a” And c<=“z”)Or(c>=“A”And c<=“Z”)
r=__(2)__
c=Mid(s,r,1)
Loop
p=r
End If
List1.AddItem Mid(s,1,p)
total=total+1
s=__(3)__
Loop
List1.AddItem s
total=total + 1
Label1.Caption=“共”+Str(total)+“行”
End Sub
(1)将文本框中的字符串保存到变量s中;
(2)当s中字符个数超过40时,循环执行下列①②③步,否则跳转到(3):
①如果第41个字符不是英文字母,则分行位置p=40;否则,向左逐个查找,直至找到第一个非英文字母,将其位置作为分行位置p;
②截取s的前p个字符,作为新增行显示在列表框List1中,同时总行数加1;
③将s中未分行部分重新赋值给变量s。
(3)将s作为新增行显示在列表框List1中,同时总行数加1。

实现上述功能的VB程序如下,请在画线处填入合适代码。
Private Sub Command1_Click( )
Dim s As String,c As String
Dim r As Integer,total As Integer,p As Integer
total=0
s=__(1)__
Do While Len(s)>40
r=41
c=Mid(s,r,1)
If Not((c>=“a” And c<=“z”)Or(c>=“A” And c<=“Z”)) Then
p=40
Else
’从第41个字符开始向左找到第1个非英文字母,并将其位置值赋给p
Do While(c>=“a” And c<=“z”)Or(c>=“A”And c<=“Z”)
r=__(2)__
c=Mid(s,r,1)
Loop
p=r
End If
List1.AddItem Mid(s,1,p)
total=total+1
s=__(3)__
Loop
List1.AddItem s
total=total + 1
Label1.Caption=“共”+Str(total)+“行”
End Sub
n个数据的冒泡排序需要经过n-1遍加工,每一遍加工自下而上比较相邻两个数据,把较小者交换到上面。小刘发现:当某一遍加工过程中没有数据交换,说明数据已经有序,无需进一步加工。为此,小刘对算法进行优化,编写了一个VB程序,功能如下:运行程序时,在列表框List1中显示排序前数据,单击“排序”按钮Command1,在列表框List2中显示这些数据按升序排序后的结果,在标签Label3中显示排序过程的加工遍数。运行效果如图所示。

实现上述功能的VB代码如下,但加框处代码有错,请改正。
Dim a(1 To 8) As Integer
Dim n As Integer
Private Sub Form_Load()
’n=8,排序前数据存储在数组a中,并在列表框List1中显示
’代码略
End Sub
Private Sub Command1_Click()
Dim flag As Boolean ’flag值为True表示一遍加工中发生过交换
i=1
flag=True
Do While ’(1)
flag=False
For j=n To i+1 Step-1
If a(j)<a(j-1) Then
k=a(j):a(j)=a(j-1):a(j-1)=k
flag=True
End If
Next j
i=i+1
Loop
Label3.Caption=“排序过程的加工遍数为”+’(2)
For i=1 To n
List2.Addltem Str(a(i))
Next i
End Sub

实现上述功能的VB代码如下,但加框处代码有错,请改正。
Dim a(1 To 8) As Integer
Dim n As Integer
Private Sub Form_Load()
’n=8,排序前数据存储在数组a中,并在列表框List1中显示
’代码略
End Sub
Private Sub Command1_Click()
Dim flag As Boolean ’flag值为True表示一遍加工中发生过交换
i=1
flag=True
Do While ’(1)
flag=False
For j=n To i+1 Step-1
If a(j)<a(j-1) Then
k=a(j):a(j)=a(j-1):a(j-1)=k
flag=True
End If
Next j
i=i+1
Loop
Label3.Caption=“排序过程的加工遍数为”+’(2)
For i=1 To n
List2.Addltem Str(a(i))
Next i
End Sub
某Visual Basic程序段如下:
s = ""
For i = 1 To 5
a(i) = 0
Next i
For i = 2 To 5
For j = i To 5
If j Mod i = 0 Then a(j) = 1 - a(j)
Next j
Next i
For i = 1 To 5
If a(i) = 1 Then s = s + Str(i)
Next i
Text1.Text = s
运行该程序段后,Text1中显示的内容为( )
s = ""
For i = 1 To 5
a(i) = 0
Next i
For i = 2 To 5
For j = i To 5
If j Mod i = 0 Then a(j) = 1 - a(j)
Next j
Next i
For i = 1 To 5
If a(i) = 1 Then s = s + Str(i)
Next i
Text1.Text = s
运行该程序段后,Text1中显示的内容为( )
A.14 | B.235 | C.25 | D.234 |