历年上机全真模拟
试题
中考模拟试题doc幼小衔接 数学试题 下载云南高中历年会考数学试题下载N4真题下载党史题库下载
与解析
上机全真模拟试题试卷一
二级 Visual Basic 语言
(本试卷完成时间 70分钟)
[试卷须知]
1. 改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅供参考;
2. 考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一、改错题(14分)
[题目]下面程序的功能是:从由2,4,5,7四个数字组成的没有重复数字的24个四位数中,找出一个具有倍数关系的四位数对。本题程序界面如图1。
图1
Option Explicit
Private Sub Compare(A() As Integer,S As String,Idx As Integer)
Dim I As Integer, J As Integer
For I=1 To Idx
For J=1 To Idx
If A(I) Mod A(J)=0 Or J<> I Then
S =A(I)&”是”&A(J) &”的”&A(I)\A(J)&”倍”&vbCrLf
Exit Sub
End If
Next J
Next I
End Sub
Private Sub Command_Click()
Dim N(100 ) As Integer, I As Integer, S As String,Idx As Integer
Dim J As Integer, Ch As String*1,K As Integer
For I=2457 To 7542
S=Str(I)
For J=1 To 4
Ch=Mid(S,J,1)
If Ch <>”2” And Ch<>”4” And Ch<>”5”And Ch <> “7” Then Exit For
K=J
Do Until K>4
If Ch=Mid(S,K,1) Then Exit For
K=K+1
Loop
Next J
If J>4 Then
Idx=Idx+1
N(Idx)= I
List1.AddItem I
End If
Next I
Call Compare(N,S,Idx)
Text1=S
End Sub
[要求]
1.新建
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
,输入上述代码,改正程序中的错误;
2.改错时,不得增加或删除语句,但可适当调整语句位置;
3. 将窗体文件和工程文件分别命名为F1和P1,并保存到软盘A的根目录下
二、编程题 (26 分 )
【题目】编写程序找出10000以内的所有可以表示为两个素数平方数和的素数。
[编程要求]
1. 编程参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见,界面如图示:;
2. 标题“可表示为两个素数平方数和的素数列表”要求居中,按“生成素数列表”按钮,则运行程序;按“清除数据列表”按钮,则将列表框清空;按“退出”按钮,则停止程序运行;
3. 要有一个求素数的通用函数过程。
[要求] 将窗体文件和工程文件分别命名为 F2.frm 和 P2.vbp ,并保存到软盘 A 的根目录下。
上机全真模拟试卷(一)
答案
八年级地理上册填图题岩土工程勘察试题省略号的作用及举例应急救援安全知识车间5s试题及答案
与解析
一、改错题答案与解析:
Option Explicit
Private Sub Compare(A() As Integer, S As String, Idx As Integer)
Dim I As Integer, J As Integer
For I = 1 To Idx
For J = 1 To Idx
If A(I) Mod A(J) = 0 And J <> I Then
S = A(I) & "是" & A(J) & "的" & A(I) \ A(J) & "倍" & vbCrLf
Exit Sub
End If
Next J
Next I
End Sub
Private Sub Command1_Click()
Dim N(100) As Integer, I As Integer, S As String, Idx As Integer
Dim J As Integer, Ch As String * 1, K As Integer
For I = 2457 To 7542
S = CStr(I)
For J = 1 To 4
Ch = Mid(S, J, 1)
If Ch <> "2" And Ch <> "4" And Ch <> "5" And Ch <> "7" Then Exit For
K = J
Do Until K > 4
If Ch = Mid(S, K + 1, 1) Then Exit For
K = K + 1
Loop
Next J
If J > 4 Then
Idx = Idx + 1
N(Idx) = I
List1.AddItem I
End If
Next I
Call Compare(N, S, Idx)
Text1 = S
End Sub
【解 析】:
1、Sub Compare过程的功能是比较数组A中所存放的有2、4、5、7所构成的四位数中有没有倍数关系的数,因此应该把If A(I) Mod A(J)=0 Or J<> I Then语句中的Or改为: And;
2、由于数字I被转换成数字字符串存放在S变量中处理,数字前面的符号位不能要,因此应该把语句S = Str(I)改为S = CStr(I);
3、事件过程中的循环语句Do Until K > 4作用是比较I中有没有重复的数字字符存在,采用前一个数字字符与后面的没一个进行比较,因此应该把If Ch = Mid(S, K, 1) Then Exit For语句改为If Ch = Mid(S, K + 1, 1) Then Exit For。
二、编程题参考答案与解析:
Option Explicit
Private Sub Command1_Click()
Dim N As Integer, M As Integer, K As Integer
Dim I As Integer, J As Integer, S As String
For I = 1 To 10000
If Prime(I) Then
For J = 2 To Sqr(I) - 1
K = I - J ^ 2
If Sqr(K) = Int(Sqr(K)) Then
If Prime(Sqr(K)) And Prime(J) Then
S = Str(I) & "=" & Str(J) & "^ 2+" & Str(Sqr(K)) & "^ 2"
List1.AddItem S
Exit For
End If
End If
Next J
End If
Next I
End Sub
Private Function Prime(N As Integer) As Boolean
Dim K As Integer
For K = 2 To Sqr(N)
If N Mod K = 0 Then Exit Function
Next K
Prime = True
End Function
Private Sub Command2_Click() Private Sub Command3_Click()
List1.Clear End
End Sub End Sub
【解 析】:本题的编程思路为:首先编写一个判断素数的通用函数过程Prime(N),其返回值为True时,表示N为素数,返回值为False时,表示N不是素数。然后通过循环找10000以内的素数,并把其拆分为两个数的平方和,然后判断这两个数是否都为素数,如果为真,则把其按格式添加进列表框中。
上机全真模拟试卷(二)
(本试卷完成时间 70分钟)
[试卷须知]
1、改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅供参考;
2、考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3、程序代码书写应呈锯齿形。
一、改错题(14分)
[题目]下面程序的功能是:找出所有各位数字互不相同的四位数,该数本身为素数,且各位数字均为素数.本题界面见图1.
图1
Option Explicit
Dim a(4) As Integer
Private Sub Command1_Click()
Dim n As Integer
For n = 1000 To 9999
If prime(n) And pf(n) And np(a) Then
List1.AddItem n
End If
Next n
End Sub
Private Function prime(n As Integer) As Boolean
Dim I As Integer
For I = 2 To Sqr(n)
If n Mod I = 0 Then Exit For
Next I
prime = True
End Function
Private Function pf(n As Integer) As Boolean
Dim I As Integer
pf = True
Do
I = I + 1
a(I) = n Mod 10
If a(I) < 2 Or Not prime(a(I)) Then pf = False
n = n \ 10
Loop Until n < 0
End Function
Private Function np(a() As Integer) As Boolean
Dim I As Integer, j As Integer
np = True
For I = 1 To UBound(a) - 1
For j = I + 1 To UBound(a)
If a(I) = a(j) Then np = False
Next j
Next I
End Function
[要求]
1. 新建工程,输入上述代码,改正程序中的错误;
2. 改错时,不得增加或删除语句,但可适当调整语句位置;
3. 将窗体文件和工程文件分别命名为F1和P1,并保存到软盘A的根目录下。
二、编程题 (26 分 )
【题目】编写程序,求出给定正整数的所有质因子,并将该数表示成质因子 ( 质因子均带有指数幂 ) 的乘积。例如: 342=2^1*3^2*19^1
【编程要求】
1、程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2、在文本框1中输入N值,按“执行”按钮,则开始计算并在文本框2中按要求的格式显示结果:按“清除”按钮,则将2个文本框清空,将焦点置于文本框1上;按“退出”按钮,结束程序运行;
3、程序中应定义一个求一个正整数的质因子的通用过程。
【要求】将窗体文件和工程文件分别命名为 F2 和 P2 ,并保存到软盘 A 的根目录下。
上机全真模拟试卷(二)答案与解析
一、改错题答案与解析
Option Explicit
Dim a(4) As Integer
Private Sub Command1_Click()
Dim n As Integer
For n = 1000 To 9999
If prime(n) And pf(n) And np(a) Then
List1.AddItem n
End If
Next n
End Sub
Private Function prime(n As Integer) As Boolean
Dim I As Integer
For I = 2 To Sqr(n)
If n Mod I = 0 Then Exit Function
Next I
prime = True
End Function
Private Function pf(ByVal n As Integer) As Boolean
Dim I As Integer
pf = True
Do
I = I + 1
a(I) = n Mod 10
If a(I) < 2 Or Not prime(a(I)) Then pf = False
n = n \ 10
Loop Until n = 0
End Function
Private Function np(a() As Integer) As Boolean
Dim I As Integer, j As Integer
np = True
For I = 1 To UBound(a) - 1
For j = I + 1 To UBound(a)
If a(I) = a(j) Then np = False
Next j
Next I
End Function
【解 析】:
1、依题意知:Function prime功能是判断n是否为素数的函数过程,很显然当n是素数时,函数返回值为True,否则为False,因此应该把语句If n Mod I = 0 Then Exit For,中的Exit For改为:Exit Function;
2、Function pf功能是判断n中的每位数字是否为素数,如果是函数返回值为:True,否则函数返回值为False,由于在函数过程中有使形参n值变化的语句n = n \ 10存在,而主过程中的实参n值不要随形参n的变化而变化,因此参数传递方式应该为按值传递,因此应该在形参n的前面加上ByVal;
3、在函数pf中的Do循环中,循环的结束条件应该为n=0,而不是n<0,因为n\10的值不可能小于零。
二、编程题参考答案与解析:
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim x As Integer
Dim num( ) As Integer
x = Val(Text1.Text)
Call find(x, num)
Call procedure(num, x)
End Sub
Private Sub find(x As Integer, num() As Integer)
Dim i As Integer, k As Integer
For i = 2 To x - 1
If x Mod i = 0 Then
If flag(i) Then
k = k + 1
ReDim Preserve num(k)
num(k) = i
End If
End If
Next i
End Sub
Function flag(ByVal n As Integer) As Boolean
Dim i As Integer
flag = False
For i = 2 To n - 1
If n Mod i = 0 Then Exit For
Next i
If i = n Then flag = True
End Function
Sub procedure(num() As Integer, n As Integer)
Dim f As Single, x As Integer, k As Integer
Dim s As String, i As Integer
For i = LBound(num) To UBound(num)
x = n
k = 0
f = x Mod num(i)
Do While f = 0
k = k + 1
x = x / num(i)
f = x Mod num(i)
Loop
s = s & CStr(num(i)) & "^" & CStr(k) & "*"
Next i
Text2 = Left(s, Len(s) - 1)
End Sub
Private Sub Command2_Click() Private Sub Command3_Click()
Text1 = "" End
Text2 = ""
End Sub
Text1.SetFocus
End Sub
【解 析】:本题的编程思路为:首先找出给定正整数的所有质因子,并把所有质因子存放在一个动态的一维数组num中,然后在求每个质因子的幂次数k,通过循环把结果以字符串的方式连接起来在文本框中显示。其中find(x, num)过程的功能是求给定正整数x的质因子并把其存放在数组num中;procedure(num, x)过程的功能是把给定正整数x按质因子幂次和的形式表示出来;Function flag函数的功能是判断素数。
上机全真模拟试卷(三)
(本试卷完成时间 70分钟)
[试卷须知]
1、改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅供参考;
2、考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3、程序代码书写应呈锯齿形。
一、改错题(17分)
【题目】本程序的功能是:从给定的数据范围中找出所有各位数字之和为 8 的数据,若一次求得各位数字之和不是壹位数,则继续求此和数的各位数字之和。例如 57365=>26=>8就是符合要求的数。
Option Explicit
Private Sub Command1_Click()
Dim st As Long, se As Long, i As Long
Dim s As String
st = Text1
se = Text2
For i = st To se
If Sum(i) = 8 Then
s = s & i & vbCrLf
End If
Next I
text3 = s
End Sub
Private Function sum(n As Long) As Integer
Dim k As Integer
sum = 0
Do
Do
k = n Mod 10
sum = sum + k
n = n \ 10
Loop Until n < 0
If sum > 10 Then
n = sum
Else
Exit Function
End If
Loop
End Function
【要求】
1 .新建工程,输入上述代码,改正程序中的错误:
2 .改错时,不得增加或删除语句,但可适当调整语句位置;
3 .将窗体文件和工程文件分别命名为 F1 和 P1 ,并保存到软盘 A 的根目录下。
二、编程题 (26 分 )
【题目】编写程序,将按给定格式 ( 数据由逗号分隔, -1 表示数据结束 ) 输入到文本框的数据依次存入一个数组,再把数组中重复的数据删除,得到没有重复数的新数组。
【编程要求】
1、程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见:
2、在文本框 1 中输入测试数据,按 “ 处理 ” 按钮,则处理数据并在文本框 2 中输出没有重复数的数组数据:按 “ 清除 ” 按钮,则将 2 个文本框清空,将焦点置于文本框 1 上;按 “ 退出 ” 按钮,结束程序运行:
3、程序中应定义一个将输入的格式数字串分解存入数组的通用过程。
【要求】 将窗体文件和工程文件分别命名为 F2 和 P2 ,并保存到软盘 A 的根目录下。
上机全真模拟试卷(三)答案与分析
一、改错题答案与解析:
Option Explicit
Private Sub Command1_Click()
Dim st As Long, se As Long, i As Long
Dim s As String
st = Val(Text1.Text)
se = Val(Text2.Text)
For i = st To se
If sum(i) = 8 Then
s = s & i & vbCrLf
End If
Next i
Text3 = s
End Sub
Private Function sum(ByVal n As Long) As Integer
’形参n与对应的实参i的传递方式为按值传递
Dim k As Integer
Do
sum = 0 ’位置错误,因为当第一次所求各位数字之和大于10后,要继续求新数的各
’位数字之和,因此求和前应该把sum清0
Do
k = n Mod 10
sum = sum + k
n = n \ 10
Loop Until n = 0 ’条件错误,拆分数字后的n不可能小于0,最终应该等于0
If sum > 10 Then
n = sum
Else
Exit Function
End If
Loop
End Function
【解 析】:
1、函数调用时,参数传递方式应该是按值传递,因为在 Function过程中形参变化不要影响实参I的值变化,因此形参前面应该加关键字ByVal;
2、因为如果Sum的和大于10就要从新计算Sum,因此应该Sum清零应该放在第一层循环里面;
3、Function过程中的内层Do循环作用是取数字每位数的,因此循环结束的判断条件应该为:n=0;
二、编程题参考答案与解析
Option Explicit
Private Sub Command1_Click( )
Dim s As String, a() As Integer, k As Integer
Dim f As Boolean, i As Integer, st As String
s = Text1
Call sub1(s, a)
Call Erasea(a) '删除数组中的重复元素
For i = 1 To UBound(a)
st = st & a(i) & " "
Next i
Text2 = st
End Sub
Sub Erasea(a() As Integer)
Dim ub As Integer, i As Integer, j As Integer
Dim k As Integer, n As Integer
ub = UBound(a)
n = 1
Do While n < ub
i = n + 1
Do While i <= ub
If a(n) = a(i) Then
For j = i To ub - 1
a(j) = a(j + 1)
Next j
ub = ub - 1
ReDim Preserve a(ub)
Else
i = i + 1
End If
Loop
n = n + 1
Loop
End Sub
Sub sub1(s As String, a() As Integer)
Dim length As Integer, i As Integer, t As String
Dim f As Boolean, st As String
length = Len(s)
For i = 1 To length
t = Mid(s, i, 1)
If t <> "," Then
st = st & t: f = True
ElseIf f Then
k = k + 1
ReDim Preserve a(k)
a(k) = st
f = False
st = ""
End If
Next i
ReDim Preserve a(k - 1)
End Sub
Private Sub Command2_Click()
Text1 = ""
Text2 = " "
Text1.SetFocus
End Sub
Private Sub Command3_Click()
End
End Sub
【解 析】:本题的编程思路为:首先把文本框中输入的以逗号分隔的数据存放在一维数组中,然后对一维数组中的数据从第一个开始和其它的数据进行比较是否相等,如果相等,则把数组中的数据逐个依次向前移动一个位置,覆盖掉相等的数据,然后继续判断;如果不相等,则取下一个数据与其后面的数组元素进行比较,循环进行,直到结束,最后输出新的数组。程序中的sub1(s, a)过程的功能为:将输入的数字串分解存入数组A;Erasea(a) 功能为:删除数组中的重复元素。
上机全真模拟试卷(四)
(本试卷完成时间 70分钟)
[试卷须知]
1、改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅供参考;
2、考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一、改错题(14分)
【题目】本程序的功能是对字符串加密。密钥为一数字串,每个数字表示将首字符右移的位置,例如,若明文字符串为help me,密钥中第一个数字4表示将首字符h移到位置4,得到新字符串elph me,再取密钥的下一个数字符串进行上述操作,直到最后一个密钥数字处理完就得到密文。若移位超出原文长度,则自动回转(按原文长度取模)。
Option Explicit
Private Sub Command1_Click()
Dim I As String,s2 As String,i As Integer,key As Integer
s1=Text1
s2=Text2
For i=1 To Len(s2)
key=Val(Mid(s2,i,1))
Call encode(s1,key)
Next i
Text3=s1
End Sub
Private Sub encode(s As String, K As Integer)
Dim I As Integer,t As String*1,n As Integer
t=Mid(s,1,1)
n=k Mod Len(s)
if n=0 Then
k=n
End If
For i=2 To k
Mid(s,i-1,1)=Mid(s,i,1)
Next i
Mid(s,i,1)=t
End Sub
【要求】
1、新建工程,输入上述代码,改正程序中的错误;
2、改错时,不得增加或删除语句,但可适当调整语句位置;
3、将窗体文件和工程文件分别命名为F1和P1,并保存到软盘A的根目录下。
二、编程题 (26 分 )
【题目】随机生成范围在10至60之间的20个不同的整数,从中找出所有的由三个数构成的组合,使得每个组合中的三个数之和均为88的数。
[编程要求]
1. 编程参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见,界面如图示:;
2.,按“生成数据”按钮,则运行程序产生10至60之间的20个不同的整数,并产生符合要求的数据;按“清除数据”按钮,则将文本框和列表框清空;按“退出”按钮,则停止程序运行;
3. 要求程序中有一个产生不同整数的通用过程。
上机全真模拟试卷(四)答案与解析
一、改错题答案与解析:
Option Explicit
Private Sub Command1_Click()
Dim I As Integer, s2 As String, key As Integer, s1 As String
s1 = Text1
s2 = Text2
For I = 1 To Len(s2)
key = Val(Mid(s2, I, 1))
Call encode(s1, key)
Next I
Text3 = s1
End Sub
Private Sub encode(s As String, K As Integer)
Dim i As Integer, t As String * 1, n As Integer
t = Mid(s, 1, 1)
n = K Mod Len(s)
If n = 0 Then
n = K
End If
For i= 2 To n
Mid(s, i - 1, 1) = Mid(s, i, 1)
Next I
Mid(s, n , 1) = t
End Sub
【解 析】:
1、依据题意可知,encode过程的功能是对字符串s的第一个字符移位到字符串的第k位,从第二个字符开始到第k-1个字符依次向前移一位。由因为为了防止k值大于字符串的长度,因此对其与s的长度取模后存放在变量n中,因此encode过程中当模的值为0时,说明k的值与s字符串的长度相等,因此应该把赋值语句k=n改写为n=k;
2、由分析密钥中的数值经过转化后存放在n中,因此应该将For I = 2 To k改为:For I = 2 To n;
3、s字符串中从第二个字符开始到第n个字符依次向前移一位后,留下第n个位置填写原来s字符串的第一个字符t,因此应该将Mid(s, i , 1) = t语句改为:Mid(s, n , 1) = t或者Mid(s, i-1 , 1) = t也可以。
二、编程题参考答案与解析:
Option Explicit
Private Sub Command1_Click()
Dim I As Integer, J As Integer, B() As Integer, K As Integer
Call CreateData(B)
For I = 1 To 20
For J = 1 To 20
If J > I Then
For K = 1 To 20
If I <> K And K > J Then
If B(I) + B(J) + B(K) = 88 Then
List1.AddItem Str(B(I)) & Str(B(J)) & Str(B(K))
End If
End If
Next K
End If
Next J
Next I
End Sub
Private Sub CreateData (A() As Integer)
Dim I As Integer, J As Integer, K As Integer
I = 1
ReDim A(I)
A(I) = Int(51 * Rnd) + 10
Text1 = Text1 & Str(A(I))
Do
K = Int(51 * Rnd) + 10
For J = I To 1 Step -1
If K = A(J) Then Exit For
Next J
If J < 1 Then
I = I + 1
ReDim Preserve A(I)
A(I) = K
Text1 = Text1 & Str(K)
If I Mod 5 = 0 Then Text1 = Text1 & vbCrLf
End If
Loop While I < 20
End Sub
Private Sub Command2_Click() Private Sub Command3_Click()
Text1 = "" End
List1.Clear End Sub
End Sub
【解 析】:本题的编程思路为:程序中首先编写一个CreateData(B)通用过程来产生10-60之间20个不同的数存放在动态数组B中,并输出到文本框中显示;然后通过循环取这20个数中的任意三个的组合,测试它们的和是否为88,但是在取数时要防止重复取数,要加上条件限制,如果满足条件,则把所取的三个数据添加到列表框中。
上机全真模拟试卷(五)
(本试卷完成时间 70分钟)
[试卷须知]
1. 改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅供参考;
2. 考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一、改错题(17分)
【题目】本程序的功能是:从给定数据范围中找出从左到右,每一位数字都大于等于其后的数字之和的数据(如 84210 就是符合要求的数,因为 8>=4+2+1+0 , 4>=2+1+0, 2>=1+0,1>=0 )。
Option Explicit
Dim k As Integer
Private Sub Command1_Click()
Dim i As Long, num() As Integer, sum() As Integer
Dim flag As Boolean, j As Integer
flag = True
For i = 84210 To 90000
k = Len(CStr(i))
ReDim num(k)
Call Lnum(i, num)
Call Lsum(num, sum)
For j = 1 To k - 1
If num(j) < sum(j) Then flag = False
Next j
If flag Then List1.AddItem CStr(i)
Next i
End Sub
Private Sub Lnum(n As Long, num() As Integer)
Dim i As Integer, p As Integer
For i = k To 1 Step -1
p = n Mod 10
num(i) = p
n = n \ 10
Next i
End Sub
Private Sub Lsum(n() As Long, num() As Integer)
Dim i As Integer, j As Integer
For i = 1 To k - 1
For j = i + 1 To k
s(i) = s(i) + n(j)
Next j
Next i
End Sub
【要求】
1、新建工程 , 输入上述代码 , 改正程序中的错误 ;
2、改错时 , 不得增加或删除语句 , 但可适当调整语句位置 ;
3、将窗体文件和工程文件分别命名为 F1 和 P1, 并保存到软盘 A 的根目录下。
二、编程题( 26 )
【题目】生成 15 个互不相等的两位随机整数放入 a 数组, b 数组用于标记 a 数组中元素的变化趋势,其产生方式如下:
+1 当i=1时
b(i)= +1 当I>=2且a(i)> a(i-1)时
-1 当I>=2且a(i)< a(i-1)时
【编程要求】
1、程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2、按“生成数组”按钮,生成 15 个互不相同的两位随机整数显示在文本框 1 中,并根据题目要求生成 b 数组,按图示格式显示在文本框 2 中。按“清空”按钮,则将 2 个文本框清空;按“退出”按钮,则结束程序运行;
3、程序中应定义一个产生数组 b 的通用过程。
【要求】 将窗体文件和工程文件分别命名为 F2 和 P2 ,并保存到软盘 A 的根目录下。
上机全真模拟试卷(五)答案与解析
一、改错题答案:
Option Explicit
Dim k As Integer
Private Sub Command1_Click()
Dim i As Long, num() As Integer, sum() As Integer
Dim flag As Boolean, j As Integer
For i = 84210 To 90000
flag = True
k = Len(CStr(i))
ReDim num(k), sum(k)
Call lnum(i, num)
Call lsum(num, sum)
For j = 1 To k - 1
If num(j) < sum(j) Then flag = False
Next j
If flag Then List1.AddItem CStr(i)
Next i
End Sub
Private Sub lnum(ByVal n As Long, num() As Integer)
Dim i As Integer, p As Integer
For i = k To 1 Step -1
p = n Mod 10
num(i) = p
n = n \ 10
Next i
End Sub
Private Sub lsum(n() As Integer, s() As Integer)
Dim i As Integer, j As Integer
For i = 1 To k - 1
For j = i + 1 To k
s(i) = s(i) + n(j)
Next j
Next i
End Sub
【解 析】:
1、位置错误,每次测试完一个i之后标志flag应该置True,因此应该把flag = True语句放置在循环内;
2、sum动态数组在使用前应该先用ReDim声明,否则不能使用sum数组存放数据;
3、形参n应该设置为按值传递,因为n值的变化,不需要影响对应实参i的值,因此形参n应该改为ByVal n As Long。
二、编程题参考答案与解析:
Option Base 1
Private Sub Command1_Click()
Dim a(15) As Integer, i As Integer, j As Integer
Dim b(15) As String, f As Boolean, s As String
Do ’产生15个互不相同的数
f = True
i = i + 1
x = Int(90 * Rnd) + 10
For j = 1 To i
If a(j) = x Then
i = i - 1: f = False
Exit For
End If
Next j
If f Then a(i) = x
Loop Until i = 15
For i = 1 To 15
s = s & a(i) & " "
Next i
Text1 = s
Call sub1(a, b)
s = ""
For i = 1 To 15
s = s & b(i) & " "
Next i
Text2 = s
End Sub
Sub sub1(a( ) As Integer, b( ) As String)
b(1) = "+1"
For i = 2 To UBound(a)
If a(i) > a(i - 1) Then b(i) = "+1"
If a(i) < a(i - 1) Then b(i) = "-1"
Next i
End Sub
Private Sub Command2_Click() Private Sub Command3_Click()
Text1 = "" End
Text2 = "" End Sub
End Sub
【解 析】:本题的编程思路为:首先产生一个随机数存放数组a中,在产生第二个随机数判断与数组中的已有的数据是否重复,如果有相同的数字,则通过随机函数重新产生,如果没有,则把该数存入数组a中,循环直到产生15个不同的随机数为止,再把数组a中的数据输出;sub1(a, b)的功能为:按题中所给的要求产生数组b中的元素,最后把数组b中的元素依次输出即可。
上机全真模拟试卷(六)
(本试卷完成时间 70分钟)
【考试须知】
1. 改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅作参考;
2. 考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一、改错题(14分)
【题目】下面程序功能是:找出100以内满足N+1个连续自然数之和等于其后N个连续自然数之和的序列(例如:4+5+6=7+8就是满足
要求的序列)。
Option Explicit
Private Sub Command1_Click()
Dim I As Integer,S As String,Flg As Boolean
For I=2 To 10
Call Sub1(I,S,Flg)
Flg=False
If Flg Then
Text1=Text1&S&vbCrLf
End If
Next I
End Sub
Private Sub Sub1(K As Integer,S As String,F As Boolean)
Dim I As Integer,Sum1 As Integer,Sum2 As Integer
Dim N As Integer, Start As Integer
Do While Sum1<>Sum2 And N<100
Start=Start+1
N=Start
S=N:Sum1=N
For I=1 To K-1
N=N+1
Sum1=Sum1+N
S=S&"+"&N
Next I
S=S&"="&N
N=N+1
Sum2=N
For I=1 To K-2
N=N+1
Sum2=Sum2+N
S=S&"+"&N
Next I
N=N+1
If Sum1=Sum2 Then
F=True
End If
Loop
End Sub
【要求】
1. 新建工程,输入上述代码,改正程序中的错误;
2. 改错时,不得增加或删除语句,但可适当调整语句位置;
3. 将窗体文件和工程文件分别命名为F1和P1,并保存到软盘A的根目录下。
二、编程题(26分)
【题目】本程序的功能是:按设定的数据位数N(N=2、3、3、4、5、6),随机生成20个互不相等正整数,按5个一行的形式输出到文本框中,并从中找出所有降序数输出到列表框。所谓降序数是指所有高位数字都大于其低位数字的数。例如973就是一个降序数。
【编程要求】
1. 程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2. 在文本框1中输入N值,按“执行”按钮,则开始计算并在文本框2中显示生成的随机数,在列表框中输出其中的降序数;按“清除”按钮,则将2个文本框及列表框清空,焦点置于文本框1上;按“退出”按钮,结束程序运行;
3. 程序中应定义一个用于判断一个N位数是否是降数的通用过程。
【要求】将窗体文件和工程文件分别命名为F2和P2,并保存到软盘A的目录下。
上机全真模拟试卷(六)答案与解析
一、改错题答案与解析:
Option Explicit
Private Sub Command1_Click()
Dim I As Integer, S As String, Flg As Boolean
For I = 2 To 10
Flg = False
Call Sub1(I, S, Flg)
If Flg Then
Text1 = Text1 & S & vbCrLf
End If
Next I
End Sub
Private Sub Sub1(K As Integer, S As String, F As Boolean)
Dim I As Integer, Sum1 As Integer, Sum2 As Integer
Dim N As Integer, Start As Integer
Do
Start = Start + 1
N = Start
S = N: Sum1 = N
For I = 1 To K - 1
N = N + 1
Sum1 = Sum1 + N
S = S & "+" & N
Next I
N = N + 1
S = S & "=" & N
Sum2 = N
For I = 1 To K - 2
N = N + 1
Sum2 = Sum2 + N
S = S & "+" & N
Next I
N = N + 1
If Sum1 = Sum2 Then
F = True
End If
Loop While Sum1 <> Sum2 And N < 100
End Sub
【解 析】:
1、从题意知Sub过程Sub1的功能是判断s是否为满足题意的等式,如果是标志变量Flg为True,否则标志为False,因此Flg = False语句应该放在Call Sub1(I, S, Flg)语句之前;
2、Sub1过程中的Do循环语句应该为Do…Loop While <条件>型,因为开始时Sum1和Sum2的初始值都为0,条件不会满足,因此放在前面测试条件,循环体将不会被执行,因此应该把While Sum1 <> Sum2 And N < 100条件移到Loop后;
3、Sub1过程中的Do循环体中的第一个For循环作用是找等式等号的左边,并计算Sum1的值,第二个For循环功能是从紧接上边N的下一个数开始找等式等号的右边,并计算Sum2的值,因此第一个For循环外的N=N+1语句的位置应该放在S = S & "=" & N之前。
二、编程题参考答案与解析:
Option Explicit
Private Sub Command1_Click() ’执行按钮功能
Dim n As Integer, i As Long, num(20) As Long
Dim ss As Integer, se As Long, s As String
n = Val(Text1.Text)
ss = 10 ^ (n - 1)
se = 10 ^ n - 1
For i = 1 To 20
num(i) = Int(Rnd * (se - ss + 1)) + ss
If i Mod 5 <> 0 Then
s = s & Str(num(i))
Else
s = s & Str(num(i)) & vbCrLf
End If
If jx(num(i), n) Then
List1.AddItem Str(num(i))
End If
Next i
Text2 = s
End Sub
Private Function jx(ByVal n As Long, k As Integer) As Boolean ’判断k位数n是否为降序数
Dim i As Integer, p() As Integer, t As Integer
ReDim p(k)
For i = k To 1 Step -1
p(i) = n Mod 10
n = n \ 10
Next i
For i = 1 To k - 1
If p(i) > p(i + 1) Then
t = t + 1
End If
Next i
If t = k - 1 Then jx = True
End Function
Private Sub Command2_Click()’清除按钮功能 Private Sub Command3_Click()’退出按钮功能
Text1 = "" :List1.Clear : Text2 = "" :Text1.SetFocus End
End Sub End Sub
【解 析】:本题的编程思路为:首先产生给定范围内的20个正整数,其中变量ss中存放给定范围的下界,sa中存放给定范围的上界;jx(num(i), n)函数的功能是判断判断n位数num(i)是否为降序数,如果是,函数返回值为True,否则返回False。
上机全真模拟试卷(七)
(本试卷完成时间 70分钟)
【考试须知】
1. 改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅作参考;
2. 考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一、改错题(17分)
生成一个 5*3 的字符数组,字符数组的第 1 、 2 列分别存放由两位随机正整数转换得到的数字字符串。设以字符“ 0 ”表示合数,字符“ 1 ”表示质数,若数组某一行的第 1 、 2 列对应得数据均为合数,则该行的第 3 列存放“ 00 ”;若第 1 列为质数、第 2 列为合数,则第 3 列存放“ 10 ”,依此类推。
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim sa(5, 3) As String, i As Integer, j As Integer, s As String
For i = 1 To 2
For j = 1 To 5
sa(i, j) = Str(Int(90 * Rnd) + 10)
Next j
Next i
For i = 1 To 5
s = ""
For j = 1 To 2
s = s & np(i, j)
Next j
sa(i, 3) = s
Next i
For i = 1 To 5
Picture1.Print sa(i, 1) & sa(i, 2) & " " & sa(i, 3)
Next i
End Sub
Private Function np(ns As String) As String
Dim n As Integer, i As Integer
n = Val(ns)
np = "0"
For i = 2 To Sqr(n)
If n Mod i = 0 Then Exit For
Next i
np = "i"
End Function
【要求】
1、新建工程,输入上述代码,改正程序中的错误:
2、改错时,不得增加或删除语句,但可适当调整语句位置;
3、将窗体文件和工程文件分别命名为 F1 和 P1 ,并保存到软盘 A 的根目录下。
二、编程题(26分)
[题目]编写程序:生成两个等差数列A={3,10,17,24,31,……,108}与B={3,8,13,18,23,……,108},再找出两个数列中的相同项。
[编程要求]
1、程序参考界面如图2所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2、单击“运行”按钮,生成这两个数列,分别输出到多行文本框1与多行文本框2中,找出两个数列中的相同项,并输出到文本框3中;
3、 单击“清除”按钮,则将文本框清空,并将焦点置于“运行”按钮上;单击“结束”按钮,结束程序运行;
4、程序中必须包含一个生成等差数列的通用过程。
[要求]
将窗体文件和工程文件分别命名为F2和P2,并保存到软盘A的根目录下
图2
上机全真模拟试卷(七)答案与解析
一、改错题答案与解析:
Option Explicit
Option Base 1
Private Sub Command1_Click()
Dim sa(5, 3) As String, i As Integer, j As Integer
Dim s As String
For i = 1 To 2
For j = 1 To 5
sa(j, i) = Str(Int(90 * Rnd) + 10)
Next j
Next i
For i = 1 To 5
s = ""
For j = 1 To 2
s = s & np(sa(i, j))
Next j
sa(i, 3) = s
Next i
For i = 1 To 5
Picture1.Print sa(i, 1) & sa(i, 2) & " " & sa(i, 3)
Next i
End Sub
Private Function np(ns As String) As String
Dim n As Integer, i As Integer
n = Val(ns)
np = "0"
For i = 2 To Sqr(n)
If n Mod i = 0 Then Exit Function
Next i
np = "1"
End Function
【解 析】:
1、因为依题意生成的数组是5行3列,其中前两列中让随机数,因此For循环中的数组赋值语句应该是给sa( j , i )赋值,而不是给sa( i , j )赋值;
2、函数np的功能是测试数组中的每个数据是合数还是质数,如果是合数函数返回值为字符“0”,如果是质数,函数返回值为字符“1”,因此np函数的实参应该是sa( i , j );
3、根据np函数的功能,当测试的数字为合数时,函数返回值为“0”,因此当n Mod i = 0条件满足时,应该退出函数,不是退出For循环,否则函数返回值总是“1”。
二、编程题参考答案与解析:
Option Explicit
Private Sub Command1_Click()
Dim a() As Integer, b() As Integer, i As Integer, j As Integer
Call CreateData(a, 7, 3) ’ 生成a等差数列
For i = 1 To UBound(a)
Text1 = Text1 & " " & a(i)
If i Mod 11 = 0 Then Text1 = Text1 & vbCrLf
Next i
Call CreateData(b, 5, 3) ’ 生成 b等差数列
For i = 1 To UBound(b)
Text2 = Text2 & " " & b(i)
If i Mod 11 = 0 Then Text2 = Text2 & vbCrLf
Next i
For i = 1 To UBound(a) ’找出其中的相同数
For j = 1 To UBound(b)
If a(i) = b(j) Then Text3 = Text3 & Str(a(i))
Next j
Next i
End Sub
Private Sub CreateData(a() As Integer, d As Integer, c As Integer) ’ 生成等差数列的通用过程
Dim i As Integer, n As Integer
Do
i = i + 1
ReDim Preserve a(i)
a(i) = d * n + c
n = n + 1
Loop While a(i) < 108
End Sub
【解 析】:本题的编程思路为:使用题中所给的序列可以推出,等差数列a的第一项为3,公差为7,等差数列b的第一项为3,公差为5,因此使用通用过程CreateData(a, 7, 3)产生等差数列a,存放在动态数组a中,使用通用过程CreateData(b, 5, 3)产生等差数列b,存放在动态数组b中,然后从数组a的第一个数据开始,与数据b中的每个数据进行比较,如果有相等的数据存在,则存放在文本框3中显示出来,直至所有数据测试完成。
上机全真模拟试卷(八)
(本试卷完成时间 70分钟)
【考试须知】
1. 改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅作参考;
2. 考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一、改错题(14分)
【题目】下面程序功能是:求出100~999之间所有因子(包括1与该数本身)个数为8的数。
Option Explicit
Private Sub Command1_Click()
Dim i As Integer,cn() As Integer,s As String,j As Integer
For i=100 To 999
Call cd(i,cn)
If UBound(cn)=8 Then
s=CStr(i)&"=>"
For j=1 To 8
s=s&Str(cn(i))
Next j
s=s&Chr(13)&Chr(10)
End If
Next i
Text1=s
End Sub
Private Sub cn(n As Integer,cn() As Integer)
Dim i As Integer,k As Integer
For i=1 To n
k=k+1
If n Mod i=0 Then
ReDim Preserve cn(k)
cn(k)=i
End If
Next i
End Sub
【要求】
1. 新建工程,输入上述代码,改正程序中的错误;
2. 改错时,不得增加或删除语句,但可适当调整语句位置;
3. 将窗体文件和工程文件分别命名为F1和P1,并保存到软盘A的根目录下。
二、编程题(26分)
【题目】找出100之内正整数中所有连续4个或4个以上整数组成的序列,要求序列中每个整数均必须具有两个不同素因子。例如,33(素因子3,11),34(素因子2,17),35(素因子5,7),36(素因子2,3),故33,34,35,36就符合要求。
【编程要求】
1、按“开始”按钮,则开始运行程序,将结果按图示格式显示在文本框中;按“清除”按钮,则将文本框清空;按“结束”按钮,结束程序运行;
2、程序中至少要有一个通用过程,判断一个数是否有两个不同的素因子。
【要求】1. 程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2. 将窗体文件和工程文件分别命名为F2和P2,并保存到软盘A的目录下。
上机全真模拟试卷(八)答案与解析
一、改错题答案与解析:
Option Explicit
Private Sub Command1_Click()
Dim i As Integer, cn() As Integer, s As String, j As Integer
For i = 10 To 99
Call cd(i, cn)
If UBound(cn) = 6 Then
s = s & CStr(i) & "=>"
For j = 1 To 6
s = s & Str(cn(j))
Next j
s = s & Chr(13) & Chr(10)
End If
Next i
Text1 = s
End Sub
Private Sub cd (n As Integer, cn() As Integer)
Dim i As Integer, k As Integer
For i = 1 To n
If n Mod i = 0 Then
k = k + 1
ReDim Preserve cn(k)
cn(k) = i
End If
Next i
End Sub
【解 析】:
1、Sub cd过程的功能是把n分解,找出n的所有因子,存放在动态数组cn中,因此可以分析出语句k=k+1位置错误,应该是:当n有一个因子时,在做k=k+1,在用ReDim语句扩充动态数组cn的边界,把因子写入数组中, 因此k=k+1语句应该放在If n Mod i = 0 Then语句中;
2、因为最后的结果是存放在变量s中,并在文本框中显示,因此s中的应该存放所有满足条件的数据,因此语句s = CStr(i) & "=>"应该改为:s = s & CStr(i) & "=>";
3、事件过程中的For j = 1 To 6循环功能应该是把满足条件的数的因子连接起来,因此应该把语句s = s & Str(cn(i))改为:s = s & Str(cn(j))。
二、编程题参考答案与解析:
Option Explicit
Private Sub Command1_Click()
Dim i As Integer, k As Integer, p(25) As Integer, s As String
For i = 2 To 100
If prime(i) Then
k = k + 1
p(k) = i
End If
Next i
For i = 4 To 100
s = ""
k = 0
Call sub1(i, p, s, k)
If k >= 4 Then
Text1 = Text1 & "(" & s & ")" & vbCrLf
End If
Next i
End Sub
Private Function prime(n As Integer) As Boolean
Dim i As Integer
For i = 2 To Sqr(n)
If n Mod i = 0 Then Exit Function
Next i
prime = True
End Function
Private Sub sub1(i As Integer, p() As Integer, s As String, js As Integer)
Dim a As Integer, j As Integer, n As Integer
i = i - 1
Do
i = i + 1
j = 1
n = 0
Do While p(j) <= i / 2 And n < 2
If i Mod p(j) = 0 Then
n = n + 1
End If
j = j + 1
Loop
If n >= 2 Then
js = js + 1
s = s & Str(i)
End If
Loop While n >= 2
End Sub
Private Sub Command2_Click()
Private Sub Command3_Click()
Text1 = "" End
End Sub End Sub
【解 析】:本题的编程思路为:首先把100以内的所有素数求出来存放在数组p中,然后从变量 i 从4到100循环,求有没有符合要求的整数序列,该功能由sub1(i, p, s, k)过程实现,变量k用来存放每个整数均必须具有两个不同素因子的连续整数序列的个数,字符串变量s中存放连续整数序列的结果,如果k>=4则把字符串s的值与文本框1的Text值连接起来,否则,继续下一次循环。函数prime(i)的功能是判断i是否为素数。
上机全真模拟试卷(九)
(本试卷完成时间 70分钟)
[考试须知]
1改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅作参考;
2考试结束后,文件必须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3程序代码书面程序应呈锯齿形。
一、改错题(17分)
【题目】本程序功能是:把由字符的 ASCII 代码值对应的八进制数 ( 两个八进制数之间用非数字字符分隔 ) 组成的密文解密。密文以任意非数字字符结束。
Option Explicit
Private Sub Command1_Click()
Dim s As String, i As Integer, p() As String
Dim k As Integer, t As String * 1, f As Boolean
Dim St As String
s = Text1
St = ""
For i = 1 To Len(s)
t = Mid(s, i, 1)
If t <= "7" And t >= "0" Then
St = St & t: f = True
ElseIf f Then
k = k + 1
ReDim Preserve p(k)
p(k) = St
f = False
End If
Next i
For i = 1 To UBound(p)
Text2 = Text2 & Chr(TOD(p(i)))
Next i
End Sub
Private Function TOD(St As String) As String
Dim n As Integer, k As Integer, j As Integer
n = Val(St)
Do
k = n Mod 10
TOD = TOD + k * 8 ^ j
n = n \ 10
j = j + 1
Loop Until n < 0
End Function
【要求】
1、新建工程,输入上述代码,改正程序中的错误:
2、改错时,不得增加或删除语句,但可适当调整语句位置;
3、将窗体文件和工程文件分别命名为 F1 和 P1 ,并保存到软盘 A 的根目录下。
二.编程题(26分)
[题目]编写程序,找出由2,3,4,5四个不同数字组成的4位整数中的素数。
[编程要求]
1、程序参考界面如图2所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2、单击“开始”按钮,生成(或筛选出)由 2,3,4,5四个数字组成的4位整数,并显示在列表框List1中,在列表框List2中显示其中的素数;
3、单击“清理”按钮,则将两个列表框清空;单击“退出”按钮,结束程序运行;
4、程序中必须包含一个判断某数是否为素数的通用过程。
[要求] 将窗体文件和工程文件分别命名为F2和P2,并保存到软盘A的根目录下。
图2
上机全真模拟试卷(九)答案与解析
一、改错题
Option Explicit
Private Sub Command1_Click()
Dim s As String, i As Integer, p() As String
Dim k As Integer, t As String * 1, f As Boolean
Dim st As String
s = Text1
For i = 1 To Len(s)
t = Mid(s, i, 1)
If t <= "7" And t >= "0" Then
st = st & t
f = True
ElseIf f Then
k = k + 1
ReDim Preserve p(k)
p(k) = st
f = False
st = ""
End If
Next i
For i = 1 To UBound(p)
Text2 = Text2 & Chr(tod(p(i)))
Next i
End Sub
Function tod(st As String) As Integer
Dim n As Integer, k As Integer, j As Integer
n = Val(st)
Do
k = n Mod 10
tod = tod + k * 8 ^ j
n = n \ 10
j = j + 1
Loop Until n= 0
End Function
【解 析】:
1、从程序中分析可知:St变量中应该存放从密文中所取的连续0~7的数字串,以题中密文为例:第一次St的值应该为“110”,并存放在字符串数组p(1)中,第二次应该只取“145”,并存放在p(2)中,不难发现应该把前一次St中的内容清空才正确,因此St=””的位置错误,应该放在把St的值存如p数组之后,并在循环体之中;
2、Function tod函数功能是把数字字符串,从八进制转换成十进制数,因此函数的返回值应该是整型,不能是字符串类型;
3、对数字字符串进行转换时,需要取出其中的每一位数字字符,因此最后循环结束的条件应该是n=0。
二、编程题参考答案与解析:
Option Explicit
Private Sub Command1_Click()
Dim I As Integer, a(4) As Integer, n As Integer, temp As Integer
For I = 2345 To 5432
temp = I
For n = 1 To 4
a(n) = temp Mod 10
temp = temp \ 10
Next n
If onetofour(a) And unequal(a) Then
List1.AddItem I
If prime(I) Then
List2.AddItem I
End If
End If
Next I
End Sub
Private Function prime(n As Integer) As Boolean ’判断素数函数
Dim I As Integer
For I = 2 To Sqr(n)
If n Mod I = 0 Then Exit Function
Next I
prime = True
End Function
Private Function onetofour(a() As Integer) As Boolean ’判断是否在1 to 4之间函数
Dim I As Integer
onetofour = True
For I = 1 To 4
If a(I) > 5 Or a(I) < 2 Then
onetofour = False
Exit For
End If
Next I
End Function
Private Function unequal(a() As Integer) As Boolean ’判断是否有重复数字存在
Dim I As Integer, j As Integer
unequal = True
For I = 1 To UBound(a) - 1
For j = I + 1 To UBound(a)
If a(I) = a(j) Then
unequal = False
Exit For
End If
Next j
Next I
End Function
Private Sub Command2_Click()
List1.Clear
List2.Clear
End Sub
Private Sub Command3_Click( )
End
End Sub
【解 析】:本题的编程思路为:把2345到 5432的每个数的每位数字拆分出来,存放在数组a中,用函数onetofour(a),来判断数组a中的每个元素是否在2到5,之间,函数unequal(a)用来判断数组a中的元素是否有相同的元素存在,当onetofour(a)为真并且unequal(a)为真的情况下,说明该数为2到5之间的数字组成的数,把其加到列表框1中,再用函数prime(I)判断I是否为素数,如果为真,则把该I加进列表框2中,循环进行。
上机全真模拟试卷(十)
(本试卷完成时间 70分钟)
[考试须知]
1. 改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅作参考;
2. 考试结束后,文件须存放在指定位置,否则适当扣分;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应成锯齿形。
一、改错题(17分)
【题目】输入一个 N 位整数,求出与这个整数所包含的数字完全相同的最大 N 位整数与最小 N 位整数。
Option Explicit
Private Sub Command1_Click()
Dim n As Long, num() As String * 1, i As Integer
Dim k As Integer, smax As String, smin As String
n = Text1
k = Len(CStr(n))
Call nsort(n, num)
For i = 1 To k
smax = smax & num(i)
If num(i) = "0" Then
smin = Left(smin, 1) & num(i) & Right(smin, Len(smin))
Else
smin = num(i) & smin
End If
Next i
Text2 = smax: Text3 = smin
End Sub
Private Sub nsort(n As Long, np() As String * 1)
Dim i As Integer, j As Integer, t As String * 1, k As Integer
Do
ReDim Preserve np(k)
np(k) = Str(n Mod 10)
n = n \ 10
If n = 0 Then Exit Do
k = k + 1
Loop
For i = 1 To UBound(np) - 1
For j = i + 1 To UBound(np)
If np(j) > np(i) Then
t = np(j): np(j) = np(i): np(i) = t
End If
Next j
Next i
End Sub
【要求】
1、新建工程,输入上述代码,改正程序中的错误:
2、改错时,不得增加或删除语句,但可适当调整语句位置;
3、将窗体文件和工程文件分别命名为 F1 和 P1 ,并保存到软盘 A 的根目录下。
二、编程题(26)
[题目]编写程序找出最小公倍数是5814的三个连续的自然数。
[编程要求]
1. 程序参考界面如图2所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2. 单击”运行”按钮,找出符合条件的三个连续的自然数,按图示格式输出到文本框中;
3. 单击”清楚”按钮,则将文本框清空,焦点置于”运行”按钮;单击”推出”按钮,结束程序运行;
4. 程序中必须包含一个求最小公倍数的通用过程。
[要求]将窗体文件和工程文件分别命名为F2和P2,并保存到软盘A的根目录下。
图2
上机全真模拟试卷(十)答案与解析
一、改错题答案与解析:
Option Explicit
Private Sub Command1_Click()
Dim n As Long, num() As String * 1, i As Integer
Dim k As Integer, smax As String, smin As String
n = Text1
k = Len(CStr(n))
Call nsort(n, num)
For i = 1 To k
smax = smax & num(i)
If num(i) = "0" Then
smin = Left(smin, 1) & num(i) & Right(smin, Len(smin) - 1)
Else
smin = num(i) & smin
End If
Next i
Text2 = smax: Text3 = smin
End Sub
Sub nsort(n As Long, np() As String * 1)
Dim i As Integer, j As Integer, t As String * 1, k As Integer
Do
k = k + 1
ReDim Preserve np(k)
np(k) = CStr(n Mod 10)
n = n \ 10
If n = 0 Then Exit Do
Loop
For i = 1 To UBound(np) - 1
For j = i + 1 To UBound(np)
If np(j) > np(i) Then
t = np(j): np(j) = np(i): np(i) = t
End If
Next j
Next i
End Sub
【解 析】:
1、在求最小数的时候,因为num数组中的数是从大到小顺序,为了防止最小数的第一位为0,因此当测试到num( i )为0时,就需要把以前smin中的最小数字和0的位置调换,smin中的最小数字为Left(smin, 1),在连接上num( i ),最后应该连接上smin从右侧起长度减1的数字串,即:smin = Left(smin, 1) & num(i) & Right(smin, Len(smin) - 1);
2、形参数组np中存放的是把原来数字拆分后一位数字字符,不需要保留符号位,因此应该使用函数CStr(n Mod 10),而不是函数Str(n Mod 10);
3、形参数组np所对应的实参数组为num,从事件过程中知,num数组从num( 1 )开始记录数据,因此形参数组也应该从np( 1 )开始记录数据,因此Sub过程中的k=k+1语句位置应该前置。
二、编程题参考答案与解析:
Option Explicit
Private Sub Command1_Click()
Dim n As Integer, x As Integer, y As Integer
n = 10
Do
x = minnumber(n, n + 2)
y = 5814 / x
If y = n + 1 Then
Text1.Text = Str(n) + "," + Str(n + 1) + "," + Str(n + 2) + "最小公倍数位5814 "
Exit Do
End If
n = n + 1
Loop
End Sub
Private Sub Command2_Click( ) Private Sub Command3_Click()
Text1 = "" End
End Sub
End Sub
Private Function minnumber(ByVal m As Integer, ByVal n As Integer) As Integer
’求最小公倍数函数,最小公倍数=m*n/最大公约数
Dim temp As Integer, k As Integer, r As Integer
k = m * n
If m < n Then
temp = m
m = n
n = temp
End If
Do
r = m Mod n
If r = 0 Then Exit Do
m = n
n = r
Loop
minnumber = k / n
End Function
【解 析】:本题的编程思路为:让变量n从10开始,由于n和n+1不可能有约数存在,因此可以求n和n+2的最小公倍数,最小公倍数的计算方法为:最小公倍数=m*n/最大公约数;然后求出5814 / 最小公倍数得到一个数据,如果该数与n+1的值相等,则说明n,n+1和n+2这连续的三个数的最小公倍数为5814。如果不相等,则取下一个n继续循环进行。
上机全真模拟试卷(十一)
(本试卷完成时间 70分钟)
[考试须知]
1.改错题的界面不作要求,主要用来调试程序,若题目中有参考界面,则仅作参考;
2. 考试结束后,文件必须存放在指定位置,否则适当扣粉;考试盘中若无指定文件,则不予评分;
3. 程序代码书写应呈锯齿形。
一.改错题(14分)
[题目]下面程序的功能是将给定的十六进制整数转换成二进制整数(删除高位0)。本题程序界面见图1。
图1
Option Explicit
Private Sub Command1_Click()
Dim H As String,Bin As String,I As Integer,L As Integer
Dim K As Integer,S As String*1
H=UCase(Trim(Text1))
L=Len(H)
For I=1 To L
S=Mid(H,I,1)
If S<=”9” And S>=”0” Then
K=Val(S)
Else
K=Asc(S)-55
End If
If K<0 And K>15 Then
Bin=“十六进制数据错”
End If
Call Trans(Bin,K)
Next I
Bin=Right(Bin,Len(Bin)-InStr(Bin,”1”))
Text2=Bin
End Sub
Private Sub Trans(Bin As String,K As Integer)
Dim S As String,I As Integer,N As Integer
Do While K>0
S=K Mod 2 & S
K=k\2
Loop
S=”0000”&S
Bin=Right(S,4)
End Sub
[要求] 改错时,不得增加或删除语句,但可适当调整语句位置;
将窗体文件和工程文件分别命名为F1和P1,并保存到软盘A的根目录下。
二、编程题(26分)
【题目】本程序的功能是:首先按给定格式(数据以逗号分隔,-1表示数据结束)将输入到文本框1中的数据依次存入一个数组,然后为该组数据建立一个按从大到小次序的索引表并显示在文本框2中。如下图,文本框2中的第一个数据4表示文本框1中4个数最大;文本框2中的最后一个数据8表示文本框1中第8个数最小。
【编程要求】
1. 程序参考界面如图所示,编程时不得增加或减少界面对象或改变对象的种类,窗体及界面元素大小适中,且均可见;
2. 在文本框1中输入测试数据,按“处理”按钮,则按题目要求得到结果并显示在文本框2中;按“清除”按钮,则将2个文本框清空,将焦点置于文本框1上;按“退出”按钮,结束程序运行;
3. 程序中应定义一个根据数组元素的大小从大到小取其排列号的通用过程。
【要求】将窗体文件和工程文件分别命名为F2和P2,并保存到软盘A的目录下。
上机全真模拟试卷(十一)答案与解析
一、改错题答案与解析:
Private Sub Command1_Click()
Dim H As String, Bin As String, I As Integer, l As Integer
Dim K As Integer, S As String * 1
H = UCase(Trim(Text1))
l = Len(H)
For I = 1 To l
S = Mid(H, I, 1)
If S <= "9" And S >= "0" Then
K = Val(S)
Else
K = Asc(S) - 55
End If
If K < 0 Or K > 15 Then
Bin = "十六进制数据错"
End If
Call Trans(Bin, K)
Next I
Bin = Right(Bin, Len(Bin) - InStr(Bin, "1") + 1)
Text2 = Bin
End Sub
Private Sub Trans(Bin As String, K As Integer)
Dim S As String, I As Integer, N As Integer
Do While K > 0
S = K Mod 2 & S
K = K \ 2
Loop
S = "0000" & S
Bin = Bin & Right(S, 4)
End Sub
【解 析】:
1、当所给的字符串中不是数字,如果所给字符的ASC值减去55的值大于15或者小于0时,表示输入的十六进制数有错,因此应该把If K < 0 And K > 15 Then改为:If K < 0 Or K > 15 Then;
2、去掉最高位0的表达式应该为Bin = Right(Bin, Len(Bin) - InStr(Bin, "1") + 1);
3、Sub过程Trans的功能是把十六进制的每一位转换位对应的二进制数,所有的二进制数字串应该顺次连接存放在变量Bin中,因此应该把语句Bin = Right(S, 4)改为Bin = Bin & Right(S, 4)。
二、编程题参考答案与解析:
Private Sub Command1_Click()
Dim p() As Integer, k As Integer, d() As Integer
Dim i As Integer, st As String
st = Text1
Call lnum(st, p)
Call ind(p, d)
st = ""
For i = 1 To UBound(d)
st = st & Str(d(i))
Next i
Text2 = st
End Sub
Private Sub lnum(st As String, p() As Integer)
Dim k As Integer, t As Integer, n As Integer
Do
n = InStr(st, ",")
If t <> -1 And n <> 0 Then
t = Val(Left(st, n - 1))
k = k + 1
ReDim Preserve p(k)
p(k) = t
st = Right(st, Len(st) - n)
Else
Exit Do
End If
Loop
End Sub
Private Sub ind(p() As Integer, d() As Integer)
Dim t As Integer, i As Integer, j As Integer, maxv As Integer
ReDim d(UBound(p))
For i = 1 To UBound(p)
d(i) = i
Next i
For i = 1 To UBound(p) - 1
For j = i + 1 To UBound(p)
If p(i) < p(j) Then
t = p(i): p(i) = p(j): p(j) = t
t = d(i): d(i) = d(j): d(j) = t
End If
Next j
Next i
End Sub
Private Sub Command2_Click()
Text1 = ""
Text2 = ""
Text1.SetFocus
End Sub
Private Sub Command3_Click()
End
End Sub
【解 析】:本题的编程思路为:首先把输入的以逗号分隔的数据存放在数组p中,这个功能由程序中的lnum(st, p)过程实现,然后建立一个数组d首先存放1,2,3……到数组p上界的正整数序列,然后对数组p中的数据进行排序,在排序交换的同时,把数组d中对应位置的数据也随之交换,这样当p数组中的数据排好序之后,数组d中的数据就是未排序之前数组p中元素对应的索引号,因此把数组d中的元素输出即可。
PAGE
4