t=a(i)
a(i)=a(j)
a(j)=t
EndIf
Nextj
Nexti
Text2=""
Fori=1To15
Text2=Text2&Str(a(i))'排序结果放入文本框2中
Nexti
EndSub
2、编程:
(程序存盘文件名sy6-2.vbp、sy6-2.frm)(省等考题之一)
程序运行界面如图所示:
程序的功能是:
当用户单击“开始”按钮后,弹出一个输入框要求用户输入一个1至11之间的奇数;然后按以下公式:
1/(1!
+(1!
+3!
)+(1!
+3!
+5!
)+…+(1!
+3!
+…+n!
))
计算,并将结果显示在文本框中。
提示:
可用三重循环也可用一重循环实现。
参考程序:
PrivateSubForm_Load()
Text1.Enabled=False
EndSub
PrivateSubCommand1_Click()
Dima&,b&,s&,i%,j%,k%,n%,t#
Do
n=Val(InputBox("请输入一个1至11之间的奇数:
"))
LoopUntil(n>=1Andn<=11)And(nMod2<>0)
'方法一:
用计数循环实现
a=1
b=1
s=0
t=0
Fori=1TonStep2
a=b*i'求奇数的阶乘
b=a*(i+1)'求偶数的阶乘
s=s+a'累加时只加奇数的阶乘
t=t+s
Nexti
Text1=1/t
EndSub
PrivateSubCommand2_Click()
Dima&,b&,s&,i%,j%,k%,n%,t#
Do
n=Val(InputBox("请输入一个1至11之间的奇数:
"))
LoopUntil(n>=1Andn<=11)And(nMod2<>0)
'方法二:
用条件循环实现
a=1
b=1
s=0
t=0
i=1
DoWhilei<=n
a=b*i'求奇数的阶乘
b=a*(i+1)'求偶数的阶乘
s=s+a'累加时只加奇数的阶乘
t=t+s
i=i+2
Loop
Text1=1/t
EndSub
PrivateSubCommand3_Click()
Dima&,b&,s&,i%,j%,k%,n%,t#
Do
n=Val(InputBox("请输入一个1至11之间的奇数:
"))
LoopUntil(n>=1Andn<=11)And(nMod2<>0)
'方法三:
用三重循环实现
t=0
Fork=1TonStep2'第一重循环求总的和
s=0
Fori=1TokStep2'第二重循环求奇数的阶乘的和
a=1
Forj=1Toi'第三重循环求某个数的阶乘
a=a*j
Nextj
s=s+a
Nexti
t=t+s
Nextk
Text1=1/t
EndSub
3、随机产生20个1~100的正整数放入数组中,显示产生的数,并求平均值以及高于平均值的数有多少个。
运行界面如图所示:
【要求】在窗体上单击,即产生如图所示结果,编写出程序代码,正确运行程序。
并以文件名sy7-1.frm和sy7-1.vbp保存在F:
盘或D:
盘自己的姓名文件夹中。
参考代码:
PrivateSubForm_Click()
Dimx(1To20)AsInteger,s!
ave!
n%,i%
s=0
Fori=1To20
x(i)=Int(Rnd*100)+1
s=s+x(i)
Nexti
ave=s/20'求平均值,放入变量ave中
'以下统计高于平均值的数,结果放入n中
n=0
Fori=1To20
Ifx(i)>aveThenn=n+1
Nexti
'以下输出各个值
Fori=1To20
Printx(i);'打印输出每一个元素
Nexti
Print
Print"平均值为:
";ave
Print"高于平均值的有:
";n;"个"
Print
EndSub
4、编程:
(程序存盘文件名Test11.frm、test11.vbp)
(一)
建立一个窗体,界面如下图所示。
其功能为:
单击command1按钮,则在text1中生成一个4行4列的矩阵,并且每个元素是随机的,范围在100~200中;单击command2按钮,则退出程序。
参考程序:
OptionExplicit
PrivateSubCommand1_Click()
dima(1to4,1to4)AsInteger,i%,j%
Randomize
Fori=1To4
Forj=1To4
a(i,j)=Int(Rnd*101)+100
Nextj
Nexti
Fori=1To4
Forj=1To4
Text1=Text1&a(i,j)&""
nextj
Text1=Text1&Chr(13)&Chr(10)‘一行四个数显示完,提行
Nexti
EndSub
PrivateSubCommand2_Click()
End
EndSub
5、编程(程序存盘文件名为:
test1.vbptest1.frm)
(二)
程序界面如下图所示。
其功能为:
根据公式∏/2≈1+(1/3)+(1/3)*(2/5)+(1/3)*(2/5)*(3/7)+(1/3)*(2/5)*(3/7)*(4/9)+......,求∏的近似值(直到前后两项之差的绝对值小于0.00000001为止)
参考程序:
OptionExplicit
PrivateSubCommand1_Click()
DimpiAsDouble
Dimminteger,nasinteger
DimnAsInteger
DimtAsDouble,t1AsDouble
pi=1
m=1
n=3
t1=m/n
Do
t=t1
pi=pi+t
m=m+1
n=n+2
t1=t1*m/n
LoopWhileAbs(t1-t)>0.00000001
Print"pi=";2*pi
EndSub
6、编程:
(程序存盘文件名sy6-3.vbp、sy6-3.frm)
程序运行界面如下图所示:
在窗口中有两个文本框和一个按钮。
当单击“随机产生并查找素数”按钮时,在text1中随机产生20个100~1000之间的整数,同时在text2中显示出这20个整数中的所有素数。
参考程序:
PrivateSubCommand1_Click()
DimmAsInteger
Randomize
Text1=""
Text2=""
Fori=1To20
m=Int(Rnd*901)+100'产生随时机数
Text1=Text1+Str(m)'连接到文本框1
Forj=2Tom-1'判断素数
If(mModj=0)ThenGoToabc
Nextj
Text2=Text2&m&""'连接到文本框2
abc:
Nexti
EndSub
7、如下图运行界面所示,单击命令按钮输入整数n,显示出具有n行的杨辉三角形:
分析:
从一组数据中找规律,找通项,这是循环和数组相结合的优点。
杨辉三角形的形成可分为三部分数据:
第1列全为1;主对角线全为1;从第3行第2列起到主对角线前一元素的各个元素为上一行前一列和本列元素之和。
如:
'第1列和主对角线元素为1
Fori=1Ton
a(i,1)=1:
a(i,i)=1
Nexti
'从第3行第2列起到主对角线前一元素的各元素为上一行前一列和本列元素之和
Fori=3Ton
Forj=2Toi-1
a(i,j)=a(i-1,j-1)+a(i-1,j)
Nextj
Nexti
【要求】设计界面,编写出程序代码(注意动态数组的使用),正确运行程序。
并以文件名sy7-3.frm和sy7-3.vbp保存在F:
盘或D:
盘自己的姓名文件夹中。
参考代码:
OptionBase1
PrivateSubCommand1_Click()
Dima(),n%,i%,j%
n=InputBox("输入杨辉三角形的行数:
")
ReDima(n,n)'定义动态数组
Cls
'形成杨辉三角形
'第1列和主对角线元素为1
Fori=1Ton
a(i,1)=1:
a(i,i)=1
Nexti
'从第3行第2列起到主对角线前一元素的各元素为上一行前一列和本列元素之和
Fori=3Ton
Forj=2Toi-1
a(i,j)=a(i-1,j-1)+a(i-1,j)
Nextj
Nexti
'打印杨辉三角形
Fori=1Ton
Forj=1Toi
Printa(i,j);Spc(5);'每一个元素占5位
'Printa(i,j);Spc(5-Len(Str(a(i,j))));'每一个元素占5位
Nextj
Print'换行
Nexti
EndSub
7、随机产生10个20~100的正整数放入a数组中,显示产生的数,并用选择法或冒泡法由大到小排序输出。
如图示:
【要求】设计界面,编写出程序代码,正确运行程序。
并以文件名sy8-2.frm和sy8-2.vbp保存在F:
盘或D:
盘自己的姓名文件夹中。
参考代码:
OptionBase1‘设定下标为1
'选择排序算法
PrivateSubCommand1_Click()
Dima%(10),i%,j%,n%,imax%
n=10
Print"随机产生10个20~100的正整数:
"
Fori=1Ton
a(i)=Int(Rnd*81+20)
Printa(i);
Nexti
Fori=1Ton-1'进行n-1轮比较
imax=i'对第i轮比较时,初始假定第i个元素最大
Forj=i+1Ton'在数组i~n个元素中选最大元素的下标
Ifa(j)>a(imax)Thenimax=j
Nextj
t=a(i):
a(i)=a(imax):
a(imax)=t'将最大元素与第i个元素交换
Nexti
Print
Print"选择法由大到小排序结果:
"
Fori=1Ton
Printa(i);
Nexti
Print
Print
EndSub
'冒泡排序算法
PrivateSubCommand2_Click()
Dima%(1To10),i%,j%,n%
n=10
Print"随机产生10个20~100的正整数:
"
Fori=1Ton
a(i)=Int(Rnd*81+20)
Printa(i);
Nexti
Fori=1Ton-1'进行n-1轮比较
Forj=i+1Ton'将第一个与i+1~n个元素进行比较
Ifa(j)>a(i)Then
t=a(j)
a(j)=a(i)
a(i)=t
EndIf
Nextj
Nexti
Print
Print"冒泡法由大到小排序结果:
"
Fori=1Ton
Printa(i);
Nexti
Print
Print
EndSub
8、编程:
(程序存盘文件名Sy13-5.vbp,Sy13-5.frm)(省等考题之一)
程序运行界面如下图所示:
程序实现的功能:
1、程序运行时,首先随机产生30个100~3000之间的年份,并显示在List1中。
2、当单击“判断”按钮时,选出是闰年的年份,显示在List2中。
3、当单击“排序”按钮时,将选出的是闰年的年份值按从小到大的顺序排序,并重新显示在List2中。
说明:
判断某一年是否是闰年有两个条件:
(1)能被4整除,但不能被100整除。
(2)既能被4整除,又能被400整除。
知识点:
列表框的使用;数组应用;随机函数的应用;按闰年的概念和定义选出闰年;数组排序。
参考代码:
OptionBase1
Dima(30)AsInteger‘声明数组
PrivateSubForm_Load()
List1.Clear
Randomize'调用随机数发生器产生随机数种子
Fori=1To30'随机产生30个随机数放入a数组中,并添加到列表框1中
a(i)=Int(Rnd*2901)+100
List1.AddItema(i)
Nexti
EndSub
PrivateSubCommand1_Click()'将闰年年号添加到列表框2中
List2.Clear
Fori=1To30
If(a(i)Mod4=0Anda(i)Mod100<>0)Or(a(i)Mod400=0)Then
List2.AddItema(i)
EndIf
Nexti
EndSub
PrivateSubCommand2_Click()
Dimb()AsInteger‘声明动态数组,用以存放闰年号,以便排序
n=List2.ListCount'统计list2中有多少数据并放入变量n中
ReDimb(n)AsInteger
Fori=1Ton'将list2中的数据存入b数组中
b(i)=List2.List(i-1)
Nexti
Fori=1Ton-1'排序b数组
Forj=iTon
Ifb(i)>b(j)Then
t=b(i)
b(i)=b(j)
b(j)=t
EndIf
Nextj
Nexti
List2.Clear'清除list2
Fori=1Ton'重新将排序后的数据放回list2中
List2.AddItemb(i)
Nexti
EndSub