实验答案.docx
《实验答案.docx》由会员分享,可在线阅读,更多相关《实验答案.docx(17页珍藏版)》请在冰豆网上搜索。
实验答案
实验9-1随机产生20个学生的成绩,统计各分数段的人数。
即0~59,60~69,70~79,80~89,90~100,并显示结果。
产生的数据在Picture1中显示,统计结果在Picture2中显示,如图9-6所示。
图9-6程序运行界面
Dimmark(19)AsInteger
PrivateSubCommand1_Click()
Dimi%
Fori=0To19
mark(i)=Int(Rnd*101)
IfiMod5=0Then
mark(i)&Space
(2);
Nexti
EndSub
PrivateSubCommand2_Click()
Dims(5To9)AsInteger
Randomize
Fori=0To19
k=mark(i)\10
SelectCasek
Case0To5'0~59分的人数
s(5)=s(5)+1
Case9To10'90~100分的人数
s(9)=s(9)+1
Case6To8'存放其他3个分数段的人数,根据k对应获得
s(k)=s(k)+1
EndSelect
Nexti
Fori=5To9
"s(";i;")的人数有";s(i);"个"
Nexti
EndSub
实验9-2随机生成10个2位数整数,然后按照从小到大的顺序排列,并显示排列结果(运行界面如图9-7所示)。
PrivateSubCommand1_Click()
Dima(10)AsInteger
Randomize
Dimi%,j%,t%
"随机生成的数:
"
Fori=0To9
a(i)=Int(Rnd*90+10)
Nexti
Fori=0To9
a(i);Spc
(2);
If(i+1)Mod5=0Then
Nexti
"排序后的数据显示如下:
"
Fori=0To8
Forj=0To8-i
Ifa(j)>a(j+1)Then
t=a(j):
a(j)=a(j+1):
a(j+1)=t
EndIf
Nextj
Nexti
Fori=0To9
a(i);Spc
(2);
If(i+1)Mod5=0Then
Nexti
EndSub
实验9-3找一个nm的二维数组的“鞍点”。
“鞍点”是指它在本行中数值最大,在本列中数值最小。
也可能在一个数组中找不到鞍点。
输出鞍点的行、列号,如无鞍点则输出“无鞍点”。
这里假设n=4,m=4,数组各元素的值为45、46、34、12、56、75、78、47、12、94、56、30、77、57、79、80。
PrivateSubForm_Click()
DimnAsInteger,mAsInteger,sAsInteger
Dima()AsSingle,sumAsSingle
n=InputBox("输入n")
m=InputBox("输入m")
ReDima(n,m)
ForI=1Ton
Forj=1Tom
a(I,j)=InputBox("a("&I&","&j&")=")
Printa(I,j);
Nextj
Print
NextI
Print"Num","Row","Column"
ForI=1Ton
big=a(I,1)
Forj=1Tom
Ifbig<=a(I,j)Thenbig=a(I,j):
col=j
Nextj
flag=True
Fork=1Ton
Ifbig>a(k,col)Thenflag=False
Nextk
Ifflag=TrueThen
s=s+1
Printbig,I,col's为鞍点个数
EndIf
NextI
Ifs=0ThenPrint"无鞍点"
EndSub
实验9-4编程实现把十进制数转换为二、八、十六进制数。
OptionBase0
PrivateSubCommand1_Click()
DimiAsInteger,dAsInteger,b(15)AsString,sAsString,mAsString,rAsInteger,cAsInteger
m="09ABCDEF"
d=Val
r=Val
DoUntild=0
c=dModr
b(i)=Mid(m,c+1,1)
d=d\r
i=i+1
Loop
DoWhilei>0
i=i-1
s=s&b(i)
Loop
=s
EndSub
OptionBase0
DimAAsInteger
PrivateSubCommand1_Click()
DimiAsInteger,dAsInteger,b(15)AsString,sAsString,mAsString,rAsInteger,cAsInteger
m="09ABCDEF"
d=Val
r=A
DoUntild=0
c=dModr
b(i)=Mid(m,c+1,1)
d=d\r
i=i+1
Loop
DoWhilei>0
i=i-1
s=s&b(i)
Loop
=s
EndSub
PrivateSubOption1_Click()
A=2
EndSub
PrivateSubOption2_Click()
A=8
EndSub
PrivateSubOption3_Click()
A=16
EndSub
DimAAsInteger
PrivateSubCommand1_Click()
DimiAsInteger,dAsInteger,b(15)AsString,sAsString,mAsString,rAsInteger,cAsInteger
m="09ABCDEF"
d=Val
r=A
DoUntild=0
c=dModr
b(i)=Mid(m,c+1,1)
d=d\r
i=i+1
Loop
DoWhilei>0
i=i-1
s=s&b(i)
Loop
=s
EndSub
PrivateSubList1_Click()
A=Val
EndSub
实验9-5利用二维数组设计一个程序,输出界面如图9-11所示。
图9-11程序运行结果图
OptionBase1
PrivateSubForm_Click()
Dima(9,9)AsInteger
DimiAsInteger,jAsInteger
Fori=1To9
Forj=1Toi
a(i,j)=i*j
Nextj
Nexti
Fori=1To9
Forj=1Toi
PrintTab((j-1)*9+1);i&"×"&j&"="&a(i,j);
Nextj
Print
Nexti
EndSub
实验9-6如图9-12所示,运行时,由窗体右侧的文本框对列表框进行学生信息的输入,单击“输入学生信息”按钮将数据添加至列表框1;单击“整理学生信息”,去除列表框1中的重复学生信息;在查找对象下面的Text1文本框输入一个姓名或姓,单击“查找”按钮,则在列表框中进行查找,若找到匹配的列表项,则把该人的信息显示在列表框2中。
若未找到,则在列表框2中显示“查无此人”。
(a)输入学生信息,整理学生信息前(b)整理学生信息前后(c)查找学生
图9-12
OptionExplicit
PrivateSubCmdAdd_Click()
TxtStu=""
EndSub
PrivateSubCmdClearUp_Click()
DimiAsInteger,jAsInteger
DoWhilei<
j=i+1
DoWhilej<
If(i)=(j)Then
j
Else
j=j+1
EndIf
Loop
i=i+1
Loop
EndSub
PrivateSubCmdFind_Click()
DimkAsInteger,nAsInteger
n=
k=0
Fork=0Ton
If=Left(k),1)Then
(k)
EndIf
Nextk
If=0Then
"查无此人"
EndIf
EndSub
实验9-7利用控件数组设计如图所示的简易计算器。
DimstrOperator()
DimblnDigitAsBoolean
DimdblResult
PrivateSubcmdAllClear_Click()
dblResult=0:
blnDigit=False:
="":
lblOperator="+"
EndSub
PrivateSubcmdClear_Click()
DimintLen%
intLen=Len:
IfintLen>0Then=Left,intLen-1)
EndSub
PrivateSubcmdDigit_Click(IndexAsInteger)
StaticblnDotAsBoolean
DimstrKey$
strKey=cmdDigit(Index).Caption
IfstrKey="."ThenIfNotblnDotThenblnDot=TrueElseExitSub
IfNotblnDigitThen=""
=&strKey
blnDigit=True
EndSub
PrivateSubcmdOperator_Click(IndexAsInteger)
IfblnDigitThen
SelectCase
Case"+":
dblResult=dblResult+Val
Case"-":
dblResult=dblResult-Val
Case"×":
dblResult=dblResult*Val
Case"÷":
IfVal<>0Then
dblResult=dblResult/Val
Else
ExitSub
EndIf
Case"=":
dblResult=Val
EndSelect
=dblResult:
blnDigit=False
EndIf
=strOperator(Index)
EndSub
PrivateSubcmdSign_Click()
DimstrDot$
strDot=IIf(Right,1)=".",".","")
=-Val&strDot
IfNotblnDigitThendblResult=-dblResult
EndSub
PrivateSubForm_Load()
strOperator=Array("+","-","×","÷","="):
CallcmdAllClear_Click
EndSub
实验9-8自定义类型数组的应用,要求如下。
图9-14程序运行结果图
(1)自定义一个教师数据类型,包括教师工号、姓名、工资三项内容,然后再声明一个教师类型数组,个数由键盘输入。
(2)窗体设计如图9-14所示;单击“新增”按钮时,将文本框中输入的内容添加到数组的当前元素中;单击“排序”按钮时,将输入的内容按工号递增顺序排列,并在图形框中显示;单击“清空”按钮,把文本框中的内容清除;在“工号”文本框中输入一个工号,单击“查找”按钮,把该工号的教师信息对应显示在文本框中。
要求“查找”按钮必须在“排序”按钮执行后才可用。
一旦单击“新增”按钮,“查找”按钮就不可用。
PrivateTypeteach
ghAsLong
xmAsString*10
gzAsLong
EndType
Dima()Asteach,iAsInteger,nAsInteger
PrivateSubForm_Load()
n=Val(InputBox("输入人数"))
ReDima(1Ton)
i=0
=False
=False
EndSub
PrivateSubCommand1_Click()'添加教师信息
i=i+1
Witha(i)
.gh=Val
.xm=
.gz=Val
EndWith
="":
="":
=""
=True
=False
Ifi=nThenMsgBox("人数已够"):
=False:
ExitSub
EndSub
PrivateSubCommand2_Click()'排序
DimjAsInteger,kAsInteger,tAsteach
Forj=1Toi-1
Fork=1Toi-j
Ifa(k).gh>a(k+1).ghThen
t=a(k)
a(k)=a(k+1)
a(k+1)=t
EndIf
Nextk
Nextj
"工号";Spc(3);"姓名";Spc(10);"工资"
Forj=1Toi
a(j).gh;Spc
(2);a(j).xm;Spc
(2);a(j).gz
Nextj
=True
EndSub
PrivateSubCommand3_Click()'查找
DimKeyAsLong
DimLeftAsInteger,RightAsInteger,MidAsInteger
Key=Val
Left=1:
Right=i
DoWhileLeft<=Right
Mid=(Left+Right)\2
Ifa(Mid).gh=KeyThen
ExitDo
ElseIfa(Mid).gh>KeyThen
Right=Mid-1
Else
Left=Mid+1
EndIf
Loop
IfLeft>RightThen
MsgBox"数组中没有元素"&Key
Else
=a(Mid).xm
=a(Mid).gz
EndIf
EndSub
PrivateSubCommand4_Click()'清空
="":
="":
=""
EndSub
实验9-9利用随机函数生成一组数存放在数组中,把该数组的值显示在图形框中,然后将下标为奇数的数组元素从数组中删除,再把新数组显示在另一个图形框中。
OptionExplicit
Dima()AsInteger
DimnAsInteger
方法一:
PrivateSubCommand1_Click()
DimiAsInteger,jAsInteger
Dimb()AsInteger
ReDimb(n)
j=1
Fori=1Ton'把下标为偶数的数放到数组b()中
IfiMod2=0Then
b(j)=a(i)
j=j+1
EndIf
Nexti
Fori=1Toj-1'把b()数组的值重新赋回a数组
a(i)=b(i)
a(i)
Nexti
Fori=jTon'a数组其余元素值变为0
a(i)=0
Nexti
EndSub
方法二
PrivateSubCommand1_Click()
DimiAsInteger,jAsInteger
j=1
Fori=1Ton
IfiMod2=0Then
a(j)=a(i):
j=j+1
EndIf
Nexti
ReDimPreservea(j-1)
Fori=1Toj-1
a(i)
Nexti
EndSub
PrivateSubForm_Activate()
DimiAsInteger
n=InputBox("请输入个数:
")
ReDima(n)
Fori=1Ton
a(i)=Int(Rnd*100)'随机生成1-100之间的数
a(i)
Nexti
EndSub
实验9-10编程实现首先生成一个由小到大已排好序的整数数组,再输入一个数据,单击“插入”按钮会自动把这个数据插入到原数组适当的位置,并保持数组的有序性。
程序运行界面如图9-15所示。
图9-15程序运行界面
OptionExplicit
Dima()AsInteger,mAsInteger,pAsInteger
PrivateSubCommand1_Click()
DimnAsInteger,iAsInteger,kAsInteger
n=Text2
p=p+1
Text3=""
Fori=1ToUBound(a)
IfnNexti
k=i
ReDimPreservea(m+p)
Fori=UBound(a)-1TokStep-1
a(i+1)=a(i)
Nexti
a(k)=n
Fori=1ToUBound(a)
Text3=Text3&Str(a(i))
Nexti
EndSub
PrivateSubForm_Activate()
DimiAsInteger
m=InputBox("请输入个数")
ReDima(m)
Fori=1Tom
a(i)=(i-1)*10+1
Text1=Text1&Str(a(i))
Nexti
EndSub