




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章VisualBasic
语言基础常量、变量、运算符和表达式赋值与注释语句和一句多行与一行多句基本控制结构常用内部函数输入与输出数组算法举例2.1.1常量类型:数值型、字符型、逻辑型、日期型一般常量123,-456.8,“ABC”,“水产学院”,true,false,#1/3/2004##1MAR2004#,#MARCH1,2004#,&O123,-&HA2符号常量语法:[Public|Private|Global]Const常数名[AS数据类型]=表达式表达式可以是结果为数或字符串的表达式或先前定义过的常量Public或Global说明可在整个应用程序中使用,Private说明只能在该过程中使用。(全局常量)常量名必须以字母开头,不包含句号或类型说明符,不能超过255个字符。例:ConstPI=3.14ConstEasdouble=2.718constN%=782.1常量、变量、运算符和表达式2.1.2变量变量名字母开头由字母、数字和下划线组成不能包含空格、句号、类型说明符长度不超过255不能与关键字重名变量类型LLL说明1:字符串类型有定长和变长,定长字符串的存储空间为串长;变长字符串的存储空间为10+串长。RETURN说明2:variant有数字类型和字符类型之分。数字类型存储空间为16;字符串类型为22+串长。说明3:variant包含3种特定值:Empty,NULL,ErrorEmpty:不同于0、零长度字符串、Null的特定值。Null:未知的数据或丢失的数据,一般用于数据库Error:已发生的过程中的错误状态。Variant变量赋值之前具有值Empty。包含NULL的表达式,计算结果总是NULLVariant用于在用户不能确定变量的数据类型时声明变量,以便计算机为该变量留内存空间。变体根据实际需要可以为10种任何数据类型中的任何一种。PrivateSubForm_Activate()Dimaasvarianta=1Printaa="this"PrintaEndSub输出结果为:1thisPrivateSubForm_Activate()DimaAsIntegera=1Printaa="this"PrintaEndSub将出现编译错误在变量名后加上“%”或在-32768~32767之间的整数后加上%都表示该变量为整型,例:
PrivateSubForm_Activate()a%=234.567c=234.567b=234%Printa,b,cEndSub将打印出235234234.567整型和长整型的区别:(1)占内存空间不同(2)表示数的范围不同单精度最多能保留到小数点后6位有效数字,双精度可保留到小数点后14位(单精度为7位有效数字,双精度为15位有效数字)。单精度的类型说明符为!,双精度的类型说明符为#。货币类型的必要性:为精确表示财务帐目。类型说明符为@,它的精度高,规定精确到小数点后4位,一般的数值型数据在计算机中是以二进制进行计算的,计算有误差,而货币类型是以十进制进行计算的,精确度高。另外,单精度只有7位有效数字,双精度只有15位有效数字,表示大数额的货币时不精确,如:$223555868999234.65,用单精度数表示为:$2.235559E14,用双精度数表示为:223555868999235,用货币类型表示为:$223555868999234.65RETURN3.变量说明(1)显式说明Dim变量名[As数据类型][,变量名[As数据类型]]……Static变量名[As数据类型][,变量名[As数据类型]]……Public变量名[As数据类型][,变量名[As数据类型]]……Private变量名[As数据类型][,变量名[As数据类型]]……例:DimMynameasstringDimYourNameasString*50
DimobjDbasobject
setobjDb=OpenDatabase(“C:\vb\test.mdb”)说明:Static定义静态变量Public定义的变量可以在其他对象的过程中使用Private定义的是局部变量(2)隐式说明.用类型说明符声明变量 例:no%声明no为一个整型变量
s$声明s为一个字符串变量
d#声明d为一个双精度型变量例:no%=90 s$=“hello”d#=3.14159265(3)OptionExplicit作用:为避免写错变量名而引起麻烦,可以使VB只要遇到未声明的变量就发出错误警告。使用方法:在代码窗口中加入OptionExplicit语句(代码窗口的对象列表中选“通用”,事件列表中选“声明”)“工具”/“选项”/“编辑器”/选中“要求声明变量”复选框,会自动在任何新模块中插入“OptionExplicit”语句2.1.3运算符和表达式运算符算术运算符:+,-,*,/,\,Mod,^关系运算符:>,>=,<,<=,<>,=,IS,Like连接运算符:&,+(字符串连接)逻辑运算符:and(与),or(或),not(非),Xor(异或),Imp(包含),Eqv(等价)整除运算(\)结果是商的整数部分,7\2结果为3.5的整数部分Mod求两个整数相除以后的余数。在这两种运算中,如果参加运算的是实数,则先按四舍五入原则将他们变成整数,然后进行计算。
除法运算(/):两个整型常量或变量进行除法运算的结果如果赋给一个整型量结果为整型,运算结果与整除运算结果一样;如果赋给实型量,结果为实型。Is比较两个对象的引用变量Like进行字符串匹配比较,*匹配多个字符;?匹配单个字符,#匹配单个数字,[列表]匹配列表内的单个字符,![列表]匹配列表外的单个字符,例:s*,s?,s#,[a-f],![a-f]例:s$=“123”slike“12#”slike“12?”slike“12*”S$=“111”slike“1*”snotlike“1?”snotlike“1#”逻辑运算符的运算结果:2.运算符的优先级:其中优先级由高到低运算,同级由左到右有括号先算括号内。2.2.1赋值语句格式:变量名或对象.属性名=表达式表达式可以是常量、变量、对象.属性名、表达式左右两边类型必须一致,否则强制类型转换字符与数值不能互相赋值例:Text1.text=“Hello!”DimMynameasstringMyname=“Helen”Dim
MyAgeasintegerMyAge=Myage+12.2赋值与注释语句和一句多行与一行多句2.2.2注释语句1.REM注释格式:REM注释内容2.单引号‘注释格式:’注释内容两种格式都可以占一整行或半行(写在语句后边对语句注释)前者占半行时需在语句后加上冒号编程技巧:程序调试过程中经常把暂时不用的语句加上注释而不是删除。2.2.3一句多行与一行多句1.一句多行在行尾加上“_”表示续行,即:该行还没完,此时不能在后边加注释例:Text1.text=text1.text+”hello,”_+”大连水产学院”2.一行多句语句之间用冒号分隔。例如:A=8:b=9:c=102.3.1分支结构2.3基本控制结构1.If…Then结构语法:If条件Then
语句组
EndIf 或写作:if条件then语句(必须是单个语句的情况)例:Ifa>0Thenb=aElseb=-a
2.If…Then…else结构语法:IfAThen或IfA1Then B B1 Else ElseIfA2Then C B2 EndIf ElseIfA3Then B3 …… Else
Bn EndIfIfa>0then printaEndIfIfa>0Thenb=aElseb=-aEndIf
IfScore<60Thenprint“Fail”
ElseIfScore<70Thenprint“Pass”
ElseIfScore<80Thenprint“Middle”
ElseIfScore<90Thenprint“Good”Elseprint“Excellent”EndIf3SelectCase语句语法:SelectCase<变量>|表达式
Case<值1> <语句1>
Case<值2> <语句2> ……
Case<值n-1> <语句n-1> CaseElse <语句n>EndSelect例:SelectCasescore
Case5 print“Best”
Case4 print“Better”
Case3 print“Good” CaseElse print“Fail”EndSelect说明:(1)值的形式可以是:具体常数:1,2,3,“A”等连续的数据范围:1to100,AtoZ满足某个条件的表达式:I>10多个不同范围,用逗号阁开:1,3to5,9(2)SELECTCase结构在开始处计算表达式的值,IF…THEN…ELSE结构在每个elseif处计算表达式的值(3)如果不止一个case子句与表达式的结果相同则只执行第一个子句(4)caseelse放在selectcase结构的最后4.嵌套嵌套的if语句中,endif语句自动与最靠近的前一个if语句配对尽量用缩进的方式书写结构语句和循环语句1Do循环无条件循环:
Do
语句组 [exitdo]
语句组
Loop有条件循环:条件为True时执行循环体, 条件为False时退出循环体。
DoWhile<条件> 语句组 [exitdo]
语句组
Loop条件为False时执行循环体,条件为True时退出循环体。DoUntil<条件>
语句组 [exitdo]
语句组Loop2.3.2循环结构Do
语句组 [exitdo]
语句组LoopUntil<条件>当满足条件时执行循环体。While<条件>循环体WendDo
语句组 [exitdo]
语句组LoopWhile<条件>在循环终止时测试循环条件,循环无条件执行一次:Do循环的循环体中必须有使循环条件变为false的语句,否则,循环会永远进行下去。即:产生死循环。例:
c=1DoWhilec<5Printc,c=c+1LoopPrint
c=1DoPrintc,c=c+1LoopWhilec<5Printc=1DoUntilc>25Printc,c=c*3LoopPrint
c=1DoPrintc,c=c*3LoopUntilc>25Print
a=1Whilea<5Printa,a=a+1WendPrint2.For循环语法:For<循环控制变量>=<循环初值>To<循环终值>[Step<步长>] [循环体] [ExitFor]Next<变量>For语句的执行步骤:Step1:设置循环控制变量为循环初值Step2:如果步长为正,判断循环控制变量是否大于循环终值,如果步长为负,判断循环控制变量的值是否小于循环终值,如果是,退出循环,否则,执行循环体。Step3:循环控制变量=循环控制变量+步长Step4:gotostep2注:步长可以为负,步长缺省时为1Fori=1To5Print"thisisthe",i,"execute"NextiPrintFori=1To5Step2Print"thisisthe",i,"execute"NextiPrintFori=1To5Print"thisisthe",i,"execute"Ifi>=3ThenExitForEndIfNextiSum=0Fori=1To100sum=sum+iNextISum=0ForI=100to1step–1Sum=sum+INextI设计一个摇奖程序,随机生成一个N位的中奖号码。ConstN=5PrivateSubcmdStart_Click()Dimi,jAsIntegerDimaAsSingleDimStrPrizeAsString
Fori=1ToNj=Int(10*Rnd)
StrPrize=StrPrize&jFora=1To10000Step0.01NextaNumber.Text=StrPrizeNumber.RefreshNextiEndSub3.退出循环语法:ExitForExitDo说明:Exit语句几乎总是出现在循环体内的嵌套的if语句例:DimI,sumasintegerSum=0ForI=1to10000 SUM=SUM+1 IFsum>5000thenexitforNexti内部函数:VB提供的函数函数调用:函数名(参数1,参数2……)2.4.1算术函数VB提供的进行算术运算的函数。2.4常用内部函数2.4.2字符串函数VB提供的进行字符串处理的函数。2.4常用内部函数例:s$="大连水产学院AbCd信息工程学院"
PrintLTrim(s)PrintRTrim(s)PrintTrim(s)PrintLeft(s,5)PrintRight(s,6)PrintMid(s,6,4)PrintLen(s)PrintLCase(s)PrintUCase(s)PrintString(8,"X")PrintLen(Space(5))例:设计一个将输入的字符串反向显示的程序PrivateSubcmdStart_Click()Dimstr,strReverseAsStringDimI,nAsInteger
str=txtInput.Text:n=Len(str)Fori=1Ton
strReverse=strReverse&Right(str,1)
str=Left(str,Len(str)-1)Nexti
txtOutput.Text=strReverseEndSub例:译电文,为了保密,在电文传输过程中往往将电文加密,收电文时再转换回来。比如:按下列规律译:A变成E,B变成F,……,W变成A,X变成B,Y变成C,Z变成D。PrivateSubcmdStart_Click()DimSourceStr,SecretStrAsStringDimiAsInteger
SecretStr=""
SourceStr=txtInput.TextFori=1ToLen(SourceStr)c=Mid(SourceStr,i,1)Ifc>="a"Andc<="z"Orc>="A"Andc<="Z"ThenIfc>="W"Andc<="Z"Orc>="w"Andc<="z"Thenc=Chr(Asc(c)+4-26)Elsec=Chr(Asc(c)+4)EndIfEndIf
SecretStr=SecretStr&cNextItxtOutput.Text=SecretStrEndSub2.4.3日期与时间函数作用:用于对日期和时间进行处理的函数。2.4.4类型转换函数作用:用于进行不同数据类型之间转换的函数。ASCII码与字符串之间的转换
ASCII码转换成字符串:chr
如:chr$(13)将ASCII码13转换成“回车”,chr$(10)将ASCII码10转换成“换行”。字符串转换成ASCII码:Asc。例:PrivateSubForm_Click()Cls‘清除窗体DimIAsInteger‘声明I为整型变量ForI=Asc(“h”)toAsc(“z”)
PrintI‘打印相应的ASC值NextIEndSub分析执行结果,然后上机看执行结果。(2)数与字符串之间的转换Str$,Format$,Val将数转换成字符串:Str$,这些数包括实数、货币、整数。将数据进行格式化:Format$,将数、日期、时间、字符串按指定格式进行格式化。例如:a=51.8375b=Format(a,”00.000”),则b=51.838将字符型数转化为数值型数:Val注:文本框的内容、标签上的数为字符串类型,不能直接计算。(3)一种数据类型转换成另一种数据类型:Fix:实数转换成整数,取整。Int:实数转换成整数,四舍五入。Ccur:将任何有效的表达式转换成Curency型Cdbl:将任何有效的表达式转换成Double型Cint:将任何有效的表达式转换成Integer型CLng:将任何有效的表达式转换成Long型CSng:将任何有效的表达式转换成Single型CStr:将任何有效的表达式转换成String型CByte:将任何有效的表达式转换成Byte型CDate:将任何有效的表达式转换成Date型CVar:将任何有效的表达式转换成Variant型说明:函数的参数值必须对目标数据类型有效,否则发生错误,例如:long变成integer必须在integer范围内浮点变成整型是按照四舍五入的原则其他类型变成boolean,0变成false,非零变成true;boolean变成其他类型,false变成0,true变成-1转换成date,小数点前部分表示日期,小数点后部分表示时间inputBox函数一般用于输入,MessageBox用于输出:2.5.1InputBox函数作用:接受用户从键盘输入的内容格式:InputBox(提示信息,[标题,][,缺省值][,Xpos][,Ypos][,帮助文件名,帮助主题号])说明:当按“确定”按钮时函数的返回值是输入的文本内容,按“取消”按钮时返回空串。提示信息为在输入对话框中显示的提示信息,长度不超过1024标题为输入对话框的标题拦显示的信息,缺省为应用程序名缺省值为缺省的输入内容Xpos,Ypos对话框在屏幕上的起始位置2.5输入与输出例:Thefile=InputBox(“请输入文件名:”,“输入对话框举例”,“file1”)产生的对话框为:PrivateSubForm_Click()Text1.Text=InputBox("hello")EndSub2.5.2MsgBox函数 作用:消息框是VB用MsgBox函数或语句提供的一种对话框,它本身不是用控件实现的。当用函数实现时有返回值,通过返回值可以继续下一步的工作。主要作用是向用户发布提示信息,要求用户做出相应的响应。
格式:MsgBox(提示信息[,按钮类型][,标题,]
[,帮助文件名,帮助主题号]
)说明:1.提示信息和标题均为字符串常量或字符串变量2.提示信息是在消息框中显示的信息3.标题为消息框的标题显示的信息。4.按钮类型可以用符号常量,也可以用数字,当为数字时为C1+c2+c3+c4的和例1:例2:5.MsgBox函数也有返回值,返回值是由所按的按钮确定的,含义例:
result=MsgBox(“数据正确吗?”,65,“消息框举例”)return缺省按钮及其对应的值指定缺省按钮的符号常量和相应数值returnreturnreturn消息框的强制返回性return例:想让消息框的按钮为VbYesNoCancel类型、第二个按钮为缺省按钮而且图标为感叹号则第二个参数值设为:307=3+256+48语句为:
Text2.Text=MsgBox(“hello”,307,“test”)或
Text2.Text=MsgBox("hello",vbYesNoCancel+vbDefaultButton2_+vbExclamation,"test")return例:注册窗口的设计:PrivateSubCommand1_Click()IfText1.Text="DL"ThenIfText2.Text="dz"ThenForm2.ShowForm1.HideElseIfMsgBox("口令错误!重新输入吗?",52,"错误信息")=6ThenText2.Text=""Text2.SetFocusElseEndEndIfEndIfElseIfMsgBox(“用户名错误!重新输入吗?”,65,“用户名错误信息”)=1
ThenText1.SetFocusText1.Text=""ElseEndEndIfEndIf
EndSub2.5.3Print方法作用:在窗体、图片框或打印机上输出文本格式:对象.print[表达式列表]说明:表达式列表中间的分隔符可以是逗号或分号,分号表示按紧凑格式输出,逗号表示按标准位置输出。例:表达式列表缺省时输出一空行例:行尾可以有逗号、分号和回车,逗号、分号的含义同1,表示下一个print语句的输出内容与当前print语句的最后一个输出项的位置关系,回车表示换行。例:可以用格式函数控制输出格式,这些格式函数包括:format、spc、tab例PrivateSubCommand1_Click()Dima,b,cAsIntegera=9:b=8:c=7Printa,b,cPrinta;b;cEndSubreturnPrivateSubCommand1_Click()Dima,b,cAsIntegera=9:b=8:c=7Printa,b,cPrintPrinta;b;cEndSubreturnPrivateSubCommand3_Click()Dima,b,cAsIntegera=9:b=8:c=7Printa,Printb;PrintcPrint"a";"b";"c"EndSubreturn(1)format格式:format(表达式[,格式串])PrivateSubCommand1_Click()DimmyTime,MyDateAsStringDimMySalary,yourSalaryAsStringDimaAsSinglea=5158.3
myTime=Format(Now,"hh:mm:ss")
MyDate=Format(Now,"yyyy/mm/dd")
MySalary=Format(a,"##,##.00")
yourSalary=Format(a,"####.00")PrintMyDate,myTime,MySalary,yourSalaryEndSub(2)spc格式:spc(n)功能:输出n个空格(3)tab格式:tab[(n)]功能:将光标移到第n列说明:如果当前位置在第n列之后则移到下一行的第n列2.6数组2.6.1数组声明1.数组定义:格式:Dim|Global数组名(数组元素上下界,……)[As类型]说明:(1)数组元素上下界可以表示为:下界to上界,缺省时数组下界时序号从0开始编号。(2)数组元素上下界的个数表示数组的维数(3)数组为变体类型时不同数组元素可以赋不同类型的值。(4)数组不同于普通变量,使用前必须先声明。例:Dima(3To5)AsStringDimb(10)AsStringDimiAsIntegerFori=0To10b(i)="test"+Str(i)NextiPrinta(3);a(4);a(5)Fori=0To10Printb(i),NextiPrint2.OptionBase语句格式:OptionBase{0|1}功能:声明数组的缺省下标说明:(1)数组的默认缺省下标为0,可以用该语句将其改为1(2)一个模块中只能出现一次该语句,且必须放在数组声明语句之前。3.Lbound和Ubound函数格式:Ubound(数组名[,维]),Lbound(数组名[,维])功能:用于确定数组的指定维的最小和最大下标说明: 维指定要返回的是哪一维的下标2.6.2静态数组和动态数组1.静态数组:固定大小的数组,维数和大小不能改变。动态数组:运行时可以改变其大小的数组,事前可以不指定数组的大小,在需要时指定。格式:ReDim[Preserve]数组名(数组元素上下界,……)[As类型]说明:(1)ReDim
用于为动态数组重新分配存储空间,只能改变每一维的数组元素的个数,不能改变数组的维数。(2)当改变数组元素最末维的大小时用preserve可以保留数组中原来的数据。(3)不能改变数组元素的类型(4)如果将数组元素改小,被删元素的数据就会丢失PrivateSubCommand1_Click()Dima()AsIntegerDimx,yAsIntegerx=5y=9
ReDima(5,9)
ReDima(x+1,y+1)
ReDimPreservea(x+3,y+6)EndSub例:点击按钮时,用输入对话框输入一个整数N,然后求Fabonacci数列:1,1,2,3,5,8,13,21,……到第N项,并把结果输出到窗体上Fabonacci数列的关系:F1=1F2=1Fn=Fn-1+Fn-2PrivateSubCommand1_Click()Dimi,f()AsIntegerDimnAsIntegern=Val(InputBox("pleaseInputAInteger:","Fabonacci","10"))Ifn<>0Then
ReDimf(n)f(0)=1:f(1)=1Fori=2Tonf(i)=f(i-1)+f(i-2)NextiFori=0TonPrintf(i),IfI+1Mod5=0ThenPrintEndIfNextiEndIfPrintEndSub2.6.3多维数组:1.定义:Dim|Global数组名(最大长度,最大长度,…...)[As类型]2.使用:用多重循环来使用。例ForI=1ton forj=1tom a(I,j)=0 nextjNextI1.牛顿迭代法解方程用牛顿迭代法解方程2x3-4x2+3x-6=0在x0附近的根,已知一个初始点x0,公式为:xn+1=xn-f(xn)/f’(xn)n=0,1,2…..步骤:先计算f’(xn)=6x2-4x+3
根据公式依次计算x1,x2,x3…
当|xn+1-xn
|<ε时为方程的根。本题中ε
=0.000052.7算法举例PrivateSubCommand1_Click()Constepslon=0.00005Dimxn1,xn,f,f1AsSinglexn1=Val(X0.Text)Do
xn=xn1f=2*xn^3-4*xn^2+3*xn-6f1=6*xn^2-4*xn+3xn1=xn-f/f1LoopWhileAbs(xn1-xn)>=epslonX.Text=xn1EndSub2.折半查找法在一组已经排好序的数中查找某个数。折半查找是通过每次得到被查数据范围的中间数据,然后与被查数据进行比较,如果该中间数据大于被查数据,则查找前半部分,否则查找后半部分,依此进行排查。例:某物的价钱在1~1024之间一般的猜法为:高了512?256?低了320?高了高了384?288?恭喜!答对了!当点击窗体时,用输入对话框输入要查找的数,被查找的范围事先指定,并在窗体被激活时显示在窗体上。ConstN=10Dima(N)AsIntegerPrivateSubForm_Activate()Dimi,jAsIntegera(1)=1:a(2)=5:a(3)=8:a(4)=16:a(5)=23a(6)=31:a(7)=59:a(8)=88:a(9)=96:a(10)=123Print"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工商银行2025长沙市秋招结构化面试经典题及参考答案
- 2025行业投资热点趋势报告
- 中国银行2025巴中市秋招笔试EPI能力测试题专练及答案
- 建设银行2025六安市半结构化面试15问及话术
- 建设银行2025海西蒙古族藏族自治州秋招无领导小组面试案例题库
- 班组安全自主管理培训课件
- 中国银行2025临沂市秋招笔试性格测试题专练及答案
- 班组安全管理与建设培训课件
- 交通银行2025七台河市秋招笔试EPI能力测试题专练及答案
- 农业银行2025西双版纳傣族自治州秋招笔试性格测试题专练及答案
- 《专利及专利查询》课件
- 地下水污染控制与修复
- 智障个别化教育计划案例(3篇)
- 《欧盟的法律体系》课件
- 网络信息安全基础知识培训课件
- 江苏南京建邺高新区管委会社会公开招聘22人高频重点提升(共500题)附带答案详解
- 油气开采技术进步与挑战-洞察分析
- 第十八届地球小博士全国地理知识科普大赛介绍宣传组织动员备赛课件
- 【MOOC】国际金融学-湖南大学 中国大学慕课MOOC答案
- 《铁路轨道维护》课件-道岔检查作业
- 护理安全管理课件完整版
评论
0/150
提交评论