实验6数组程序设计.doc_第1页
实验6数组程序设计.doc_第2页
实验6数组程序设计.doc_第3页
实验6数组程序设计.doc_第4页
实验6数组程序设计.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验6 数组程序设计实验目的:1掌握的定义方法。2掌握静态和动态数组使用。3掌握控件数组的产生方法4明确控件数组中控件名称的特点5掌握运用控件数组的编程方法。实验6.1一维数组实验任务:编程随机产生10个任意的两位正整数,并把它们保存在数组a(1 To 10)中,要求输出数组中所存放的10个数值,如图6-1所示。图6-1 实验6.1的实验结果提示:可以根据Rnd函数的取值范围来确定如何随机产生两位正整数。实验6.2二维数组实验任务:编程用InputBox函数输入一个二维数组(矩阵),并在窗体上按如图6-2所示的标准格式输出每行中最大的元素。图6-2 二维数组的输出提示:1输入时InputBox上的提示信息要表明当前输入的是矩阵中的哪一个元素(动态显示方法),如图6-3所示。图6-3 输入框2数组输入和输出,一般情况下都要使用两重循环结构。外面一重循环对应于行的变化,里面一重循环对应于列的变化(列的变化比行的变化快)。标准输出方式是在Picture1.Print语句的输出项之间用逗号间隔,输出时要产生3行4列的效果,还应该在两重循环之间添加一个无参数的Picture1.Print语句,用来换行。求每行的最大值也需要通过双重循环实现。实验步骤:1完善代码Option ExplicitPrivate Sub Form_Click()Dim a(4, 3) As Integer, i As Integer, j As IntegerDim max As IntegerFor i = 1 To 4 For j = 1 To 3 a(i, j) = InputBox(请输入矩阵的第( & i & , & j & )元数, 输入矩阵元数) Picture1.Print a(i, j), Next j Next iFor i = 1 To 4 For j = 2 To 3 If max a(i, j) Then Next j Picture1.Print 第 & i & 行最大的是:; max Next iEnd Sub2保存文件,调试运行。思考:如果要求显示每行最大元素的行列位置,应如何修改代码。实验6.3判断完数实验任务:已知一个数如果恰好等于它的因子之和,这个数就被称为“完数”。一个数的因子是指除了该数本身以外能够被其整除的数。例如6是一个完数,因为6的因子是1,2,3,而且6=1+2+3。要求编程对于任意输入的一个数,能够判断出该数是否是完数,并对不同结果进行输出;单击“输入下一个数”时,要清除文本框和图片框中的内容,并且光标在文本框中闪烁。提示:可以将输入的数的因子逐个求出,放到数组中,并对因子进行累加,若为完数或不是完数结果输出如图6-4所示。因为无法预知因数的个数,所以要使用动态数组。 图6-4 运行结果界面实验步骤:1窗体布局,在窗体上摆放Label、TextBox、Frame、PictureBox(用于显示结果)各一个,在将三个CommandButton拖放到窗体上,具体布局参见图6-4。2完善代码Private Sub CmdJudeg_Click() Dim m As Integer, i As Integer, j As Integer, k As Integer Dim a() m = Text1.Text ReDim a(1) 重定义数组 a(1) = 1 k = 1 j = 1 For i = 2 To m - 1 If m Mod i = 0 Then k = k + i 因数和 j = j + 1 因数个数 ReDim Preserve a(j) 重定义数组,且保留原有数据 a(j) = i 将因数保存在数组中 End If Next i If m = k Then Picture1.Print m & 是完数,因为 Picture1.Print m; =; For i = 1 To UBound(a) - 1 UBound(a)求数组上界函数 Picture1.Print a(i); +; Next I Picture1.Print a(i) 输出最后一个因数 Else Picture1.Print m & 不是完数 End IfEnd SubPrivate Sub CmdExit_Click() Unload MeEnd SubPrivate Sub CmdNext_Click() Picture1.Cls 清除图片框中内容 Text1.Text = Text1.SetFocusEnd Sub3保存文件,调试运行。思考:如何修改程序求出1000以内的所有“完数”并将结果存入一个文件?试一试。实验6.4成绩统计实验任务:编程随机产生32个学生的计算机课程的成绩存放数组Mark(1 To 32)中,统计各分数段5059、6069、7079、8089、90100的人数n以及求出最高分max和最低分min。结果输出要求:32名学生的成绩按每行8个显示在窗体上,第5行显示最高分和最低分,并以同样输出格式将结果存放于顺序文件out.dat中。提示:统计各分数段的人数,可以利用数组下标来实现。实验6.5计算天数实验任务:编程任意输入一个日期,即可计算出这个日期是一年中的第几天。提示:一年中的每一个月天数是一定的,只有闰年时,2月份是29天,所以要对输入的年份进行闰年判断。另外,每月的天数可以事先赋值到数组中,但是用InputBox从键盘接受多个固定数据很不方便,VB中又没有给数组赋初值的语句。为解决这一问题,采用将初值放在ListBox中,运行时用代码将ListBox中的数据给数组赋初值。闰年算法是年份能被4整除同时不能被100整除,或者年份能被100整除同时能被400整除,这一年就是闰年,是闰年就用一个标签框表示出来。将闰年和非闰年的112月份的天数分为两组,放置在两个ListBox中,定义一个两维数组mtable(2,12),第一维作为闰年标致,第二维作为月份天数。两个ListBox在运行时不显示出来,见图6-6。对于固定1到12个月和1到31天这些数字,将它们放在两个组合框中便于选择。实验步骤:1窗体布局设计如图6-5所示。图6-5 计算天数窗体布局图6-6 计算天数运行界面2部分控件属性设置控件名称属性名称属性值组合框1NameCmbMonthText1List1 2 3 4 5 6 7 8 9 10 11 12Style0组合框2NameCmbDayText1List1 2 3 4 5 6 7 8 .30 31Style0列表框1List31 28 31 30 31 20 31 31 30 31 30 31VisibleFalse列表框2List31 29 31 30 31 20 31 31 30 31 30 31VisibleFalse闰年显示标签框NameLabLeapCaption闰年Font斜体4号字VisibleFalse3添加代码Option Base 1 数组下标从1开始Private Sub CmdCountdays_Click() Dim days As Integer, i As Integer, leap As Integer Dim mtable(2, 12) As Integer For j = 1 To 12 mtable(1, j) = List1.List(j - 1) 将非闰年的月份天数赋给数组 Next j For j = 1 To 12 mtable(2, j) = List2.List(j - 1) 将闰年的月份天数赋给数组 Next j leap = 1标志闰年的变量赋初值1 If (TxtYear Mod 4 = 0 And TxtYear Mod 100 0 Or TxtYear Mod 400 = 0) Then leap = 2 闰年则标志变量值变为2 LabLeap.Visible = True 闰年标签出现 End If days = CmbDay.Text For i = 1 To CmbMonth.Text - 1 days = days + mtable(leap, i) 闰年标志作变量为下标变量 Next i TxtDays.Text = daysEnd SubPrivate Sub TxtYear_Change() LabLeap.Visible = False 输入年份时,闰年标签隐藏End SubPrivate Sub CmdExit_Click() Unload MeEnd Sub4保存文件,调试运行。随机输入四位数的不同年份,仔细体验各种控件、属性、事件的作用;深刻理解leap变量的作用。实验6.6字符数组实验任务:编程随机产生15个不重复的英文大写字母,存放在字符数组中并显示出来。提示:1可以利用函数Rnd和Chr使得随机产生数值可转变为字符。2每产生一个新的字符要与已经存在的字符逐一比较,非重复字符方可存入。实验6.7数值排序实验任务:编程产生10个二位随机整数,按升序排列。提示:假设在数组A中存放N个无序数据,要求将这N个数按升序重新排列。第一轮比较:将A(1)和A(2)比较,若A(1)A(2)则交换这两个数组元素的值,否则不交换;然后再用A(2)和A(3)比较,处理方法相同;以此类推,直到A(N-1)和A(N)比较后,这时A(N)中就存放了N个数中最大的数。第二轮比较:将A(1)和A(2)、A(2)和A(3),A(N-2)和A(N-1)比较,处理方法和第一轮相同,这一轮比较结束后A(N-1)中就存放了N个数中第二大的数。第N-1轮比较:将A(1)和A(2)进行比较,处理方法同上,比较结束后,这N个数按从小到大的次序排列好。这种排序方法较冒泡排序,它与选择排序法的不同之处在于:选择排序法每一轮比较是拿固定位置的数组元素和其后的若干数组元素依次比较;而冒泡排序法则是将相邻的两个数组元素进行比较,实现上类似但不完全相同。实验步骤:1完善代码Private Sub Form_click() Dim rndArray(10) As Integer Dim i As Integer, j As Integer,temp As Integer Randomize 随机语句 Print 排序前: For i = 1 To 10 rndArray(i) = Int(90 * Rnd + 10) Rnd随机函数 Print rndArray(i); Next i For i = 1 To _ For j = _ To _ If _ Then temp = _ _ _ End If Next j Next i Print Print 排序后: For i = 1 To 10 Print rndArray(i); Next i PrintEnd Sub2保存文件,调试运行。实验6.8加密解密实验任务:编程对任意输入的英文短语加密和解密。要求(1)按照原字母ASCII码加2的规则进行加密。(2)按照加密后的字母ASCII码减2的规则进行解密。(3)用InputBox从键盘输入短语;加密和解密的结果用MsgBox输出。提示:可以用四个命令按钮构成控件数组。编制代码时用IF-Then-Else对控件数组的下标(Index)进行判断,以便执行相应的操作。实验步骤:1在窗体上摆放一个命令按钮,并对其设置相关属性(见属性设置表),用复制、粘贴的方法产生另外两个命令按钮。形成控件数组,见图6-7。图6-7 加密解密窗体界面2属性设置控件属性设置值窗体1Caption加密解蜜命令按钮1(0)NamecmdOperateCaption输入短语Font小四、粗体命令按钮1(1)NamecmdOperateCaption加 密Font小四、粗体命令按钮1(2)NamecmdOperateCaption解 密Font小四、粗体命令按钮1(3)NamecmdOperateCaption退 出Font小四、粗体3添加代码Option ExplicitDim sPhrase As String, sEncrypted As String 说明共用变量Dim iLen As IntegerPrivate Sub cmdOperate_Click(Index As Integer) 其中Index参数是命令按钮下标,系统会自动产生。 Dim sCurrent As String, sNew As String Dim sDecrypted As String Dim x As Integer If Index = 0 Then sPhrase = InputBox(请输入短语, 短语将被加密) iLen = Len(sPhrase) 计算长度 ElseIf Index = 1 Then sEncrypted = 变量初始化 For x = 1 To iLen 加密 sCurrent = Mid(sPhrase, x, 1) sNew = Chr(Asc(sCurrent) + 2) sEncrypted = sEncrypted & sNew Next x MsgBox sEncrypted, vbExclamation, 加密的短语 输出加密结果 ElseIf Index = 2 Then For x = 1 To iLen sCurrent = Mid(sEncrypted, x, 1) 解密 sNew = Chr(Asc(sCurrent) - 2) sDecrypted = sDecrypted & sNew Next x MsgBox sDecrypted, vbExclamation, 解密的短语 输出解密结果 Else Unload Me End IfEnd Sub4保存文件,调试运行,结果参见图6-8。图6-8 输入、加密、解密对话框思考:若要使YZ和yz加密变为AB和ab,即最后两个字母加密变成前两个字母而不是其它的符号,解密与此反之即可。该怎样修改程序?实验6.9旅游路线实验任务:编程提供有关旅游线路、出行方式以及相应价格。旅游线路有三条,每一条旅游线都提供两种出行方式,且对应的价格不同,具体数据见下表。要求:三条旅游线路的选择用一组选项按钮(单选按钮)实现;当选中某条线路时,出现与这条线路相关的两种出行方式;选中具体的出行方式后,显示出对应的价格。旅游线路出行方式价格(元/人)南京-青岛-大连双卧6日游1580单飞5日游1880南京-三峡-重庆单飞7日游1880轮船12日游1280南京-杭州-普陀汽车5日游780双飞3日游1080提示:由于三条旅游线路共对应六种出行方式,当选中某条线路时,只能出现与这条线路相关的两种出行方式,另外四种出行方式要隐藏起来。所以将六种出行方式分为三组,每次出现其中的一组,隐藏其它两组。实验步骤:1在窗体上放置一个标签框,一个图象框(PictureBox)和一个命令按钮;2放置框架1(Frame控件),在框架中用控件数组的方式产生一组(三个)单选按纽,用来提供旅游线路。图6-9 窗体设计时的界面3放置框架2(Frame控件),在框架中用控件数组的方式产生一组(两个)单选按纽,用来提供第一条旅游线路所对应的出行方式。选中框架2,对其进行两次复制、粘贴操作(框架中的单选按钮会一同被复制),既产生一组(三个)框架控件数组;这三个框架中的六个单选按钮,也自动形成一组控件数组(图6-9)。将各个控件的属性设计好后,把旅游方式三个框架重叠在一起,运行界面效果如图6-10所示。注意,通过对框架2控件数组的可见性(Visible)属性的不同设置,就可以控制某一个框架出现,而另两个隐藏起来。图6-10 窗体运行时的界面4属性设置控件属性设置值窗体1Caption旅游咨询标签框1Caption价格Font小四、粗斜体图象框1NamePctPriceFont小四、粗体框架1NameFrmRoadCaption旅游线路单选按钮1(0)Caption南京-青岛-大连Font小四、斜体、华文彩云单选按钮1(1)Caption南京-三峡-重庆Font小四、斜体、华文彩云单选按钮1(2)Caption南京-杭州-普佗Font小四、斜体、华文彩云框架2(0)NameFrmWayCaption旅游方式VisibleTrue框架2(1)NameFrmWayCaption旅游方式Visiblefalse框架2(2)NameFrmWayCaption旅游方式Visiblefalse单选按钮2(0)Caption双卧6日游单选按钮2(1)Caption单飞5日游单选按钮2(2)Caption单飞7日游单选按钮2(3)Caption轮船12日游单选按钮2(4)Caption汽车5日游单选按钮2(5)Caption双飞3日游命令按钮1NamecmdExitCaption退 出5添加代码Option ExplicitPrivate Sub Option1_Click(Index As Integer) Select Case Index Case 0 FrmWay(0).Visible = True 按匹配条件选定旅游方式的框架可见 FrmWay(1).Visible = False 不匹配的框架不可见 FrmWay(2).Visible = False PctPrice.Cls 图象框清屏 Option2(0).Value = False 单选按钮初始化 Option2(1).Value = False Case 1 FrmWay(1).Visible = True FrmWay(0).Visible = False FrmWay(2).Visible = False PctPrice.Cls Option2(2).Value = False Option2(3).Value = False Case 2 FrmWay(2).Visible = True FrmWay(0).Visible = False FrmWay(1).Visible = False PctPrice.Cls Option2(4).Value = False Option2(5).Value = False End SelectEnd SubPrivate Sub Option2_Click(Index As Integer) Select Case Index Case 0 PctPrice.Cls PctPrice.Print 1580元/人 Case 1 PctPrice.Cls PctPrice.Print 1880元/人 Case 2 PctPrice.Cls PctPrice.Print 1980元/人 Case 3 PctPrice.Cls PctPrice.Print 1280元/人 Case 4 PctPrice.Cls PctPrice.Print 980元/人 Case 5 PctPrice.Cls PctPrice.Print 1180元/人 End SelectEnd SubPrivate Sub CmdExit_Click() Unload MeEnd Sub6保存文件,调试运行。测试各种旅游线路和出行方式的组合情况,参见图6-10。思考:请自己添加两条旅游线路,以及配套的出行方式。将旅游线路改放在组合框控件中,以便选择;出行方式仍用本例中的框架控件数组方法;修改代码实现功能。习题6习题6.1选择题1如下数组声明语句,( )正确。 (A)Dim a3,4 As Integer (B)Dim a(3,4)As Integer (C)Dim a(n,n)As Integer (D)Dim a(3 4)As Integer2要分配存放如下方阵的数据,可使用数组声明语句( )来实现(不能浪费空间)。 (A)Dim a(9) As Single (B)Dim a(3,3) As Single (C)Dim a(-1 To 1,-5 To -3)As Single (D)Dim a(-3 To -1,5 TO 7)As Integer3. 如下数组声明语句,数组a包含元素的个数为( )。 Dim a(3,-2 to 2,5) (A)120 (B)75 (C)60 (D)134以下程序输出的结果是( )。 Dim a a=Array(1,2,3,4,5,6,7) For i=Lbound(a)To Ubound(a) a(i)=a(i)*a(i) Next i Print a(i) (A)49 (B)0 (C)不确定 (D)程序出错5以下程序输出的结果是( )。 Option Base 1 Private Sub Commandl_Click() Dim a%(3,3) For i=1 To 3 For j=1 To 3 If i1 And j1 Then a(i,j)=a(a(i-1,j-1),a(i,j-1)+1 E1se a(i,j)=i*j End If Print a(i,j); ; Next j Print Next i End Sub (A)1 2 3 (B)1 2 3 (C)1 2 3 (D)1 1 1 2 3 1 1 2 3 2 4 6 2 2 2 3 2 3 1 2 3 3 6 9 3 3 36以下程序输出的结果是( )。 Option Base 1 Private Sub Command1_Click() Dim a, B(3, 3) a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9) For i = 1 To 3 For j = 1 To 3 B(i, j) = a(i * j) If (j = i) Then Print Tab(j * 3); Format(B(i, j), # # #); Next j Print Next i End Sub (A)1 2 3 (B)1 (C)1 4 7 (D)1 2 3 4 5 6 4 5 2 4 6 4 6 7 8 9 7 8 9 3 6 9 97下列关于数组的叙述中,错误的是 。A. 数组的维界可以是负数。 B. 数组是同类变量的一个有序的集合C. 数组元素可以是控件 D. 数组在使用之前,必须先用数组说明语句进行说明8某过程的说明语句中, 是正确的数组说明语句。 Const N As Integer = 4 Dim L As Integer.Dim X(L) As Integer.Dim A(K) As Integer Const K As Integer = 3.Dim B(N) As Integer .Dim Y(2000 to 2008) As IntegerA.B.C. D. 9下列有关数组叙述不正确的是 。A 两维数组在内存中的存放次序是按列优先原则存放B 三维数组在内存中的存放次序是按列优先原则存放C 没有特殊声明时,Dim A(8) As integer,A数组可以存放9个元素D Option Base 1语句不可以放在过程中。10下列有关数组叙述不正确的是 。A 用ReDim不能定义新数组B 使用Preserve参数后,就只能改变动态数组的最后一维的大小C 动态数组重新说明时不能改变类型D 可以将一维动态数组用ReDim语句说明成二维数组5在Vsuat Basic中,以下声明 是错误的? A控件数组中的控件可以在运行时用代码生成B控件数组中的控件响应同一个事件C控件数组中的控件都有相同的名字D。控件数组中的控件可以是不同类型的控件参考答案习题6.2判断题1Erase能够释放所有类型数组所占用的空间2Dim X(3.6+2)As Integer 定义了一个维上界是6的整形数组3Array函数只能把一个数据集赋值给Variant变量4数组元素下标超过维界时,VB会给出“下标越界”出错提示5用复制的方法建立控件数组,可以将第一对象的所有属性复制到其他控件中习题6.3设计题1随机生成15个100以内的正整数并显示在一个文本框中,再将所有对称位置的两个数据对调后显示在另一个文本框中(第1个数与第15个数对调,第2个数与第14个数对调,第3个数与第13个数对调)。2顺序文件in.dat中存放了20个两位正整数,编写程序将其读入数组中并统计其中有多少个不相同的数。3编写一个求由一位随机整数构成的55数组每一行与每一列之和。 4在一个数列中,删除其中的重复数,使得数列只保留不同的数。5有20个数围成一圈,找出每四个相邻数之和中的最大值,并指出是哪四个相邻的数。6设有一个二维数组A(5,5),试编写程序计算: (1)所有元素之和; (2)所有靠边元素之和; (3)两条对角线元素之和。7找出一个mn数组的“鞍点”。所谓“鞍点”是指一个在本行中值最大,在本列中值最小的数组元素。若找到了“鞍点”,则输出“鞍点”的行号和列号,若数组不存在“鞍点”,则输出“鞍点不存在”。8按金字塔形状打印杨辉三角形 l l 1 1 2 l l 3 3 1 1 4 6 4 l 1 5 10 10 5 l9利用随

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论