VB程序设计道编程题.pdf
VB 程序设计道编程题 集团标准化工作小组 Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN 1.输入 3 个数,输出最大的数 Private Sub Command11_Click()Dim max%X1=Val(InputBox(input)X2=Val(InputBox(input)x3=Val(InputBox(input)max=X1 If max=X2 Then max=X2 End If If max=x3 Then max=x3 End If MsgBox(3 个 数 之 中 的 最 大 数max=&max)End Sub Private Sub Command12_Click()2.有一元二次方程:aX2+bX+c=0,依次输入a,b,c,判断此方程是否有实根 a=Val(InputBox(input)B=Val(InputBox(input)c=Val(InputBox(input)s=B2-4*a*c If a0 Then If s=0 Then MsgBox(两个相等实根)ElseIf s0 Then MsgBox(两个不相等实根)ElseIf s=60 Then MsgBox(恭喜!成绩通过!)Else MsgBox(抱歉!成绩没有通过!)End If End Sub Private Sub Command14_Click()4.输入一年份,判断它是否为闰年,并显示有关信息。(判断闰年的条件是:年份能被 4 整除但不能被 100 整除,或者能被 400整除)yes=Val(InputBox(year)If yes Mod 4=0 And yes Mod 1000 Or yes Mod 400=0 Then MsgBox(yes&是闰年)Else MsgBox(yes&不是闰年)End If End Sub Private Sub Command15_Click()5.输入学生的百分制成绩,转换输出为五级制成绩,90100 分转换为优秀,8089 转换为良好,7079 转换为中等,6069 转换为及格,060转换为不及格。score=Val(InputBox(input)Select Case score Case Is=90 MsgBox(优秀)Case Is=80 MsgBox(良好)Case Is=70 MsgBox(中)Case Is=60 MsgBox(及格)Case Else MsgBox(不及格)End Select End Sub 6.随机产生一个三位正整数,然后逆序输出,产生的数与逆序数同时显示。例如,产生 246,输出是 642。a=645 n=Len(a)For i=1 To Int(n/2)c=Mid(a,i,1)Mid(a,i,1)=Mid(a,n-i+1,1)Mid(a,n-i+1,1)=c Next i MsgBox(a)End Sub 7.输入两个整数,求它们的最大公约数 m=Val(InputBox(input m值)n=Val(InputBox(input n值)If nm Then t=n n=m m=t End If r=m Mod n Do While r0 m=n n=r r=m Mod n Loop MsgBox(最大公约数=&n)End Sub 21.随机产生 10 个30,100 内的整数,求最小值及所对应的下标。Dim a(10)As Integer For i=0 To 9 a(i)=Int(Rnd*70+30)Next i min=a(0)Mini=0 For i=1 To 9 If a(i)=max Then max=a(i)Else min=a(i)End If sum=sum+a(i)Next i MsgBox(max=&max)MsgBox(min=&min)MsgBox(avg=&sum/10)End Sub Private Sub Command2_Click()8.编程求200-400范围内5 的倍数或 7 的倍数之和。(一个数如果同时是7和5的倍数,则只能加一次。Dim sum1%,sum2%sum1=0:sum2=0 For i=200 To 400 If i Mod 5=0 Then sum1=sum1+i ElseIf i Mod 7=0 Then sum2=sun2+i End If i,sum1,sum2 Next i MsgBox(5 的倍数之和 sum=&sum1)MsgBox(7 的倍数之和 sum=&sum2)End Sub Private Sub Command20_Click()17.编程求斐波那契数列前 11 项。(斐波那契数列:F(0)=f(1)=1,F(n)=F(n-1)+F(n-2)n=2)Dim f(11)As Integer f(0)=1 f(1)=1 For i=2 To 10 f(i)=f(i-1)+f(i-2)Next i For i=0 To 10 Print f(i);Next i End Sub Private Sub Command21_Click()18.将输入的字符串以反序显示。例如:输入 ASDFGT,显示 TGFDSA Dim s(10)As String For i=0 To 9 s(i)=InputBox(input)Next i For i=9 To 0 Step-1 Print s(i)Next i End Sub Private Sub Command22_Click()19.随机产生10 个30,100 内的整数,求最大值及所对应的下标 Dim a(10)As Integer,max%For i=0 To 9 a(i)=Int(Rnd*70+30)Next i max=a(0)maxi=0 For i=1 To 9 If a(i)=max Then max=a(i)maxi=i End If Next i MsgBox(max=&max)MsgBox(maxi=&maxi)End Sub Private Sub Command23_Click()20.随机产生10 个30,100 内的整数,求最大值、最小值和平均值。Dim a(10)As Integer,max%,min%For i=0 To 9 a(i)=Int(Rnd*70+30)Next i max=a(0)min=a(0)For i=1 To 9 If a(i)=max Then max=a(i)Else min=a(i)End If sum=sum+a(i)Next i MsgBox(max=&max)MsgBox(min=&min)MsgBox(avg=&sum/10)End Sub Private Sub Command24_Click()24.利用随机函数生成一个 44 的矩阵(即二维矩阵),范围是 20,50 内的整数,输出该矩阵所有数据之和 Dim a(4,4)As Integer Dim sum%,i%,j%For i=0 To 3 For j=0 To 3 a(i,j)=Int(Rnd*30+20)sum=sum+a(i,j)Next j Next i For i=0 To 3 For j=0 To 3 Print a(i,j),Next j Print Next i MsgBox(sum=&sum)End Sub Private Sub Command25_Click()25.已知有序数组a(),编程插入x(x 的值为14)。数组a 中的元素分别为12,6,4,89,75,63,100,20,31。Dim a(),iMin%,n%,i%,j%,t%a=Array(2,6,4,89,75,63,100,20,31)X=14 n=UBound(a)获得数组的下标上界 For i=0 To n-1进行n-1轮比较 iMin=i 对第i 轮比较时,初始假定第i个元素最小 For j=i+1 To n 在数组i+1n 个元素中选最小元素的下标 If a(j)a(iMin)Then iMin=j Next j t=a(i)i+1 n 个元素中选出的最小元素与第i个元素交换 a(i)=a(iMin)a(iMin)=t Next i For k=0 To n 查找欲插入数 x 在数组中的位置 If Xa(k)Then Exit For Next k ReDim Preserve a(n+1)数组增加一个元素 For i=n To k Step-1数组元素后移一位,腾出位置 a(i+1)=a(i)Next i a(k)=X For i=0 To n+1 Print a(i);Next End Sub Private Sub Command26_Click()26.编写一函数,计算 Double类型一维数组所有元素的平均值。Dim a(),n%,s!a=Array(1,4,7,9,12,23,56)n=UBound(a)s=sum1(a()MsgBox(sum=&s)MsgBox(avg=&s/n)End Sub Function sum1%(X()Dim i%sum1=0 For i=0 To UBound(X)sum1=sum1+X(i)Next i End Function Private Sub Command27_Click()27.用 函 数 过 程 求 表 达 式1+1/2+1/3+1/4+1/n的和.n=InputBox(INPUT)s=sum2(n)MsgBox(SUM2=&s)End Sub Function sum2!(ByVal n As Integer)Dim i%sum2=0 For i=1 To n sum2=sum2+1/i Next i End Function Private Sub Command28_Click()28.编一子过程ProcMin,求一维数组a中的最小值,子过程的形参自己确定 Dim a(),n%,min%a=Array(1,4,7,9,12,-23,56)n=UBound(a)Call procmin(a(),min)MsgBox(min=&min)End Sub Sub procmin(X(),ByRef min%)Dim i%min=X(0)For i=1 To UBound(X)If X(i)max Then max=X(i)Next i End Function Private Sub Command3_Click()9.计算100300之间所有能被 3 和 7整除的数之和 Dim sum%sum=0 For i=100 To 300 If i Mod 3=0 And i Mod 7=0 Then sum=sum+i Private Sub Command30_Click()30.编写一个过程计算并输出区间100,1000 内所有素数的和(要求判断素数使用过程(函数或子过程)来实现。调用该过程。(提示:只能被1和自身整除的自然数称为素数。)Dim i%,sum!,f%sum=0 For i=100 To 1000 Call procs(i,f)If f=1 Then sum=sum+i End If Next i MsgBox(sum=&sum)End Sub Sub procs(ByVal X%,ByRef f%)Dim i%f=1 For i=2 To X-1 If i Mod X=0 Then f=0 Exit For End If Next i End Sub Private Sub Command4_Click()10.分别统计1-100中,满足3 的倍数、7的倍数的数各有多少 m=0:n=0 For i=1 To 100 If i Mod 3=0 Then n=n+1 ElseIf i Mod 7=0 Then m=m+1 End If Next i MsgBox(3 的倍数个数=&n)MsgBox(7 的倍数个数=&m)End Sub Private Sub Command5_Click()11.某次歌曲大奖赛,有 7 个评委。如果分别输入7 个评委对某个参赛者的打分数,按照去掉一个最高分和一个最低分的计算办法,求出该参赛者的平均得分 Dim sum%,max%,min%sum=0:max=0:min=999 For i=1 To 7 X=Val(InputBox(input)If max=X Then min=X End If sum=sum+X Next i Avg=(sum-max-min)/5 MsgBox(最高分=&max)MsgBox(最低分=&min)MsgBox(总和=&sum)MsgBox(平均分=&Avg)End Sub 12.输入一串字符,统计其中字母A(不区分大小写)出现的次数。Dim ch As String ch=ASDEAS n=0 For i=1 To Len(ch)st=Mid(ch,i,1)If UCase(st)=AThen n=n+1 End If Next i MsgBox(字符串中出现A 字符的系数&n)End Sub Private Sub Command6_Click()13.我国目前有13 亿人口,按人口年增长率%计算,多少年后我国人口将超过26亿。n=0 X=13 Do While X=26 X=X*n=n+1 Loop MsgBox(n)End Sub Private Sub Command7_Click()14.小猴有桃若干,第一天吃掉一半多一个;第二天吃剩下桃子的一半多一个;以后每天都吃尚存桃子的一半多一个,到第7 天只剩一个,问小猴原有桃多少 X=1 For i=6 To 1 Step-1 X=(X+1)*2 Next i MsgBox(X)End Sub Private Sub Command8_Click()15.求100以内的素数 For i=1 To 100 flag=1 For j=2 To i-1 If i Mod j=0 Then flag=0 End If Next j If flag=1 Then MsgBox(i&是素数)End If Next i End Sub Private Sub Command9_Click()16.百元买百鸡问题。假定小鸡每只5角,公鸡每只 2元,母鸡每只 3元,编程求解购鸡方案。n=0 For X=0 To 33 For y=0 To 50 z=100-X-y If 3*X+2*y+*z=100 Then Print X,y,z End If Next y Next X End Sub