[题目2]编写一个辅助业务处理的程序。
[编程要求]
1. 程序参考界面如图所示,其中Label1对象用于显示不同种类面粉的单价(如图中“特一粉的单价是:1 .3元/市斤”)。编程时不得增加或减少界面对象或改变对象的种类,但界面元素的大小、位置可随意设置。
2. 实现功能:
(1) 在“面粉种类”中选择面粉的种类,界面上Label1对象的说明文字将随之改变(设高精粉的单价是1.6元/市斤,特意分的单价是1.3元/市斤,普通面粉的单价是0.9元/市斤,如图所示);
(2) 单击“计算”按钮,这根据输入的面粉数量以及所选的面粉的单价,求出应付粮款,并显示在相应文本框中;
(3) 单击“清除”按钮,清除两个文本框中的内容,单击“退出”按钮,结束程序运行。
答:
源程序:
Dim dj As Single
Private Sub Command1_Click()
If Trim(Text1.Text) = "" Then
MsgBox "请输入面粉数量", vbOKOnly
Text1.SetFocus
Exit Sub
Else
s = Val(Trim(Text1.Text))
Text2.Text = Format(Val(Trim(Text1.Text)) * dj, "##.##")
End If
End Sub
Private Sub Command2_Click()
Text1.Text = ""
Text2.Text = ""
Text1.SetFocus
End Sub
Private Sub Command3_Click()
End
End Sub
Private Sub Option1_Click()
If Option1.Value = True Then Label1.Caption = "高精粉的单价是:1.6元/市斤"
dj = 1.6
End Sub
Private Sub Option2_Click()
If Option2.Value = True Then Label1.Caption = "特一粉的单价是:1.3元/市斤"
dj = 1.3
End Sub
Private Sub Option3_Click()
If Option3.Value = True Then Label1.Caption = "普通面粉的单价是:0.9元/市斤"
dj = 0.9
End Sub
[题目3] 本程序的功能是把给定的数组中每个正整数按逆序重新排列,即将正整数的个位和最高位的数字进行交换,十位和次高位的数字进行交换等,得到一个新数,并求出每个正整数各位数字之和。
答:
源程序:
Option Explicit
Option Base 1
Private Sub rever(X() As Integer, S() As Integer)
Dim i As Integer, a As Integer, k As Integer
Dim j As Integer
For j = 1 To UBound(X)
Do
a = X(j) Mod 10
k = k * 10 + a
S(j) = S(j) + a
X(j) = X(j) \ 10
i = i + 1
Loop Until X(j) = 0
X(j) = k
k = 0
Next j
End Sub
Private Sub form_click()
Dim X(3) As Integer, Sum(3) As Integer
Dim i As Integer
X(1) = 1234: X(2) = 25371: X(3) = 326
Call rever(X, Sum)
For i = 1 To 3
Print "x="; X(i), "sum="; Sum(i)
Next i
End Sub
[题目4] 编程实现功能:
1. 单击“数组生成”按钮,程序可用随机函数生成一个三行四列的二位数组a,
要求每个数组元素均为两位随机正整数,将a 数组里元素按矩阵形式显示在图形框1中(数组元素按行显示)。
2. 单击“数组处理”按钮,则将上述生成的矩阵中的最大元素与a(1,1)元素交换,最后将结果矩阵显示到图形框2中(数组元素按行显示)。
[编程要求]
1. 程序必须采用循环结构处理。
2. 程序参考界面如图所示,其中Picture对象用于显示方阵在处理前后的内容。
编程时不得增加或减少界面对象或改变对象的种类,但界面元素的大小、位置可随意设置。
答:
源程序:
Dim a(3, 4) As Integer
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Randomize
Picture1.Cls
For i = 1 To 3
For j = 1 To 4
a(i, j) = Int(Rnd * 90) + 10
Picture1.Print " " & a(i, j) & " ";
Next j
Picture1.Print
Next i
End Sub
Private Sub Command2_Click()
Dim k As Integer, max As Integer, i As Integer, j As Integer, t As Integer, temp As Integer
Picture2.Cls
For i = 1 To 3
For j = 1 To 4
If max < a(i, j) Then
max = a(i, j)
k = i
t = j
End If
Next j
Next i
temp = a(1, 1)
a(1, 1) = a(k, t)
a(k, t) = temp
For i = 1 To 3
For j = 1 To 4
Picture2.Print " " & a(i, j) & " ";
Next j
Picture2.Print
Next i
End Sub
[题目5] 本程序功能是生成一维数组a(10),数组元素为两位随机正整数,并求该数组中第二大的数(第二大的数可以与最大的数相等)。
答:
源程序:
Private Sub form_click()
Dim a(1 To 10) As Integer
Dim i As Integer
Dim b1 As Integer, b2 As Integer
Randomize
For i = 1 To 10
a(i) = Int(90 * Rnd) + 10
Print a(i); "";
Next i
Print
b1 = a(1): b2 = a(2)
If b1 < b2 Then
b1 = b2
b2 = b1
End If
For i = 3 To 10
If a(i) > b1 Then
b2 = b1: b1 = a(i)
Else
If a(i) > b2 Then b2 = a(i)
End If
Next i
Print "第二大数为:"; b2, "第一大数为:"; b1
End Sub
[题目6] 编程求出1000之内的所有完数。“完数”是指一个数恰好等于它的因子之和,如6的因子为1,2,3,而6=1+2+3,因而6就是完数。
答:
源程序:
Private Sub Command1_Click()
Dim a() As Integer
Dim i As Integer, sum As Integer
For i = 2 To 999
Call fun(i, a)
sum = 0
For j = 1 To UBound(a)
sum = sum + a(j)
Next j
If i = sum Then
Picture1.Print i & "=";
For j = 1 To UBound(a) - 1
Picture1.Print a(j) & "+";
Next j
Picture1.Print a(UBound(a))
End If
Next i
End Sub
Private Sub fun(ByVal x As Integer, a() As Integer)
Dim i As Integer, idx As Integer
For i = 1 To x - 1
If x Mod i = 0 Then
idx = idx + 1
ReDim Preserve a(idx)
a(idx) = i
End If
Next i
End Sub
Private Sub Command2_Click()
End
End Sub
[题目7] 下面程序的功能是验证在n和n!之间至少有一个素数,其中n>2。可输入n=4验证。
答:
源程序:
Option Explicit
Private Sub form_click()
Dim n As Integer, k As Long
Dim m As Long, f As Long
n = Val(InputBox("请输入一个大于2的整数"))
m = 1
For k = 1 To n
m = m * k
Next k
For k = n + 1 To m - 1
f = flag(k)
If f = 1 Then Exit For
Next k
If f = 1 Then
Print n; "与"; m; "之间的一个素数是"; k
Else
Print n; "与"; m; "之间没找到一个素数"
End If
End Sub
Private Function flag(n As Long) As Integer
Dim I As Integer
flag = 1
For I = 2 To Sqr(n)
If n Mod I = 0 Then
flag = 0
Exit For
End If
Next I
End Function
[题目8] 编写一个简单运算器(可做加、减、乘、除运算)的程序。
[编程要求]
1. 程序参考界面如图,其中ComboBox对象(此处为下拉式列表框)用于列表显示运算符,编程时不得增加或减少界面对象或改变对象种类,但界面元素的大小、位置可随意设置。
2. 实现功能。
(1) 单击“计算”按钮,则根据输入操作数以及所选的运算符,求出运算结果,并显示在相应文本框中;程序应对操作数据进行校验,若为非数值型数据,要给出如图所示的信息框,并清除已输入数据,等待用户重输;若操作数合法,且要做除法运算,则应检查除数是否为0,若除数为0,则要给出如图所示的信息框,并清除已输入数据,等待用户重输(提示:可用IsNumeric(文本框名)函数测试数据)。
(2)单击“清除”按钮,清除三个文本框的内容。
(3)单击“退出”按钮,结束程序运行。
答:
源代码:
Private Sub Command1_Click()
Dim sf As String, I As Integer
Dim s1 As Single, s2 As Single, s3 As Single
If IsNumeric(Trim(Text1.Text)) Then
If IsNumeric(Trim(Text2.Text)) Then
s1 = Val(Text1.Text)
s2 = Val(Text2.Text)
If Combo1.Text = "+" Then s3 = s1 + s2
If Combo1.Text = "-" Then s3 = s1 - s2
If Combo1.Text = "*" Then s3 = s1 * s2
If Combo1.Text = "/" Then
If s2 = 0 Then
MsgBox "除数为0,重输", vbOKOnly
Text2.Text = ""
Text2.SetFocus
Exit Sub
End If
s3 = s1 / s2
End If
Text3.Text = s3
Else
MsgBox "操作数2为非数据值,重输", vbOKOnly
Text2.Text = ""
Text2.SetFocus
Exit Sub
End If
Else
MsgBox "操作数1为非数据值,重输", vbOKOnly
Text1.Text = ""
Text1.SetFocus
Exit Sub
End If
End Sub
Private Sub Command2_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
Text1.SetFocus
End Sub
Private Sub Command3_Click()
End
End Sub