当前位置:文档之家› vb复习大纲

vb复习大纲

第1章Visual Basic 程序设计概述

重点:VB特点;集成开发环境;VB文件类型;VB应用程序设计思想和步骤;对象及其三要素;事件;窗体、命令按钮、标签、文本框

1.1 VB简介

1、什么是Visual Basic?

Basic:Beginners All-Purpose Symbolic Instruction Code,初学者通用指令代码语言。

Visual:原意是指可视的或看得见的,是为用户发图形用户界面(GUI)提供的一种方法。

2、VB是微软公司开发,于1991年推出第一个版本VB1.0。

本课程使用VB6.0:标准版;专业版;企业版。

3、VB的特点

Visual Basic是Microsoft公司开发的,一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发Windows环境下的各类应用程序。

4、VB的功能强大

5、Visual Basic 6.0 的运行环境、安装、启动、退出

1.2 VB6.0的基本界面

VB应用程序设计是在一个集成开发环境(IDE,Integrated Developing Environment)中完成的。集成开发环境是指将程序的设计、编辑、修改、运行、调试查错等各种功能一体化的开发环境。

1、主窗口

2、其他窗口:窗体设计器窗口、属性窗口、工程资源管理器窗口、代码窗口、窗体布局窗口、立即窗口、工具箱窗口

各窗口知识要点:

1、标题栏中显示的VB工作模式,3种:

设计模式:design 可以设计界面,可以编写代码。

运行模式:run 不可设计界面,不可编写代码。

中断模式:break 程序运行暂时中断。不可设计界面,可编写代码。按F5/单击“继续”、单击“结束”。2、窗体窗口:最多255个;网格点;窗体名、窗体文件名、窗体标题栏名3者的区别

3、工具箱:包含用来构造应用程序界面的各种控件。

含有20个标准控件;

增添新控件:右击工具箱→部件→选择控件→“确定”

4、立即窗口:2个作用:运行命令或函数;调试程序,输出中间运行结果。

5、工程资源管理器窗口:以树型结构列出应用程序所包含的文件。→工程

管理功能:右击添加文件、删除文件等;双击查看相应对象;

1.3 VB应用程序设计初步

步骤:

1、分析程序问题。已知条件、要实现什么,在草纸上画出你设计的界面,简单写写代码。

2、创建工程。

3、在窗体上放置、调整控件,设置窗体和控件属性。

4、编写程序代码,调试程序。

5、保存窗体、工程等文件。

6、VB应用程序的执行,2种方式:

解释方式:“启动”;F5

编译方式:生成可执行( .exe)文件,文件→生成工程.exe

举例演示:例1-3-1

图:VB应用程序中各主要文件的结构关系

1.4 面向对象的程序设计(object oriented programming)

是一种以对象为基础、以事件驱动对象对事件进行处理的程序设计技术。

1、对象:具有属性和行为的实体。是数据和代码的集合。例:世上存在的任何事物每个窗体和控件

2、类:是具有相同性质的对象的集合,也是创建对象实例的模板,而对象则是类的一个实例。属于同一类的所有对象具有同一组属性、方法与事件,只是其属性值不同,对事件的响应不同。例:球按钮控件

3、对象由的三要素(3方面组成):属性、方法、事件

每个对象有自己的特征(属性)、行为(方法)和发生在该对象上的活动(事件)。

例:人具有身高等特征,具有行走、说话等行为,外界作用在人对象上的各种活动,如下雨等。

属性:对象的特征,描述对象的数据。

设置:属性窗口,在代码窗口进行语句设置。

对象名.属性名=属性值Label1.Caption=“123”方法:特定对象能执行的动作或功能,已设计好的特殊程序,要会用。

对象名.方法名[参数] Form2.Show Form1.Cls Form1.Circle (2300,1600) , 800

事件:能被对象识别和响应的动作。

事件在代码窗口中列出,选择。

对象名_事件名(参数) Label1_Click()

事件过程:响应事件后执行的操作通过一段程序来实现,这样的程序叫事件过程。

Sub 对象名_事件名(参数)

…→事件过程代码End Sub

事件驱动机制:

在没有事件发生时,VB应用程序处于等待状态。

当一个事件发生时,程序会执行相应的事件过程代码。处理完后,又等待下一个事件的发生。

事件发生的顺序基本上决定了程序代码的实行顺序。

1.4 学习界面设计的4个对象

1、窗体

2、命令按钮

3、标签

4、文本框

一个或若干个标准

模块(.Bas)文件

VB工程

(*.VBP)

类模块(.Cls)文件

一个或若干个窗体

模块(*.Frm)文件

1各种控件

2.窗体及控件的事件过程

3.自定义子过程(Sub)

4.自定义函数过程

(Function)

1.自定义子过程(Sub)

2.自定义函数过程

(Function)

第2章 程序设计基础

重点:数据类型;变量声明;运算符优先级;函数;编码规则。书上的例题和课后习题(format 了解即可)

写代码部分:

sub 代码段的开头

dim … 定义常量/变量(2.1、2.2)

… 功能代码语句(2.3、2.4、第3、5、6章) end sub 代码段的结尾 2.1 VB 的数据类型 一、VB 语言字符集

编程时使用的VB 字符集(必须是英文输入法下输入的),3类,共89个字符:

字母:A-Z a-z 数字:0-9 专用字符:27个

% & ! # $ @ + - * / \ ^ > < = ( ) ‘ “ ,

; : . ? _ 空格符 回车键 2.2 常量与变量

一、常量

1、直接常量:代码中直接给出的数据。

数值常量:s=3.1415926*r*r

前加&O &H 表示进制;后加&表示长整型

字符串常量:textbox1.text="VB 程序设计2009。"

逻辑常量:Label1.Visible=ture Command.Enabled=false

日期常量:Label1.Caption= #2/23/2009#

2、符号常量:用标识符代表常量值。

定义格式: const 常量名[ As 类型]=表达式

const pi=3.1415926 : s=pi*r*r : c=2*pi*r

二、变量

1、变量:值可改变的量,在内存中存储,通过变量名标识。

2、变量的2种形式:内存变量、属性变量。

3、变量的命名规则: 要求会辨别合法/非法变量名

4、显式声明变量,即先定义再使用。2种定义形式:

变量名 [As 类型]

dim 变量名 类型声明符

给变量赋值(使用): [Let] <变量名> = <表达式>

例:dim a as integer dim a% 声明

a=10 a=7 使用

书上说明:4点

5、隐式声明变量:没有声明,直接使用。例:a="12"

这种方法是不好的习惯,要求变量要用显式声明。

6、强制显式声明:加入语句 option explic it

7、字符串型变量: 变长字符串变量:dim 变量名 as string 或 dim 变量名$ 定长字符串变量:dim 变量名 as string *字符串长度

字符串长度表示的是字符的个数,空格填充,截去超出部分。

例: dim a as string dim a as string * 10 a=textbox1.text a="hello 北京" 8、自定义数据类型: 定义:书上 使用:书上

1、算术运算符:(表2-3-1)

:把两边看作字符型,连接 +:分情况 (表) 结果:真 true -1 假 false 0 都是数值型,按数值大小比较。

都是字符型,按ASCII 码从左到右逐个比较。 ASCII 码值大小关系:空格<数字<大写字母<小写字 (表) 例:print 10 and 6 VB 的表达式:(书上例子) 2-3-4 1、三角函数:弧度和角度的转换 求30度的正弦值:sin(30*3.14/180) 2、取整函数:int(x) fix(x) round(x)、round(x,y):可以四舍五入 int(-11.4) fix(-11.4) round(1.512) round(1.512,2) 3、随机数函数rnd(x):产生[0,1)内的Single 类型数据。 如生成[m ,n]区间的随机整数,使用表达式Int(m+Rnd*(n-m+1))。 随机产生28~66之间的整数:int(rnd*39)+28 学习要求:内容简单,自己细看每一个运算,优先级,常用函数。选择题,要能正确运算出表达式的结果。 2.4 VB 的编码规则 1、不区分大小写。 2、续行:行尾加下划线 _ 3、多条语句写在一行:用冒号隔开: 4、注释:代码后:用 ’ 开头 单独行:用 ’ 或 rem 开头 “设置注释块”按钮 写代码部分----编程思想 1、分析问题:(1) 给出的条件(已知) (2) 输出内容(求) (3) 问题中用到的变量或常量等内容 (4) 如何解题(思考用什么VB 代码实现) 2、把上面每一部分都写成相应的代码块 3、把代码块放到到一起 4、检查,启动运行

第3章程序流程控制

重点:顺序、选择、循环结构各自的实现方法和应用。3.1 顺序结构程序设计

在顺序结构中,语句将按照出现的顺序逐条执行,从上到下。定义→输入→计算→输出

包含3类语句:数据输入;赋值语句;数据输出。

一、数据输入

1、TextBox文本框控件:返回字符型

2、InputBox()输入框函数

可产生一个对话框,作为输入数据的界面,等待用户输入数据,并返回所输入的内容,返回字符型。

变量名=InputBox(提示信息[,标题][,默认值][,xpos,ypos]) 注意:字符型转换成数值型:val( ) 相反:str( ) 焦点和Tab顺序

当一个对象具有焦点时,它可以接收用户的输入。

1、接收焦点前提:Enabled和Visible属性为True

2、设置焦点:在运行时单击对象;运行时用快捷键选择对象;在程序代码中使用SetFocus方法。

3、涉及到焦点的2个事件:当对象得到焦点时,会产生GotFocus事件;当对象失去焦点时,产生LostFocus事件。

4、Tab顺序:是按Tab时焦点在各个控件间移动的顺序。用TabIndex属性设置

不参与的,TabStop属性设为False

5、卸载对象语句unload 结束语句end

二、赋值语句

1、格式:[let] 变量名=表达式

[let] 对象名.属性名= 表达式

2、含义:(1)计算赋值号右边表达式的值;

(2)将此值赋给赋值号左边的标识符代表的变量或控件属性,作为它的当前值;

(3)该值一直保存到下一次再对它赋值为止。

(4)分清赋值号、关系运算符的等号。A=5=6

(5)赋值号两边的数据类型通常要一致,或转换成左侧的类型。类型转换例:单击窗体,代码执行结果是什么?private sub form_click() 结果:true -1 dim x as boolean, a as integer

x=-2 :a=true : print x, a

end sub

逻辑转换成数值型:true→-1 false→0

数值型转换成逻辑:非0→true 0→false

交换例:书上是交换两个内容,如何交换两个数值?private sub command1_click()

dim m as double, n as double, t as double

m= val(text1.text) : n= val(text2.text)

t=m : m=n : n=t

text1.text=m : text2.text=n

end sub

三、数据输出

1、Label标签控件显示文本;

2、TextBox控件显示文本;

3、Print方法输出;

4、format()函数设置输出格式;

5、msgbox函数和过程显示提示信息

Print方法:[对象.]Print[{Spc(n)|Tab(n)}][表达式列表][;|,] 作用:在对象上输出信息

对象:窗体、图片框、立即窗口或打印机(Pinter),省略对象在窗体上输出。form/picture/debug/printer.print "VB" Spc(n)函数:插入n个空格,允许重复使用。

Tab(n)函数:左端开始右移动n列,允许重复使用。

;(分号):光标定位上一个显示的字符后。,(逗号):光标定位在下一个打印区的开始位置处。每个打印区占14列。无;,换行。print

msgbox函数和过程显示提示信息:2个作用:

1、在对话框中显示信息:

过程使用形式:msgbox "提示信息", 对话框样式, 标题2、等待用户单击按钮,返回一个整数:

函数使用形式:

变量=msgbox("提示信息",对话框样式,标题)

对话框样式可使用3组VB常量:按钮+图标+默认按钮例:msgbox “密码不正确”,,“登录”

a=msgbox ("确定要删除信息么?",3,"确认信息")

例1、在银行存款,计算本利和的公式为:s=p(1+r)n,其中p为存款数,n为年数,r为年利率,s为n年后本金和利息之和。输出结果要求保留小数点后两位,四舍五入。例2、用户输入三角形的三边,计算输出三角形的面积。

)

)(

)(

(c

p

b

p

a

p

p

s-

-

-

=

2

c

b

a

p

+

+

=

3.2 选择结构程序设计

选择结构的作用是使程序依照条件而走不同的支路。程序往往根据需要而选择合适的语句结构。

VB支持的选择结构有:If...Then;If...Then...Else;If...Then...Elseif;Select Case;iif函数

一、单分支结构If...Then

有条件地执行其结构内的一条或多条语句。

格式一:If 条件表达式Then 语句

格式二:If 条件表达式Then

多条语句

End If

说明:表达式:关系表达式、逻辑表达式,算术表达式。表达式值按非零为True,零为False进行判断。

格式一只能是一句语句或语句间用冒号分隔,而且必须在一行上书写。

例:已知两个数x和y,比较它们的大小,使得x大于y。

If x

t=x : x=y : y=t

End If

或If x

二、双分支结构If...Then...Else

If 条件Then 建立多个分支流程,并根[语句块1] 据条件选择其中一个分支。

Else

[语句块2]

End If

例:计算分段函数

单分支结构实现:y=cos(x)-x^3+3*x

If x<>0 Then y=sin(x)+sqrt (x*x+1) 双分支结构实现:If x<>0 Then

y=sin(x)+sqr (x*x+1)

Else

y=cos(x)-x^3+3*x

End If

例:用户输入一个整数,判断并输出是奇数/偶数。

dim a as integer : a=inputbox("请输入一个整数")

If a mod 2=1 Then

msgbox a & "是一个奇数"

Else

msgbox a & "是一个偶数"

End If

y

x x x

x x x x

=

++≠

-+=

?

?

?

??

sin

cos

2

3

10

30

三、多分支结构 If...Then...Elseif

建立多个分支流程,并根据条件选择其中一个分支。 If 条件1 Then [语句块1]

ElseIf 条件2 Then '注:ElseIf 不能写成 Else If [语句块2] ... [Else

[语句块n]] End If

不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条件都不满足,且有Else 子句,则执行该语句块,否则什么也不执行。

例:已知变量ch 中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。

If UCase(ch) >= "A" And UCase(ch) <= "Z" Then MsgBox(ch + "是字母字符") '考虑大小写字母 ElseIf ch >= " 0" And ch <= "9" Then ' 数字字符 MsgBox(ch + "是数字字符")

Else ' 除上述字符以外的字符 MsgBox(ch + "是其他字符") End If

例:求多段函数值 dim x as single, y as single

2 -1 x<0 x=val(inputbox("输入x 的值:")) x 0≤x<10 if x<0 then y = x 2 +1 10≤x ≤20 y=x^2-1

3

+x+1 20

y=x

elseif x<=20 then

y=x^2+1

else

y=x^3+x+1 end if

print "y=";y

四、情况语句 Select Case

Select Case 测试表达式 用于实现多重选择, Case 表达式1 作用与If...Then...Else [语句块1] 类似,但主要用于只有 Case 表达式2 一个条件,且条件值为 [语句块2] 离散值的分支选择。 …… Case Else

[语句块n] End Select

表达式与测试表达式的类型必须相同,是下面4种形式之一:一组用逗号分隔的枚举值:case 2,4,6,11

表达式1 To 表达式2:case 60 To 100 Is 关系运算符表达式:case Is< 60 混合形式:case 2,1,4 to 6, is>32

例:上一个例题改用Select Case 语句实现:

Select Case ch Case "a" To "z", "A" To "Z" MsgBox ch + "是字母字符" Case "0" To "9" MsgBox ch +"是数字字符" Case Else MsgBox ch + "是其他字符" End Select

例:判断坐标点(x ,y),落在哪个象限。

If x > 0 And y >0 Then MsgBox("在第一象限")

ElseIf …… 五、IIf 函数

iif(表达式,表达式为真时的函数值,表达式为假时函数值) 例:将x ,y 中大的数,放入Tmax 变量中:

Tmax = iif(x > y , x, y)

与如下语句等价:If x > y Then Tmax = x Else Tmax = y 六、条件语句的嵌套 If 表达式1 Then

… 注意:每个结构块的 If 表达式2 Then 清楚划分,首尾对应; … 每个结构块不能交叉。 End If … End If

3.3 循环结构

计算机最擅长的功能之一就是按规定的条件,重复执行某些操作。循环结构有:Do …Loop 和For …Next 语句。 一、Do …Loop 循环语句

用于控制循环次数未知的循环结构。 While 当型循环/ Until 直到循环。 形式1: 形式2: Do [While|Until <条件>] Do

语句块 语句块 [Exit Do] [Exit Do]

Loop Loop [While|Until <条件>]

形式1为先判断后执行,有可能一次也不执行; 形式2为先执行后判断,至少执行一次。 二、For …Next 循环语句

用于控制循环次数预知的循环结构。注意:书上 For 循环变量 = 初值 To 终值 [Step 步长] 循环体 Next 循环变量

退出和结束语句:

1.Exit 语句:用于退出某种控制结构的执行。有多种形式的Exit 语句:Exit For 、Exit Do 、Exit Sub 、Exit Function

2.End 语句:独立的End 语句用于结束一个程序的运行,它可以放在任何事件过程中。 三、循环的嵌套

在一个循环体内又包含了一个完整的循环结构称为循环的嵌套。书上循环嵌套的例题

第4章 窗体和常用内部控件

重点:熟练使用下列各对象,及其属性/方法/事件。 1、窗体

2、常用内部控件(标准控件)

·按钮·标签 ·文本框 ·框架 ·计时器 ·滚动条 ·单选按钮 ·复选框 ·列表框 ·组合框 ·图片 ·图像 ·形状 ·直线 4.1 窗体Form 一、窗体概要

1、窗体是放置VB 提供的各种控件的一个容器,在窗体上设计和编辑应用程序的界面。

2、窗体的添加(工程→添加窗体);修改(在窗体设计器中

>0 初值<终值 =1 时,可省略 <0 初值>终值 =0 死循环

步长

修改);删除(工程资源管理器)

3、窗体文件:.frm

4、组成:标题栏、边框、窗口区

5、网格:工具→选项→通用

二、窗体的属性、事件和方法

1、窗体常用的属性

位置:top和left属性大小:width和height属性

单位:缇 1 twip=1/20点=1/1440英寸=1/567cm

2、窗体的事件(表1-4-7)

Load、Activate、Click、DblClick、Unload

3、窗体的方法:Show、Hide、Move、Print、Cls、Refresh

三、设置启动窗体

应用程序有单窗体、多窗体情况,多窗体时:

1、设置启动窗体:工程属性→通用→启动对象

2、不使用启动窗体:以一个过程开始,选择Sub Main

Sub Main:如果一应用程序只包含1个窗体,则程序从执行窗体Form的load过程开始。如果有多个窗体,则从设计阶段建立的第1个窗体开始执行。有时,希望在运行窗体程序之前先执行一些操作,此时可以将这些操作写在Sub Main过程中。

Sub Main是在模块中定义的,如果1个程序中包含有多个模块,只能允许有1个Sub Main过程。Sub Main 过程中可以包含若干语句。但它与其他语言中的主程序不同,程序启动时不会自动执行。

可指定程序从哪一个窗体或是Sub Main开始执行。

四、窗体的生命周期

一个窗体对象从程序启动到正常关闭必然触发事件的顺序:

1、initalize (初始化)

2、load (加载)

3、resize show (改变窗体大小、可见状态)

4、activate(窗体激活,此时处于等待其他事件发生的状态)

5、执行程序

6、queryunload (查询卸载)

7、unload (卸载)

例:单击Form1中的命令按钮,使Form2显示Form1隐藏;Form2加载时,大小为屏幕大小的一半,居中显示;单击Form2,用Move方法,使Form2移动并定位在屏幕的左上角,同时Form2的长宽也缩小一倍。Form2.show Form2.Width=Screen.Width/2

Form2.Top=(Screen.Height-Form2.Height)/2

Form2.Move 0,0,Form2.Width/2,Form2.Height/2

4.2 按钮Command 按钮控件:命令按钮

1、按钮的属性

2、按钮的事件(表1-4-7) Click

例:设置一个按钮,要求:名称为“sell”,背景为浅黄色,距离窗体左边500,上3000,按钮宽3000,高2000,提示文本为“销售管理”,单击按钮窗体上显示“按钮例子!”,随后按钮可见但不可用。

4.3 文本控件:标签Label 文本框T extBox

1、标签:显示文本

2、文本框:输入输出文本

例:设置一个标签,要求:名称默认,可以根据里面的内容自动调整大小。

设置一个文本框,要求:有水平和垂直滚动条(前提是允许多行),但不允许用户编辑。

设置用户输入密码文本框,要求显示都是e。

例:用户输入原始字符串,从中选取一些字符串,显示在另一个文本框中,并指明起始位置和长度。

Text2.text=text1.seltext

label1.caption=text1.selstart

label2.caption=text1.sellength

4.4 框架frame

容器型的控件:框架、窗体、图片框。

添加框架、主要属性例题

4.5 选择控件:单选按钮、复选框

1、单选按钮optionbutton

属性caption value→选中true;没选中false;Click事件2、复选框checkbox

属性:caption value →没选中0;选中1;选中灰色2;SetFocus、refresh、move方法;Click事件

4.6 列表框listbox和组合框combobox

1、列表框

属性;list 列表框中列出的各个选项ctrl+回车listindex 索引号,从0开始

列表框中的第一项是:list2.list(0)= "北京" listcount列表框中所有选项的个数

selected是否被选中true false list2.selected(3)=true text当前选中项目的文本内容list2.text multiselect:none simple extended

style:标准样式0;复选框样式1

sorted是否按字母顺序排列true false Columns:0 列表中显示垂直滚动条

1~n 列表中显示水平滚动条,同时在列表的宽度范围内显示1~n列数据

Click事件;

AddItem方法list2.additem "abcd", 2 RemoveItem方法list2.removeitem 3

Clear方法list2.clear

2、组合框

style、text属性;AddItem、RemoveItem、Clear方法4.7 图片框、图像框、形状、直线

1、图片框PictureBox

显示图形,又可作为其它控件的容器。

Picture、AutoSize属性;loadpicture();

2、图像框image 显示静态图形

3、形状控件shape

BackStyle:0—透明的1—不透明的

Shape:

4、直线line

4.8 计时器控件timer

没有width和height属性

interval属性:时间间隔,单位毫秒Timer 事件

例:综合运用图形和时钟控件,实现运动的小红球。

4.9 滚动条scrollbar水平滚动条、垂直滚动条

属性:max和min、smallchange和largechange、value 事件:拖动滑块触发Scroll、改变value属性触发Change 第5章数组

重点:一维数组、二维数组的使用;两种排序方法和顺序查找法;动态数组、控件数组。

引例:输入10个数,输出平均值及大于平均值的那些数?

5.1 数组的概念

1、一组类型相同数据的有序集合,用于保存大量的、逻辑上有联系的数据。

2、表现形式:a(i) a(i, j) a是数组名i, j是下标

A(10) '一维数组,对应数学中的数列

X(2,10) '二维数组,对应数学中的矩阵

Y(1,2,5) ' 三维数组

3、数组的特点:数组中的元素类型一致。

?数组元素在内存空间上是连续存放。

?数组元素的引用可通过下标进行,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。

?数组在使用前必须要定义(声明)。

4、VB中的数组分类:

按数组的大小(元素个数)是否可以改变来分为:

固定数组、动态(可变长)数组。

按元素的数据类型可分为:

数值型数组、字符串数组、逻辑数组、

日期型数组、变体数组等、对象数组。

按数组的维数可分为:一维数组、二维数组、多维数组。数:一个数组中的元素需要用多少个下标变量来确定。对象数组:控件数组、菜单对象数组

5.2 固定数组

一、一维数组1、一维数组的定义(声明)

Dim 数组名([下界To ] 上界) As 数据类型

例:Dim Data(1 To 40) As Integer

说明:定义数组可以使用类型符。Dim Data%(1 To 40) 下界默认值为0,用Option Base n可设定数组的默认下界。数组定义后的初值:数值型数组各元素为0,逻辑型数组各元素为False,字符串数组各元素为空串("")。

可同时声明几个数组,用逗号分隔,例如

Dim A%(10 To 100), B(1100) As Long

定义时,下标的下界和上界值只能是常数或常数表达式。定义时,数组的上界值不得超出长整型范围,且数组的上界值不得小于下界值。

数组的元素个数称为数组长度。上界-下界+1

如果省略As子句,则数组的类型为变体类型。

2、一维数组的使用:使用形式是数组名(下标)

下标可以是整型变量、常量或表达式。

例:设有下面的数组定义:Dim (10) As Integer,B%(10) 则下面的语句都是正确的。

A(1)=A(2)+B(1)+5 ' 取数组元素运算

A(i)=B(i) ' 下标使用变量

B(i+1)=A(i+2) ' 下标使用表达式3、一维数组的基本操作(用一重循环)

(1). 可通过循环给数组元素赋初值(一维数组的输入)

For i = 0 To 9 ' A数组的每个元素值为1

a(i)=1

或a(i)=int(rnd*91)+10 随机产生10个10~100之间整数或A(i)=V al(InputBox("输入A(" & I & " ) 的值" ) ) Next i (2). 一维数组的输出

For i = 0 To 9

Print a(i);

Next i

(3). 求一维数组中最大元素及所在下标

Dim Max As Integer, iMax As Integer, a(9) as single

……'给a(9)里面的10个元素赋值

Max = a(0): iMax = 0

For i = 1 To 9

If A(i) > Max Then

Max = A(i)

iMax = i

End If

Next i

Print "A(" & iMax & ")="; A(iMax)

(4). 将数组元素倒置

For i =0 To 9\2

t=A(i)

A(i)=A(9-i)

A(9-i)=t

Next i

例:输出斐波那契级数的前20项

Private Sub Form_Click()

Dim F(20) As Integer, I As Integer

F(1) = 1 : F(2) = 1 '第一、第二项为1

For I = 3 To 20 '第三项起每项为前二项之和F(I) = F(I - 2) + F(I - 1)

Next I

For I = 1 To 20 '在窗体上输出

Print F(I);

If I Mod 5 = 0 Then Print '一行输出5个

Next I

End Sub

二、二维数组

1、二维数组的定义(声明)

dim 数组名([<下界> to]<上界>, [<下界> to]<上界>) [as <类型>]

其中的参数与一维数组完全相同。例Dim a(2,3) As Single 二维数组在内存的存放顺序是“一行一行存储”。例如数组a的各元素在内存中的存放顺序是:

a(0,0)→a(0,1)→a(0,2)→a(0,3)→a(1,0)→a(1,1)→a(1,2)→a(1,3)→a(2,0)→(2,1)→a(2,2)→a(2,3)

2、二维数组的使用:数组名(下标1,下标2)

例如:a(1,2)=10 a(i+2,j)=a(2,3)*2

3、二维数组的基本操作(用二重循环)

(1).二维数组的输入与输出

Dim a(1 to 4, 1 to 5) As Integer, i%, j%

For i=1 to 4

For j=1 to 5

A(i,j)=V al(InputBox("a("& I &"," & j & ")=?")) Next j

Next i

For i=1 to 4

For j=1 to 5

print format(a(i,j), "!@@@@@");

Next j

print

Next i

(2). 求最大元素及其所在的行和列

用变量max存放最大值,row,col存放最大值所在行列号Dim a(1 to 3, 1 to 4) as single

……‘输入元素

Max = a(1, 1): row = 1: Col = 1

For i = 1 To 3

For j = 1 To 4

If a(i, j) > a(row, Col) Then

Max = a(i, j)

row = i

Col = j

End If

Next j

Next i

Print "最大元素是"; Max;"在第" & row & "行,"; "第" & Col & "列"

(3) 矩阵的转置

把a方阵的转置的程序代码如下:

a(1 to 5, 1 to 5)

For i = 1 To 5

For j = i+1 To 5

Temp=a(i,j)

a(i, j) = a(j, i)

a(j, i)=Temp

Next j

Next i

设A是M*N的矩阵,要重新定义一个N*M的二级数组B,将A转置得到B的程序代码如下:

For i = 1To M

For j = 1To N

b(j,i) = a(i,j)

Next j

Next i

5.3 动态数组

在声明时未给出数组的大小,在程序执行时再定义,再分配存储空间。包括声明和大小说明两步:

?在使用Dim、Private或Public语句声明括号内为空的数组。例:Dim a( ) As Integer

格式:Dim | Private|Public 数组名()As 数据类型?在过程中用ReDim语句指明该数组的大小。

格式:ReDim [Preserve] 数组名(下标1[,下标2…])Preserve:保留数组中原来的数据

5.4 for each …next循环

对数组中的每个元素重复执行一组语句。格式:

For Each 成员In 数组名

语句组

[Exit for]

Next [成员]

5.5 控件数组

控件数组由一组相同类型的控件组成,比如一组按钮或一组单选钮。

共用一个相同的名字,其中的每个控件都有一个与之关联的下标,或称索引(Index属性)。

求数组某一维的上界和下界值,如果省略N默认是1维UBound(<数组名>[, ]) LBound(<数组名>[, ]) 例ubound(a,2)是求a数组2维的上界

第6章过程

重点:Sub子过程和Function函数过程的建立和调用;传址和传值的区别;变量和过程的作用域。

过程是用来执行一个特定任务的一段程序代码。在程序设计过程中,将一些常用的功能编写成过程,可供多个不同的事件过程多次调用,从而可以减少重复编写代码的工作量,实现代码重用,使程序简练、便于调试和维护。

6.1 Sub过程,又叫子过程。分为事件过程和通用过程第一、事件过程

事件过程的定义:1、窗体事件的语法

Private Sub Form_事件名(参数列表)

<语句组>退出sub过程:exit sub End Sub

2、控件事件的语法

Private Sub 控件名_事件名(参数列表)

<语句组>

End Sub

说明:*这类过程与对象有关,对象事件触发后被调用。*事件过程的过程名由系统自动指定。

事件过程的调用:一般由事件的触发而引起(单击、窗体加载等),也可用call调用,如:

Private Sub Form_DblClick()

Call Command1_Click

End Sub

第二、通用过程:由用户根据需要自主建立的过程

通用过程的定义:

[Public|Private][Static] Sub 子过程名([形参表])

<语句组>

End Sub

说明:这类过程不与对象相关,是用户创建的一段共享代码。过程的名称由用户自己命名。

形式参数列表:形式参数通常简称“形参”,仅表示形参的类型、个数、位置,定义时是无值的,只有在过程被调用时,虚实参结合后才获得相应的值。形式参数只在本过程内有意义。过程可以无形式参数,但括号不能省。

通用过程的调用:

Call 过程名(实际参数列表)call swap(a,b)

或:过程名实际参数列表swap a,b

注意:实参列表,是往被定义过程的形参传递的数据,实参和形参数据类型一致,个数一致,顺序一致。

例:编一个交换两个整型变量值的子过程。

Private Sub Swap( X As Integer, Y As Integer)

Dim temp As Integer

Temp=X : X=Y : Y=Temp

End Sub

在主程序中调用:

Private Sub command1_click()

Dim a%,b%

a=val(inputbox("a=")) : b=val(inputbox("b="))

call swap(a,b)

print "a=";a, "b=";b

End Sub

例:编一个求n!的子过程,然后调用它计算7!+11!-10!Sub jch(n%,p#)Private Sub Form_Click()Dim i% Dim a # ,b # ,c # ,d #

p = 1 Call jch(7,a)

For i = 1 To n call jch(11,b)

p = p * i jch 10,c

Next i Print "7!+11!-10!=";a+b-c End Sub End Sub

6.2 Function函数过程

VB的函数有两类:

1、内部函数:abs() int()

2、外部函数:用户编写自己的Function过程

定义函数过程的语法是:

[Static][Public|Private] Function 函数名([参数列表])[As类型]

[语句序列]

函数名=表达式

End Function

函数名=表达式:函数过程有返回值,至少应该有一个给函数过程名赋值的语句,作为函数的返回值。 [As 类型]:定义了返回值类型。 调用Function 函数过程:把函数看作一个数,可以放在赋值号右端例如:T=MyFunc(5)

例:编一求最大公约数的函数过程 Sub Form_Click

Dim x%, y%, z%

x = 124: y = 24: z = gcd(x, y) MsgBox "最大公约数是" & z End Sub

Function gcd( m%, n%) As Integer

If m < n Then t = m: m = n: n = t Do while n<>0

r = m Mod n : m = n : n = r Loop gcd = n End Function

6.3 参数的传递

过程和调用它的程序之间都存在数据传递,过程本身使用的参数列表称为“形参”;主程序传递给过程的真正参数称为“实参”;过程在被调用时,用实参代替形参。 实参与形参的结合有两种方法:

传址(ByRef):按地址传递。定义过程时,缺省的参数传递方式是按地址传递。主调过程的实参与被调过程的形参共享同一存储单元。因此实参的值就会随过程体内对形参的改变而改变。

传值(ByVal):按数值传递。主调过程的实参与被调过程的形参各有自己的存储单元。在过程体内对形参的任何操作不会影响到实参。 Sub a (byval x as integer, y as single ) x 是传值, y 是传址

形参是数组时,只能采用传址方式 6.4 过程的嵌套与递归:会书上的例子 6.5 变量和过程的作用域

过程、变量可被访问的范围(能有效发挥其作用的范围)称之为过程、变量的作用域。

代码模块:窗体模块、标准模块、类模块 变量的作用域:

过程的作用域

第三章习题:

第4题:Private Sub Form_Click() Dim n As Integer, a As Integer n = 0

a = V al(InputBox("请输入初始值", "输出50个能被37整除的数"))

Do While n < 50

If a Mod 37 = 0 Then Print a, n = n + 1

If n Mod 10 = 0 Then Print End If a = a + 1 Loop End Sub

第5题:Private Sub Form_Click()

Dim a As Integer, b1 As Integer, b2 As Integer, b3 As Integer For a = 100 To 999

b1 = a Mod 10 '提取出a 的个位 b2 = (a \ 10) Mod 10 '提取出十位 b3 = a \ 100 '提取出百位 If b1 ^ 3 + b2 ^ 3 + b3 ^ 3 = a Then Print a End If Next a End Sub

Private Sub Form_Click()

Dim a As Integer, b As Integer, c As Integer, b3 As Integer For a = 1 To 9 For b = 0 To 9 For c = 0 To 9

If a ^ 3 + b ^ 3 + c ^ 3 = a * 100 + b * 10 + c Then Print a * 100 + b * 10 + c End if Next c Next b Next a End Sub

第6题 (1):Private Sub Form_Click() Dim i As Integer, t As Double, s As Single t = 1: s = 1 For i = 1 To 50

t = t * i : s = s + 1 / t Next

Print "s="; s End Sub

第6题 (2):Private Sub Form_Click() Dim i%, n&, t!, e!

e = 0: i = 0: n = 1: t = 1 Do While t > 0.000001

e = e + t : i = i + 1 : n = n * i : t = 1 / n Loop

Print "前"; i; "项的和是"; e End Sub

第7题:Private Sub Form_Click()

Dim a As Single, b As Single, c As Single, zhou As Double, p As Single, s As Double a = V al(InputBox("请输入三角形的第一个边长a")) b = V al(InputBox("请输入三角形的第二个边长b")) c = V al(InputBox("请输入三角形的第三个边长c")) If a + b > c And b + c > a And a + c > b Then zhou = a + b + c p = (a + b + c) / 2

s = Sqr(p * (p - a) * (p - b) * (p - c))

Print "三角形的周长是:"; zhou, "三角形的面积是:"; s Else

MsgBox "您输入的三边不能构成三角形": Exit Sub End If

End Sub

第8题:Private Sub Form_Click()

Dim t As Integer, n As Integer

t = 1

n = 1

Do While t < 4000

t = t * n

n = n + 1

Loop

Print n - 2

End Sub

第10题:方法一:Private Sub Form_Click()

Dim a As Integer, b1 As Integer, b2 As Integer, b3 As Integer a = V al(InputBox("请输入一个三位数"))

b1 = a Mod 10 '提取出个位

b2 = (a \ 10) Mod 10 '提取出十位

b3 = a \ 100 '提取出百位

Print b1 & b2 & b3

End Sub

方法二:Private Sub Form_Click()

Dim a As String

a = InputBox("请输入一个三位数")

Print Right(a, 1) & Mid(a, 2, 1) & Left(a, 1)

End Sub

方法三:输入一串字符,不限制个数,逆序输出

Private Sub Form_Click()

Dim a As String, b As String, t As String * 1, i As Integer

a = InputBox("请输入一个串字符", "逆序输出")

For i = Len(a) To 1 Step -1

t = Mid(a, i, 1)

b = b & t

Next i

Print a

Print b

End Sub

第11题:Private Sub Form_Click()

Dim i As Integer, j As Integer, k As Integer

Print: Print: Print

For i = 1 To 7

Print Tab(2 * i + 2);

For j = 2 * i - 1 To 13

Print "*"; Spc(1);

Next j

Print Spc(5);

For k = 1 To 2 * i - 1

Print "$"; Spc(1);

Next k

Print

Next i

End Sub

12、如何判断一个数是素数?教材P97

Private Sub Form_Click()

Dim a As Integer, i As Integer

a = V al(InputBox("请输入一个正整数"))

For i = 2 To a - 1 '判断a是否是素数If a Mod i = 0 Then

Print "该数是一个合数"

Exit For

End If

Next i

If i = a Then

Print "该数是一个素数"

End If

End Sub

13、求从100到1000之间所有3的倍数的数之和,当和大于3000时,停止计算,输出和。

Private Sub Form_Click()

Dim i As Integer, sum As Integer

sum = 0

For i = 100 To 1000

If i Mod 3 = 0 Then

sum = sum + i

If sum > 3000 Then Exit For

End If

Next i

Print sum

End Sub

下面的方法更简单

For i = 102 To 1000 Step 2

sum = sum + i

If sum > 3000 Then Exit For

Next i

14、一个数,它除3余2,除5余3,除7余2,求满足上面要求的最小数。

Private Sub Form_Click()

Dim a As Integer

For a = 2 To 1000

If a Mod 3 = 2 And a Mod 5 = 3 And a Mod 7 = 2 Then Print a

Exit For

End If

Next a

End Sub

第四章习题:

第3题

Private Sub Form_Load()

Option1.V alue = True

End Sub

Private Sub Command1_Click()

Dim a As Single, b As Single

a = V al(Text1.Text)

b = V al(Text2.Text)

If Option1.V alue = True Then Label1.Caption = a + b

If Option2.V alue = True Then Label1.Caption = a - b

If Option3.V alue = True Then Label1.Caption = a * b

If Option4.V alue = True Then Label1.Caption = a / b

End Sub

第4题:Private Sub Form_Load()

Dim n As Integer

For n = 1 To 50

List1.AddItem Format(n, "@@@@") & _

Format(n ^ 2, "@@@@@@@@") & _ Format(Format(Sqr(n), "0.00"), "@@@@@@@@") & _ Format(Format(Log(n), "0.00"), "@@@@@@@@") & _ " " & Format(Exp(n), "0.00")

Next

End Sub

第5题:Private Sub Form_Load()

Timer1.Enabled = False

End Sub

Private Sub Command1_Click()

Timer1.Enabled = True

Text1.Text = V al(Text1.Text) * 60

End Sub

Private Sub Timer1_Timer()

If V al(Text1.Text) > 0 Then

Text1.Text = Text1.Text - 1

Else

Timer1.Enabled = False

MsgBox "时间到!"

End If

End Sub

第6题:Private Sub Timer1_Timer()

If Picture1.Left > Form1.ScaleWidth Then

Picture1.Left = 0

Else

Picture1.Left = Picture1.Left + 100

End If

End Sub

第五章习题:

第6题:Private Sub Form_Click()

Dim a(1 To 4, 1 To 4) As Integer, i%, j%

Randomize

For i = 1 To 4

For j = 1 To 4 随机产生10~100的整数

a(i, j) = Int(Rnd * 91) + 10

Next j

Next i

Print "二维数组a是:"

For i = 1 To 4

For j = 1 To 4

Print Format(a(i, j), "!@@@@@"); 矩阵的形式

Next j 输出数组Print

Next i

max = a(1, 1): row = 1: col = 1

For i = 1 To 4

For j = 1 To 4

If a(i, j) > a(row, col) Then

max = a(i, j)

row = i

col = j

End If

Next j

Next i

Print "最大元素是"; max; "在第" & row & "行,"; "第" & col & "列" End Sub

第7题:Private Sub Form_Click()

Dim a()

a = Array(1, 3, 4, -1, 58, 60, -2, 10)

For i = 0 To 7

If a(i) < 0 Then s = s + a(i)

Next

Print s

End Sub

第8题:Private Sub Form_Click()

Dim a(1 To 10) As Single, s As Single, max As Single, min As Single max = 0: min = 100

For i = 1 To 10

a(i) = V al(InputBox("输入第" & i & "个学生的成绩")) s = s + a(i)

If a(i) > max Then max = a(i)

If a(i) < min Then min = a(i)

Next i

Print "最高分是:"; max, "最低分是:"; min, "平均分是:"; s / 10 End Sub

第9题:Private Sub Form_Click()

Dim a(1 To 3, 1 To 3) As Integer, i%, j%

……写随机产生整数的代码,范围自己定

……写输出数组的代码

Print "对角线元素和是:"; a(1, 1) + a(2, 2) + a(3, 3) + a(1, 3) + a(3, 1) End Sub

第10题:Private Sub Form_Click()

Dim a

a=Split("王丹,王玉,王虹,李雪,李龙,李燕,李云,张峰,张涛,赵露", ",")

b = InputBox("请输入某个姓氏")

s = 0

For i = 0 To 9

If Left(a(i), 1) = b Then

s = s + 1

Print a(i)

End If

Next i

Print "姓氏为“" & b & "”的人一共有" & s & "个"

End Sub

第12题:Private Sub Form_Click()

Dim a(), n As Integer, m As Integer, k As Integer

n = V al(InputBox("输入n×m矩阵,n的值"))

m = V al(InputBox("输入n×m矩阵,m的值"))

ReDim a(n, m)

……写随机产生整数的代码,范围自己定

……写输出数组的代码

max = a(1, 1): row = 1: col = 1

For i = 1 To n

For j = 1 To m

If a(i, j) > a(row, col) Then

max = a(i, j)

row = i

col = j

End If

Next j

For k = 1 To n

If a(k, col) < a(row, col) Then Exit For

Next k

If k =n+1 Then Print "鞍点是"; a(row, col); "第"; row; "行"; col; "列" Next i

End Sub

第13题:Private Sub Form_Click()

Dim a(), n As Integer

n = V al(InputBox("输入n×n方阵,n的值"))

ReDim a(n, n)

……写随机产生整数的代码,范围自己定

……写输出数组的代码

For i = 1 To n

s = s + a(i, i) + a(i, UBound(a) - i + 1)

Next i

If n Mod 2 = 0 Then

Print "对角线元素之和是:" & s

Else

Print "对角线元素之和是:" & s - a(Round(n / 2), Round(n / 2)) End If

End Sub

第14题:Private Sub Form_Click()

Dim a(1 To 9, 1 To 9) As Integer

For i = 1 To 9

a(i, i) = 1

a(i, UBound(a) - i + 1) = 1

Next i

……写输出数组的代码

End Sub

第六章习题:

第3题

随机生成x~y之间的整数的Function函数过程:Function suiji(x As Integer, y As Integer) As Integer suiji = Int(Rnd * (y – x+1)) + x

End Function

主程序:

Private Sub Form_Click()

For i = 1 To 30

Print suiji(1, 100);

If i Mod 10 = 0 Then Print

Next i

End Sub

第6题

Function bijiao(x As Integer, y As Integer) As Integer If x > y Then

bijiao = x

Else

bijiao = y

End If

End Function

Private Sub Form_Click()

Dim a(1 To 10) As Integer, max As Integer Randomize

For i = 1 To 10

a(i) = Int(Rnd * 91) + 10

max = bijiao(max, a(i))

Next i

For i = 1 To 10

Print a(i);

Next i

Print "最大的数是"; max

End Sub

第7题

Sub jio(x As Integer)

If x Mod 2 = 0 Then

Print "是偶数"

Else

Print "是奇数"

End If

End Sub

Private Sub Form_Click()

Dim a As Integer

a = V al(InputBox("请输入一个整数", "输入框")) Call jio(a)

End Sub

第8题

Sub judge(x As Integer)

If x Mod 17 = 0 And x Mod 37 = 0 Then Print x End Sub

Private Sub Form_Click()

Dim i As Integer

For i = 1000 To 2000

Call judge(i)

Next i

End Sub

第9题

Public Function f(x As Integer) As Single

If x = 0 Then

f = 0

Else

f = Sqr(2 + f(x - 1))

End If

End Function

Private Sub Form_Click()

Dim n As Integer, s As Single, i As Integer

n = V al(InputBox("请输入一个整数n ", "输入框")) For i = 1 To n

s = s + f(i)

Next i

Print "式子的前"; n; "项和是"; s

End Sub

相关主题
文本预览
相关文档 最新文档