第7章 数组与自定义数据类型 2Word文档格式.docx

上传人:b****5 文档编号:19873284 上传时间:2023-01-11 格式:DOCX 页数:15 大小:31.64KB
下载 相关 举报
第7章 数组与自定义数据类型 2Word文档格式.docx_第1页
第1页 / 共15页
第7章 数组与自定义数据类型 2Word文档格式.docx_第2页
第2页 / 共15页
第7章 数组与自定义数据类型 2Word文档格式.docx_第3页
第3页 / 共15页
第7章 数组与自定义数据类型 2Word文档格式.docx_第4页
第4页 / 共15页
第7章 数组与自定义数据类型 2Word文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

第7章 数组与自定义数据类型 2Word文档格式.docx

《第7章 数组与自定义数据类型 2Word文档格式.docx》由会员分享,可在线阅读,更多相关《第7章 数组与自定义数据类型 2Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

第7章 数组与自定义数据类型 2Word文档格式.docx

分析一下这个程序的功能是什么。

1DimnAsInteger,kAsInteger,xAsInteger,rAsInteger'

模块级变量

2Dima(8)AsInteger'

模块级数组

3PrivateSubconv(dAsInteger,r,i)

4i=0

5DoWhiled<

>

0

6i=i+1

7a(i)=dModr:

d=d\r

8Loop

9EndSub

10

11PrivateSubForm_click()

12x=12'

A语句

13r=2'

B语句

14PrintCStr(x);

"

("

;

CStr(r);

)="

15Ifx=0Then

16Print0

17Else

18Callconv(x,r,n)

19Fork=nTo1Step-1

20Printa(k);

21Nextk

22Print

23EndIf

24EndSub

2.阅读下面程序,当单击窗体时,窗体上显示的内容是(3)。

1PrivateSubForm_Click()

2Dima(3,3)AsInteger:

DimiAsInteger

3a(1,1)=1:

a(1,2)=2:

a(1,3)=3:

a(2,1)=4

4a(2,2)=5:

a(2,3)=6:

a(3,1)=7:

a(3,2)=8:

a(3,3)=9

5Fori=1To3

6Fork=1Toi

7Callchang(a,i)

8Next

9Next

10Fori=1To3

11Fork=iTo3

12Printa(i,k)&

"

13Next

14Next

15EndSub

16

17Subchang(a()AsInteger,iAsInteger)

18c=a(i,UBound(a,2))

19Fork=UBound(a,2)-1To1Step-1

20a(i,k+1)=a(i,k)

21Next

22a(i,1)=c

23EndSub

3.下面的事件过程把一维数组中元素的值向右循环移位,移位次数由文本框输入。

“循环”指的是最右边的元素值补到最左边。

例如,数组各元素的值依次为0,1,2,3,4,5,6,7,8,9,10;

移位三次后,各元素的值依次为:

8,9,10,0,1,2,3,4,5,6,7。

在画线处填入适当的语句。

1PrivateSubCommand1_Click()

2DimintArray(10)AsInteger

3DimintIAsInteger,intJAsInteger,intKAsInteger

4ForintI=0To10

5intArray(intI)=intI

6Next

7intJ=Text1.Text

8Do

9intK=intK+1

10(4)

11LoopUntil(5)

12ForintI=0To10

13PrintintArray(intI)

17PrivateSubMoveright(intA()AsInteger)

18DimintIAsInteger,intJAsInteger,intKAsInteger

19intI=UBound(intA):

intJ=intA(intI)

20ForintK=intIToLBound(intA)+1Step-1

21(6)

22Next

23(7)

4.本程序段的功能是重新排列数组a中元素的值,使相等元素值相邻存放,并且保持它们在数组中首次出现时的相对次序。

在画线处填入适当内容。

例如,原数组:

1,2,4,3,3,3,2,1,4,5

重排后:

1,1,2,2,4,4,3,3,3,5

排列的原理是:

先删去重复元素,再根据各元素在数组中出现的次数展开排列。

1DimnAsInteger

2DimiAsInteger,jAsInteger,kAsInteger,tAsInteger,mAsInteger

3Dima()AsInteger,b()AsInteger

4n=10

5ReDima(n),b(n)

6a

(1)=1:

a

(2)=2:

a(3)=4:

a(4)=3:

a(5)=3

7a(6)=3:

a(7)=2:

a(8)=1:

a(9)=4:

a(10)=5

8m=1

9(8)

10DoWhilem<

=t

11k=1:

i=m+1

12DoWhilei<

13Ifa(i)=a(m)Then

14k=k+1

15Forj=(9)

16a(j)=a(j+1)

17Nextj

18t=t-1

19Else

20(10)

21EndIf

22Loop

23b(m)=k:

m=m+1

24Loop

25t=n

26Fori=m-1To1Step-1

27Forj=1To(11)

28a(t)=a(i)

29(12)

30Nextj

31Nexti

32Forj=1Ton

33Printa(j)

34Nextj

5.本程序生成50个位于-100~100之间的不重复的随机整数,并找出第几个是最大值(执行结果如图7.15所示)。

填空完善程序。

1OptionBase1

2PrivateSubCommand1_Click()

3DimiAsInteger,kAsInteger,tAsInteger,sAsInteger

4DimmaxAsInteger,pmaxAsInteger

5Dima()AsInteger

6Randomize

7max=-100

8pmax=1

9(13)

10Do

11IfRnd>

0.5Thens=1Elses=-1

12t=s*Int(Rnd*100)+1

13(14)

14DoWhilek<

i

15Ift<

a(k)Then

16k=k+1

17Else

18ExitDo

19EndIf

20Loop

21Ifk=iThen

22(15)

23a(k)=t

24Printa(k);

25i=i+1

26If(i-1)Mod10=0ThenPrint

27Ifmax<

tThenmax=t:

(16)

28EndIf

29LoopUntili>

50

30Print

31Print"

最大值为"

max;

,位于第"

pmax;

个"

32EndSub

四、改错题

下面程序的功能是分别找出48、308和1155三个数的所有质因子(如图7.16所示)。

要求:

(1)新建工程,输入以下代码;

(2)改正程序中的错误,改错时,不得增加或删除语句;

(3)分别以tform和tprj为文件名将窗体和工程保存到C:

盘新建的文件夹t中。

1PrivateSubForm_click()

2DimFac()AsInteger,N(3)AsInteger

3DimIAsInteger,JAsInteger

4N

(1)=48:

N

(2)=308:

N(3)=1155

5ForI=1To3

6CallFactor(Fac,N(I))

7PrintN(I);

的质因子有:

"

8ForJ=1ToUBound(Fac)

9PrintFac(J);

10Next

11Print

12ReDimFac(I)

13Next

14EndSub

15

16PrivateSubFactor(F()AsInteger,ByValN()AsInteger)

17DimIAsInteger,JAsInteger,IdxAsInteger

18DimKAsInteger

19K=2

20DoUntilN=1

21IfNModK=0Then

22Idx=Idx+1

23ReDimF(Idx)

24F(Idx)=K

25N=N/K

26Else

27K=K-1

29Loop

30EndSub

五、编程题

1.编程找出三个三位数,它们分别是某三个二位数的平方,且1~9这九个数字在这三个三位数中各只允许出现一次。

2.定义一个二维动态数组a(1Ton,1Ton)代表n×

n的方阵(n由文本框输入)。

编程给数组元素赋值,使之成为如下所示的螺旋方阵(图中是n=5时的情况)。

3.有17个人围成一个圈(编号为0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。

求此人原来的编号是多少。

4*.编写递归函数过程实现折半查找。

5*.编写一个求多个正整数最大公约数的递归函数。

参考答案

1.D2.B3.B4.A5.D

1.√2.×

3.×

4.√5.×

6.×

7.√8.√

1.

(1)12

(2)=1100

(2)64(8)=100

2.(3)3,1,2,6,4,9,

3.(4)CallMoveright(intArray)或MoverightintArray(5)intK=intJ

(6)intA(intK)=intA(intK-1)(7)intA(LBound(intA))=intJ

4.(9)t=n(9)iTot-1(10)i=i+1(11)b(i)(12)t=t-1

5.(13)i=1(14)k=1(15)ReDimPreservea(k)(16)pmax=k

(1)第16行中形参N后面的空括号应删除

(2)第23行应为:

ReDimPreServeF(Idx)

(3)第27行应为:

K=K+1.

1.这三个三位数分别是:

361、529和784。

2DimintA(10To31,1To4)

3Dimint1AsInteger,int2AsInteger,int3AsInteger

4Dimint4AsInteger

5Dimbln1AsBoolean

6Forint1=10To31

7intA(int1,1)=int1*int1

8intA(int1,2)=intA(int1,1)Mod10

9intA(int1,3)=intA(int1,1)\10Mod10

10intA(int1,4)=intA(int1,1)\100

11Next

12Forint1=10To31

13Forint2=int1+1To31

14Forint3=int2+1To31

15Forint4=1To9

16bln1=False

17bln1=bln1Or(int4=intA(int1,2))

18bln1=bln1Or(int4=intA(int1,3))

19bln1=bln1Or(int4=intA(int1,4))

20bln1=bln1Or(int4=intA(int2,2))

21bln1=bln1Or(int4=intA(int2,3))

22bln1=bln1Or(int4=intA(int2,4))

23bln1=bln1Or(int4=intA(int3,2))

24bln1=bln1Or(int4=intA(int3,3))

25bln1=bln1Or(int4=intA(int3,4))

26IfNotbln1ThenExitFor

27Next

28

29Ifint4=10Then

30PrintintA(int1,1),intA(int2,1),intA(int3,1)

31EndIf

32Next

33Next

34Next

35EndSub

2.

2Dima()AsInteger

3DimncAsInteger,nrAsInteger,nAsInteger

4DimiAsInteger,jAsInteger,kAsInteger

5n=Cint(Text1.Text)

6ReDima(1Ton,1Ton)

7nc=n:

nr=1:

i=1:

j=1

8Fork=1Ton*n

9a(i,j)=k

10Ifi<

ncAndj=nrThen

11i=i+1

12ElseIfi=ncAndj<

ncThen

13j=j+1

14ElseIfi>

nrAndj=ncThen

15i=i–1

16ElseIfi=nrAndj>

nr+1Then

17j=j–1

18EndIf

19Ifi=nrAndj=nr+1Then

20nc=nc–1

21nr=nr+1

22EndIf

23Next

24Fori=1Ton

25Forj=1Ton

26Printa(i,j),

28Print

29Next

3.10号。

解法一:

2DimintA(0To16)AsInteger

3DimintNumAsInteger

4Dimint1AsInteger

5Dimint2AsInteger

6Forint1=0To16

7intA(int1)=1

8Next

9int1=0

10int2=0

11intNum=17

12DoWhileintNum>

1

13int1=int1+intA(int2)

14Ifint1Mod3=0AndintA(int2)<

0Then

15intA(int2)=0

16intNum=intNum-1

17EndIf

18int2=int2+1

19Ifint2>

16Thenint2=0

21Forint1=0To16

22IfintA(int1)=1ThenPrintint1

解法二:

2DimintA(0To16)AsBoolean

4Dimint1AsInteger

6int1=0

7int2=0

8intNum=17

9DoWhileintNum>

10DoWhileintA(int2)

11int2=int2+1

12Ifint2>

13Loop

14int1=int1+1

15Ifint1Mod3=0Then

16intA(int2)=True

17intNum=intNum-1

19int2=int2+1

20Ifint2>

21Loop

22Forint1=0To16

23IfNotintA(int1)ThenPrintint1

24Next

25EndSub

4.

1FunctionSearch3(a()AsInteger,intStartAsInteger,_

2intEndAsInteger,bAsInteger)AsInteger

3DimmAsInteger,nAsInteger,int1AsInteger

4m=intStart

5n=intEnd

6int1=(m+n)\2

7Ifb<

a(int1)Then

8n=int1-1

9Search3=Search3(a,m,n,b)

10ElseIfb>

11m=int1+1

12Search3=Search3(a,m,n,b)

13Else

14Search3=int1

15EndIf

16Ifm=nThen

17Search3=m

19EndFunction

说明:

对应于形参a()的实参为被搜索的数组(递增或递减),intStart和intEnd是数组下标的下界和上界,b是要查找的数值。

5.

1PrivateFunctiongcd(a()AsInteger)AsInteger

2DimiAsInteger,jAsInteger

3DimuAsInteger,vAsInteger,rAsInteger

4i=LBound(a)

5j=UBound(a)

6Ifi=jThen

7gcd=a(i)

8Else

9u=a(j-1)

10v=a(j)

11DoWhilev<

12r=uModv

13u=v

14v=r

15Loop

16a(j-1)=u

17ReDimPreservea(iToj-1)

18gcd=gcd(a)

20EndFunction

对应于形参a()的实参必须是动态数组,本函数计算并返回此数组各元素的最大公约数。

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

当前位置:首页 > 总结汇报 > 工作总结汇报

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

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