第4章 Visual Basic程序代码设计_第1页
第4章 Visual Basic程序代码设计_第2页
第4章 Visual Basic程序代码设计_第3页
第4章 Visual Basic程序代码设计_第4页
第4章 Visual Basic程序代码设计_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章VisualBasic程序设计,第2页,本章主要内容,分支结构程序设计循环结构程序设计过程,(810学时),第3页,4.1分支结构程序设计,第4页,4.2.1分支结构,1.单分支结构语句格式:(1)IFThenENDIF(2)IFThen,条件,语句块,F,T,执行过程,第5页,例4-1:已知两个数x和y,比较它们的大小,使得x大于y。IfxyThent=x:x=y:y=tEndIf或IfxyThent=x:x=y:y=t,注意:将两个变量中的数进行交换,必须借助于第三个变量才能实现。如果将上面的语句写成:IfxyThenx=y:y=x执行后结果会如何?,第6页,语句格式:IfThenE

2、lseEndIf,条件,语句块1,语句块2,T,F,执行过程:,2.双分支结构,第7页,例4-2:某地至北京的邮路里程为1043公里,通过邮局向北京邮寄“特快专递”,计费标准每克为0.05元,但超过100克后,超出数每克为0.02元。编写程序计算邮费。,第8页,DimW!,F!W=InputBox(“请输入邮件重量:”)IfW=100ThenF=0.05*wElseF=5+(w-100)*0.02EndIfPrint“邮件重量为:”;W,“邮费为:”;F,第9页,3.条件函数IIf函数可用来执行简单的条件判断操作,它是“IfThenElse”结构的简写版本。格式:Result=IIf(,)功能

3、:当为真时,IIf函数返回“True部分”,而当为假时,IIf函数返回“False部分”。说明:Result函数的返回值,、及结果变量的类型要一致。例如,dimd%,x%d=IIf(x0,1,0)如果变量x的值大于0,变量d的值为1,否则为0。,第10页,又如,dimstr1,x%,y%PrintIIf(xy,“x大于y”,“y大于或等于x”)如果xy,输出“x大于y”,否则输出“y大于或等于x”再如,用IIf函数改写例4.2DimW!,F!W=InputBox(“请输入邮件重量:”)F=IIf(W=100,0.05*w,5+(w-100)*0.02)Print“邮件重量为:”;W,“邮费为:

4、”;F,第11页,If-EndIf语句实现多分支语句格式:If表达式1Then语句块1ElseIf表达式2Then语句块2Else语句块n+1EndIf,4.2.2多分支结构,条件1,语句块1,条件2,条件n,语句块2,语句块n,语句块n+1,T,T,T,F,F,F,执行过程,第12页,例4-4:输入一学生成绩x,评定其等级。方法是:90100分为“优秀”,8089分为“良好”,7079分为“中等”,6069分为“及格”,60分以下为“不及格”。x=Val(InputBox(“输入成绩”)Ifx=90thenPrint优秀ElseIfx=80ThenPrint良好ElseIfx=70ThenP

5、rint中等ElseIfx=60ThenPrint及格ElsePrint不及格EndIf,第13页,IfX0ThenY=1ElseIfX=0ThenY=0ElseY=-1EndIf,Y=IIf(X0,1,IIf(X=0,-1,0)B)Y=IIf(X=0,0,IIf(X0,1,-1)C)Y=IIf(X0,1,0),-1)D)Y=IIf(X0,IIf(X0,-1,0),1),例:在下列赋值命令中,与If语句等效的是:,第14页,语句格式:SelectCaseCaseCaseCaseCaseElseEndSelect,表达式列表2,表达式列表1,表达式列表n,语句块1,语句块2,语句块n,语句块n+

6、1,Y,N,N,N,Y,Y,执行过程,求表达式的值,2.SelectCase语句实现多分支,第15页,说明:各Case中的要与SelectCase中的是同类型的下面四种形式之一:例:SelectCasex变量x是数值的四种形式表达式A+5变量x的值为表达式A+5的值一组枚举表达式(用逗号分隔)2,4,6,8变量x的值分别为2,4,6,83.表达式1To表达式260to100变量x的值为60100Is关系运算符表达式Is60变量x的值小于60,第16页,SelectCasexCase90to100Print优秀Case80to89Print良好Case70to79Print中等Case60to6

7、9Print及格CaseElsePrint不及格EndSelect,用SelectCase语句改写例4-4。,第17页,A)计算机成绩:不及格,B)计算机成绩:及格,C)计算机成绩:良,D)计算机成绩:优,SelectCasexCaseis=60?计算机成绩:s,例:计算S=1!+2!+3!+10!的和,s=0Fori=1to10s=s+tt为i!值Nexti?“s=”;s,t=1,t=t*i,例:S=20+21+22+263(1m31.42*108颗),s=0Fori=tos=s+Nexti?“s=”;s,0,63,2i,第27页,格式一:DoWhile|UntilExitDoLoop,循环

8、条件,ExitDo,结束循环,F(While)T(Until),循环体,2.Do循环结构,执行过程,While:当“条件”为真时,重复执行”循环体”Until:直到“条件”为真时,结束执行”循环体”,T(While)F(Until),第28页,格式二:DoExitDoLoopWhile|Until,结束循环,循环体,执行过程,循环条件,F(While)T(Until),T(While)F(Until),第29页,例4-8:小红今年12岁,她父亲比她大30岁,编程计算出她父亲在几年后比她年龄大一倍,那时父女的年龄各为多少?,PrivateSubCommand1_Click()dimageasin

9、teger,casintegerage=12:c=0DoWhile(age+c)*2age+30+cc=c+1Loop,Print“经过”;c;“年,小红父女的年龄分别是:”Printage+30+c;和;age+cEndSub,格式1:,第30页,PrivateSubCommand2_Click()dimageasinteger,casintegerage=12:c=0Doc=c+1LoopUntil(age+c)*2=age+30+c,Print“经过”;c;“年,小红父女的年龄分别是:”Printage+30+c;和;age+cEndSub,格式2:,第31页,4.2.2循环嵌套,例4-

10、9:用ForNext语句打印乘法九九表。,1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=168*1=88*2=168*3=248*8=649*1=99*2=189*3=279*8=729*9=81,第32页,Sexp=a,Fora=1to9Forb=1toa,NextbPrintNexta,Forb=ato9,1*1=11*2=21*3=31*9=92*2=42*3=62*9=183*3=93*9=278*8=648*9=729*9=81,第33页,第34页,例4-10:求3200以内的所有素数(只能被1和本身整除的数)。,Forx=3to

11、200step2Fory=2tosqr(x)Ifxmody=0ThenExitForNexty,Ifysqr(x)ThenPrintx;Nextx,计算有多少个素数?并按每行8个数输出。,第35页,分析下面各题的执行结果:,a=0Forj=1to15a=a+jmod3Next?a,forx=1to2a=0fory=1tox+1a=a+1Nexty?a;Nextx,k=5forj=3to7k=k+jNext?k+j,a=0fori=1to3forj=1toifork=jto3a=a+1NextkNextjNexti?a,答案:15,答案:8,答案:23,答案:14,step-1,答案:38,第3

12、6页,x=1Fory=1To50Printx,yIfx=10ThenExitForIfxmod2=1Thenx=x+5Elsex=x-3EndIfNexty,(1)循环多少次?(2)输出结果是什么?,Forx=9To1Step1Ifxmod3=0Thenx=x-1Printstr(x);EndifNextx,分析程序:,第37页,4.2.3数组,数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。,其表示形式:A(1),A(10)X(1,1),X1(1,10),X(2,10)Y(0,0

13、,0),Y(1,2,5),1.数组概念,第38页,VisualBasic中的数组,按不同的方式可分为以下几类:按数组的大小(元素个数)是否可以改变来分为:定长数组、动态(可变长)数组。按元素的数据类型可分为:数值型数组、字符串数组、日期型数组、变体数组等。按数组的维数可分为:一维数组、二维数组、多维数组。对象数组:菜单对象数组、控件数组。,第39页,Dim:用在窗体模块或标准模块及过程中,定义窗体或标准模块级数组。Redim:用来重新定义动态数组。用在过程中。Static:用在过程中,说明该数组为静态数组。Public:用在全局模块(标准模块)中,说明该数组为全局的。,2.声明数组,第40页,

14、定义形式,语法:Dim数组名(下标下界to下标上界)As类型名称,如果不显式指定下标下界,则由OptionBase语句控制。OptionBase0或1如果没有使用OptionBase语句,则下界为0,常量或表达式,用Dim定义数组时,数组元素初始化成0或“”等,第41页,1)Dima(3)asintegera(0)a(1)a(2)a(3)2)OptionBase1Dimb(3)asintegerb(1)b(2)b(3),3)Dimc(1,3)aslongc(0,0)c(0,1)c(0,2)c(0,3)c(1,0)c(1,1)c(1,2)c(1,3)4)Dime(-1to1,2)asdouble

15、e(-1,0)e(-1,1)e(-1,2)e(0,0)e(0,1)e(0,2)e(1,0)e(1,1)e(1,2),举例:,第42页,3.数组的基本操作,数组的基本操作包括输入、输出及复制,这些操作都是对数组元素进行的。1.给数组元素赋初值(1)利用For循环语句DimA(5)AsIntegerFori=1To5A(i)=0数组的每个元素值为0Next,第43页,(2)利用Array函数在VB中可以使用Array函数为数组元素赋值,即把一个数据集赋值给某个数组。,格式:数组变量名=Array(数组元素值)功能:将数组元素值赋给数组各元素的值,各值之间用逗号分隔。说明:数组变量名是预先定义的数组

16、名(定义时没有指定维数和上下界,并且类型必须为变量体类型Variant),在数组变量名之后没有括号。,第44页,例:用Array函数给数组赋值。OptionBase1DimAAsVariant,BAsVariantA=Array(1,2,3,4,5,6)B=Array(“abcd”,“efg”,“hijk”)Fori=1ToUBound(A)PrintTab(i*6);A(i);NextiPrintFori=1ToUBound(B)PrintTab(i*6);B(i);Nexti,运行结果:123456abcdefghijk0,第45页,2.数组的输入数组的输入可以用For循环语句及文本框控件

17、输入,也可以通过InputBox函数输入。(1)InputBox函数给数组赋值例:利用InputBox函数给数组赋值。OptionBase1:DimS(4)AsStringPrivateSubForm_Click()Fori=1To4S(i)=InputBox(“EnterName:”)PrintS(i);“”;NextEndSub,通用声明,第46页,(2)用赋值语句给数组赋值,例:利用随机函数Rnd产生16个随机整数分别给一维数组和二维数组赋值。一位整数:int(9*Rnd)+1两位整数:int(90*Rnd)+10,Dima(16)AsIntegerFori=1To16a(i)=Int(

18、9*Rnd)+1Next,Dimb(4,4)AsIntegerFori=1To4Forj=1to4b(i,j)=Int(90*Rnd)+10NextjNexti,第47页,3.数组元素的输出多维数组元素的输出和输入都可以通过多重循环来实现。由于VB中的数组是按行存储的,因此把控制数组第一维的循环变量放在最外层循环中。,Fori=1To16Printa(i);Next,Fori=1To4Forj=1to4Printb(i,j);NextjPrint换行Nexti,第48页,例4-11:编写程序,实现矩阵转置,即将一个nm的矩阵的行和列互换。,数组转置,第49页,程序如下:OptionBase1在

19、窗体的通用层中定义PrivateSubForm_Click()单击窗体事件过程Clsn=InputBox(输入矩阵行数:,输入数据)m=InputBox(输入矩阵列数:,输入数据)ReDima(n,m),b(m,n)AsInteger定义两个动态数组RandomizeFori=1TonForj=1Toma(i,j)=Int(Rnd*90)+10利用随机函数给数组元素赋值NextjNextIFori=1TonForj=1Tomb(j,i)=a(i,j)实现转置NextjNextiPrint,第50页,Print矩阵a(转置前):Fori=1TonForj=1TomPrintTab(5*j);a(

20、i,j);输出a矩阵NextjPrintNextiPrintPrint矩阵b(转置后):Fori=1TomForj=1TonPrintTab(5*j);b(i,j);输出b矩阵NextjPrintNextiEndSub,第51页,例4-12:某校组织了“计算机程序竞赛”,参加决赛的10名同学的成绩见表。编写程序,按成绩排出名次。,竞赛成绩表,数据排序,第52页,这是一个排序问题,本程序采用的是“冒泡排序”法。“冒泡排序”法的基本思想:(将相邻两个数比较,小的调到前头)(1)假设有n个数(存放在数组a(n)中),第一趟将每相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最大的数已“沉底”

21、,放在最后一个位置,小的数上升“浮起”;(2)第二趟对余下的n-1个数(最大的数已“沉底”)按上法比较,经n-2次两两相邻比较后得次大的数;(3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两比较。,第53页,程序如下:OptionBase1PrivateSubForm_Click()ClsDimm,xm=Array(王一波,叶琼,张伟,张志峰,赵抗抗“,周亚玲,陈远,金钊,李鑫,潘婷)x=Array(89,78,77,83,90,96,93,84,86,95)PrintTab(10);计算机程序竞赛排名榜输出表头PrintTab(5);名次,姓名,成绩Print,第54页,

22、Fori=1To9Forj=i+1To10Ifx(i)x(j)Thent=x(i):x(i)=x(j):x(j)=tt=m(i):m(i)=m(j):m(j)=tEndIfNextjPrintTab(5);i,m(i),x(i)输出前9名的成绩NextiPrintTab(5);10,m(10),x(10)输出第10名的成绩EndSub,第55页,例4-13:求斐波纳契数列前40个数以及它们的和。斐波纳契数列是第1个数是0,第2个数是1,以后的数总是前两个数的和。,斐波纳契数列,第56页,PrivateSubForm_Click()DimiAsInteger,a,b,c,sumAsLonga=0

23、:b=1Sum=1Printa,b,Fori=3To40c=a+bSum=Sum+ca=bb=cIfiMod5=0ThenPrintcElsePrintc,NextPrint:PrintTab(30);Sum=;SumEndSub,解法1:,第57页,OptionBase1PrivateSubCommand2_Click()DimiAsInteger,a(40),sumAsLongClsPrinta(1)=0:a(2)=1sum=1Printa(1),a(2),Fori=3To40a(i)=a(i-1)+a(i-2)sum=sum+a(i)IfiMod5=0ThenPrinta(i)ElseP

24、rinta(i),NextPrint:PrintTab(30);Sum=;sumEndSub,解法2:,第58页,例4-14:利用随机函数Rnd()产生16个随机整数(两位)组成44方阵;求出其中最大数、最小数且指出它们的位置(即行下标、列下标)。,OptionBase1Dima(4,4)AsIntegerRandomizefori=1to4forj=1to4a(i,j)=int(90*rnd()+10)Printa(i,j);Nextj:PrintNexti,第59页,max1=a(1,1):min1=a(1,1)max_i=1:max_j=1:min_i=1:min_j=1Fori=1to

25、4Forj=1to4ifmax1a(i,j)Thenmin1=a(i,j):min_i=i:min_j=jEndifNextjNexti,第60页,?“第”x,”y=”;yEndSubSubForm_Click()dimaAsInteger,bAsIntegera=10:b=20Mysub1a,bPrint“a=”;a,”b=”;bEndSub,运行结果:x=110y=120a=110b=120,第77页,例:用传值方式传送参数。,SubMySub2(ByValxAsInteger,ByValyAsinteger)x=x+100:y=y*6:Print“x=”;x,”y=”;yEndSubSu

26、bForm_Click()dimaAsInteger,bAsIntegera=10:b=20MySub2a,bMySub2b,aPrint“a=”;a,”b=”;bEndSub,运行结果:x=110y=120 x=120y=60a=10b=20,第78页,4.3.4过程的嵌套和递归调用,1.过程的嵌套调用VisualBasic的过程定义都是互相平行和相对独立的。也就是说,在定义过程时,一个过程内不能包含另一个过程。VisualBasic虽然不能嵌套定义过程,但可以嵌套调用过程,也就是主程序可以调用子过程,在子过程中还可以调用另外的子过程,这种程序结构称为过程的嵌套。过程的嵌套调用执行过程。,第

27、79页,SubMain()CallSub1EndSub,SubSub1()CallSub2EndSub,SubSub2()EndSub,过程的嵌套调用执行过程,第80页,例4-18:过程嵌套调用示例。Submysub1(xAsInteger,yAsInteger)x=x+5:y=y*3Print过程1,传址调用;PrintTab(20);x=;x,y=;ymysub2y+x,y-xEndSubSubmysub2(ByValxAsInteger,ByValyAsInteger)x=x+5:y=y*3Print过程2,传值调用;PrintTab(20);x=;x,y=;yEndSub,第81页,P

28、rivateSubForm_Click()DimaAsInteger,bAsIntegera=10:b=20Print调用前;Tab(20);a=;a,b=;bmysub1a,bPrint返回后;Tab(20);a=;a,b=;bEndSub,过程的嵌套调用,第82页,2.过程的递归调用VisualBasic允许一个过程或函数在自身定义的内部调用自己,这样的子过程或函数称为递归子过程或递归函数。在许多问题中具有递归的特性,用递归调用描述它们就非常方便。例4-19:求fac(n)=n!的函数。根据求n!的定义n!=n*(n-1)!,写成如下形式:,1n=1Fac(n)=n*fac(n-1)n1,

29、第83页,可编写出计算fac(n)的函数:PublicFunctionfac(nAsInteger)AsLongIfn=1Then,fac=1Elsefac=n*fac(n-1)EndIfEndFunctionPrivateSubForm_Click()DimnAsIntegern=Val(InputBox(输入n的值:,4)Printfac(;n;)=;fac(n)EndSub,第84页,Fac(4)=4*fac(3),Fac(3)=3*fac(2),Fac(2)=2*1,Fac(2)=2*fac(1),Fac(1)=1,Fac(3)=3*2,Fac(4)=4*6,fac(4)的执行过程,第85页,4.3.5变量、过程的作用域,第86页,(1).局部变量,在过程内部定义的变量是局部变量,其有效范围仅限于定义它的过程内。,(2).模块(窗体)级变量,是指在一个模块(包括通用模块和窗体模块)内有效的变量,模块级变量相当于该模块内所有过程的公共变量。,(3).全局变量,全局变量是整个应用程序(工程)所有过程的公共变量。,1变量的作用域,第87页,例4-20:全局变量和局部变量示例。PublicxAsInteger定义全局变量xPriva

温馨提示

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

评论

0/150

提交评论