相关试卷
-
1、蛇形矩阵是由1开始的自然数依次排列成的一个矩阵三角形。小强编写了一个输出n行蛇形矩阵的理序,其功能为在文本框Text1中输入数值n作为蛇形矩阵的行数,点击“输出”按钮Command1后,在List1中显示n行蛇形矩阵,程序界面如图所示。
实现上述功能的VB程序如下,但加框处代码有误,请改正。
Private Sub Command1_Click( )
Dim n,a,b As Integer
Dims As String
n=Val(Text1.Text)
For i=1 To n
s=""
For j=i To n
‘①s=s+Str(a)
Next j
‘②a=b
List1.AddItems
Next i
End Sub
以上程序段运行时,为了实现上述功能,加框处代码应改正为:①;②。
-
2、高精度除法常用于计算两个数位较大的数之间的除法运算,设被除数为s1,除数为s2,保存在字符串中。除法的基本思想是反复做减法,s1能够被s2减多少次,商就是多少。但是这样做显然比较慢。如下算法做了部分优化,以48695除以324为例:
①将324扩大100倍,32400只能被48695减去1次,则百位上的商是1;
②将324扩大10倍,3240能被前一次余的16295减去5次,则十位上的商就是5;
③对于324,不能被最后剩余的95减去,则个位上的商为0。所以最后的商的整数部分为150。
程序运行界面如图所示。
(1)、根据该算法计算5731423除以23345,十位上的商是。(2)、阅读以下程序,在画线处填入合适的代码。Dim s1, s2, s3, s, ans As String
Dim tot As Integer, t As Integer
Private Sub Command1_Click( )
Dim a, b, i, j, length As Integer
s1=Text1.Text:s2=Text2.Text:s3=""
Length=Len(s1)-Len(s2)
For i=1 To length
s2=s2+"0"
Next i
For i=0 To length
s=Mid(s2, 1, Len(s2)-1):tot=0
Do While ① or(Len(s1)=Len(s)And s1>=s)
tot=tot+1
ans="":flag=False
a=Len(s1):b=Len(s)
For j=a To 1 Step-1
t=0
If flag Then
t=-1:flag=False
End If
If b>0 Then
t=t+Val(Mid(s1, j, 1))-Val(Mid(s, b, 1))
Else
t= ②
End If
If t<0 Then
③
flag=True
End If
ans=t&ans:b=b-1
Next j
s1=Val(ans)
Loop
s3=s3&tot
Next i
i=1
Do While Mid(s3,i,1)="0"
i=i+1
Loop
Text3.Text=Mid(s3,i,Len(s3))
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③。
-
3、正整数n的阶乘,在数学上定义为:n!=1×2×3×…×n,如3!=1×2×3,现在输入一个正整数n(n≤30),计算出1~n中的每一个整数的阶乘的精确结果。小北按照上述要求,设计了一个求前n个正整数的阶乘问题的VB程序具有下述功能。在程序中,他采用加法代替乘法的方法来计算阶乘,如:3!=2!×3=2!+2!+2!。程序启动后在文本框Text1中输入n的值,单击“计算”按钮Command1后,在列表框List1中输出前n个数的阶乘,当n=10时,程序运行界面如图所示。
实现上述功能的VB程序如下,请在画线处填入合适的代码。
Const maxn=80
Dim i, j, k, n, r As Integer
Dim a(1 To maxn)As Integer, b(1 To maxn)As Integer
Dims As String
Private Sub Form_Load( )
List1.Clear
For i=1 To maxn
a(i)=0
Next i
End Sub
Sub array_sum(j As Integer) ‘该过程用于计算j!,并将j!的精确值按位保存在数组a中
For k=1 To j-1
For i=1 To maxn
r= ①
If r>=10 Then ② =a(i+1)+1
a(i)=r Mod 10
Next i
Next k
End Sub
Private Sub Command1_Click( )
n=Val(Text1.Text)
a(1)=1
List1.AddItem"1!="&.Str(a(1))
For j=2 To n
For i=1 To maxn
b(i)=a(i)
Next i
s=""
Call array_sum(j) ‘该语句用于调用自定义过程
s=s+Str(j)+"!="
k=maxn
Do While a(k)=0
③
Loop
For i=k To 1 Step-1
s=s+Str(a(i))
Next i
List1.Addltem s
Next j
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③。
-
4、编写“二进制加法”程序,实现如下功能:在文本框Text1和Text2中分别输入两个二进制数,单击“计算”按钮Command1,程序在位数较少的二进制数前补“0”,使两个二进制数位数相同,然后从右向左按位依次进行加法运算,最后在文本框Text3中显示相加的结果。程序运行界面如图所示。
(1)、在设计程序界面时,要设置窗体的标题为“二进制加法”,应修改窗体的属性。(2)、实现上述功能的VB程序如下,请在画线处填入合适的代码。Private Sub Command1_Click( )
Dim s1, s2, result, t As String
Dim span, jw As Integer
s1=Text1. Text:s2=Text2. Text
span=Len(s1)-Len(s2)
If span<0 Then
t=s1:s1=s2:s2=t
span= ①
End If
For i=1 To span
s2="0"+s2
Next i
jw=0:result=" "
For i= ② To 1 Step-1
x=Val(Mid(s1, I, 1))+Val(Mid(s2,i,1))+jw
jw=x\2
result=Str(x Mod 2)+result
Next i
If jw=1 Then result="1"+result
Text3. Text=result
End Sub
(3)、在文本框Text1中输入“10”,在文本框Text2中输入“11000”,单击“计算”按钮Command1后,变量b2的值是。 -
5、哥德巴赫(Goldbach)的“1+1猜想”是每个偶数都能写成两个素数之和;华林(Waring)的“1+1+1猜想”是每个不是素数的奇数,都能写成三个素数之和。这两个猜想虽然至今未被证明,但是也未曾发现反例。
现在我们来验证一个简单点的“1+1+1+1猜想”;在Text1中输入整数,单击“验证”按键Command1后,把此整数分解成任意四个素数之和的形式,并在List2中输出这四个素数。已知1≤n≤1000000。程序运行时,先求出1000000以内的所有素数,并输出到List1中。运行界面如图所示。
⑴在事件处理过程Form_Load( )中,用筛选法筛出了1~n范围内的所有素数,放置在数组p中。筛选算法是:从2开始,第一个未被筛掉的是2,2是素数,那么把2×2,2×3…,即所有2的倍数都筛掉,下一个未被筛掉的数是3,再把所有3的倍数筛掉……若下一个未被筛掉的是i,那么要把i×i,i×(i+1),i×(i+2)…筛掉,请把画线①、②处的代码补充完整。
⑵有了1~n范围内的素数表后,我们可以用枚举算法验证素数表中的四个数pa , pb , Pc , Pd。是否满足pa+pb+Pc+Pd=n。但是,范围过大,无法承受这么大的枚举量。因此我们考虑如何用哥德巴赫猜想来优化。显然n<8时是无解的,只需考虑n≥8时的情况。因为分解是任意的,那就用前两个素数2或3去分解n,余下部分用哥德巴赫的“1+1猜想”去验证即可。请把画线③、④处的代码补充完整。
Const maxn As Long=1000000 ‘这里最多验证一百万以内的“1+1+1+1猜想”
Dim p(maxn)As Boolean ‘p存放maxn以内的素数,p(i)=True表示i是素数
Private Sub Form_Load( )
Dim i As Long, j As Long, cnt As Long
For i=0 To maxn
p(i)=True
Next i
p(0)=False:p(1)=False
‘筛选法求素数表,对于maxn个数,最后一次只要筛去
的所有倍数即可For i=2 To Int(Sqr(maxn))
If p(i)Then
For j=i To ①
p( ② )=False
Next j
End If
Next i
cnt=0
For i=1 To maxn
If p(i)Then
List1.Addltem Str(i):cnt=cnt+1
End If
Next i
Label1.Caption=maxn & "内的素数,共"& cnt & "个"
End Sub
Private Sub Command1_Click( )
Dim n As Long, i As Long
n=Val(Text1.Text):List2.Clear
If n<8 Then
List2.AddItem"Impossible":Exit Sub
Else If ③ Then ‘先用两个2去分解n
List2.Addltem"2"
List2.Addltem"2"
n=n-4
Else
List2.AddItem "2" ‘用2和3去分解n
List2.AddItem "3"
n=n-5
End If
For i=2 To n ‘余下部分用哥德巴赫的“1+1猜想”来验证
If ④ Then
List2.AddItem Str(i)
List2.Addltem Str(n-i)
Exit For
End If
Next i
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③;④。
-
6、任意一个大于或等于4的偶数,都可以用两个素数之和表示,这就是哥德巴赫猜想。如:4=2+2,6=3+3,8=3+5,12=5+7,98=19+79。
编写一个验证哥德巴赫猜想的VB程序,程序运行时,在文本框Text1中输入一个大于或等于4的偶数,单击“验证”按键Command1后,如果猜想验证成功,则在文本框Text2中显示“Yes”,并在列表框List1中显示用两个素数表示该偶数的等式;否则显示“No”。程序运行界面如图所示。
实现上述功能的VB代码如下,但加框处代码有误,请改正。
Function judge(x As Integer) As Boolean
Dim j As Integer
judge=True
j=2
Do While j<=x-1 And judge=True
If x Mod j=0 Then
judge=False
Else
j=j+1
End If
Loop
End Function
Private Sub Command1_Click()
Dim n As Integer, p As Integer
Dim q As Integer, flag As Boolean
n=Val(Text1. Text)
p=1
flag=False
Do While
And p<n ‘①p=p+1
‘②If judge(p) And judge(q) Then
Text2. Text="Yes"
flag=True
List1. Addltem Str(n)+"="+Str(p)+"+"+Str(q)
End If
Loop
If flag=False Then
Text2.Text="No"
End If
End Sub
以上程序段运行时,为了实现上述功能,加框处代码应改正为:①;②。
-
7、如果两个质数的差为2,则这两个质数称为李生质数对。编写VB程序,实现如下功能:单击“显示孪生质数对”按钮Command1,在列表框List1中显示100以内的所有孪生质数对。如图所示。
实现上述功能的VB代码如下,但加框处代码有误,请改正。
Dim a(1 To 50)As Integer
Private Sub Command1_Click( )
Dim i As Integer
k=0:i=3
Do While i<=100
If
Then ‘①k=k+1
a(k)=i
End If
i=i+2
Loop
For i=2 To k
If
Then ‘②List1.Addltem Str(a(i-1))+ "和"+Str(a(i))
End If
Next i
End Sub
Function prime(x As Integer) As Boolean
prime=False
For i=2 To Int(Sqr(x))
If x Mod i=0 Then
prime=True
Exit For
End If
Next i
End Function
以上程序段运行时,为了实现上述功能,加框处代码应改正为:①;②。
-
8、在计算机系统中,数值一律用补码表示和存储(补码的计算方法:正整数的补码用其二进制数表示,负整数的补码是将其对应的正整数二进制数的所有位取反后加1)。小明为了更好地了解数值在计算机中是以什么形式传输的,编写了如下VB程序段。在文本框Text1中输入一个整数(-128至127之间的整数),单击“计算”按钮,在文本框Text2中输出对应的补码。程序运行界面如图所示。
实现上述功能的VB程序如下。
Private Sub Command1_Click( )
Dim n As Integer, i As Integer
Dim b(1 To 8) As Integer
Dims As String
s="":n=Val(Text1. Text)
If n>=0 Then
For i=1 To 8
b(i)=n Mod 2:n=n\2
Next i
Else
n=Abs(n)
For i=1 To 8
b(i)=(n+1) Mod 2:n=n\2
Next i
b(1)=b(1)+1
i=1
Do While b(i)=2
b(i)=0
i=i+1
__________
Loop
End If
For i=8 To 1 Step-1
s=
Next i
Text2. Text=s
End Sub
(1)、观察运行界面,程序至少使用了类控件。(2)、根据程序规定的算法,-20的补码是。(3)、请将程序代码中的画线处语句补充完整。(4)、程序代码中,加框处赋值语句有误,请改正。 -
9、来种编码以4位二进制码为一组,每组前两位表示方向,后两位表示距离。编写一个程序,将编码翻译成方向和距离,距离值为每组编码后两位二进制数转换为十进制数的值。具体功能如下:在文本框Text1中连续输入多组编码,单击“翻译”按钮Command1,结果显示在列表框List1中。程序运行界面如图所示。
(1)、要使程序运行时,文本框Text1的Width属性值为2018,可在Form_Load事件过程中添加语句(单选,填字母:A .Width=2018/B .Text1.Width=2018/C .Width.Textl=2018)。(2)、实现上述功能的VB程序如下,请在画线处填入合适的代码。Private Sub Command1_Click( )
Dims As String, c As String,d As String
Dim n As Integer, b1 As Integer, b2 As Integer, v As Integer, i As Integer
s=Text1.Text:n=Len(s):i=1
Do While i<=n
c=Mid(s,i,2)
If c="00"Then
d="东"
ElseIfc="01"Then
d=“南"
ElseIf c="10" Then
d="西(vi)"
Else
d="北"
End If
b1=Val(Mid(s, i+2, 1))
b2=Val(Mid(s ,i+3, 1))
v= ①
List1.AddItemd+""+Str(v)
②
Loop
End Sub
① ②
(3)、若文本框Text1中输入的内容为“1111”,单击“翻译”按钮,列表框List1中显示的内容是。 -
10、奇偶校验是一种校验数据传输正确性的方法。其中奇校验方法:统计二进制数据的数位中“1”的个数,若个数为奇数,则校验位值为0,否则校验位值为1。小李编写了一个计算奇校验位值的VB程序,功能如下:在文本框Tex1中输入十进制下1~255间的待校验数,单击“计算”按钮Commana1 后,在文本框Text2中显示该数对应的二进制值,并在标签Label3中显示该数的校验位值。程序运行界面如图所示。
(1)、在设计程序界面时,要清空文本框中的显示内容,应修改该文本框中的属性。(2)、实现上述功能的VB程序如下,请在画线处填入合适的代码。Private Sub Command1_Click( )
Dim a As Integer,s As String
Dim n As Integer,t As Integer,v As Integer
n=Val(Text1.Text)
t=0
s=""
Do While n>0
a=n Mod 2
n=n\2
t= ①
s=Str(a)+s
Loop
v=t Mod 2
Text2.Text=s
Label3.Caption="校验位值:"+ ②
End Sub
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②。
(3)、运行该程序,在文本框Text1中输入2,单击“计算”按钮,则显示的校验位值是。 -
11、将数组a中各元素均初始化为0,执行以下程序:
i=0
Do While i<n
i=i+1:j=1:a(j)=a(j)+1
Do While a(j)=5
a(j)=0
j=j+1
a(j)=a(j)+1
Loop
Loop
当n=98时,程序结束后数组a中各元素相加的和为( )
A、3 B、6 C、10 D、14 -
12、有如下VB程序段(数组a中各元素的初始值均为0):
n=Len(Text1.Text):c=1
For i=1 To n
s=Mid(Text1.Text,i,1)
If s>="0"And s<="1"Then
a(c)=a(c)*2+Val(s)
Else
If a(c)>0 Then c=c+1
End If
Next i
在文本框Text1中输入“A:1010 C:1100 E:1110”。执行该程序后,数组a(2)中的元素值为( )
A、2 B、12 C、22 D、2200 -
13、某校秋季运动会共有n名运动员参赛,小明编写了根据号码牌查询学生信息的程序,输入号码牌就能查询该号码牌所属的班级和选手姓名。数组a,b,c分别保存了本次运动会所有选手的号码牌、班级、姓名信息。第i个选手的号码牌保存在a(i)中,对应的班级和姓名保存在b(i)和c(i)中。程序界面如图所示,在文本框Text1中输入号码牌,单击“查询”按钮(Command1),如果找到对应的信息,就显示所属班级和选手姓名;如果没有找到,则显示“未找到”。
(1)、分析程序,可知数据库的文件名为 , 当前数据表的名称为。(2)、填入适当的代码,把程序补充完整。Dim n As Integer ‘用于存储运动员总人数
Dim a(1000)As Integer, b(1000)As String, c(1000)As String
Private Sub Form_Load( )
Dim conn As New ADODB. Connection
Dim rs As New ADODB. Recordset
conn. ConnectionString ="Provider =Microsoft. Jet. OLEDB. 4.0;DATA Source=" &App. Path & "\sport.accdb"
conn.Open
Set rs. ActiveConnection=conn
rs.Open"Select*from号码牌"
Do While Not rs. EOF ‘到记录集rs的最后一条记录后退出循环
n=n+1
a(n)=rs. Fields("号码牌") ‘读取当前记录“号码牌”字段值
b(n)= ① ‘读取当前记录“班级”字段值
c(n)=rs. Fields("姓名") ‘读取当前记录“姓名”字段值
② ‘移动到下一条记录
Loop
‘号码牌按升序排序后,显示在列表框List1中,其他代码略
End Sub
Private Sub Command1_Click( )
Dim x As Integer
x=Val(Text1.Text)
pos= ③
If pos>0 Then
Text2.Text=b(pos):Text3.Text=c(pos)
Else
Text2.Text="未找到"
End If
End Sub
Function Search(Key As Integer)As Integer
Dim i As Integer,j As Integer
i=1:j=n:Search=0
Do While i<=j
m=Fix((i+j)/2)
If Key=a(m)Then
Search=m:Exit Function
ElseIf ④ Then
j=m-1
Else
i=m+1
End If
Loop
End Function
以上程序段运行时,为了实现上述功能,画线处应填入的代码分别为:①;②;③;④。
-
14、如下代码将记录集rs中“售价”字段的数据通过循环依次存入数组a中。
i=0
Do While Not rs. EOF
i=i+1
a(i)=rs. Fields("售价")
rs. MoveNext ‘①
Loop
若记录集rs共有10条记录,执行循环前,当前记录为第1条。循环结束后,①处代码共执行的次数为( )
A、8次 B、9次 C、10次 D、11次 -
15、通过ADO的Recordset对象,实例rs打开了如下表所示的记录集:
序号
书名
作者
售价
数量
1
水浒传
施耐庵
20.4
10
2
西游记
吴承恩
18.2
15
3
红楼梦
曹雪芹
25.6
20
4
三国演义
罗贯中
23.8
18
当前记录是第2条,要用Fields集合返回第3个字段的信息,正确的表示是( )
A、rs. Fields(0) B、rs. Fields(1) C、rs. Fields("作者") D、rs. Fields("售价") -
16、通过ADO的Recordset对象从数据库中获取数据,有以下程序段:
Dim rs As new ADODB. Recordset
Set rs.ActiveConnection=conn
rs.open "select*from s_info"
记录集rs成功打开后,获取的数据为( )
A、数据库中的所有表的数据 B、数据库中表“s_info”里的所有记录 C、数据表中“s_info”里的某一条记录 D、数据库中任意一张表的所有记录 -
17、n个数据的冒泡排序需要经过n-1遍的加工,每一遍加工都自下而上比较相邻的两个数据,把较小者交换到上面,在第i遍加工过程中需要进行n-i对数据的比较。在某些情况下,第i遍加工过程中,在上面部分较小的数据已经有序的情况下,不需要再进行n-i对数据的比较,如对“17,18,19,24,23,20”这6个数据排序时,第1遍排序结束后的数据为“17,18,19,20,24,23”,那么第2遍排序时就不再需要对20及其前面3个数据进行比较。以下程序实现了冒泡排序的优化,其程序运行界面如图所示,但加框处代码有误,请改正。
Dim n As Integer
Dim a(1 to 10)As Integer
Private Sub Form_Load( )
‘n=10,排序前生成的数据存储在数组a中,并在列表框List1中显示
‘代码略
End Sub
Private Sub Command1_Click( )
Dim i,j As Integer
Dim start As Integer
‘①Do While i<n
start=n
For j=n To i Step-1
If a(j)<a(j-1)Then
t=a(j):a(j)=a(j-1):a(j-1)=t
start=j
End If
Next j
‘②Loop
For i=1 To n
List2.AddItem Str(a(i))
Next i
End sub
以上程序段运行时,为了实现上述功能,加框处代码应改正为:①;②。
-
18、小吴为了研究冒泡排序过程中数据的“移动”情况,编写了一个VB程序,功能如下:在列表框List1中显示排序前的数据(存储在数组a中),在文本框Text1中输入初始位置(即下标值),单击“排序”按钮Command1后,在标签Label1中显示指定初始位置的数据在排序过程中的位置变化情况,排序后的数据显示在列表框List2中。程序运行界面如图所示。
实现上述功能的VB程序如下。
Dim a(1 To 8)As Integer
Dim n As Integer
Private Sub Form_Load( )
a(1)=30:a(2)=47:a(3)=30:a(4)=72
a(5)=70:a(6)=23:a(7)=99:a(8)=24
n=8
For i=1 To 8
List1.AddItem a(i)
Next i
End Sub
Private Sub Command1_Click( )
Dim i,j,k,pos As Integer
Dims As String
s=Text1.Text
pos=Val(Text1.Text)
For i=1 To n-1
For j=n
If a(j)<a(j-1)Then
k=a(j-1):a(j-1)=a(j):a(j)=k
‘如果pos位置的数据参与交换,则更新pos值,记录pos变化位置
If pos=j Then
pos=j-1
s=s+"→"+Str(pos)
pos=j
s=s+"→"+Str(pos)
End If
End If
Next j
Next i
Label1.Caption=“位置变化情况:"+s
For i=1 To n
List2.AddItem Str(a(i))
Next i
End Sub
(1)、程序中语句“List2.AddItem Str(a(i))”用于将数组元素在List2中显示出来。类似的,可以使用“List2.Removeltem2”删除List2中的第2项(项号从0开始),则Removeltem是(单选,填字母:A .事件名/B .属性名/C .方法名/D .对象名)。(2)、请将程序代码中的画线处语句补充完整。(3)、程序代码中加框处有误,请改正。(4)、程序代码“pos=j-1”表明该元素是和它的一项发生了位置交换(单选,填字母:A .前/B .后/C .没有)。 -
19、有如下VB程序段:
n=Val(Text1.Text)
For i=1 To n
a(i)=i
Next i
For i=1 To n/2-1
For j=n To 2*(i+1)Step-2
If ① Then
t=a(j):a(j)=a(j-2):a(j-2)=t
End If
Next j
For j=1 To n-i*2-1 Step 2
If ② Then
t=a(j):a(j)=a(j+2):aj+2)=t
End If
Next j
Next i
当n为8时,上述程序段的运行结果a(1)至a(8)的值分别为1,8,3,6,5,4,7,2,则画线处应填入的代码分别为( )
A、a(j)<a(j-2),a(j)<a(j+2) B、a(j)<a(j-2),a(j)>a(j+2) C、a(j)>a(j-2),a(j)<a(j+2) D、a(j)>a(j-2),a(j)>a(j+2) -
20、有如下VB程序段:
For i=6 To 4 Step-1
j=1
Do While j<=i-1
If a(j)>a(j+1)Then
t=a(j):a(j)=a(j-1):a(j-1)=t
End If
j=j+1
Loop
Next i
若数组元素a(1)到a(6)的值依次为“26,13,23,18,7,14”,则执行该程序段后,数组元素a(1)到a(6)的值依次为( )
A、26,13,23,18,7,4 B、13,7,14,18,23,26 C、7,13,14,18,23,26 D、26,23,18,14,13,7