VB程序设计练习题(一)
文章目录
目录
前言
备考技能考的一些陌生的VB练习题
难度比较大
有什么问题可以在评论区发表
内容
1、十进制转二进制数
答案:
Private Sub Command1_Click()
Dim i As Integer
a = Val(Text1.Text)
If a >= 0 And a <= 255 Then
For i = 1 To 8
If a Mod 2 = 1 Then
a = a \ 2
b = b & "1"
Else
a = a / 2
b = b & "0"
End If
Next
Else
MsgBox "请输入正确的十进制数:"
End If
Text2.Text = StrReverse(b)
End Sub
2、购买贺卡问题
程序实现功能:小明过年要给他的40位同学各寄一张贺卡,贺卡的价格有3元、2元和1元三种,他一共有100元,怎样购买正好把钱用完。把所有可能的组合显示出来。
答案:
Private Sub Form_Click()
dim a,b,c,d,e,f
a = 3
b = 2
c = 1
For d = 0 To 34
For e = 0 To 50
For f = 0 To 100
If a * d + b * e + c * f = 100 And d + e + f = 40 Then
Print d; Space(5); e; Space(5); f
End If
Next
Next
End Sub
三、用滚动条改变标签颜色
答案:
Private Sub HSB_Change()
Text3.Text = HSB.Value
Label4.BackColor = RGB(Val(Text1.Text), Val(Text2.Text), Val(Text3.Text))
End Sub
Private Sub HSB_Scroll()
Text3.Text = HSB.Value
Label4.BackColor = RGB(Val(Text1.Text), Val(Text2.Text), Val(Text3.Text))
End Sub
Private Sub HSG_Change()
Text2.Text = HSG.Value
Label4.BackColor = RGB(Val(Text1.Text), Val(Text2.Text), Val(Text3.Text))
End Sub
Private Sub HSG_Scroll()
Text2.Text = HSG.Value
Label4.BackColor = RGB(Val(Text1.Text), Val(Text2.Text), Val(Text3.Text))
End Sub
Private Sub HSR_Change()
Text1.Text = HSR.Value
Label4.BackColor = RGB(Val(Text1.Text), Val(Text2.Text), Val(Text3.Text))
End Sub
Private Sub HSR_Scroll()
Text1.Text = HSR.Value
Label4.BackColor = RGB(Val(Text1.Text), Val(Text2.Text), Val(Text3.Text))
End Sub
4.猴子吃桃,递推举法
(要以上一个本身做铺垫才能求出下一个的值的,如果把i设为循环值,在循环中的i只是它的下标签,在循环中不需要把i当系数,也就是说循环中不出现i)
答案:
Private Sub Command1_Click()
x = 1
Print "第8天的桃子数量是1个"
For i = 7 To 1 Step -1
x = (x + 1) * 2 #循环中不需要出现i
Print "第" & i & "天的桃子数量是" & x & "个"
Next
End Sub
5、比赛最高分与最低分
某次歌曲大奖赛,有7个评委对某个参赛者的打分数,按照去掉一个最高分和最低分的计算办法,求出该参赛者的平均得分以及最高分和最低分。
答案:
Private Sub Command1_Click()
Dim a(1 To 7), i, s, b As Integer
s = 0
For i = 1 To 7 ‘先定义i的for循环,用对话框的方式输入每个评委的得分。
a(i) = Val(InputBox("第" & i & "个评委得分"))
s = s + a(i) ‘把所有评委的得分加起来
Next
Min = a(1) ‘先定义Min等于a(1)的值
For i = 1 To 7
If a(i) > Max Then ‘让每个数都于Max比较,若大于则替换值。(Max初始最为0)
Max = a(i)
End If
Next
For i = 1 To 7 ‘让每个数都于Min比较,若小于则替换值。(Min=a(1))
If a(i) < Min Then
Min = a(i)
End If
Next
s = s - (Max + Min) ‘最后减掉最大值与最小值
b = s / 5 ‘求平均值
Print "最大值" & Max & vbCrLf & "最小值" & Min & vbCrLf & "去掉最高分与最低分的平均值是" & b ‘输出
End Sub
6、人口问题
我国目前有13亿的人口,按人口年增长率0.8%计算,多少年后我国人口将超过26亿
答案:
Private Sub Command1_Click()
a = 13 ‘先定义a为13
s = 0
Do While a <= 26
a = a * (1 + 0.008)
s = s + 1
Loop
Print s
End Sub
7.二维数组矩阵输出
(二维数组)随机生成一个整型的二维数组,范围在[10,20]之间,以下三角形形式输出该数组。
答案:
Private Sub Command1_Click()
Dim a(1 To 10, 1 To 10) As Integer
For i = 1 To 10
For j = 1 To 10
a(i, j) = Int(Rnd * (20 - 10 + 1) + 10)
Next
Next
For i = 1 To 10
For j = 1 To i
Print Spc(3); a(i, j);
Next
Next
End Sub
8.二维数组4*4矩阵输出
(二维数组)利用随机函数生成一个4*4的矩阵(即二维数组),范围是[20,50]内的整数,输出该矩阵所有数据的之和。
答案:
Private Sub Command1_Click()
Dim a(1 To 4, 1 To 4) As Integer
For i = 1 To 4
For j = 1 To 4
a(i, j) = Int(Rnd * (50 - 20 + 1) + 20)
Print a(i, j);
s = s + a(i, j)
Next
Next
Print "和为" & s
End Sub
9、(二维数组)求二维数组四周元素的和
答案:
Dim a(4, 4)
Private Sub Command1_Click()
For i = 1 To 4
For j = 1 To 4
If i = 1 Or j = 1 Or i = 4 Or j = 4 Then
Sum = Sum + a(i, j)
End If
Next
Next
Print "四周元素之和为" & Sum
End Sub
Private Sub Form_Click()
For i = 1 To 4
For j = 1 To 4
a(i, j) = Int(Rnd * (99 - 10 + 1) + 10)
Print a(i, j);
Next
Print
Next
End Sub
10.输出5*5矩阵求对角线之和
(二维数组)用二维数组加双重循环输出5*5的方阵,每个数组的值的区间[10,99]之间,并且输出对角线的值的之和。
答案:
Private Sub Command1_Click()
Dim a(1 To 5, 1 To 5) As Integer
For i = 1 To 5
For j = 1 To 5
a(i, j) = Int(Rnd * (99 - 10 + 1) + 10)
If i = j Then
s = s + a(i, j)
End If
If i + j = 6 Then
b = b + a(i, j)
End If
Print a(i, j);
Next
Next
Print "对角线之和为:" s + b - a(3, 3)
End Sub
11、输出三角形
利用双重循环输出以下的图案。
答案:
Private Sub Command1_Click()
For i = 1 To 9
For j = 1 To I 以上是先输出一个直角三角形的1到i的数。(循环会先把上面的j
Print j; 循环全部输出出来再输出下一个循环,即e
Next
If i >= 2 Then 这里开始输出e的循环 i-1到1的数。
For e = i - 1 To 1 Step -1
Print e;
Next
End If
Next
End Sub
12.单击窗体,利用双重循环输出如下的图案。
答案:
Private Sub Form_Click()
For i = 65 To 75
Print Space(75 - i);
For j = 129 To 2 * i - 1
Print Chr(i);
Next
Next
End Sub
13、输出连续和为1250的正整数范围
在窗体上创建一个命令按钮,标题为“计算并输出”;程序运行后,如果单击命令按钮,程序将计算500以内两个数之间(包括开头和结尾的数)所有连续数的和为1250的正整数,并在窗体上显示出来,这样的数有多组,程序输出每组开头与结尾的正整数,并用“~”连接起来,如图所示。
答案:
Private Sub Command1_Click()
Print "连续和为1250的正整数是:"
For i = 1 To 500 首先定义一个双重循环。I是1到500,j是i到500,所以j的循环要取
For j = i To 500 决于i。
s = s + j 累加
If s > 1250 Then 看看累加的s大于1250吗,若大于则停止j循环,接着i循环。
Exit For
ElseIf s = 1250 Then 若等于s后,则输出i循环所用的值,也就是开头,再输出j循环的值,
Print i; "~"; j 也就是结尾。
Exit For 这里还是要停止循环,
End If
Next
s = 0 s=0,初始化,让下一次循环用。
Next
End Sub
14、求Π的值
布局如下图。单击按钮,根据下面的公式计算Π的值:
Π/4=1-1/3+1/5-1/7+…….1/10001
用do….while 实现程序。
答案:
Private Sub Command1_Click()
Dim r , s, i
r = 0
s = 1
i = 1
Do While 1 / i >= 0.0001
r = r + s / i
i = i + 2
s = -s
Loop
Text1.Text = r * 4
End Sub
15、单词首字母大写
按照如下图布置,程序运行后,单击按钮,文本框中的每个单词的首字母变成大写。
答案:
Private Sub Command1_Click()
Dim i, a, f, c
f = 0 首先定义f=0,c=””
c = ""
For i = 1 To Len(Text1.Text) 循环i=1到text1.text的长度
a = Mid(Text1.Text, i, 1) a=循环等于每个字母
If i = 1 Then 当第一个字母的时,第一个字母转化为大写
a = UCase(a)
End If
If f = 1 Then 当f=1时,这里只有运行下面那个a=” ”,才能触发
a = UCase(a) 当运行下面的a=” “的时候,f才会为1。也就是说
f = 0 空格的后一项字母为大写。
End If
If a = " " Then
f = 1
End If
c = c & a
Next
Text1.Text = c
End Sub
16、辗转相除法求最大公约数
创建3个文本框,计算text1和text2的正整数的最大公约数,并显示在text3中。
(要求使用do…….loop语句来实现)
答案:
Private Sub Command1_Click()
m = Val(Text1.Text)
n = Val(Text2.Text)
If n > m Then
t = n
n = m
m = t
End If
Do
r = m Mod n
If r = 0 Then Exit Do
m = n
n = r
Loop
Text3.Text = n
End Sub
17、累乘与累加
点击窗体,已知s=1+1/3!+1/5!+1/7!+1/9!.将s的结果输出到窗体上。使用do while….loop语句完成程序。
答案:
Private Sub Form_Click()
Dim i As Integer
i = 1 这相当于for的初始值
s = 1
Do While i <= 9 这相当于for的结束值
i = i + 1 公差,相当于for循环里的step(必须定义)
s = s * i
If i Mod 2 = 1 Then
p = p + 1 / s
End If
Loop 这里相对于next
Print p
End Sub
18、双胞胎数
若两个素数之差为2,则称这两个素数为双胞胎数。求出[200,1000]之内有多少对双胞胎数。
答案:
Private Sub Form_Click()
For i = 200 To 1000
f = 0
For j = 2 To i - 1
If i Mod j = 0 Then
f = 1
Exit For
Else
f = 0
End If
Next
If f = 0 Then 1.当求出200到1000之间第一个素数时(从小到大),就循环下
For e = 200 To 1000 组素数。
n = 0
For a = 2 To e - 1
If e Mod a = 0 Then
n = 1
Exit For
Else
n = 0
End If
Next
If f = 0 Then 2.当是素数时。
If i + 2 = e Then .则判断第一组中的素数是否加2等于第二组中的素数。(相差为2
s = s + 1 ,若满足则s加1.
Exit For ,退出循环(因为已经找到了,就不可能有第二个一样的)
End If
End If
Next
End If
Next
Print "总共有" & s & "对"
End Sub
19、for语句输出三角形
(新思路)用for语句输出如下图案。
答案:
Private Sub Command1_Click()
Dim i, j As Integer
a = "123456" 先定义一个a字符串是1到6
For i = 1 To 6
Print Space(10 - i); Mid(a, 1, i) 利用mid函数来选择
Next
End Sub
20、杨辉三角形
编写适当的事件过程,在窗体上输出相对应行数的杨辉三角形,点击窗体弹出inputbox对话框,在对话框中输入行数,打印出如下图所示的杨辉三角形
答案:
Private Sub Form_Click()
Dim i As Integer, j As Integer
Dim a As Integer
a = Val(InputBox("请输入行数"))
Dim c(9, 9) As Integer
If a > 0 Then
For i = 1 To a
Print Space(3 * a - 3 * i);
For j = 1 To i
If i = 1 Or j = i Then ‘当为三角形两边的时候,输出1
c(i, j) = 1
End If
If i = 2 Or j = i - 1 Then ‘当为三角形的两边里面一个的时候输出行数-1
c(i, j) = i - 1
End If
If i > 2 And j < i - 1 Then ‘否则都以自身上面一行对角线两个数的和。
c(i, j) = c(i - 1, j - 1) + c(i - 1, j)
End If
Print c(i, j) & " "; ‘输出
Next
Next
End If
End Sub
点赞、关注