VB程序设计.docx
《VB程序设计.docx》由会员分享,可在线阅读,更多相关《VB程序设计.docx(20页珍藏版)》请在冰点文库上搜索。
VB程序设计
1.编写程序,计算学生考试成绩,界面如图所示。
要求:
(1)程序启动时将窗体标题设置为“成绩计算”。
(2)单击“清空”按钮(Command1)将文本框Text1、Text2和Text3清空并将焦点设置为Text1。
(3)点击“计算”按钮(Command2)计算学生总成绩并显示在Text3中。
其中总成绩=理论成绩*0.7+实验成绩*0.3。
(4)点击“退出”按钮(Command3)结束程序运行。
参考代码:
PrivateSubForm_Load()
Form1.Caption="成绩计算"
EndSub
PrivateSubCommand1_Click()
Text1.Text=""
Text2.Text=""
Text3.Text=""
Text1.SetFocus
EndSub
PrivateSubCommand2_Click()
Text3.Text=Text1.Text*0.7+Text2.Text*0.3
EndSub
PrivateSubCommand3_Click()
End
EndSub
2.设计一个用户名和密码的检验程序。
要求:
(1)窗体(Form1)的标题设置为“登录窗口”;密码以“*”显示。
(2)单击“确定”按钮(cd1)验证输入的用户名(Text1)和口令(Text2),如果输入正确在Label3中显示“欢迎使用本系统”;如果不正确在Label3中显示“用户名或密码错误”。
设正确的用户名为“admin”,口令为“123456”。
(3)单击“退出”按钮(cd2),结束程序。
属性窗口:
将“确定按钮”的名称设置为cd1,“退出按钮”的名称设置为cd2。
参考代码:
PrivateSubForm_Load()
Form1.Caption="登录窗口"
Text2.PasswordChar="*"
EndSub
PrivateSubcd1_Click()
IfText1.Text="admin"AndText2.Text="123456"Then
Label3.Caption="欢迎使用本系统"
Else
Label3.Caption="用户名或密码错误"
EndIf
EndSub
PrivateSubcd2_Click()
End
EndSub
1.88页编程题第一题
(1)在窗体中放置一个文本框(Text1)、一个标签(Label1)和一个命令按钮(Command1)。
在Command1_Click事件中编写程序,对文本框中输入的成绩进行等级判断,标准是:
90分及以上为“优”,80分及以上为“良”,60分及以上为“及格”,其余为“不及格”,并在标签中显示相应等级。
要求:
分别用If…then…elseIf语句和Select…Case语句编写程序。
参考代码:
PrivateSubCommand1_Click()
DimscoreAsSingle,bzAsString
score=Val(Text1.Text)
SelectCasescore
CaseIs>=90
bz="优"
CaseIs>=80
bz="良"
CaseIs>=60
bz="及格"
CaseElse
bz="不及格"
EndSelect
Label1.Caption=bz
EndSub
PrivateSubCommand1_Click()
DimscoreAsSingle,bzAsString
score=Val(Text1.Text)
Ifscore>=90Then
bz="优"
ElseIfscore>=80Then
bz="良"
ElseIfscore>=60Then
bz="及格"
Else
bz="不及格"
EndIf
Label1.Caption=bz
EndSub
2.88页编程题第二题
(2)设计一个窗体,计算一元二次方程ax2+bx+c=0的根。
参考代码:
PrivateSubCommand1_Click()
DimpbsAsSingle,aAsSingle,bAsSingle,cAsSingle
Dimx1AsSingle,x2AsSingle
DimflagAsBoolean
flag=True'标志
'判断输入的是否为数字,使用多分支结构(考试时该部分可以不写)
IfNotIsNumeric(Text1.Text)Then
MsgBox"a应为数字",0+16+0
flag=False
Text1.SetFocus
ElseIfNotIsNumeric(Text2.Text)Then
MsgBox"b应为数字",0+16+0
flag=False
Text2.SetFocus
ElseIfNotIsNumeric(Text3.Text)Then
MsgBox"c应为数字",0+16+0
flag=False
Text3.SetFocus
EndIf
Ifflag=TrueThen
a=Val(Text1.Text)
b=Val(Text2.Text)
c=Val(Text3.Text)
Ifa=0Andb=0Then
Label4.Caption="无意义"
ElseIfa=0Andb<>0Then
Label4.Caption="方程的根为:
x1=x2="+Str(-c/b)
Else
pbs=b*b-4*a*c
Ifpbs>0Then
x1=(-b+Sqr(pbs))/(2*a)
x2=(-b-Sqr(pbs))/(2*a)
Label4.Caption="方程有两不相等的实根,分别为:
x1="+Str(x1)+";x2="+Str(x2)
ElseIfpbs=0Then
Label4.Caption="方程的根为:
x1=x2="+Str(-b/2*a)
Else
Label4.Caption="方程无实根"
EndIf
EndIf
EndIf
EndSub
.88页编程题第三题
(3)设S=1×2×3×…×n,求S不大于4000时最大的n。
参考代码:
PrivateSubForm_Click()
DimnAsInteger,sAsInteger
n=0'这里n=1也对
s=1
DoWhiles<=4000'这里也可以用dountils>4000
n=n+1
s=s*n
Loop
Print
Print"s不大于4000时最大的n是:
";n-1'注意这里
EndSub
'或写成
PrivateSubForm_Click()
DimnAsInteger,sAsInteger
n=1'这里n=1对,n=2对,n=0不对
s=1
DoWhiles<=4000
s=s*n
n=n+1'注意这两句与上面写法的前后顺序
Loop
Print
Print"s不大于4000时最大的n是:
";n-2'注意这里
EndSub
2.88页编程题第四题
(4)如果一个数的因子之和等于这个数本身,则称这样的数为“完全数”。
例如,整数28的因子为1、2、4、7、14,其和1+2+4+7+14=28,因此28是一个完全数。
编写一个程序,从键盘上输入正整数M和N,求出M和N之间的所有完全数。
参考代码:
方法一
PrivateSubCommand1_Click()
m=Val(Text1.Text)
n=Val(Text2.Text)
Fori=mTon
Forj=1Toi-1
IfiModj=0Then
s=s+j
EndIf
Nextj
Ifi=sThen
Picture1.Printi;
EndIf
s=0
Nexti
EndSub
参考代码:
方法二
PrivateSubCommand2_Click()
DimmAsInteger,nAsInteger
DimcountAsInteger,iAsInteger
m=Val(Text1.Text)
n=Val(Text2.Text)
Fori=mTon
s=0
Forj=1Toi\2
IfiModj=0Thens=s+j
Nextj
Ifs=iThen
Picture1.Printi;
count=count+1
IfcountMod8=0Then
Picture1.Print
EndIf
EndIf
Nexti
EndSub
参考代码:
方法三详见实验教材实训[6-5]
3.编写程序,打印九九乘法表的上三角
PrivateSubForm_Click()
FontSize=12
PrintTab(35);"九九乘法表"
PrintTab(33);"--------------"
Fori=1To9
Forj=iTo9
PrintTab((j-1)*9+1);i&"*"&j&"="&i*j;
Nextj
Print
Nexti
EndSub
1.113页编程题第一题
(1)编写程序,建立一个数组,并通过Rnd函数(该函数返回一个0到1之间的数)为每个数组元素赋一个1到100之间的整数。
然后显示所有小于60的元素。
参考代码:
PrivateSubForm_Click()
Dima(1To20)AsInteger,iAsInteger
DimjAsInteger
j=0'用来表示小于60的个数
'建立两个picture,用于显示随机产生的数组和小于60的所以元素
Picture1.Print"产生的数组为:
"
Picture1.Print
Picture2.Print"其中小于60的元素有:
"
Picture2.Print
Fori=1To20
a(i)=Int(Rnd*100+1)
Picture1.Printa(i);
IfiMod10=0ThenPicture1.Print'10个数换行
Ifa(i)<60Then
j=j+1
Picture2.Printa(i);"";
IfjMod10=0ThenPicture2.Print'10个数换行
EndIf
Nexti
EndSub
2.113页编程题第二题
(2)编写程序,随机产生10个二位数,放入数组A中,从中选出一个最大的和一个最小的数,并显示出来。
参考代码:
PrivateSubForm_Click()
Dima(1To10)AsInteger
DimmaxAsInteger,minAsInteger,iAsInteger
Fori=1To10
a(i)=Int(Rnd*90+10)
Picture1.Printa(i);
IfiMod5=0ThenPicture1.Print
Nexti
max=a
(1)
min=a
(1)
Fori=2To10
Ifa(i)>maxThenmax=a(i)
Ifa(i)Nexti
Label1.Caption="最大数为:
"&max
Label2.Caption="最小数为:
"&min
EndSub
3.113页编程题第五题
(5)利用随机数生成两个4×4的矩阵A和B,前者范围为30-70,后者范围为101-135。
要求:
①将两个矩阵相加,结果放入C矩阵。
②将矩阵A转置后放入D矩阵。
③求C矩阵中元素的最大值和下标。
④以下三角形式显示A,上三角形式显示B。
⑤将矩阵B第一行与第三行对应元素交换位置并输出。
参考代码:
Dima(1To4,1To4)AsInteger
Dimb(1To4,1To4)AsInteger
Dimc(1To4,1To4)AsInteger
Dimd(1To4,1To4)AsInteger
Dime(1To4,1To4)AsInteger
PrivateSubForm_Load()
Show
Picture1.FontSize=10
Picture2.FontSize=10
Picture1.Print"A矩阵:
"
Picture1.Print
Picture2.Print"B矩阵:
"
Picture2.Print
Randomize(5)
Fori=1To4
Forj=1To4
a(i,j)=Int(Rnd*40+30)
b(i,j)=Int(Rnd*35+101)
Picture1.Printa(i,j);"";
Picture2.Printb(i,j);"";
Nextj
Picture1.Print
Picture2.Print
Picture1.Print
Picture2.Print
Nexti
EndSub
①将两个矩阵相加,结果放入C矩阵。
PrivateSubCommand1_Click()
Picture3.Print"C矩阵:
"
Picture3.Print
Fori=1To4
Forj=1To4
c(i,j)=a(i,j)+b(i,j)
Picture3.Printc(i,j);"";
Nextj
Picture3.Print
Picture3.Print
Nexti
EndSub
②将矩阵A转置后放入D矩阵。
PrivateSubCommand2_Click()
Fori=1To4
Forj=1Toi
t=a(i,j)
a(i,j)=a(j,i)
a(j,i)=t
Nextj
Nexti
Picture4.Print"A转置后:
"
Picture4.Print
Fori=1To4
Forj=1To4
d(i,j)=a(i,j)
Picture4.Printa(i,j);"";
Nextj
Picture4.Print
Picture4.Print
Nexti
EndSub
③求C矩阵中元素的最大值和下标。
PrivateSubCommand3_Click()
Max=c(1,1)
t1=1
t2=1
Fori=1To4
Forj=1To4
Ifc(i,j)>MaxThen
Max=c(i,j)
t1=i
t2=j
EndIf
Nextj
Nexti
Picture6.FontSize=20
Picture6.Print"max=";Max
Picture6.Print"C(";t1;",";t2;")"
EndSub
④以下三角形式显示A,上三角形式显示B。
PrivateSubCommand4_Click()
Picture1.Cls
Picture2.Cls
Picture1.FontSize=10
Picture2.FontSize=10
Fori=1To4
Forj=1Toi
Picture1.Printa(i,j);"";
Nextj
Picture1.Print
Picture1.Print
Nexti
Fori=1To4
Forj=iTo4
Picture2.PrintTab(j*5);b(i,j);
Nextj
Picture2.Print
Picture2.Print
Nexti
EndSub
⑤将矩阵B第一行与第三行对应元素交换位置并输出。
PrivateSubCommand5_Click()
Picture2.Cls
Fori=1To4
Forj=1To4
Picture2.Printb(i,j);"";
Nextj
Picture2.Print
Picture2.Print
Nexti
Picture5.Print"B第一行与第三行交换位置:
"
Picture5.Print
Fori=1To4
t=b(1,i)
b(1,i)=b(3,i)
b(3,i)=t
Nexti
Fori=1To4
Forj=1To4
Picture5.Printb(i,j);"";
Nextj
Picture5.Print
Picture5.Print
Nexti
EndSub
4.113页编程题第三题
(3)编写程序,随机产生20个不同的数放在数组A中,并按由大到小的顺序排序。
从键盘上输入一数X,判断此数是否在该数组A中,若在则输出其所在的位置及X值,否则输出“未找到”。
参考代码:
Dima(1To20)AsInteger
PrivateSubForm_Load()
Randomize
EndSub
PrivateSubbijiao_Click()
DimiAsInteger
Fori=1To20
a(i)=Int(Rnd*100)'题目没要求,随便的一个范围
Nexti
Fori=1To19'比较排序
Forj=i+1To20
Ifa(j)>a(i)Then
t=a(i)
a(i)=a(j)
a(j)=t
EndIf
Nextj
Nexti
Fori=1To20'打印数组
Printa(i);
Nexti
EndSub
PrivateSubmaopao_Click()
DimiAsInteger
Fori=1To20'生成数组
a(i)=Int(Rnd*100)'题目没要求,随便的一个范围
Nexti
Fori=1To19'冒泡排序
Forj=20Toi+1Step-1
Ifa(j)>a(j-1)Then
t=a(j)
a(j)=a(j-1)
a(j-1)=t
EndIf
Nextj
Nexti
Fori=1To20'打印数组
Printa(i);
Nexti
EndSub
PrivateSubxuanze_Click()
DimiAsInteger
Fori=1To20'生成数组
a(i)=Int(Rnd*100)'题目没要求,随便的一个范围
Nexti
Fori=1To19'选择排序
k=i
Forj=i+1To20
Ifa(j)>a(k)Thenk=j
Nextj
t=a(i)
a(i)=a(k)
a(k)=t
Nexti
Fori=1To20'打印数组
Printa(i);
Nexti
EndSub
PrivateSubCommand1_Click()
DimxAsInteger,flagAsInteger,iAsInteger
flag=0'标志,表示数组中是否存在x
x=InputBox("请输入x的值,为整数","输入",1)
Fori=1To20
Ifx=a(i)Then
flag=1'flag改变,说明存在
ExitFor
EndIf
Nexti
Ifflag=1Then
Print
Print"数组中存在"&x
Print"位置:
"&i
Else
Print
Print"未找到"&x
EndIf
EndSub
5.选做题-113页编程题第四题
(4)编写程序,录入15名学生的成绩,求出其平均分,统计高于平均分、低于60分、大于等于90分的人数,并输出结果。
参考代码:
PrivateSubForm_Click()
Dima(1To15)AsSingle
DimiAsInteger,c1AsInteger,c2AsInteger,c3AsInteger,avgAsSingle
Fori=1To15
a(i)=InputBox("请输入第"&i&"个学生的成绩","输入成绩",60)
avg=avg+a(i)
Printa(i);
Nexti
avg=avg/15
Fori=1To15
Ifa(i)>avgThenc1=c1+1
Ifa(i)<60Thenc2=c2+1
Ifa(i)>=90Thenc3=c3+1
Nexti
Print
Print"15人的平均分为:
";avg
Print"高于平均分的人数为:
";c1
Print"小于60的人数为:
";c2
Print"大于等于90的人数为:
";c3
EndSub