1、VB程序设计基础,刘鑫朝 信管教研室 lxc_,第一章 VB概述,属性(Property):看起来像什么? 指对象的性质、特征。 方法(Method): 能做什么? 指对象能执行的动作。 事件(Event): 对什么事有反应。指对象能识别的动作。 程序代码中使用如下格式的语句来改变属性值: 对象名.属性 值(常量、变量、表达式) 通过如下格式为变量赋值:变量 对象名.属性 使用方法的格式:控件名.方法VB采用事件驱动的编程方式,事件过程的一般格式:Private Sub 控件名_事件名(参数表)(程序代码)End Sub,第二章 创建用户界面,窗体类的相关属性、方法和事件,第二章 创建用户界面
2、,第二章 创建用户界面,第二章 创建用户界面,第三章 VB语言基础,VB应用程序,窗体文件,标准模块文件,声明部分 事件过程 通用过程,全局声明部分 模块声明部分 通用过程,声明部分,事件过程,通用过程,窗体文件,标准模块文件,全局声明部分,模块声明部分,通用过程,第三章 VB语言基础,语句:VB程序的最基本成分 一个语句可通过续行符号“ _”(一个空格加一个下划线)分成多行写;多个语句也可通过分行符号“:”(冒号)写在一行上。注释语句: 格式一:Rem 格式二: ,第三章 VB语言基础,整型数,浮点型数,整型,长整型,单精度数,双精度数,程序运行中取值始终保持不变的数据称为“常量” 数值常量
3、:P43表(4-1)八进制数(数字前加&O) 和 十六进制(数字前加&H) E或D,其中以E分隔的数为单精度数,以D分隔的数为双精度数 字符常量:用引号括起来的一串字符 逻辑型常量:只有True(真)和False(假)两个取值 日期型常量:用#作为界定符,mm/dd/yy表示日期, hh:mm:ss表示时间 符号常量:以符号形式表示的常量Public|Private Const As Type = ,第三章 VB语言基础,以符号形式出现在程序中,且取值可以发生变化的数据称为“变量”,变量名的命名规则如下:必须以字母开头长度不超过255个字符在作用域内必须唯一字符串内不得包含点号和用于类型说明的
4、符号、&、!、$,也不能有空格不得使用系统保留字(如End Private Sub ),第三章 VB语言基础,变量的说明语句 局部变量(包括静态变量)在过程中声明Static|Dim As 窗体/模块级变量在模块的“通用”部分声明Private|Dim As 全局变量在模块的“通用”部分声明Public As ,第三章 VB语言基础,变量初始值:当对一个变量进行说明后,系统会自动为其赋一个默认的初始值。 数值型数据的初值为0; 字符型数据的初值为空串“”; 逻辑型数据的初值为False; 日期型数据的初值为0:00:00 一条语句声明多个变量:必须对每个变量都逐个声明例: Dim x, y a
5、s Integer,第三章 VB语言基础,变量的赋值:变量名 = 表达式 隐式说明类型说明符(P47,表3-4) 例:k% = 1 :Country$ = “China” 定长字符串的说明: Private|Dim|Static|Public As String * 例:Public String1 As String*10,第三章 VB语言基础,Option Explicit语句 功能:系统自动检查模块中所有未加显式说明的变量,一旦发现便产生出错信息提示使用者改正错误。该语句应在模块的通用说明部分输入。 强制显式说明的好处: 一个变量如果不被定义,会被当作变体类型来进行处理,从而降低程序的效
6、率; 变量定义之后,若事后使用了错误的变量名,则系统检测到错误的变量名时会发现其没有被声明,便会提示用户输入错误。,第三章 VB语言基础,算术运算符 加(+)、减(-)、乘(*)、除(/)、整除()、取余(Mod)、乘方()、字符串连接(&) 优先级: -(负号) *和/ Mod +和 - & 关系运算符:、=、 逻辑运算符:非(Not)、与(And)、或(Or)、异或(Xor) 优先级:Not And Or Xor,A/B AB Fix(A/B) Int(A/B),第三章 VB语言基础,运算规则: 先算术运算,再关系运算,最后逻辑运算 ()可用来改变运算的优先顺序 不同数据类型的数据进行运算
7、:结果为存储长度较长的数据类型,但除法运算的结果都为双精度型 要注意表达式可能溢出的情况,X Y+32 (结果T/F?),第三章 VB语言基础,公共函数:VB系统已预先定义好的完成某特定功能的程序段,公共函数可供编程者直接调用使用。 算术函数(P52 表4-6) 字符函数(P53 表4-7) 转换函数(P54 表4-8) 日期与时间函数(P55 表4-9),第三章 VB语言基础,格式化函数 format $ (,fmt$) 格式控制字符:数位控制符: #、0标点控制符: . 、 ,指数输出控制符: E+、E-符号控制符: %、$、-、+ 例: X = 123456.78Print Format
8、(x,”00000000.0000”)Print Format(x,”#,#,#.#”) 00123456.7800 123,456.8,四舍五入考法? 除了Cint,其他的都是直接五入?,第四章 算法基础及VB的基本语句,任何算法都可由以下三种基本结构实现:顺序结构、分支结构、循环结构,第四章 算法基础及VB的基本语句,分支结构If 条件表达式成立 ThenA语句组ElseB语句组End If,注意: 语句体为语句组时,语句体和Then或Else不能够写在同一行 2. 当分支结构中A组或者B组语句仅有一条时,可省略“End If”,但必须将所有语句写在同一行:,第四章 算法基础及VB的基本语
9、句,If 条件表达式成立 Then Else If 条件表达式成立 Then If 条件表达式成立 ThenA语句组 End If,第四章 算法基础及VB的基本语句,多分支结构,If 条件1 Then 语句块1ElseIf 条件2 Then语句块2ElseIf 条件n Then语句块nElse 语句块n+1End If,Select Case 测试表达式Case 测试项1语句块1Case 测试项2语句块2Case Else语句块n1 End Select,P66,第四章 算法基础及VB的基本语句,条件?,循环体,T,F,条件?,循环体,F,T,Do While Loop,DoLoop Whil
10、e ,“当(while)型”循环条件成立时,执行循环体,第四章 算法基础及VB的基本语句,条件?,循环体,F,T,条件?,循环体,T,F,“直到(Until)型”循环条件成立时,结束循环,Do Until Loop,DoLoop Until ,第四章 算法基础及VB的基本语句,For-Next循环For = To Step 循环体Next 注意: 计数变量应为整型或单精度型,初值、终值和步长值为相应类型的表达式; 步长值可以为正,也可为负,省略时默认步长值为 1;,表达式1,表达式2,表达式3,计数变量 = 计数变量 + 步长,第四章 算法基础及VB的基本语句,Exit Do 用于直接(无条件
11、)退出循环,可在任意Do-Loop结构的循环体中出现,一般形式为:If 条件表达式成立 Then Exit Do循环体中可出现 Exit For 语句,用于直接(无条件)退出循环 例如:求前N项的和、素数、,2010年秋:利用下列公式求函数Cos(x)的近似值,规定通项的绝对值=10-6时结束计算。,Option Explicit Private Sub Command1_Click()Dim S As Single, T As Single, K As Integer, x As SingleConst eps As Single = 0.000001x = Val(Text1)S = 1T
12、 = 1DoT =S = S + TK = K + 1Loop While Text2 = S End Sub,K = 1,T * (-1) * x 2 / (2 * K - 1) * (2 * K),Abs(T) eps,Abs(T) = eps,Abs(T) eps,第四章 算法基础及VB的基本语句,赋值语句的一般形式为:var = 其中:var表示某个变量名或属性名,赋值语句的左边不能是表达式或常量,第四章 算法基础及VB的基本语句,变量(数值型) 表达式(数值型)将表达式值类型先转换为变量类型再赋值 变量(字符型) 表达式(数值型)将表达式值先转换为数字字符再赋给变量 变量(逻辑型)
13、表达式(数值型)非零值转换为True赋给变量,0值转换为False赋给变量 变量(数值型) 表达式(逻辑型)True转换为1赋给变量,False转换为0赋给变量 变量(字符型) 表达式(逻辑型)True转化为“True”赋给变量,False转化为“False”赋给变量 变量(数值型) 表达式(字符型)将表达式的值类型转换为数值类型再赋值,如果转换不成功则报错,第四章 算法基础及VB的基本语句,InputBox函数v = InputBox$(,) MsgBox函数 P58 表(4-10)(4-11) MsgBox(Prompt,Button,Title,HelpFile,Context)1. 函
14、数在此等同为一个过程(sub)使用,不加括号;例: MsgBox “非法数据!“, , “警告 “2. 使用Print 方法打印函数返回值例: Print MsgBox(“非法数据!“, , “警告“)3.需要用户的响应结果,将函数返回结果(P59,表411)赋给一个变量例:Response=MsgBox(“真删除吗?“, 4+48, “提示信息“),第五章 数组,数组:一组具有相同类型的有序变量的集合 数组必须先定义后使用。数组的定义:Public|Private|Static|Dim 数组名( To, To,) As 类型 说明:TO 决定了每一维的大小,下界指下标的最小值,上界指下标的最
15、大值,默认下界是从0开始,若想使下标从1开始,可在模块的“通用”部分中使用语句“Option Base 1” 上、下界必须是常量或常量表达式,不得是变量,上、下界应是整数,若不是,则自动四舍五入,第五章 数组,返回上、下界函数:UBound(数组名,第几维):返回数组某维的维上界值LBound(数组名,第几维):返回数组某维的维下界值 Erase:初始化固定大小数组的元素(根据数组类型给元素赋初值),或释放动态数组的存储空间。,第五章 数组,数组元素的赋值 通过循环逐一给数组元素赋值(用InputBox函数) 通过循环逐一给数组元素赋值(用Int函数) 数组元素的输出 按矩阵格式输出数组 (P
16、rint方法的使用) 输出到窗体(图片框) 输出到文本框 数组元素的引用 通过数组名和下标来引用,但元素的下标一定要在定义的上下界范围之内,否则便会报出“下标越界” 的错误。,第五章 数组,动态数组 Dim 数组名() as 类型 ReDim Preserve (维界定义) 控件数组:由一组具有相同名称的同类型控件组成,每个控件共享同一事件过程 控件数组中的每个控件都由其下标属性Index标识 控件数组的第一个元素下标为0,第五章 数组,Load object(index) Unload object(index) 用于添加和删除控件数组中的控件,但添加和删除控件只能针对现有控件数组操作 in
17、dex可以跳序; Unload语句只能删除由Load语句添加的控件; 由Load语句添加的控件,其Visible 属性为False,所以要在程序中将刚装载控件的Visible属性设置为True,才能在窗体上可见;另外,新控件的大小、位置与原控件一样,隐藏在其背后,所以还要重新设置它的Top、Left等属性;,第五章 数组,排序 选择法排序 冒泡排序 查找 直接查找 二分法查找,第五章 数组,选择法排序: For i=1 to N-1For j= i+1 to N If A(i) A(j) ThenTEMP=A(i)A(i)=A(j)A(j)=TEMP End IfNext j Next i,第
18、五章 数组,冒泡排序 For N=1 to n-1For M=1 to n-NIf a(M) a(M+1) ThenTEMP=A(M) A(M)=A(M+1)A(M+1)=TEMPEnd IfNext M Next N,*需要冒了多少次?,每次冒需要比较几次?,分析:二分查找是一种快捷有效的查找方法,使用二分查找的前提是数据序列已排好序。假设有n个数已经按照从小到大的顺序排列,并存放在数组A中,设Left为查找区间的下界下标,初值为1;Right为查找区间的上界,初值为n;设需要查找的数为x;二分查找的算法如下: (1)求出查找区间的中间位置Mid=Int(Left+Right)/2) (2)
19、若A(Mid)=x,则找到,结束比较 (3)若A(Mid)x,则表明x在A(Left)到A(Mid-1)区间内,查找区间缩小一半,设置Right=Mid-1 (5)重复执行以上操作 (6)结束循环的条件有两个:已经找到;找不到-LeftRight,二分查找,x=8,x=5,1 2 3 4 5 6 7 8 9 10,1 2 3 4 5 6 7 8 9 10,Left = LBound(a)Right = UBound(a)x = InputBox(“请输入要查找的数据“)Do While Left = RightMid = Int(Left + Right) / 2)If a(Mid) = x
20、ThenExit DoElseIf a(Mid) x ThenLeft = Mid + 1ElseRight = Mid - 1End IfLoopIf Left = Right ThenPrint “要查找的“; x; “是A(“; Mid; “)“ElsePrint “没找到!“; xEnd If,二分查找,第八章 过程,过程,Sub过程,Function过程,事件过程,通用过程,窗体事件过程,控件事件过程,公有过程,私有过程,公有过程,私有过程,第八章 过程,窗体事件过程的一般形式如下: Private Sub Form_事件名(参数列表)局部变量和常数声明语句块 End Sub窗体事件
21、过程 Initialize Load Activate Gotfocus,窗体的事件过程名中不使用其具体名称,而固定用Form,窗体事件固定为“Private”,说明它是模块级的,第八章 过程,控件事件过程的一般形式如下: Private Sub 控件名_事件名(参数列表)局部变量和常数声明语句块 End Sub,控件的事件过程名中必须使用其具体名称,控件事件固定有“Private”关键字,说明它是模块级的,第八章 过程,通用过程 Private|Public Static Sub ()End Sub 缺省作用域声明时,系统默认为Public; 在一个窗体模块中调用另一窗体模块的公有过程时,需
22、以“窗体名.公有过程名”的形式调用; Exit Sub可以提前退出过程调用 过程不能嵌套定义,第八章 过程,Function过程的特点是返回一个值,Function过程的形式如下:Private|Public Function (参数列表) As End Function 函数体中一定要有对函数名赋值的语句函数名=表达式 函数体内可有Exit Function语句无条件退出函数过程,第八章 过程,Sub过程的调用Call (实参1,实参2,)过程名 实参1,实参2, 调用Function过程的一般形式如下:var = (实在参数表) Call (实在参数表)实在参数表,第八章 过程,形参:指过
23、程定义时出现在过程或函数名后括号中的参数 形参为ByVal,指明参数传递方式是传值; 形参为 ByRef,指明参数传递方式是传地址或称为“引用” 实参:指调用过程函数时,出现在过程的函数名后括号中的参数 在调用一个有参数的过程时,首先进行“形实结合”,实参按“位置”向形参传值或传地址; 实在参数和形式参数,要求个数相同,位置对应,类型一致,否则会出错;,第八章 过程,若调用过程时实参为常量或表达式,则无论形参定义的是按值传递还是按地址传递,系统都是按传值方式传递 调用函数或过程时,将单个变量转换成表达式的方法:将变量放在一对括号中。,第八章 过程,数组作为形式参数,声明数组的格式为:() As 数组参数只能按地址传递,即不能用ByVal来说明数组参数 定义数组形参时不能说明数组的维数和下标变化范围; 调用过程时,对应的实参也必须是数组,但只需要数组名,无须后跟括号,且数据类型也要一致;,第八章 过程,递归过程:在过程中通过调用自身“和自身相同的过程”来完成某一特定任务的过程 递归过程的执行过程:逐层调用,逐层返回,此处要加递归样例程序讲解?,第八章 过程,变量的作用域,