气震式袋除尘器项目可行性研究报告评审方案设计(发改委标准案例范文)_第1页
气震式袋除尘器项目可行性研究报告评审方案设计(发改委标准案例范文)_第2页
气震式袋除尘器项目可行性研究报告评审方案设计(发改委标准案例范文)_第3页
气震式袋除尘器项目可行性研究报告评审方案设计(发改委标准案例范文)_第4页
气震式袋除尘器项目可行性研究报告评审方案设计(发改委标准案例范文)_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

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

文档简介

VB程序设计教程主编:陈素教授第三章VB程序结构控制VB程序设计采用结构化程序设计的思想,结构化程序设计的特点是程序结构清晰,易读性强,并易于查错纠错。在VB中有三种根本的程序控制结构:顺序结构、选择结构和循环结构。VB所有的程序都可以由这假设干个这三种根本结构的组合,通过各种算法,以解决不同的实际问题。3VB程序结构控制3.1顺序结构3.2选择结构3.3循环结构3.4数组3.5常用算法3.1顺序结构顺序结构是一种线性结构,也是程序设计中最简单、最常用的根本结构。它在程序运行过程中,按照语句出现的顺序从上到下依此执行。顺序结构流程图如图3-1所示,先执行语句A,再执行语句B。

赋值语句顺序结构中主要的语句是赋值语句,通过赋值语句,可以在程序中改变变量的值,或改变对象属性值。其语法格式为:

[Let]变量=表达式[Let]对象.属性=表达式其中表达式中可以包含变量、常量、属性。此时等号称为赋值等号。例如:

DimAAsStringA=Text1.TextLabel1.Caption=A赋值语句说明:(1)赋值语句兼有计算和赋值双重功能。(2)“=〞是赋值等号,与数学上的等号意义不同。(3)赋值等号两边的数据类型通常要求一致,但VB提供的对某些数据类型的自动转换机制,可强制变量转换为适当的数据类型。例如,当逻辑型赋值给数值型时,True转换为-1,False转换为0;反之,非0转换为True,0转换为False;(4)赋值等号左边的只能是变量或对象的属性,不能是常量、常数符号、表达式,否那么出错。注释、结束与暂停语句1.注释语句注释语句用于对程序的注解和说明。有两种格式:格式1:Rem内容格式2:'内容格式1形成一个语句行。格式2使用一个撇号,可以用在语句行的末尾,也可以单独占据一行。注释语句不被编译成二进制代码,它只出现在源程序中。适量的注释可以增加程序的可读性。例如:Rem通过设置文本框的"Text"属性用来显示"Hello"TxtInput.Text="Hello,今天是"&Date'函数Date返回当前日期注释、结束与暂停语句2.暂停语句暂停语句用于设置断点,调试程序。格式:Stop说明:(1)可放置在过程中的任何地方,相当于在程序代码中设置断点,类似于执行“运行〞菜单中的“中断〞命令。(2)执行Stop语句时,系统将自动翻开“立即窗口〞,方便程序员调试跟踪程序。(3)程序调试结束后,生成可执行文件之前,应删除代码中的所有Stop语句。注释、结束与暂停语句3.结束语句结束语句通常用来结束一个程序的执行。格式:End在不同环境下的用法不同:EndSub:结束一个Sub过程EndFunction:结束一个Function过程EndIf:结束一个If语句块EndSelect:结束情况语句3.2选择结构计算机智能化的标志之一就是具有逻辑判断的能力;即针对不同的情况作出不同的选择。在程序设计中,这一功能的实现是借助相应的选择结构语句来完成的。选择结构也称为分支结构,其特点是根据给定的条件来选择执行相应的程序语句。VB中提供的选择结构语句主要有:If语句、Iif函数以及Select

Case语句。3.2.1If语句

1.If…Then…Else结构语法格式:If条件表达式Then语句序列1[Else

语句序列2]EndIf说明:(1)条件表达式可为关系表达式、逻辑表达式或数据表达式,但都要将其转换为Boolean类型。(2)先对给定的条件表达式进行判断,如果条件成立(即表达式的值为True),那么执行Then后的语句序列1,执行完毕再跳到EndIf后的其他语句。(3)如果条件不成立(即表达式的值为False),那么执行Else后的语句序列2,执行完毕再执行EndIf后的其他语句。(4)如果If语句中省略“Else语句序列2〞,那么是单分支语句,如图3-2所示;否那么是双分支语句,如图3-3所示。3.2.1If语句3.2.1If语句【范例3-1】设计程序,对输入的两个整数a和b进行比较,并输出其中较大的数〔用单分支语句实现〕。3.2.1If语句〔1〕设计用户界面如图3-4所示。〔2〕设置界面对象属性,如表3-1所示。3.2.1If语句〔3〕程序代码设计如下:PrivateSubCommand1_Click()DimaAsInteger,bAsInteger,maxAsIntegera=Val(Text1.Text)b=Val(Text2.Text)max=aIfb>maxThenmax=bText3.Text=Str(max)EndSub3.2.1If语句【范例3-2】设计程序,对输入的两个整数a和b进行比较,并输出其中较大的数〔用双分支语句实现〕。将【范例3-1】程序代码设计改为如下代码即可。PrivateSubCommand1_Click()DimaAsInteger,bAsInteger,maxAsIntegera=Val(Text1.Text)b=Val(Text2.Text)Ifa>bThenmax=aElsemax=bEndIfText3.Text=CStr(max)EndSub3.2.1If语句2.If…Then…ElseIf结构语法格式:If条件表达式1Then语句序列1[ElseIf条件表达式2Then语句序列2……ElseIf条件表达式n-1Then语句序列n-1Else语句序列n]EndIf说明:〔1〕Else子句与ElseIf都是可选项,可以放置多个ElseIf子句,但必须在Else子句之前。〔2〕执行时先对条件表达式1进行判断,如果条件成立,执行语句序列1;否那么依次测试ElseIf局部的条件,假设成立,那么执行相应的语句组;如果没有一个条件成立的话,那么执行Else子句的语句序列n。〔3〕不管有多少个分支,程序执行了一个分支后,其余分支不再执行,当多分支中有多个表达式同时满足,那么只执行第一个与之匹配的语句序列。〔4〕ElseIf不能写成ElseIf。3.2.1If语句If…Then…ElseIf结构流程图如图3-5所示。3.2.1If语句【范例3-3】设计程序,输入血压舒张压的值〔单位mmHg〕,判断血压是否正常,其中输入值小于60,那么低血压,输入值60-90〔含60及90〕之间,那么正常;输入值大于90,那么高血压。〔1〕设计用户界面如图3-6所示。3.2.1If语句〔2〕设置界面对象属性,如表3-2所示。3.2.1If语句〔3〕程序代码设计如下:PrivateSubCommand1_Click()DimaAsInteger,resultAsStringa=Val(Text1.Text)Ifa>90Thenresult="高血压"ElseIfa>=60Thenresult="血压正常"Elseresult="低血压"EndIfText2.Text=resultEndSub3.2.1If语句【范例3-4】某药品销售管理系统中,要设置顾客的折扣值,并供查询。规那么如下:假设顾客为VIP会员〔卡号首字母为V〕,折扣为90%;假设为普通会员〔卡号首字母为P〕,折扣为80%;非会员〔卡号首字母为N〕那么没有折扣。〔1〕用户界面如图3-7所示,图3-8所示。3.2.1If语句〔2〕设置界面对象属性,如表3-3所示。3.2.1If语句〔3〕程序代码设计如下:PrivateSubCommand1_Click()DimaAsString,bAsStringa=Text1.TextIfLeft(a,1)="V"Thenb="90%,欢送光临!"Label2.Visible=TrueLabel3.Visible=TrueElseIfLeft(a,1)="P"Thenb="80%,欢送光临!"Label2.Visible=TrueLabel3.Visible=TrueElseIfLeft(a,1)="N"ThenLabel2.Visible=FalseLabel3.Visible=Trueb="欢送光临,您晢时没有折扣。"Elseb="对不起,您还没有注册!"EndIfLabel3.Caption=bEndSub3.2.1If语句语法格式:If条件表达式1ThenIf条件表达式2Then……EndIf……EndIf说明:〔1〕对于嵌套结构,为了增强程序的可读性,应该采用缩进形式书写。〔2〕If语句形式假设不在一行上书写,必须与EndIf配对,多个if嵌套,EndIf与它最接近的EndIf配对。IF语句的嵌套流程图如图3-9所示。3.2.1If语句3.2.2IIf函数IIf函数可以用来执行简单的条件判断操作,它是“If…Then…Else〞结构的简写版本,是“ImmediateIf〞的缩略。语法格式:IIf〔条件表达式,条件成立时的返回值,条件不成立时的返回值〕说明:〔1〕条件表达式可以是关系表达式、逻辑表达式或数值表达式,假设为数值表达式,那么按照非0为真,0为假的规那么转化为Boolean类型的值。〔2〕IIf函数的返回值可以为表达式、变量或其他函数。〔3〕IIf函数中的3个参数都不能省略,而且要求返回值的类型及结果变量的类型一致。3.2.2IIf函数例如,当成绩x>=60时为合格,否那么不及格,用If语句表示如下:Ifx>=60Thenr=〞合格〞Elser=〞不合格〞EndIf而用IIf函数来代替那么为:r=IIf(x>=60,〞合格〞,〞不合格〞)再看下面的例子:用IIf函数判断数的奇偶性x是被判断的整数,result为接收结果的字符串变量Result=IIf(xmod2=0,〞x是偶数〞,〞x是奇数〞)由上可见,对于一些简单的选择结构,用IIF函数可以使程序大大简化。3.2.3Select

Case语句使用IF语句的嵌套可以实现多分支选择,但对于多条件选择时,使用SelectCase语句代码效率更高,更易读。语法格式:SelectCase表达式|变量

Case表达式列表1

语句序列1Case表达式列表2

语句序列2……Case表达式列表n-1

语句序列n-1[CaseElse

语句序列n]EndSelectSelectCase结构流程图如图3-10所示。3.2.3Select

Case语句3.2.3Select

Case语句说明:〔1〕“表达式〞可以是数值型或字符型〔2〕“表达式〞和“表达式列表〞的类型必须相同;〔3〕“表达式列表〞形式有以下3种:①一个表达式或用逗号隔开的假设干表达式例如:判断10以内整数的奇偶性。x=inputbox("输入一个整数")SelectCasexCase1,3,5,7,9Printx;"这是奇数"Case2,4,6,8,10Printx;"这是偶数"EndSelect②表达式1To表达式2例如:变量stringc中存放了一个字符,判断该字符类型。SelectCasestringcCase"a"To"z","A"To"Z"Printstringc+"isaletter"Case"0"To"9"Printstringc+"isanumber"CaseElsePrintstringc+“isonlyachar"EndSelect

3.2.3Select

Case语句③Is关系表达式用Is关系表达式实现学生成绩等次的评定。score=inputbox("输入一个学生成绩")SelectCasexCaseis>=90Printscore;"成绩等次为:A"Caseis>=80Printscore;"成绩等次为:B"Caseis>=70Printscore;"成绩等次为:C"CaseElsePrintscore;"成绩等次为:D"EndSelect

对于VB中的两种选择语句If语句和SelectCase语句的应用选择,一般来说,SelectCase语句主要应用于对单一条件表达式的结果有多个判断(因此也称多分支语句)的情况,结构清晰;而If语句可以对多个条件表达式的结果进行判断,应用更广泛。一般情况下,能使用SelectCase语句来判断的也可以使用If语句。3.3循环结构循环结构是程序设计中的一种根本结构。当程序中出现需要反复执行相同的代码解决同一问题时,就可以用循环结构来实现。循环结构既可以简化程序,又可以提高程序的效率。VB继承了所有Basic语言中的各种循环语句,而且在VB中实现循环结构的语句最多。循环结构可分为计数型和条件型两种根本的结构,实现计数型循环结构的语句是For…Next,而实现条件型循环结构的语句有Do…Loop及While…Wend。3.3.1For…Next语句For…Next语句按指定的循环次数或按变量变化的范围执行循环体,在循环体中使用一个计数器来控制循环执行的次数。For…Next语句执行过程:开始时,循环控制计数器为初值。每执行完一次循环体内所有语句后,循环控制计数器自动增加一个步长值,然后与终值进行比较。如果循环控制变量小于终值,那么继续循环,直到循环控制变量的值大于终值,才退出循环,去执行Next语句后的语句。在循环的过程中,可以使用Exit语句随时退出循环。For…Next语句流程图如图3-11所示。3.3.1For…Next语句3.3.1For…Next语句语法格式:For计数器=初值To终值[Step步长]语句序列1[ExitFor]语句序列2Next[计数器]说明:(1)计数器一般为数值型。(2)步长一般为正值,初值小于终值;假设为负值,初值大于终值;缺省步长为1;循环次数=int〔〔终值-初值〕/步长+1〕。(3)语句序列可以是一个或多个语句,称为循环体。(4)ExitFor是可选项,表示当程序执行过程中遇到该语句时,退出循环体,执行Next的下一句。3.3.1For…Next语句例如,计算1到100的和〔本例未使用循环退出语句ExitFor〕。Sum=0Fori=1To100step1Sum=Sum+iNextiPrintSum再如,计算1到100的和,当和大于2000时终止循环〔本例使用循环退出语句ExitFor〕。Sum=0Fori=1To100step1Sum=Sum+iIfSum>=2000ThenExitForNextiPrintSum3.3.1For…Next语句(5)退出循环后,计数器的值保持退出时的值。(6)在循环体内对计数器可屡次引用,但不要对其赋值,否那么影响循环执行的次数,从而影响程序运行结果。例如:PrivateSubCommand1_Click()Count1=0Fori=1To20Step2i=i+2Count1=Count1+1Print"第";Count1;"次循环i=";iNextiPrint"退出循环后i=";iEndSub以上程序循环的次数不是10次,而是5次,原因是代码中的i=i+2改变了步长。程序运行结果如图3-12所示。3.3.1For…Next语句3.3.1For…Next语句【范例3-5】设计程序,输入一个班〔设全班人数不超过100人〕学生的VB学习成绩,统计其中及格的学生人数,并计算出全班的平均分。由于学生人数不定,输入负数时截止。〔1〕用户界面及数据测试如图3-13,3-14,3-15所示。3.3.1For…Next语句3.3.1For…Next语句〔2〕设置界面对象属性,如表3-4所示。3.3.1For…Next语句〔3〕程序代码设计如下:PrivateSubCommand1_Click()DimGradeAsSingle,PassCountAsInteger,totalAsIntegerDimiAsInteger,SumAsSingleSum=0PassCount=0Average=0total=0Fori=1To100'当输入学生成绩个数大于100时停止循环Grade=Val(InputBox("请输入学生的VB成绩:"))IfGrade<0Then'输入负数时退出循环ExitForElseIfGrade>=60ThenPassCount=PassCount+1'计算及格学生人数total=total+1'计算总人数Sum=Sum+Grade'计算总分EndIfNextiIftotal<>0ThenAverage=Sum/total'防止用户未输入值时溢出Text1.Text=Str(total)Text2.Text=Str(PassCount)Text3.Text=Str(Average)EndSub3.3.2Do…Loop语句对于在程序中循环的次数事先不能确定的,不能使用For…Next语句实现循环,这时使用Do…Loop循环(条件循环)语句。Do…Loop语句有2种形式,即当型循环〔While结构〕和直到型〔DoWhile结构〕循环。当型循环结构流程图如图3-16所示,直到型循环结构流程图如图3-17所示。

3.3.2Do…Loop语句语法1(当型循环):DoWhile|Until条件表达式语句序列1[ExitDo]语句序列2Loop说明:(1)先测试条件表达式,当条件为True时就执行语句序列,否那么退出循环。(2)While循环在条件成立时执行循环体语句,否那么退出循环执行Loop后的语句。而Until循环相反,在条件不成立时进入循环,直到条件成立时才退出循环。(3)在程序执行过程中,假设遇到Exitdo语句时,表示退出循环,执行Loop后的语句。3.3.2Do…Loop语句例:用当型循环语句计算1到100的和DimSumasinteger,iasintegerSum=0:i=1DoWhilei<=100Sum=Sum+ii=i+1LoopPrintSum语法2(直到型循环):Do语句序列1[ExitDo]语句序列2LoopWhile|Until条件表达式说明:(1)先执行语句序列后判断条件表达式,语句序列至少执行一次。(2)While循环在条件成立时执行循环体语句,否那么退出循环执行Loop后的语句。而Until循环相反,在条件不成立时进入循环,直到条件成立时才退出循环。(3)在程序执行过程中,假设遇到Exitdo语句时,表示退出循环,执行Loop后的语句。例:用直到型循环语句计算1到100的和DimSumasinteger,iasintegerSum=0:i=1DoSum=Sum+ii=i+1LoopWhilei<=100PrintSum3.3.3While…Wend语句对于循环次数不确定的情况下,除了可以使用Do…Loop语句外,还可以使用While…Wend语句。语法格式:While条件表达式语句序列1Wend说明:While…Wend的条件是以关系或逻辑表达式的形式直接出现在语句中的,如果要使循环有限次地执行,必须在While的循环体中改变条件。例如:测试计数器的值DimCounterAsintegerCounter=0WhileCounter<20'测试计数器的值Counter=Counter+1'将计数器的值+1Wend'当Counter>19时那么循环终止PrintCounter循环的嵌套循环的嵌套是指循环语句中又包含其他循环语句的情况,前面所述的几种循环语句均可以互相嵌套,也可以在循环中嵌套选择结构。要求:(1)多重循环中,各层循环变量不能重名。(2)内层循环必须完整地包含在外层循环中,不能交叉。例如下面的循环嵌套是错误的:Fori=1To100step1Forj=1To100step1……NextiNextj(3)在多重循环中的分支结构必须完全包含在里面,不能交叉。循环的嵌套【范例3-6】用循环的嵌套设计程序,实现如图3-18所示的数字金字塔。循环的嵌套程序代码设计如下:PrivateSubCommand1_Click()Fori=1To9Forj=1To28-3*iPrint"";NextjFork=1ToiPrintk;NextkFork=i-1To1Step-1Printk;NextkPrintNextiEndSub循环的嵌套下面对上述提到的循环语句作一比较,方便读者进一步区分及应用。VB中循环结构有3种形式:For循环、While循环以及Do循环(可分为4种语句),它们的语句语法分别为:For…Next,DoWhile…Loop,DoUntil…Loop,Do…WhileLoop,Do…UntilLoop,While…Wend,其中除For…Next语句用于循环次数已经知道的循环,其它都是用于循环次数预先不知首,而由逻辑条件控制循环的循环。While循环是条件成立时循环,而Until循环是条件不成立时循环。DoWhile|Until…Loop语句是先判断再执行,而Do…While|UntilLoop语句是先执行再判断。While…Wend语句与DoWhile…Loop相同。下表3-5用不同的循环语句编写程序,执行结果相同,均为10。循环的嵌套3.4数组

在处理具体问题时,常会涉及到批量数据的处理,例如:对一个班学生的成绩排序,找出最高分,最低分,计算平均分等。使用定义多个变量的方法来记录学生的成绩,并不是最好的解决方法。在VB中,提供了数组这种特殊的数组类型,来表示类型相同的一批数据。而借助数组与循环,可以有效的处理批量数据。

数组的概念1.数组数组是一组逻辑上相互关联的值的有序集合。所谓逻辑上相互关联是指数组中的数据必须具有相同的类型。例如:(1,34,234,45,49,100)、(“abort〞,〞boat〞,〞car〞,〞zoo〞)都可以使用数组来表示。而〔12,〞ab〞,12.4,“abort〞〕那么不行。VB中可以定义任何类型的数组,包括用户自定义的类型。数组名用于表示数组,其命名规那么遵循标识符的命名规那么。2.数组元素数组中每一个值称为数组元素,使用数组名和一些称为“索引〞或“下标〞的数字可以表示每一个数组元素。3.数组分类在VB中,根据数组长度来划分,数组可以分为动态数组和静态数组。而从维度上划分那么可以分为一维数组和多维数组。静态数组无论是静态数组还是动态数组,都可以使用Dim语句来声明数组变量。与普通变量定义不同的是,在数组变量名后面加上一对圆括号,以指示该变量将存储数组而不是单个值。本节中所讨论的静态数组是指存放数组元素个数固定的数组。1.声明语法[Public|Private|Dim]数组名(维数)As数据类型说明〔1〕方括号局部可以省略。〔2〕数据类型可以是VB支持的根本数据类型,也可以是用户自定义的类型。〔3〕数组名的命名规那么参照标识符命名原那么。〔4〕关于维数①数组的维数表示:[下界To]上界,其中下界必须小于等于上界。如果是多维数组,维数局部定义可以表示为([下界1To]上界1,[下界2To]上界2,……)例如:Dima(1To3)AsInteger‘定义一维整型数组Dimb(3)AsString‘定义一维整型数组Dimc(1To3,1to3)AsInteger‘定义二维整型数组Dimd(3,3,3)AsInteger‘定义三维整型数组②下界声明可以省略,省略的话默认下界为0,OptionBase语句可以将数组的默认下界设置为1。OptionBase语句必须在通用模块定义,语法格式为:OptionBase0|1。静态数组图3-19中设置数组的默认下标为1此时有下面声明语句:Dimc(10)AsInteger那么数组c的下界为1,上界为10。静态数组③当上下界是小数时系统会自动进行四舍五入。〔5〕数组中元素个数的计算数组元素个数的计算可以用下面公式表示:〔上界1-下界1+1〕*〔上界2-下界2+1〕*……例如:Dima(1To10)AsInteger‘a数组的元素个数为10Dimb(1To2,3To5)asInteger‘b数组的元素个数为〔2-1+1〕*〔5-3+1〕=6静态数组2.数组元素的表示数组中的每个元素使用数组名以及下标来表示。注意每一维下标的取值范围是[每一维的下界,每一维的上界]。数组元素的表示:数组名〔下标1[,下标2,……]〕。根据以上的形式,对于常用的一维与二维数组,元素的表示方法为:〔1〕一维数组元素:数组名〔下标〕。例如:Dima(1to2)asinteger,那么a中的元素可以表示为a(1)、a(2)〔2〕二维数组元素:数组名〔下标1,下标2〕。例如:Dimb(1,1)asinteger,那么b中的元素可以表示为b(0,0)、b(0,1)、b(1,0)、b(1,1)静态数组3.数组的赋值与输出对于静态数组,赋值与输出常用的方法一是把数组元素当成普通变量对待,二是使用循环语句。〔1〕一维数组的赋值与输出【范例3-7】将10以内的奇数使用保存在数组中,并使用print语句输出在窗体上。运行界面如图3-20所示:静态数组方法一:单击按钮Command1时运行程序:PrivateSubCommand1_Click()Dima(1To5)AsIntegera(1)=1a(2)=3a(3)=5a(4)=7a(5)=9Printa(1);a(2);a(3);a(4);a(5)EndSub方法二:使用循环语句实现PrivateSubCommand1_Click()Dima(1To5)AsIntegerDimiAsInteger,jAsIntegerj=1Fori=1To5a(i)=jj=j+2NextiFori=1To5Printa(i);NextiEndSub静态数组〔2〕二维数组的赋值与输出二维数组可以看成是一个矩阵,第一维的下标表示元素所在的行,第二维下标表示元素所在的列。例如:Dima(1To2,1To3)AsInteger‘a相当于一个2行3列的矩阵在实际的存储中,二维数组还是按照行的顺序存放的。一般可以采用二重循环的方法来处理二维数组中的元素。静态数组【范例3-8】将一个矩阵存放在一个二维数组中,并在窗体上打印将其转置的形式。运行界面如图3-21所示:静态数组程序设计代码如下:PrivateSubCommand1_Click()Dima(1To5,1To2)AsInteger‘说明一个5行2列矩阵Print"原始矩阵"Fori=1To5‘使用二重循环为矩阵赋值Forj=1To2a(i,j)=jPrinta(i,j);Spc(5);NextjPrintNextiPrint"转置矩阵"Forj=1To2‘先列后行的原那么输出转置形式Fori=1To5Printa(i,j);Spc(5);NextiPrintNextjEndSub静态数组〔3〕ForEach…Next语句在用于处理数组或集合中的每一个元素时,ForEach…Next比For...Next语句更适合,因为在ForEach…Next语句中不必指定数组或集合的元素个数。语法:

ForEachelementIn数组

语句序列1

[EXITFOR]

语句序列2

NEXT[element]

说明:

〔1〕格式中的element是一个variant类型的变量,它代表数组中的每个元素,可以在循环体外定义。〔2〕格式中的数组可以是一个已定义的数组变量。〔3〕循环次数由VB在循环开始之前自动计算。〔4〕ForEach循环可以嵌套。但每个循环必须具有唯一的element变量。静态数组【范例3-9】求数组中所有元素的和。PrivateSubForm_Activate()Dima(1To5)AsIntegerDimxAsVariantDimiAsIntegerFori=1To5a(i)=iNextii=0ForEachxInai=x+iNextPrintiEndSub静态数组4.静态数组使用举例

【范例3-10】设计一个程序,统计5个候选人的得票数。程序中使用InputBox接收投票,投票时输入的是候选人的选号。一维数组P用于记录得票数。程序代码设计如下:PrivateSubForm_Activate()DimN,IAsIntegerDimP(5)AsInteger'声明数组P记录候选人得票数

PrintPrintForI=1To5N=Val(InputBox("请输入候选人的选号","选举投票",0))P(N)=P(N)+1'统计各候选人的选票

NextIForI=1To5'显示所有候选人的票数

Print"第"&Str(I)&"个候选人的票数是:";P(I);PrintNextIEndSub静态数组投票界面如图3-22所示,当依次输入数据1,1,1,2,3,那么程序运行结果如图3-23所示。静态数组【范例3-11】编程求一个3×4的矩阵中值最大的元素以及其所在的位置。程序设计如下:

PrivateSubForm_Activate()Dima(1To3,1To4)AsInteger'定义a数组存放矩阵DimiAsInteger,jAsIntegerDimmaxAsInteger,rAsInteger,cAsInteger'定义max存放最大值,r,c分别存放最大值最在的行和列RandomizePrint"A数组为:"PrintFori=1To3Forj=1To4a(i,j)=Int(30*Rnd())+1'使用随机函数产生1-30之间的数

Printa(i,j);NextjPrintNextiPrint静态数组max=a(1,1):r=1:c=1'假定a(1,1)为当前最大元素Fori=1To3'将数组元素与max比较Forj=1To4Ifa(i,j)>maxThen'找到新的最大数,那么保存在max中,并同时记录位置max=a(i,j)r=i:c=jEndIfNextjNextiPrint"最大数是"&max&"它在第"&r&"行"&c&"列"EndSub静态数组程序运行的界面如下:图3-24范例3-11运行界面动态数组本节将讨论如何创立和使用动态数组。1.声明语法建立动态数组的方法是:利用Dim、Private、Public语句声明括号内为空的数组,然后在过程中用ReDim语句指明该数组的大小。语法是:Dim数组名〔〕[As数据类型]ReDim[Preserve]数组名〔下标1[,下标2…]〕[As数据类型]其中下标可以是常量,也可以是有了确定值的变量,类型可以省略,假设不省略,必须与Dim中的声明语句保持一致。例如:DimA〔〕AsSingleReDimA〔4,6〕说明〔1〕ReDim语句中的下标可以是常量、表达式,也可以是有了确定值的变量〔2〕在程序中可以屡次使用ReDim来改变数组的大小和维数。〔3〕每次使用ReDim语句都会重新初始化原数组的值。例如将整型数组的值初始化为0。可以使用Preserve参数来保存数组的数据,但使用Preserve只能改变最后一维的大小。动态数组【范例3-12】动态数组的使用。PrivateSubForm_Activate()Dimarr()AsInteger'定义动态数组arrDimnAsIntegern=10ReDimarr(n)'重定义数组arr,将其大小定义为11Fori=0To10arr(i)=i:Printarr(i);NextPrintReDimPreservearr(15)'再次定义数组arr,保存之'前arr(0)~arr(10)的值Fori=0To15Printarr(i);NextEndSub动态数组程序运行的界面如下:图3-25范例3-12运行界面假设语句ReDimPreservearr(15)去掉保存字Preserve,那么arr数组的元素值将被重置为0。数组相关函数1.Array函数语法:Array(参数表)功能:给一个Variant型的数组赋值。说明:参数表是一个用逗号隔开的值表,如果不提供参数,那么创立一个长度为0的数组。请看下面的语句:DimAAsVariantA=Array(10,20,30)在上面的例如中,第一条语句创立一个Variant的变量A。第二条语句将一个数组赋给变量A。动态数组2.IsArray函数语法:IsArray(变量名)功能:判断一个指定的变量是否为数组。说明:如果待判断的变量指向一个数组,那么IsArray函数返回true,否那么返回false。对于以下语句:Dima,bb=1a=Array(1,2,3,4,5)PrintIsArray(b),IsArray(a)程序运行结果为falsetrue数组相关函数2.动态数组使用举例【范例3-13】打印裴波纳契数列。裴波纳契数列具有以下特点:它的第一个数为0,第二个数为1,第三个数以后的数是前两个数的和。在程序中将使用InputBox输入的值来确定要打印的数列项数,产生的数列存放在一维数组中。程序代码如下:OptionBase1PrivateSubForm_Click()DimnAsInteger,mAsInteger,kAsInteger,f()AsLongm=InputBox("请输入要打印的数列项数","输入项数",10)ReDimf(m)f(1)=0:f(2)=1'给数组第1、2位元素赋值

Forn=3Tom'利用循环计算3-m位数组元素

f(n)=f(n-1)+f(n-2)NextnClsPrintTab(10);"裴波纳契数列"Print数组相关函数k=1'给打印定位变量k赋初值

Forn=1Tom'利用循环打印数组元素

PrintTab(k*10);f(n);Ifk=4Then'每行打印4个数值后换行

Printk=0EndIfk=k+1'更改打印位置

NextnEndSub数组相关函数3.LBound函数语法:LBound(数组名[,dimension])功能:返回数组指定的维dimension的最小下标。说明:如果省略dimension参数,默认返回数组第一维的最小下标例如:DimaAsVariantDimb(1To3,2To4)AsIntegerDimc(-1To2,1To3)AsIntegera=Array(1,2,3,4,5)PrintLBound(a),LBound(b,2),LBound(c)运行的结果为02-1数组相关函数4.UBound函数语法:UBound(数组名[,dimension])功能:返回数组指定的维dimension的最大下标。说明:如果省略dimension参数,默认返回数组第一维的最大下标此函数与上述的Lbound函数一起使用可以确定一个数组的大小。例如:Dimb(1To3,2To4)AsIntegerPrint(UBound(b,1)-LBound(b,1)+1)*(UBound(b,2)-LBound(b,2)+1)程序将输出9数组相关函数5.Erase函数语法:Erase(数组名1[,数组名2,…])功能:重新初始化静态数组以及释放动态数组对应的内存空间。说明:〔1〕对于静态数组,Erase函数将按表3-5重新初始化数组的值。数组相关函数〔2〕对于动态数组,Erase释放动态数组所使用的内存。在下次引用该动态数组之前,程序必须使用ReDim语句来重新定义该数组变量的维数。例如:DimaAsVarianta=Array(1,2,3,4,5)EraseaReDima(1,2)'语句APrintLBound(a)上述程序段,如果没有语句A,编译时就会出现下标越界的错误。用户自定义类型除了Integer,String等标准的数据类型,VB还支持用户自定义类型。所谓的自定义类型,类似于C语言中的结构〔struct〕,这种类型的数据由假设干个不同类型的根本数据组成。自定义类型由Type语句来实现:1.自定义类型的声明形式Type类型名元素名1As类型名元素名2As类型名……元素名nAs类型名EndType用户自定义类型例如要定义一个存放学生信息的类型,可以自定义类型student:TypeStudentNumAsLong‘学号NameAsString*10‘姓名,用长度为10的定长字符串来存储SexAsString*5‘性别,用长度为5的定长字符串来存储ScoreAsSingle‘得分,用单精度数来存储EndType说明:〔1〕自定义类型一般在标准模块中定义。〔2〕自定义类型变量的声明,与普通变量一样,使用Dim语句定义。例如使用上述的Student类型定义变量Stu,可以表示为:DimStuAsStudent。〔3〕要访问自定义类型中的元素,应使用变量名.元素名的方法表示。例如要为上述的Stu变量中的Num赋值,可以写成:Stu.Num="1"用户自定义类型2.自定义类型数组的使用同样可以使用自定义类型来定义数组。例如:Dima(1to10)asStudent。范例3-14说明了自定义类型数组的使用方法。用户自定义类型【范例3-14】5种草药的名称、销售量和单价,计算各种草药的销售额。定义一个类型Herb,它包含name,salenum,price,total等5个元素。使用Herb说明数组a,将草药的信息存放在数组中。其中total元素的值通过计算得出,其他元素的值通过inputbox接收。程序代码如下:PrivateTypeherb‘定义类型HerbnameAsStringsalenumAsIntegerpriceAsSingletotalAsSingleEndTypePrivateSubForm_Click()Dima(1To5)AsherbDimiAsInteger用户自定义类型Fori=1To5‘为a数组的每个元素赋值a(i).name=InputBox("输入草药名","数据录入","")a(i).salenum=InputBox("输入销售数量","数据录入","")a(i).price=InputBox("输入草药单价","数据录入","")a(i).total=a(i).salenum*a(i).priceNextPrint"草药名";Tab(10);"销售数量";Tab(30);"草药单价";Tab(50);"总额"Fori=1To5Printa(i).name;Tab(10);a(i).salenum;Tab(30);a(i).price;Tab(50);a(i).totalNextEndSub用户自定义类型程序运行的结果如下:图3-26范例3-14运行界面:

控件数组控件数组是一组具有共同名称和类型的控件。它们的事件过程也相同。在设计时,使用控件数组,可以让一组类型相同的控件执行相同的代码。1.控件数组的创立设计时可以使用以下方法创立控件数组:〔1〕对同一类型的控件使用相同的名字。创立步骤如下:①绘制控件数组中要添加的控件〔必须为同一类型的控件〕。②选择其中一个作为第一个控件,并使用其名字命名其它控件。③在为其它控件输入现有名称时,VisualBasic将显示一个对话框,要求确认是否要创立控件数组。例如:在窗体上放置假设干个CommandButton控件,将其中一个名称改为bcmd,并将其它的控件名称均改为bcmd,此时VB将自动创立控件数组〔2〕使用复制的方法添加控件。创立步骤如下:①绘制控件数组中的控件。②当控件获得焦点时,选择“编辑〞菜单中的“复制〞命令。③在“编辑〞菜单中,选择“粘贴〞命令。VisualBasic将显示一个对话框询问是否创立控件数组。控件数组2.控件数组的使用举例【范例3-15】设计图3-27界面,实现单击“重置〞按钮时,实现清空所有Text控件的文本信息。图3-27范例3-15界面设计控件数组程序实现步骤如下:〔1〕先在窗体上绘制一个TextBox控件。〔2〕选择TextBox控件,使用复制的方法再绘制另外两个TextBox控件。在询问是否创立控件数组时,选择“是〞〔3〕在窗体上绘制CommandButton控件,并将Caption属性设置为“重置〞。〔4〕在CommandButton控件的Click事件中参加以下代码:PrivateSubCommand1_Click()ForEachxInText1x.Text=""NextxEndSub或者使用下面的代码:PrivateSubCommand1_Click()Fori=0ToText1.Count-1Text1(i).Text=""NextiEndSub使用ForEach…Next语句不需要知道控件数组的元素个数,而使用For…Next语句那么必须通过访问控件数组的Count方法获得控件数组中元素的个数〔注意控件数组索引从0开始〕,并使用控件数组名〔下标〕方式访问数组中每个元素。3.5常用算法在本节中,将介绍检索以及排序中常用的算法。3.5.1检索算法3.5.2排序算法检索算法检索是数据处理中经常使用的一种重要运算。所谓的检索,就是根据给定的关键字,在指定的集合中找出值为关键字的过程。如果找到那么检索成功,否那么检索失败。下面将介绍顺序检索以及二分检索两种算法。检索算法1.顺序检索算法顺序检索的根本思想是:从集合的一端开始顺序扫描,将集合中的元素与给定值比较,如果相等那么检索成功,当扫描结束时,未找到给定值,那么检索失败。【范例3-16】设计如图3-28的界面,随机产生10个1-20之间的整数,从键盘上输入要查找的数,如果找到,那么显示其位置。控件属性设置如表3-6所示。检索算法检索算法程序代码如下:Dima(1To10)AsInteger'通用模块中定义数组PrivateSubCommand1_Click()DimkeyAsInteger,IAsInteger,findAsIntegerkey=Val(Text1.Text)'key为要查找的数find=0'find值为1表示查找成功,为0表示失败ForI=1To10Ifa(I)=keyThenLabel3.Caption="这个数在第"&I&"个位置上"find=1ExitForEndIfNextIIf(find=0)ThenLabel3.Caption="找不到"EndSubPrivateSubForm_Activate()RandomizeForI=1To10a(I)=Int(20*Rnd)+1'产生随机数Label1.Caption=Label1.Caption&a(I)&","'在Label上显示数组NextIEndSub检索算法2.二分检索算法二分检索算法又称为折半查找,这个算法要求检索的集合是一个有序序列。算法的根本思想是:将给定的值与集合中间位置上的元素比较,如果相等,那么检索成功。否那么,如果给定值比中间位置元素小,那么在集合的前半局部继续检索,否那么在集合后半局部检索。这样每次检索缩小一半的查找范围,重复这个过程,直到检索成功或者失败。例如:在有序集合〔1,4,10,20,25,30,32,45,56,57,60〕中查找数字20方括号表示查找范围,带下划线的数字为中间位置元素。经过3次比较后检索成功。查找过程如下:[1,4,10,20,25,30,32,45,56,57,60][1,4,10,20,25],30,32,45,56,57,601,4,10,[20,25],30,32,45,56,57,60假设查找数字37,经过4次比较后检索失败。查找过程如下:[1,4,10,20,25,30,32,45,56,57,60]1,4,10,20,25,30,[32,45,56,57,60]1,4,10,20,25,30,[32,45],56,57,601,4,10,20,25,30,32,[45],56,57,60检索算法【范例3-17】使用二分检索法在集合〔1,4,10,20,25,30,32,45,56,57,60〕中查找给定数字。界面设计参照范例3-16。程序代码如下:DimaPrivateSubCommand1_Click()DimkeyAsInteger,IAsInteger,findAsIntegerDimlowAsInteger,highAsInteger,midAsIntegerkey=Val(Text1.Text)'key为要查找的数find=0'find值为1表示查找成功,为0表示失败low=0:high=10'low,high表示查找范围DoWhilelow<=highmid=(low+h

温馨提示

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

评论

0/150

提交评论