VB 实习四数组与自定义数据类型.docx

上传人:b****5 文档编号:30133202 上传时间:2023-08-05 格式:DOCX 页数:46 大小:523.35KB
下载 相关 举报
VB 实习四数组与自定义数据类型.docx_第1页
第1页 / 共46页
VB 实习四数组与自定义数据类型.docx_第2页
第2页 / 共46页
VB 实习四数组与自定义数据类型.docx_第3页
第3页 / 共46页
VB 实习四数组与自定义数据类型.docx_第4页
第4页 / 共46页
VB 实习四数组与自定义数据类型.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

VB 实习四数组与自定义数据类型.docx

《VB 实习四数组与自定义数据类型.docx》由会员分享,可在线阅读,更多相关《VB 实习四数组与自定义数据类型.docx(46页珍藏版)》请在冰豆网上搜索。

VB 实习四数组与自定义数据类型.docx

VB实习四数组与自定义数据类型

实习四数组与自定义数据类型

一、实习目的

1.理解数组的概念、分类,数组定义方法;

2.掌握数组的操作(赋值、运算、输出)的基本方法;

3.掌握与数组有关的算法;

4.理解自定义数据类型;

5.了解控件数组。

二、实习内容

1.掌握一维数组的定义、赋值和输出方法;

2.理解静态数组与动态数组的区别和使用

3.掌握一维数组基本应用和有关算法(统计、求极值、排序、查询)等;

4.掌握二维数组程序设计方法和的基本应用;

5.完成课后编程习题。

6.阅读教材自定义数据类型和控件数组的内容,通过上机验证进一步理解。

三、程序算法及代码

课本习题验证:

例题5-1、

界面设置:

数据来源:

属性结果:

代码编写:

PrivateSubCommand1_Click()

Dimsum!

aver!

i%,x!

(1To10)

Open"c:

\000.txt"ForInputAs#1

aver=0

Fori=1To10

Input#1,x(i)

Print"第"&i&"个学生的成绩为:

"&x(i)

aver=aver+x(i)

Nexti

Close

aver=aver/10

Print"平均分为:

"&aver

Print"=======以下成绩高于平均分======="

Fori=1To10

Ifx(i)>averThen

Print"第"&i&"个学生成绩为:

"&x(i)

EndIf

Nexti

EndSub

例题5-2

代码编写:

PrivateSubCommand1_Click()

Dimaver!

i%,n%,x!

()

Open"c:

\000.txt"ForInputAs#1

aver=0

n=0

DoUntilEOF

(1)

n=n+1

ReDimPreservex(n)

Input#1,x(n)

Print"第"&i&"个学生的成绩为:

"&x(n)

aver=aver+x(n)

Loop

Close

aver=aver/n

Print"平均分为:

"&aver

Print"=======以下成绩高于平均分======="

Fori=1Ton

Ifx(i)>averThen

Print"第"&i&"个学生成绩为:

"&x(i)

EndIf

Nexti

EndSub

属性结果:

例题5-3、

属性结果:

代码编写:

PrivateSubCommand1_Click()

Dima(),x%

a=Array("sunday","monday","tuesday","wednesday","thursday","friday","saturday")

Do

x=InputBox("请输入0-6之间的一个数字")

LoopWhilex>6Orx<0

MsgBoxa(x)

EndSub

例题5-4

属性设计:

属性结果:

代码编写:

PrivateSubCommand1_Click()

Dima$(),x

a=Split(Text1.Text,",")

ForEachxIna

i=i+1

Picture1.PrintTab(6*(iMod10)+1);x;

Nextx

IfiMod10=0ThenPrint

EndSub

例题5-5

属性:

属性结果:

代码编写:

PrivateSubCommand1_Click()

Dimx%

Open"c:

\000.txt"ForInputAs#1

Text1=""

DoUntilEOF

(1)

Input#1,x

Text1=Text1&x&","

Loop

Text1=Left(Text1,Len(Text1)-1)

Close

EndSub

PrivateSubCommand2_Click()

Dima$(),k%,y

Dimx(0To10)AsInteger

IfText1=""Then

MsgBox"请先从数据文件中读取数据!

"

ExitSub

EndIf

a=Split(Text1,",")

ForEachyIna

k=y\10

x(k)=x(k)+1

Nexty

Picture1.Print"统计结果如下:

"

Picture1.Print"100分的有:

"&x(10)&"人"

Fori=9To0Step-1

Picture1.Printi*10&"分-";i*10+9&"分有:

"&x(i)&"人"

Nexti

EndSub

PrivateSubText1_Change()

End

EndSub

例题5-6

属性设计:

属性结果:

代码编写:

PrivateSubCommand1_Click()

Dima%(65To90),cAsString*1

le=Len(Text1)

Fori=1Tole

c=UCase(Mid(Text1,i,1))

Ifc>="A"Andc<="Z"Then

j=Asc(c)

a(j)=a(j)+1

EndIf

Nexti

Forj=65To90

Ifa(j)>0ThenPicture1.Print"";Chr(j);"=";a(j);"";

Nextj

EndSub

例题5-7

属性结果:

代码编写:

OptionBase1

PrivateSubCommand1_Click()

Dima%(10),i%,k%

Randomize

Fori=1To10

a(i)=Int(Rnd*90)+10

Printa(i);

Nexti

Print

k=1

Fori=2To10

Ifa(k)

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 公共行政管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1