




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、大学计算机基础教程taiyuan university of technology第第7章章 使用数组使用数组visual basic 程序设计教程程序设计教程visual basic程序设计教程2本章介绍:本章介绍:构造结构类型构造结构类型数组数组列表框列表框组合框组合框一些典型算法一些典型算法visual basic程序设计教程3数组(数组(arrary)是构造的一种新的数据表达。)是构造的一种新的数据表达。数组是一组具有数组是一组具有的数据(叫做的数据(叫做数组元素)的连续存储单元。数组元素)的连续存储单元。数组中包含了一个或多个元素数组中包含了一个或多个元素下标给出了数组中元素的顺序下
2、标给出了数组中元素的顺序数组和循环结构配合,使数据处理变得容易。数组和循环结构配合,使数据处理变得容易。visual basic程序设计教程4【例【例7-1】设计程序,如图。对一批马拉松运动员按】设计程序,如图。对一批马拉松运动员按成绩(单位:小时)排名次。成绩(单位:小时)排名次。控件:控件:2个标签个标签2个列表框个列表框1个命令按钮个命令按钮visual basic程序设计教程5“输入数据并排名输入数据并排名”按钮作用:按钮作用:输入运行员人数输入运行员人数输入各运动员的姓名和成绩输入各运动员的姓名和成绩左列表框放排序前的数据左列表框放排序前的数据右列表框放排序后的名次数据。右列表框放排
3、序后的名次数据。事件:事件:主要是主要是command1的的click事件事件visual basic程序设计教程6排序又称分类。有多种方法:选择分类法、冒泡分类排序又称分类。有多种方法:选择分类法、冒泡分类法等。法等。对对n个数个数a(1)a(n),采用选择分类法的算法是:,采用选择分类法的算法是:先在先在n个数中选最小数,放在第个数中选最小数,放在第1个数组元素中。个数组元素中。取第取第1个数,与后面个数,与后面n-1(即(即2到到n)个数逐个比较。)个数逐个比较。若第若第1个数大,则个数大,则a(1)与参与比较的元素中的值与参与比较的元素中的值进行互换进行互换再将互换后的第再将互换后的第
4、1个数与剩下的数据比较,直到个数与剩下的数据比较,直到最后。最后。visual basic程序设计教程7再在第再在第2至至n个元素中,选最小数,放在第个元素中,选最小数,放在第2个数组个数组元素中。元素中。取第取第2个数,与后面个数,与后面n-2(即(即3到到n)个数逐个比)个数逐个比较。较。若第若第2个数大,则与数组元素中的值进行互个数大,则与数组元素中的值进行互换,换,直到最后。,直到最后。重复以上步骤,直至在最后两个数中选取最小数,重复以上步骤,直至在最后两个数中选取最小数,放在第放在第n-1个数组元素中。个数组元素中。visual basic程序设计教程8最后第最后第n个元素已是最大数
5、了。个元素已是最大数了。在第在第i至至n个元素中,选最小数并放入个元素中,选最小数并放入a(i) 的程序是:的程序是: for j = i + 1 to n将将a(i)与与a(i+1)a(n)逐一逐一比较比较 if a(i) a(j) then temp = a(i) : a(i) = a(j) : a(j) = temp 互换互换 next j然后再将然后再将i从从1循环到循环到n-1,就可构成分类(排序),就可构成分类(排序)程序段。程序段。visual basic程序设计教程9 private sub command1_click()dim name1() as string, scor
6、e() as single 动态数组声明动态数组声明dim tempname as string, tempscore as singledim n as integer, i as integer, j as integern = val(inputbox(“请输入运动员人数请输入运动员人数”, “输入输入”)redim name1(n), score(n) 根据人数动态定义数组的大小根据人数动态定义数组的大小list1.clear: list2.clear 清除两个列表框中数据清除两个列表框中数据for i = 1 to n 输入姓名和成绩输入姓名和成绩,放入左列表框放入左列表框 name
7、1(i) = inputbox(请输入第请输入第 & i & 位运动员姓名位运动员姓名, 姓名姓名) score(i) = val(inputbox(请输入第请输入第 & i & 位运动员成绩位运动员成绩, 成绩成绩) list1.additem name1(i) & & score(i), 0 next ivisual basic程序设计教程10for i = 1 to n - 1 开始按成绩从小到大排序开始按成绩从小到大排序 for j = i + 1 to n if score(i) score(j) then 同时交换姓名和成绩同时交换姓名和成绩 tempname = name1(i)
8、: name1(i) = name1(j): name1(j) = tempname tempscore = score(i): score(i) = score(j): score(j) = tempscore end if next jnext ifor i = 1 to n 将排序后数据及名次放入右列表框将排序后数据及名次放入右列表框 list2.additem i & & name1(i) & & score(i) next iend subvisual basic程序设计教程117.3.1 如何声明一维数组如何声明一维数组只有一个下标的数组,称为一维数组。只有一个下标的数组,称为一维
9、数组。使用使用n(1n16)个下标的数组,称为维数组。)个下标的数组,称为维数组。数组在使用前必须先声明。格式:数组在使用前必须先声明。格式:dim 数组名数组名(下标说明下标说明) as类型名类型名 ,数组名数组名(下下标说明标说明) as数据名数据名 visual basic程序设计教程12说明:说明:数组名的命名方式与变量名一样,但不能和简单数组名的命名方式与变量名一样,但不能和简单变量名重名。变量名重名。下标说明又称维定义符,定义了这个维的大小。下标说明又称维定义符,定义了这个维的大小。它有两种表示形式:它有两种表示形式:上界上界下界下界 to 上界上界下界和上界必须使用数值型常量表达
10、式下界和上界必须使用数值型常量表达式下界和上界表示数组元素的下标的范围下界和上界表示数组元素的下标的范围visual basic程序设计教程13在缺省状态下,起始下标(下界值)为在缺省状态下,起始下标(下界值)为0dim a(50),表示数组,表示数组a有有51个元素,即个元素,即a(0)、a(1)、a(50)。dim b(4 to 6),表示数组,表示数组b有有3个元素,即为个元素,即为b(4)、b(5)和和b(6)。缺省下界值可用缺省下界值可用option base语句重新设置,格式:语句重新设置,格式: option base 0|1option base 1,表示将下界缺省值设置为,表
11、示将下界缺省值设置为1。visual basic程序设计教程14类型名与变量声明时使用的一样,表示被声明的类型名与变量声明时使用的一样,表示被声明的这个数组的每一个元素都具有这种类型。这个数组的每一个元素都具有这种类型。省略类型名,则表示为省略类型名,则表示为variant类型。类型。例如,要声明两个包含例如,要声明两个包含50个元素的数组,一个存个元素的数组,一个存放姓名,为字符串型,一个存放年龄,为整型,放姓名,为字符串型,一个存放年龄,为整型,则声明语句为:则声明语句为: dim name1(50) as string, age(50) as integer一般情况下,它们实际各包含元素
12、一般情况下,它们实际各包含元素51个。个。visual basic程序设计教程157.3.2 使用一维数组使用一维数组使用数组包括:元素的引用、初始化及输入输出。使用数组包括:元素的引用、初始化及输入输出。1引用数组元素引用数组元素引用格式为:引用格式为: 数组名数组名(下标下标)数组名应与声明时的数组名相同数组名应与声明时的数组名相同下标必须用括号括起来,不能把下标必须用括号括起来,不能把score(1)写成写成score1。下标应为数值型的表达式,允许出现变量下标应为数值型的表达式,允许出现变量下标值应在下界和上界之间,否则出错。下标值应在下界和上界之间,否则出错。如,可用:如,可用:a(
13、2)、a(i)、a(k*2)等访问元素,只等访问元素,只要下标不越界要下标不越界visual basic程序设计教程162给数组元素赋值给数组元素赋值数组元素的用法,与简单变量用法一样数组元素的用法,与简单变量用法一样凡是可用简单变量的地方,都可用同一类型的凡是可用简单变量的地方,都可用同一类型的数组元素数组元素 a(k*2)=k*100 : s(i)=浙江大学浙江大学 & 计算计算机学院机学院for i=1 to 50 a(i) = inext ivisual basic程序设计教程173运行时通过输入赋值运行时通过输入赋值通过文本框:通过文本框: s(5)=text1.text通过输入对话
14、框对一批数组元素赋值通过输入对话框对一批数组元素赋值for i=1 to 50 a(i) = val(inputbox(请输入数据请输入数据)next ivisual basic程序设计教程184使用使用array函数对数组所有元素赋初值函数对数组所有元素赋初值array函数的使用格式是:函数的使用格式是: array(表达式表表达式表)表达式表中各表达式用逗号间隔表达式表中各表达式用逗号间隔array函数返回含有数组的函数返回含有数组的variant类型。类型。使用使用array函数前,必须先将数组名定义为函数前,必须先将数组名定义为variant类型。类型。dim c, b as inte
15、ger, i as integer 相当于相当于dim c as variant,.b = 100c = array(3, 4 + b, 5)for i = 0 to 2: print c(i),: nextarray函数根据表达式个数,确定数组的元素个数函数根据表达式个数,确定数组的元素个数visual basic程序设计教程195ubound函数和函数和lbound函数函数这两个函数的作用是获得数组上界和下界这两个函数的作用是获得数组上界和下界对于一维数组,它们的基本格式为:对于一维数组,它们的基本格式为: ubound(数组名数组名) 和和 lbound(数组名数组名) for i =
16、lbound(c) to ubound(c): print c(i),: nextvisual basic程序设计教程206输出一维数组输出一维数组输出个别元素,直接使用如输出个别元素,直接使用如print a(5)的句子的句子输出一批数组元素,往往使用循环:输出一批数组元素,往往使用循环:for i = 1 to 50 print a(i), if i mod 5 = 0 then print 换行换行next i7访问数组访问数组访问数组中各元素一般采用循环。访问数组中各元素一般采用循环。visual basic程序设计教程21【例【例7-2】输入】输入30位同学的编号和成绩,求他们的平位
17、同学的编号和成绩,求他们的平均成绩,并输出高于平均分的同学编号和成绩,以均成绩,并输出高于平均分的同学编号和成绩,以及这些同学的人数。及这些同学的人数。程序思路:程序思路:第一步,声明两个大小至少为第一步,声明两个大小至少为30的一维数组的一维数组id和和score,使,使id(i)和和score(i)表示第表示第i位同学的编位同学的编号和成绩;号和成绩;visual basic程序设计教程22第二步,输入第二步,输入30位同学的编号和成绩;位同学的编号和成绩;第三步,计算平均成绩;第三步,计算平均成绩;第四步,将每位同学的成绩与平均成绩比较,发第四步,将每位同学的成绩与平均成绩比较,发现大于
18、或等于平均成绩的输出编号和成绩,并现大于或等于平均成绩的输出编号和成绩,并计数;计数;第五步,输出统计人数。第五步,输出统计人数。visual basic程序设计教程237.3.2 使用一维数组使用一维数组- -【例【例7-27-2】 private sub command1_click()dim id(30) as long, score(30) as integer, i as integerdim average as single, count as integerfor i = 1 to 20 开始输入开始输入 id(i) = val(inputbox(请输入第请输入第 & i &
19、位编号位编号:, ) score(i) = val(inputbox(请输入第请输入第 & i & 位成绩位成绩:, )next iaverage = 0 开始计算平均分开始计算平均分for i = 1 to 30 average = average + score(i)next i输入数据和计算平均分可同时进行。这样可以去掉一次并列的循环。visual basic程序设计教程24average = average / 30print 平均分平均分= ; averagecount = 0 开始计数,并输出高于平均分的数开始计数,并输出高于平均分的数据据for i = 1 to 30 if sc
20、ore(i) average then print id(i); score(i), count = count + 1 : if count mod 5 = 0 then print 每行显示每行显示5人人 end ifnext iprint: print 人数人数=; count 输出人数输出人数end subvisual basic程序设计教程257.3.2 使用一维数组使用一维数组【例【例7-3】编程:按编号顺序输入】编程:按编号顺序输入10位同学的编号和姓名,位同学的编号和姓名,现班上又增一位同学,要求他的编号现班上又增一位同学,要求他的编号id1和姓名和姓名name1仍按编号顺序插
21、入到数组仍按编号顺序插入到数组id和和named中。中。该题主要解决两个问题:该题主要解决两个问题:一个是如何找到合适的位置一个是如何找到合适的位置可以利用循环,与数组元素逐个比较可以利用循环,与数组元素逐个比较若发现一个比若发现一个比id1大的编号大的编号id(i)就停止比较,则插入就停止比较,则插入位置就在位置就在id(i)之前。若没有一个编号比之前。若没有一个编号比id1大的,大的,则插到数组最后。则插到数组最后。visual basic程序设计教程26另一个是如何插入到数组中。另一个是如何插入到数组中。移动移动id(i)id(10)及及named(i)named(10)的位置,的位置,
22、空出空出i所在位置,插入所在位置,插入id1和和name1。移动位置时,可以采用这样的算法:移动位置时,可以采用这样的算法:把把id(10)移到移到id(11),id(9)移到移到id(10),把,把id(i)移到移到id(i+1)。因为这样移动时,不会丢失原来的数据。因为这样移动时,不会丢失原来的数据。visual basic程序设计教程277.3.2 使用一维数组使用一维数组数组元素插入数组元素插入const n = 10private sub command1_click()dim id(n + 1) as long, named(n + 1) as stringdim id1 as l
23、ong, name1 as string, i as integer, j as integerfor i = 1 to n 输入输入 id(i) = val(inputbox(请输入第请输入第 & i & 个编号个编号, ) named(i) = inputbox(请输入第请输入第 & i & 个姓名个姓名, )next iprint: for i = 1 to n: print id(i); named(i); /;: next i 输出起始数据输出起始数据visual basic程序设计教程28id1 = val(inputbox(请输入要插入的编号请输入要插入的编号, )name1 =
24、 inputbox(请输入要插入的姓名请输入要插入的姓名, )for i = 1 to n 确定要插入的位置确定要插入的位置i if id(i) id1 then exit fornext ifor j = n to i step -1 将将i n的数据后移的数据后移 id(j + 1) = id(j): named(j + 1) = named(j)next jid(i) = id1: named(i) = name1 插入插入print:for i=1 to n+1:print id(i); named(i); /;:next i 输出插输出插入后的数据入后的数据end subvisual
25、 basic程序设计教程297.3.2 使用一维数组使用一维数组- -排序改进排序改进【例【例7-4】改写例】改写例7-1中有关排序的程序段,使其采用改进中有关排序的程序段,使其采用改进的选择分类法。的选择分类法。例例7-1中,每发现一个中,每发现一个a(i) a(j)时,就要交换数据,事实时,就要交换数据,事实上对第上对第i趟,只要把趟,只要把a(i)a(n)中最小数与中最小数与a(i)交换就可以交换就可以了。了。改进的选择分类法采用:改进的选择分类法采用:在第在第i至至n个元素中,确定最小数所在的位置个元素中,确定最小数所在的位置position,即下标,即下标,再将再将a(i)与与a(p
26、osition)交换数据。交换数据。visual basic程序设计教程30改进的选择分类法采用:改进的选择分类法采用:在第在第i至至n个元素中,确定最小数所在的位置个元素中,确定最小数所在的位置position,即下标,即下标,再将再将a(i)与与a(position)交换数据。交换数据。for i = 1 to n - 1 按成绩从小到大排序按成绩从小到大排序 position = i 先假定先假定score(i)就是最小值,故记录下就是最小值,故记录下标标i for j = i + 1 to n if score(position) score(j) then position=j 记录
27、更记录更小的小的 next jvisual basic程序设计教程31 if i position then 下标下标position与下标与下标i的数据的数据交换交换 tempname = name1(i): name1(i) = name1(position) name1(position) = tempname tempscore = score(i): score(i) = score(position) score(position) = tempscore end if next ivisual basic程序设计教程327.3.3 使用使用for each/next语句访问数组语
28、句访问数组采用采用for each /next语句可以遍历数组中所有元素语句可以遍历数组中所有元素格式:格式: for each 元素元素 in 数组名数组名 循环体循环体next其中元素必须为一个其中元素必须为一个variant类型的变量类型的变量只要数组有一个元素,就会进入循环。只要数组有一个元素,就会进入循环。visual basic程序设计教程33循环的执行过程是:循环的执行过程是:分别对数组中的第一个元素、第二个元素、分别对数组中的第一个元素、第二个元素、最、最后一个元素,按序执行一次循环体。后一个元素,按序执行一次循环体。例如要输出数组例如要输出数组a中各元素及它们的和,可用:中各
29、元素及它们的和,可用: s = 0for each x in a x为为variant类型的变量,不必类型的变量,不必赋值;赋值;a为数组名为数组名 print x; : s = s + xnextprint: print svisual basic程序设计教程347.4.1 列表框列表框(listbox)列表框和组合框可解决单选框和复选框选项数量的限列表框和组合框可解决单选框和复选框选项数量的限制。制。列表框控件可显示多个项目列表列表框控件可显示多个项目列表列表框往往可让用户选择一个或多个项目。列表框往往可让用户选择一个或多个项目。例如通过选择字体来改变标签的文字字体。例如通过选择字体来改变
30、标签的文字字体。系统提供的字体有系统提供的字体有100多种,使用多种,使用listbox,可以,可以它们都放入列表框,利用滚动条,方便选择。它们都放入列表框,利用滚动条,方便选择。visual basic程序设计教程35列表框和组合框可解决单选框和复选框选项数量的限制。列表框和组合框可解决单选框和复选框选项数量的限制。列表框控件可显示多个项目列表列表框控件可显示多个项目列表列表框往往可让用户选择一个或多个项目。列表框往往可让用户选择一个或多个项目。例如通过选择字体来改变标签的文字字体。例如通过选择字体来改变标签的文字字体。系统提供的字体有系统提供的字体有100多种,使用多种,使用listbox
31、,可以它,可以它们都放入列表框,利用滚动条,方便选择。们都放入列表框,利用滚动条,方便选择。1创建列表框控件创建列表框控件创建列表框在工具箱内选取列表框工具。创建列表框在工具箱内选取列表框工具。visual basic程序设计教程362列表框控件的主要属性列表框控件的主要属性(名称)(名称)name,设置名称,字符型。缺省值为,设置名称,字符型。缺省值为list1list : 保存选项的字符串数组。如第保存选项的字符串数组。如第i项为项为list(i-1)listcount : 列表框项目总数,共有列表框项目总数,共有0 (listcount-)个)个listindex : 选中的项目在列表框
32、中的位置选中的项目在列表框中的位置(索引值或下索引值或下标)标) 第一项的索引值为第一项的索引值为0,第二项的索引值为,第二项的索引值为1。selected : 列表框某项的选中状态,布尔型数组。列表框某项的选中状态,布尔型数组。visual basic程序设计教程37sorted : 设置列表框项目是否排序。设置列表框项目是否排序。true为升序排列为升序排列text : 最后一次选中的选项的文本,该属性不能直最后一次选中的选项的文本,该属性不能直接修改接修改multiselect : 确定列表框是否允许多选。可设置确定列表框是否允许多选。可设置0、1、2selcount : 列表框中选中的
33、项目数列表框中选中的项目数属性举例,如:属性举例,如:str=list1.list(2)if list1.selected(i) then msgbox list1.list(i) multiselect为为0:list1.text等价等价list1.list(list1.listindex)visual basic程序设计教程383列表框控件的方法列表框控件的方法(1)additem方法additem方法用于建立列表框数据项方法用于建立列表框数据项格式:格式:列表框对象名称列表框对象名称. additem 项目字符串项目字符串,索引值,索引值索引值表示添加的位置,如索引值表示添加的位置,如3
34、,表示添加的下标为,表示添加的下标为3visual basic程序设计教程39省略索引值,则将项目添加在列表框最后。省略索引值,则将项目添加在列表框最后。如:如:list1.additem hello 将字符串添加到列将字符串添加到列表框最后表框最后list1.additem list2.list(0) 将将list2中的第一中的第一条放入条放入list1list1.additem 计算机计算机,2 将字符串添加到将字符串添加到list1第第2条后条后visual basic程序设计教程40(2)removeitem方法removeitem方法清除列表框一项数据项方法清除列表框一项数据项格式:
35、格式:列表框对象名称列表框对象名称.removeitem 索引值索引值它通过索引值删除列表框中指定项目。它通过索引值删除列表框中指定项目。如:如:list1.removeitem 2 删除删除list1中下标为中下标为2的项目的项目visual basic程序设计教程41(3)clear方法clear方法用于清除列表框中所有项目。方法用于清除列表框中所有项目。格式:格式:列表框对象名称列表框对象名称.clear4列表框控件的常用事件列表框控件的常用事件click事件事件dblclick事件事件visual basic程序设计教程42【例【例7-5】通过选择字体改变标签文字字体。如图。】通过选择
36、字体改变标签文字字体。如图。screen是系统对象,指整个是系统对象,指整个windows桌面桌面fontcount属性提供了可用的字体数目属性提供了可用的字体数目fonts属性数组提供了具体的字体,如属性数组提供了具体的字体,如fonts(i)为为一种字体一种字体控件:控件:1个标签和个标签和1个列表框个列表框事件过程:事件过程:form_load:标签属性设置,标签属性设置,各种字体放入列表框中;各种字体放入列表框中;list1_click:实现修改标签字体。实现修改标签字体。visual basic程序设计教程43【例【例7-5】通过选择字体改变标签文字字体。如图。】通过选择字体改变标签
37、文字字体。如图。程序代码如下:程序代码如下:private sub form_load() dim i as integer label1.fontsize = 18 label1.caption = 浙江大学浙江大学computer for i = 0 to screen.fontcount 1 字体名放入字体名放入list1 list1.additem screen.fonts(i) next iend subprivate sub list1_click() label1.fontname = list1.textend subvisual basic程序设计教程44【例【例7-6】程序
38、运行界面如图。程序运行界面如图。控件:控件:1个标签框、个标签框、1个文本框个文本框1个列表框个列表框命令按钮命令按钮“添加添加” 将文本框中的内容按升序添加到列表框中,然后将文本框中的内容按升序添加到列表框中,然后删除文本框内容,并把焦点定位于文本框。如删除文本框内容,并把焦点定位于文本框。如果列表框中的项目数超过了果列表框中的项目数超过了30,则显示,则显示“个数个数已到,不能再添加已到,不能再添加”的信息。的信息。visual basic程序设计教程45命令按钮命令按钮“删除删除”删除列表框中所选的项目(允许多选)。删除列表框中所选的项目(允许多选)。注意:删除一个,注意:删除一个,li
39、stcount的值就会减的值就会减1。主要属性设置:主要属性设置:listl的的sorted:由于要求升序,设置为:由于要求升序,设置为true。listl的的multiselect:由于允许多选,设置为:由于允许多选,设置为2。visual basic程序设计教程46【例【例7-6】程序运行界面如图。程序:】程序运行界面如图。程序: private sub command1_click()if list1.listcount = 30 then msgbox 个数已到,不能再添加个数已到,不能再添加, , 提示提示else list1.additem text1.text text1.tex
40、t = text1.setfocusend ifend sub private sub command2_click()dim i as integerfor i = list1.listcount - 1 to 0 step -1 if list1.selected(i) then list1.removeitem inext iend subvisual basic程序设计教程477.4.2 组合框(组合框(comboboxcombobox)组合框兼有文本框和列表框两者的功能组合框兼有文本框和列表框两者的功能它既允许用户输入文本,也允许在列表中选择项目它既允许用户输入文本,也允许在列表中选
41、择项目1创建组合框控件创建组合框控件创建组合框在工具箱内选取列表组合框工具。创建组合框在工具箱内选取列表组合框工具。2组合框控件的属性组合框控件的属性与列表框相同的与列表框相同的list、listcount、listindex、sorted属性属性与文本框相同的与文本框相同的locked、selstart、sellength、seltextvisual basic程序设计教程48其他主要属性:其他主要属性:(名称)(名称)name:组合框名称。缺省值为:组合框名称。缺省值为combo1 text:用户输入的文本内容或选中的文字:用户输入的文本内容或选中的文字 style:确定组合框性能和样式。
42、可设:确定组合框性能和样式。可设0、1、2三三个值:个值:0:下拉组合框,包括:下拉组合框,包括1个下拉式列表和个下拉式列表和1个文本个文本框(缺省值);框(缺省值);1:简单组合框,包括:简单组合框,包括1个文本框和个文本框和1个不能下拉个不能下拉的列表;的列表;2:下拉式列表,只能选择,不能输入:下拉式列表,只能选择,不能输入visual basic程序设计教程493组合框控件的方法组合框控件的方法additem:添加项目:添加项目removeitem:删除项目:删除项目clear:删除所有项目:删除所有项目4组合框控件的常用事件组合框控件的常用事件click事件:事件:选择项目时发生选择
43、项目时发生change事件:事件:style为为0或或1时,用户在组合框控件的文本框部分时,用户在组合框控件的文本框部分输入文字时,驱动事件代码执行。输入文字时,驱动事件代码执行。visual basic程序设计教程50【例【例7-7】编制设置字体、字型和】编制设置字体、字型和字号的演示程序。如图。字号的演示程序。如图。控件:控件:6个标签,其中个标签,其中1个用于显示预个用于显示预览效果览效果1个框架个框架3个组合框个组合框visual basic程序设计教程51事件:事件:form_load事件:添加组合框中初始项目等。事件:添加组合框中初始项目等。三个组合框的三个组合框的click事件:
44、在选择项目时驱动事件:在选择项目时驱动combo1_keypress事件:有输完字体名回车后,事件:有输完字体名回车后,改变字体改变字体combo3_change事件:通过输入改变预览文字事件:通过输入改变预览文字大小。大小。主要属性:主要属性:预览预览name设为设为lblexample,wordwrap为为true字体、字型和字号组合框的字体、字型和字号组合框的style值分别设置成值分别设置成1、2和和0visual basic程序设计教程52 private sub combo1_keypress(keyascii as integer) 输入字体名改输入字体名改字体字体 dim i
45、as integer if keyascii = 13 then for i = 0 to screen.fontcount - 1 if screen.fonts(i) = combo1.text then exit for next i if i = 6 and n max then max = age(i, j) if age(i, j) 0 then count = count + 1: average = average + age(i, j) next j print next i print 最大年龄为最大年龄为:; max print 平均年龄为平均年龄为:; round(av
46、erage / count, 2)end subvisual basic程序设计教程757.7.1 如何声明动态数组如何声明动态数组如果在运行时才能确定数组大小,可用动态数组。如果在运行时才能确定数组大小,可用动态数组。使用动态数组有利于节省存储空间。使用动态数组有利于节省存储空间。声明并使用动态数组需要两个步骤:声明并使用动态数组需要两个步骤:1声明动态数组声明动态数组格式:格式:dim 数组名数组名( ) as 类型名类型名它声明了一个空维数组,表明该数组是动态数组它声明了一个空维数组,表明该数组是动态数组例如例如dim a() as integervisual basic程序设计教程76
47、2用用redim语句分配数组的实际元素个数语句分配数组的实际元素个数redim语句是一个可执行语句语句是一个可执行语句作用是为数组分配实际空间。作用是为数组分配实际空间。格式为:格式为:redim 数组名数组名(下标说明下标说明,下标说明下标说明) n=10,则可用,则可用redim a(n),或,或redim a(n,n)在分配实际元素个数后,就可象固定数组一样在分配实际元素个数后,就可象固定数组一样使用使用visual basic程序设计教程777.7.2 保留动态数组中存放的数据保留动态数组中存放的数据redim语句会使原有的数据就全部会丢失。语句会使原有的数据就全部会丢失。在在redi
48、m中使用中使用preserve关键字可保留原数据。关键字可保留原数据。用法是:用法是:redim preserve 数组名数组名(下标说明下标说明,下标说明下标说明)多维数组,使用多维数组,使用preserve关键字关键字只能改变数组中最后一维的上界只能改变数组中最后一维的上界visual basic程序设计教程78如有以下代码段,输出结果如图。如有以下代码段,输出结果如图。dim id() as integer, name1() as string, i as integerredim id(5), name1(5)for i = 1 to 5 id(i) = i: name1(i) = a
49、 & inext iredim preserve id(ubound(id) + 1), name1(ubound(name1) + 1)id(6) = 6: name1(6) = abcfor i = 1 to 6 print id(i), name1(i)next ivisual basic程序设计教程79【例【例7-11】编程:输入正整数】编程:输入正整数n,再由,再由inputbox函数函数输入输入n个数至数组并在窗体上输出这个数至数组并在窗体上输出这n个数,然后要个数,然后要求元素数据反过来存放,并输出。求元素数据反过来存放,并输出。即第即第1个元素与第个元素与第n个元素互换,第个元
50、素互换,第2个元素与第个元素与第n-1个元素互换,个元素互换,。最后在窗体上输出对换后各。最后在窗体上输出对换后各元素的值。元素的值。如:输入如:输入8和和11、12、13、14、15、16、17、18,输出为:输出为:11 12 13 14 15 16 17 18和和18 17 16 15 14 13 12 11。visual basic程序设计教程80分析:分析:因数组元素个数在运行中才能确定,故采用动因数组元素个数在运行中才能确定,故采用动态数组较合适。态数组较合适。另外一个问题是如何进行数据对换,对换几次?另外一个问题是如何进行数据对换,对换几次?对换只要进行对换只要进行int(n/2
51、)次就可以了。次就可以了。本例将窗体的本例将窗体的autoredraw属性设置为属性设置为true。visual basic程序设计教程81【例【例7-11】编程:数组元素反过来存放。】编程:数组元素反过来存放。private sub command1_click()dim a() as integer, n as integer, i as integer, t as integern = val(inputbox(请输入数据个数请输入数据个数)redim a(n)for i = 1 to n a(i) = val(inputbox(请输入第请输入第 & i & 个数个数) print a(
52、i);next iprintvisual basic程序设计教程82for i = 1 to n 2 t = a(i): a(i) = a(n - i + 1): a(n - i + 1) = t a(i)与与a(n-i+1)互换互换next ifor i = 1 to n print a(i);next iprintend subvisual basic程序设计教程837.8.1 检索问题检索问题【例【例7-12】用随机函数产生】用随机函数产生30个两位整数。然后输入一个两个两位整数。然后输入一个两位整数位整数x,判断,判断x是否在这是否在这30个数之内,若是,输出第一个个数之内,若是,输出
53、第一个相同数的下标。若无,显示相同数的下标。若无,显示“找不到找不到”。若输入。若输入x的不是两的不是两位整数,则结束该事件执行。位整数,则结束该事件执行。这是一个检索(查找)问题。这是一个检索(查找)问题。关键是如何在关键是如何在a(1)a(30) 中检索数据。中检索数据。简单的方法是采用顺序检索(线性查找法),即:简单的方法是采用顺序检索(线性查找法),即:将键盘输入的数据将键盘输入的数据x与与a(1)a(n)逐一比较逐一比较若与某个若与某个a(i)相符,则找到,否则找不到。相符,则找到,否则找不到。visual basic程序设计教程84 7.8.1 检索问题检索问题-顺序检索顺序检索(
54、线性查找法)(线性查找法) private sub command1_click()dim a(30) as integer, i as integer, x as integerrandomizeclsfor i = 1 to 30 产生数据并输出产生数据并输出 a(i) = int(rnd * 90 + 10) : print a(i); if i mod 10 = 0 then printnext ix = val(inputbox(请输入要查找的两位数请输入要查找的两位数)visual basic程序设计教程85if x = 10 and x 30 then msgbox 找不到找不到
55、 & x, , 提示提示 else msgbox x & 是第是第 & i & 个数个数, , 提示提示 end ifelse 输入的不是两位数输入的不是两位数 msgbox 数据输入有错数据输入有错!, vbcritical, 出错出错end ifend subvisual basic程序设计教程867.8.1 检索问题检索问题【例【例7-13】程序运行时,数组】程序运行时,数组a存放了存放了20个已经按照从个已经按照从小到大排列的数据,然后从键盘输入一个数小到大排列的数据,然后从键盘输入一个数key,判,判断该数是否在这断该数是否在这30个数内。若是,则输出这个数的下个数内。若是,则输出这
56、个数的下标。若不是,则显示标。若不是,则显示“找不到找不到”。这仍是检索问题,当然可用顺序查找法。这仍是检索问题,当然可用顺序查找法。但但30个数据已经排过序,可采用一种快速的查找方法,个数据已经排过序,可采用一种快速的查找方法,称为称为二分法查找(折半查找法、二分检索法)(折半查找法、二分检索法)visual basic程序设计教程877.8.1 检索问题检索问题二分法二分法算法:算法:待查数据范围由下标决定,初始下界待查数据范围由下标决定,初始下界low=lbound(a),上界,上界high= ubound(a)。1把待查数据范围分成二半,取出作为分界线把待查数据范围分成二半,取出作为分
57、界线的中间元素,其下标为的中间元素,其下标为mid=(low+high)2 ;2将中间元素将中间元素a(mid)与与key比较;比较;3若:若:key = 中间元素中间元素a(mid),找到。跳出检。跳出检索循环;索循环;visual basic程序设计教程884若:若:key 中间元素中间元素a(mid),因数据排过序,则以,因数据排过序,则以中间元素的后半部分范围作为新的待查数据范围,即中间元素的后半部分范围作为新的待查数据范围,即可更改下界为可更改下界为low=mid+1。5若:若:key high。即不存在。即不存在待查数据范围。待查数据范围。visual basic程序设计教程89例
58、如:在以下数据中找例如:在以下数据中找33。low=1,high=8,mid=4 low=5,high=8,mid=6 low=5,high=5,mid=5 。共。共比较比较3 3 3 3次。次。5 5 59 9 920 20 2033 33 3344 44 4456 56 5690 90 90【例【例7-13】从键盘输入一个整数,判断该数是否在已排序】从键盘输入一个整数,判断该数是否在已排序的的20个数的数组之内。若存在,则显示数据下标。若没有,个数的数组之内。若存在,则显示数据下标。若没有,则显示:则显示:找不到找不到。visual basic程序设计教程90例如:在以下数据中找例如:在以
59、下数据中找40。low=1,high=8,mid=4 low=5,high=8,mid=6 low=5,high=5,mid=5 。key33,3 3 3 3 low=5+1=65 5 5 5 出现出现lowhigh9 9 9 920 20 20 2033 33 33 3344 44 44 4456 56 56 5690 90 90 90hlhl【例【例7-13】从键盘输入一个整数,判断该数是否】从键盘输入一个整数,判断该数是否在已排序的在已排序的20个数的数组之内。若存在,则显示个数的数组之内。若存在,则显示数据下标。若没有,则显示:数据下标。若没有,则显示:找不到找不到。visual ba
60、sic程序设计教程91private sub command1_click() dim i as integer, a, key as integer 声明声明a为为variant类型类型 dim low as integer, high as integer, mid as integer a = array(1, 4, 5, 7, 10, 12, 34, 45, 56, 74, 88, 90, 120, 233, 422, 456, 555, 557, 567, 600) key = val(inputbox(“输入一个要检索的整数输入一个要检索的整数”, “输入数输入数据据”, , 40
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 助动车维修技术交流考核试卷
- 机器视觉与图像处理技术考核试卷
- 智能仪器仪表项目规划考核试卷
- 医用针灸贴的种类和使用建议考核试卷
- 供应链数字化转型案例与启示考核试卷
- 木纹设计与加工考核试卷
- 苗圃白蚁防治合同范本
- 留置权合同范本
- 业扩报装培训课件
- 8.3 摩擦力(共28张) 2024-2025学年人教版物理八年级下册
- 《完善中国特色社会主义法治体系》课件
- 2025版 高考试题分析-数学-部分4
- 湘教版三年级美术下册教案全册
- 重症监护-ICU的设置、管理与常用监测技术
- 2024版高一上册语文模拟试卷
- 法律顾问服务投标方案(完整技术标)
- 知道网课智慧树《哲学导论(湖南师范大学)》章节测试答案
- 防止员工集体离职合同
- 加油站合作协议书
- 福建省厦门市2023届高三二模语文试题(解析版)
- Office办公软件理论知识考核试卷
评论
0/150
提交评论