Nexti
Print"这组数中的最大值为:
"&a(k)
Print"是这组数中的第"&k&"个数"
EndSub
例题5-8
属性结果:
代码编写:
OptionBase1
PrivateSubCommand1_Click()
Dima(),i%,k%,j%
a=Array(15,8,4,13,6,10,17,1)
n=UBound(a)
Print"排序前:
";
Fori=1Ton
Printa(i);
Nexti
Print
Fori=1Ton-1
k=i
Forj=i+1Ton
Ifa(k)>a(j)Thenk=j
Nextj
t=a(i):
a(i)=a(k):
a(k)=t
Nexti
Print"排序后:
";
Fori=1Ton
Printa(i);
Nexti
EndSub
例题5-9
属性及结果:
代码编写:
PrivateSubCommand1_Click()
Dima(),x!
m%,n%,i%,pAsBoolean
a=Array(15,8,4,13,6,10,17,1)
m=LBound(a)
n=UBound(a)
Fori=mTon
Printa(i);c
Nexti
Print
x=Val(InputBox("请输入要查找的数!
"))
p=False
Fori=mTon
Ifx=a(i)Then
p=True
ExitFor
EndIf
Nexti
IfpThen
MsgBox"找到了,在数组中的位置为第"&i&"位"
Else
MsgBox"没找到"
EndIf
EndSub
例题5-10
属性设计:
结果:
代码编写:
OptionBase1
Dima%(5,5),b%(5,5),s%,i%,j%
PrivateSubCommand1_Click()
Fori=1To5
Forj=1To5
a(i,j)=Int(Rnd*10)
Picture1.PrintTab(3*j);a(i,j);
Nextj
Nexti
EndSub
PrivateSubCommand2_Click()
Fori=1To5
Forj=1To5
b(i,j)=a(j,i)
Picture2.PrintTab(3*j);b(i,j);
Nextj
Nexti
EndSub
PrivateSubCommand3_Click()
Fori=1To5
s=s+a(i,i)+a(i,5-i+1)
Nexti
Label1.Caption="对角线个元素之和为:
"&s
EndSub
例题5-11
属性及数据:
属性结果:
代码编写:
PrivateTypestudent
xmAsString*5
sxAsInteger
yyAsInteger
ywAsInteger
pjAsSingle
PrivateSubCommand1_Click()
Conststucount=10
Dimstu(1Tostucount)Asstudent,tAsstudent
DimiAsInteger,jAsInteger
Open"c:
\in.txt"ForInputAs#1
Picture1.PrintTab
(2);"姓名";Tab(12);"数学";Tab(22);"英语";Tab(32);"语文";Tab(42);"平均分"
Fori=1Tostucount
Input#1,stu(i).sx,stu(i).yy,stu(i).yw
stu(i).pj=(stu(i).sx+stu(i).yy+stu(i).yw)/3
Picture1.PrintTab
(2);stu(i).xm;Tab(12);stu(i).sx;Tab(22);stu(i).yy;Tab(32);stu(i).yw;Tab(42);stu(i).pj
Next
Fori=1Tostucount-1
k=i
Forj=i+1Tostucount
Ifstu(i).pj>stu(k).pjThenk=j
Next
t=stu(k):
stu(k)=stu(i):
stu(i)=t
Next
Picture1.Print"======全班成绩按期平均分由高到低排序输出如下====="
Picture1.PrintTab
(2);"姓名";Tab(12);"数学";Tab(22);"英语";Tab(32);"语文";Tab(42);"平均分"
Fori=1Tostucount
Picture1.PrintTab
(2);stu(i).xm;Tab(12);stu(i).sx;Tab(22);stu(i).yy;Tab(32);stu(i).yw;Tab(42);stu(i).pj
Next
EndSub
例题5-12
属性设置:
属性结果:
代码编写:
PrivateSubForm_Load()
Dimi%,size%
size=375
WithCommand1(0)
.Width=size
.Height=size
.Left=0
.Top=0
.Caption=""
EndWith
Me.Height=size*10+800
Me.Width=size*10+400
WithPicture1
.Height=size*10+50
.Width=size*10+50
.Top=100
.Left=100
EndWith
Fori=1To99
LoadCommand1(i)
WithCommand1(i)
.Left=(iMod10)*size
.Top=(i\10)*size
.Caption=True
EndWith
Nexti
EndSub
例题5-13
属性设计:
运算结果:
代码编写:
PrivateSubCommand1_Click(indexAsInteger)
Dimx!
y!
x=Val(Text1.Text)
y=Val(Text2.Text)
SelectCaseindex
Case0
Label3=x&"+"&y&"="&x+y
Case1
Label3=x&"-"&y&"="&x-y
Case2
Label3=x&"*"&y&"="&x*y
Case4
Ify=0Then
Label3="除数为o!
"
Else
Label3=x&"/"&y&"="&x/y
EndIf
EndSelect
EndSub
课后习题:
5-1
属性设计:
运算结果:
代码编写:
PrivateSubCommand1_Click()
Dimc(0To7)
a=Array(1,3,5,2,4,18,50,25)
b=Array(5,27,30,35,60,41,87,33)
Fori=0To7
c(i)=a(i)+b(i)
Next
Print"a()","b()","c()"
Fori=0To7
Printa(i),b(i),c(i)
Next
EndSub
5-2
属性设计:
运算结果:
代码编写:
PrivateSubCommand1_Click()
'先声明一个动态数组a,因为其大小不能确定
Dima()AsInteger
n=Val(Text1.Text)
m=Val(Text2.Text)
'指定数组的大小
ReDima(1Ton,1Tom)AsInteger
Picture1.Cls
'用随机数给数组赋值,并打印到窗体
Fori=1Ton
Forj=1Tom
a(i,j)=Int(Rnd*901)
Picture1.PrintTab(5*(j-1)+2);a(i,j);
Next
Next
'假设第一个元素的值最大,用r和c分别存放最大数所在的行和列
r=1:
c=1
Fori=1Ton
Forj=1Tom
Ifa(r,c)r=i
c=j
EndIf
Next
Next
Label3.Caption="矩阵中的最大值为:
"&a(r,c)&vbCrLf
Label3.Caption=Label3.Caption&"位置:
"&r&"行,"&c&"列"
EndSub
5-3
属性设计:
预算结果:
代码编写:
PrivateSubCommand1_Click()
Dima(1To10)AsInteger
Picture1.Cls
Picture1.Print"调换前的数组:
"
Fori=1To10
a(i)=Int(Rnd*100)
Picture1.Printa(i);
Next
Picture1.Print
'数组元素是两两互换,因此需要5次既可以调换完成
Fori=1To5
t=a(i)
a(i)=a(11-i)
a(11-i)=t
Next
Picture1.Print"调换后的数组:
"
Fori=1To10
Picture1.Printa(i);
Next
EndSub
5-4属性设计:
运算结果:
代码编写:
PrivateSubCommand1_Click()
Dimx$(),a%(4To9),b(),i%,n%,y,k%
b=Array("无效数据","小于60分","60~69","70~79","80~89","90~100")
x=Split(Text1,",")
n=UBound(x)
ForEachyInx
Ify<0Ory>100Then
y=40
ElseIfy<60Then
y=50
ElseIfy=100Then
y=90
EndIf
k=y\10
a(k)=a(k)+1
Nexty
Fori=4To9
Picture1.Printb(i-4),a(i)
Nexti
EndSub
5-5属性设计:
运算结果:
代码编写:
PrivateSubCommand1_Click()
'用wi数组保存加权因子
wi=Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)
'Y数组保存对应的第18位编码
y=Array(1,0,"X",9,8,7,6,5,4,3,2)
'获取用户输入的身份证的前17位
sfz=Text1.Text
'若不足17位,报错并退出
IfLen(sfz)<>17Then
MsgBox"你输入的位数不够",vbCritical
ExitSub'退出子程序
EndIf
'计算加权值
s=0
Fori=0To16
t=Val(Mid(sfz,i+1,1))
s=s+t*wi(i)
Next
yt=sMod11
Label2.Caption="第十八位编码是:
"&y(yt)
EndSub
5-6属性结果:
运算结果:
代码编写:
PrivateSubCommand1_Click()
'声明一个数组保存数列的前30项
Dima(1To30)AsLong
'根据题目,前两项为1
a
(1)=1
a
(2)=1
'计算后28项
Fori=3To30
a(i)=a(i-1)+a(i-2)
Next
Fori=1To30
Picture1.PrintTab(((i-1)Mod5)*8+2);a(i);
Next
EndSub
5-7
属性设计:
运算结果:
代码编写:
PrivateSubCommand1_Click()
'用数组a保存产生的字母
Dima(1To15)AsString
'因为要求产生的字母不能重复,因此循环多少次来产生不能确定,因此不能使用for循环
'首先产生一个
a
(1)=Chr(Int(Rnd*26+65))
n=1
DoWhilen<15
'产生一个字母
t=Chr(Int(Rnd*26+65))
'查询此字母是否已经产生
'假设此字母还未产生
f=False
Fori=1Ton
Ift=a(i)Then
'已经出现重复
f=True
ExitFor
EndIf
Next
'如果没有重复,则插入数组,并给n加1
Iff=FalseThen
n=n+1
a(n)=t
EndIf
Loop
'输出产生的字母
Fori=1To15
Picture1.PrintTab(((i-1)Mod5)*8+2);a(i);
Next
EndSub
5-8
属性设计:
运算结果:
代码编写:
'在此位置声明可以让所有的过程使用
Dima()
DimnAsInteger'保存数组元素的个数
PrivateSubCommand1_Click()
m=Val(Text1.Text)
p=Val(Text2.Text)
'首先给数组扩容
n=n+1
ReDimPreservea(1Ton)
'如果p<1,则插入到第一个位置
Ifp<1Thenp=1
'如果p>n,则插入到第最后位置
Ifp>nThenp=n
'从第p个元素开始,将后面的元素后移一位,将p的位置腾出
Fori=n-1TopStep-1
a(i+1)=a(i)
Next
'将m插入指定位置
a(p)=m
'输出结果
Picture1.Print
Pict