VB程序设计与应用案例课件_第1页
VB程序设计与应用案例课件_第2页
VB程序设计与应用案例课件_第3页
VB程序设计与应用案例课件_第4页
VB程序设计与应用案例课件_第5页
已阅读5页,还剩372页未读 继续免费阅读

下载本文档

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

文档简介

VisualBasic

程序设计与应用案例第1章走进VisualBasic

学习目标:认识VisualBasic6.0的集成开发环境理解对象、属性、事件和方法的概念了解VisualBasic事件驱动的编程特点了解VB程序的组成学会使用VisualBasic的帮助系统第1章走进VisualBasic

教学内容:

1.1VisualBasic编程入门

1.2VB的对象与编程特点

1.3VB的程序组成与代码窗口

1.4

使用VB的帮助系统

1.1VisualBasic编程入门

VB程序示例:

模拟彩票开奖器

简易编辑器

返回目录1.1VisualBasic编程入门-集成开发环境1.进入VB集成环境

返回目录1.1VisualBasic编程入门-集成开发环境2.VB集成环境中的窗口

属性窗口窗体设计器工程资源管理器窗体布局窗口工具箱返回目录1.1VisualBasic编程入门-创建VB程序的步骤

一般步骤:建立工程→设计界面→设置对象属性→编写代码→保存程序→运行程序[→生成可执行文件]

[例1.1]返回目录1.1VisualBasic编程入门-创建VB程序的步骤1.建立工程工程是组成一个应用程序的文件集合(.vbp),最常用的是标准EXE类型的工程。

2.设计应用程序界面

使用工具箱中的各种控件,在窗体设计器上“画”界面。返回目录1.1VisualBasic编程入门-创建VB程序的步骤3.设置对象属性

通过属性窗口通过程序代码

对象名.属性名称=属性值例如,Label1.Caption="VB程序设计示例"

返回目录1.1VisualBasic编程入门-创建VB程序的步骤返回目录对象名称属性名称设置值Label1CaptionFont宋体、四号Command1Caption白色窗体Font楷体、小四Command2Caption红色文本Font楷体、小四Command3Caption退出程序Font楷体、小四1.1VisualBasic编程入门-创建VB程序的步骤4.编写程序代码(事件响应代码)

对象名称事件响应Command1单击(Click)将窗体的背景设置为白色Command2单击(Click)将窗体中文本的颜色设置为红色Command3单击(Click)结束程序运行Form装入(Load)显示“VB程序设计示例”返回目录双击1.1VisualBasic编程入门-创建VB程序的步骤返回目录1.1VisualBasic编程入门-创建VB程序的步骤5.保存程序

返回目录6.运行程序

“运行→启动”或7.生成可执行文件

生成能够脱离VB集成环境运行的exe文件1.1VisualBasic编程入门-创建VB程序的步骤返回目录

上述步骤中最主要的是:设计应用程序的界面设置界面对象的属性编写程序代码1.2VB的对象与编程特点-VB的对象VB编程的核心是针对对象所响应的事件编写代码。

1.对象和类对象是代码和数据的组合,可作为一个整体来处理。

VB中的对象是由类创建的,对象是类的一个实例。

2.对象的属性属性是描述对象特征的数据属性值的设置或修改可通过属性窗口和程序代码实现对象的属性有两类:读写属性、只读属性

返回目录1.2VB的对象与编程特点-VB的对象3.对象的事件与事件过程

事件是预先设置好的、能够被对象识别和响应的动作事件过程:对象对事件响应的程序代码

事件过程的一般格式:PrivateSub对象名称_事件()

事件过程代码EndSub例如:PrivateSubCommand1_Click()Form1.BackColor=vbWhiteEndSub返回目录1.2VB的对象与编程特点-VB的对象4.对象的方法

方法告诉对象应做的事情,即对象的动作。调用格式:[对象名称].方法名称

例如:PrivateSubForm_Click()

Debug.Print

"你好!"

EndSub返回目录单击窗体1.2VB的对象与编程特点-VB的编程特点

面向对象的可视化的程序设计方法事件驱动的程序设计机制简单易学的程序设计语言交互式的集成开发环境返回目录1.3VB的程序组成与代码窗口-VB程序组成一个VB应用程序(工程)可由多种类型的文件模块组成的,最常用的是窗体模块和标准模块。与工程有关的全部文件和对象的清单,以及所设置的环境选项信息都保存在工程文件中(.vbp)。1.窗体模块界面和代码

返回目录1.3VB的程序组成与代码窗口-VB程序组成2.标准模块没有窗体,扩展名为.bas通常声明其他模块共同使用的全局变量或通用过程

返回目录1.3VB的程序组成与代码窗口-代码窗口返回目录过程查看

全模块查看

1.3VB的程序组成与代码窗口-选项设置“工具→选项”返回目录1.4使用VB的帮助系统

注:系统中需安装帮助文档MSDN

1.通过“帮助”菜单

返回目录第2章VisualBasic语言基础

教学内容:

2.1VB编码规则

2.2VB的数据类型

2.3变量与常量

2.4运算符与表达式

2.5数据的输入输出

2.6

VB的常用内部函数

2.1VB编码规则

[例2.1]

单击窗体可输出内容交换后的a变量和b变量的值。

PrivateSubForm_Click()DimaAsInteger,bAsInteger,intTempAsInteger'声明变量

a=10'变量赋值

b=20Print"a变量和b变量内容交换前:";a;b

'变量交换

intTemp=aa=bb=intTempPrint"a变量和b变量内容交换后:";a;bEndSub

返回目录2.1VB编码规则-语句书写规则语句输入时不区分大小写,一条语句通常写在一行中。一行中若输入多条语句,需用“:”分隔。例如,

intTemp=a:a=b:b=intTemp

长语句可通过续行符“

_”(空格后加下划线)分行。例如,

Print"a变量和b变量内容交换前:";a;b

可分成以下两行输入:

Print"a变量和b变量内容交换前:";_a;b单引号后面的内容为注释,可放在一行语句的最后,或单独占据一行。数值前加上前缀&H和&0分别表示十六进制和八进制数。

返回目录2.1VB编码规则-标识符命名规则

标识符:变量、常量、类型、过程、函数、以及其它对象的名字。

命名规则:由字母、汉字、数字或下划线组成,第一个字符必须是字母或汉字。长度不超过255个字符。其中,窗体、控件和模块的标识符长度不能超过40个字符。不要与VB中的关键字同名最好能“见名知义”返回目录2.1VB编码规则-赋值语句

语法格式:[Let]

变量名=表达式

作用:变量赋值或属性设置。例如:Pi=3.14159strTemp=“Hello!”Label1.Caption=“VB程序设计示例”Form1.BackColor=vbWhite

说明:只有当表达式的类型与变量的数据类型兼容时,该表达式的值才可以赋给相应的变量或属性。不管表达式是什么类型,都可以赋给Variant(变体类型)变量。返回目录2.2VB的数据类型-基本数据类型

VB提供的基本数据类型见教材表2.1。1.数值型字节型(Byte):存放无符号整数,取值范围0~255整型:Integer和Long,存放整数浮点型(实型):单精度型(Single)和双精度型(Double)

存放带小数的数值例:单精度数-6.25E8 表示-6.25×108

双精度数

7.878D-6 表示

7.878×10-6

货币型(Currency):一种精确的定点类型数据支持15位整数和4位小数

返回目录2.2VB的数据类型-基本数据类型2.字符串型(String)

VB字符串是由双引号括起来的一串字符不含任何字符(长度为0)的字符串称为空串String型变量有变长和定长之分,例:

DimNameAAsString'声明变长字符串变量

DimNameBAsString*20

'声明定长字符串变量

3.

逻辑型(Boolean)逻辑型数据的取值:True或False

,例:

DimBoolRAsBooleanBoolR=6>8PrintBoolR'输出:False

返回目录2.2VB的数据类型-基本数据类型4.日期型(Date)日期型变量可存放日期和时间日期型常数的表现形式:

#mm/dd/yyyyhh:mm:ss#

"mm/dd/yyyyhh:mm:ss"

日期型数据的输出格式取决于系统的区域设置例:

DimdAsDate'声明日期型变量DD=#10/5/2002#'日期型变量赋值

PrintD‘输出日期型变量的值返回目录2.2VB的数据类型-基本数据类型5.对象型(Object)声明对象变量后,用Set语句指定实际引用的对象

例,窗体上有命令按钮Command1,执行如下语句,可将该按钮的显示文字改为OKDimaAsObject

'声明a为对象型变量

Seta=Command1'指定a引用Command1命令按钮

a.Caption=“OK”'与Command1.Caption等价6.变体型(Variant)

变体:在程序运行期间可存放不同类型的数据。例:

DimX'X缺省为Variant类型

X="17"'X被赋予字符串"17"X=X–2'X被赋予数值15X="A"&X'X被赋予字符串"A15"

返回目录2.2VB的数据类型-自定义数据类型在模块的“通用”声明段声明

[Private|Public]Type数据类型名元素名1As类型名元素名2As类型名

……EndType

Public:声明的类型在工程中所有模块的任何过程中可用Private:声明的类型只能在当前模块中使用

声明自定义数据类型后,可使用该类型。例

DimstudTempAsstudent

'声明为student类型变量访问自定义数据类型的变量:变量名.成员名,如:

studTemp.id=“030005”studTemp.xm=“李斌”

返回目录2.3变量与常量-变量1.变量的声明通过类型符号:直接在变量名后面加上类型符号

S&=10‘声明S为长整型变量

使用声明语句

Dim变量名[As类型]Dim变量名[类型符]

例如,下面两条声明语句的效果相同:

DimaAsInteger,bAsLong,cAsSingle,dAsDoubleDima%,b&,c!,d#

若省略类型说明,被声明的变量为Variant型。例如:

Dima,b'a和b均为变体型变量

DimS1,S2AsString*6'S1为变体型变量,S2为定长字符串

返回目录见表2.22.3变量与常量-变量2.变量的隐式及显式声明不声明就用的变量被隐式声明为Variant,初值Empty

强制进行变量的显式声明“通用”声明段中加上语句:OptionExplicit

“工具→选项”→“编辑器”

返回目录对新模块起作用遇到未经声明的变量包括输错的变量,系统会发出错误警告

2.3变量与常量-变量3.变量的有效范围

(1)局部变量:在一个过程内部声明的变量有效范围限于声明它的过程自动变量:用Dim声明,变量值只在过程执行期间才存在

静态变量:用Static声明,变量值在程序运行期间一直存在

[例2.2]统计单击窗体的次数

PrivateSubForm_Click()

StaticintCountAsIntegerintCount=intCount+1PrintintCountEndSub返回目录单击窗体3次

将Static改为Dim2.3变量与常量-变量(2)模块变量:“通用”声明段用Private或Dim语句声明可被该模块中的任何过程所访问[例2.3]

PrivateaAsInteger,bAsInteger

'声明模块变量

PrivateSubCommand1_Click()DimintTempAsInteger'声明局部变量

a=10:b=20Print"a和b内容交换前:";a;bintTemp=a:a=b:b=intTemp'变量交换

EndSubPrivateSubCommand2_Click()Print:Print"a和b内容交换后:";a;bEndSub返回目录2.3变量与常量-变量(3)全局变量:标准模块的声明段用Public或Global声明有效范围是整个工程的所有模块说明:标准模块:只含有程序代码的文件,扩展名为.bas添加标准模块:“工程→添加模块”如果在窗体模块的“通用”返回目录声明段用Public声明变量,其它模块可通过如下方式引用该变量:窗体模块名.变量名2.3变量与常量-常量1.内部常量由应用程序和控件提供。例如:

Form1.BackColor=vbBlue

‘vbBlue是表示蓝色的内部常量查看系统预定义常量:“视图→对象浏览器”

返回目录2.3变量与常量-常量2.符号常量(自定义常量)命名:遵循标识符命名的规则声明格式:

[Public|Private]Const常量名[As类型]=表达式

例:

ConstconMaxAsInteger=9'声明Integer型常量

ConstconDate=#10/5/2002#'声明Date型常量

ConstCodeName="ASCII"'声明String型常量有效范围:局部常量、模块常量、全局常量声明常量的表达式中不能出现函数调用和循环引用例:错误的常量声明

ConstconS=Sqr(10)ConstconA=conB+10,conB=conA+1返回目录2.4运算符与表达式-运算符1.算术运算符

返回目录优先级运算运算符举例结果

高低乘方^2^38取负--2^3-8乘、除*/5*3/27.5整除\5*3\27求余Mod5*3Mod21加、减+-10-3+(-2)52.4运算符与表达式-运算符2.字符串运算符运算符:&和+例:

VB=“Visual”+“Basic”

'连接为字符串“VisualBasic”

label1.Caption="第"&Str(N)&"条记录"

'Str为数值型转字符型函数。若N为1,标签上显示“第1条记录”

说明:使用+号,要求连接的两个表达式均为字符串型使用&号,连接的两个表达式可以为任何类型,但结果为字符串型,如“当前日期” /8/2002#返回目录2.4运算符与表达式-运算符3.关系运算符返回目录运算运算符举例结果

等于="Hello"="hello"False

不等于<>"Hello"<>"hello"True

大于>"Hello">"hello"False

大于等于>=45+10>=55True

小于<"a"<"ab"True

小于等于<=45+10<=55True

比较对象变量Is

字符串匹配Like"F"Like"[A-Z]"TrueIs:判定两个Object类型的变量是否引用同一个对象Like:判定左边的字符串是否与右边的字符串匹配

2.4运算符与表达式-运算符4.逻辑运算符

常用:

Not、And、OrNot:表达式数为True时,结果为False;反之亦然。例如,Not(4>5),结果为True

And:两个表达式均为True时,结果为True

例如,(4>5)And(8>7),结果为FalseOr:两个表达式均为False时,结果为False

例如,(4>5)Or(8>7),结果为True

返回目录XYNotYXAndYXOrYFalseFalseTrueFalseFalseFalseTrueFalseFalseTrueTrueFalseTrueFalseTrueTrueTrueFalseTrueTrue2.4运算符与表达式-表达式表达式:用运算符和圆括号将常量、变量、函数和常数连接起来组成的有意义的式子。如,数值表达式Cos(180*Pi/180)*100

逻辑表达式(N>=0)And(NMod2<>0)

运算优先顺序(从高到低):

函数→算术运算(乘方→取负→乘/除→整除→求余→加/减)→字符串运算符→关系运算符→逻辑运算符(Not→And→Or)

用括号可以改变运算顺序乘方和负号相邻时,取负优先。例如:2^-2的结果是0.25,相当于2^(-2)

返回目录2.5数据的输入输出-数据输出1.Print方法

功能:在窗体/立即窗口/图片框/打印机上输出信息格式:[对象.]Print[输出项][,|;]

[对象]缺省为当前窗体,[输出项]缺省则打印一空白行输出项之间可用分号或逗号分隔:使用分号,其后的输出项紧接着前一个输出项输出;使用逗号,其后的输出项在下一个输出区输出。两个输出区默认相隔14列各输出项表示要打印的表达式,组成

[Spc(n)|Tab(n)]表达式

Spc(n):指定在输出之前插入n个空白字符

Tab(n):指定在第n列上输出返回目录2.5数据的输入输出-数据输出例,

PrivateSubForm_Click()PrintPrintTab(15);"*"PrintTab(13);"*";Spc(1);"*";Spc(1);"*“EndSub返回目录2.5数据的输入输出-数据输出2.格式输出函数功能:使数值、日期或字符串按指定的格式输出格式:Format(expression[,format])expression-需要格式化输出的表达式

format-输出的格式模式

返回目录2.5数据的输入输出-数据输出3.MsgBox函数

功能:创建预定义的消息对话框常用格式:MsgBox(prompt[,buttons][,title])prompt-字符串,指定消息框中显示的信息

Buttons-指定消息框中显示的按钮数目及形式、图标样式等,缺省值为vbOKOnly

常用的设置值见教材表2.6Title-指定消息框的标题,缺省值为工程名用户所选按钮的返回值(见教材表2.7)可作为继续执行程序的依据。

返回目录2.5数据的输入输出-数据输出[例2.4]

PrivateSubForm_Click()prompt="真的新增该条记录吗"answer=MsgBox(prompt,vbOKCancel,"AddRecord")Ifanswer=vbOKThenDebug.Print"您选择的是“确定”按钮"Ifanswer=vbCancelThenDebug.Print"您选择的是“取消”按钮"EndSub返回目录2.5数据的输入输出-数据输出说明:如果消息框中显示的信息过长,可使用回车符Chr(13)和换行符Chr(10)如果不需要返回值,可使用没有括号的MsgBox语句:

MsgBoxprompt[,buttons][,title]

例,…………Msg="非法的数据输入!"&Chr(13)&Chr(10)&"请重新输入"Title="出错提示"

MsgBoxMsg,vbCritical,Title…………返回目录2.5数据的输入输出-数据输入

功能:生成输入对话框常用格式:

InputBox(prompt[,title][,default][,xpos][,ypos])

prompt-字符串,指定输入框中显示的信息

Title-指定输入框的标题,缺省值为工程名

Default-字符串,指定文本框中的初始内容,缺省为空。

xpos和ypos-数值表达式,成对出现或者成对缺省,指定输入框左上角相对于屏幕的位置。

InputBox函数一次只能输入一个值

返回目录2.5数据的输入输出-数据输入

[例2.5]

PrivateSubForm_Click()DimUsernameUsername=InputBox("输入姓名后单击[确定]","输入")PrintUsernameEndSub

返回目录2.6常用内部函数-数学函数常用数学函数见教材表2.8几点说明:由基本函数可导出所需的数学函数

例如,Log(X)/Log(N)可求出以N为底的对数对Rnd[(N)],N的值决定了Rnd生成随机数的方式N<0:以N为随机种子,每次返回相同的随机数

N>0或者缺省:产生序列中的下一个随机数

N=0:返回最近生成的随机数

返回目录例如:随机产生1-selenum之间的数

Randomize(Timer)Selenum=7Rn=Int((Selenum)*Rnd+1)

调用Rnd之前,使用Randomize语句可产生不相同的随机数数列2.6常用内部函数-字符串函数常用字符串函数见教材表2.9几点说明:表2.9只对常用的字符串函数进行了简单的说明使用Str函数将数字转成字符串时,字符串的首位一定是空格或是正负号。例如,

S1=Str(67)'返回

"67"S2=Str(-67.5)'返回"-67.5"

使用Val函数时,如果遇到不能识别为数字的字符,则停止转换。例如,

Val(“24and57”)'返回24Val("not57")'返回0

返回目录2.6常用内部函数-日期函数

常用的日期函数见下表。其中,D表示日期类型表达式。返回目录函数名功能简述示例Date/Time返回系统日期或时间Date'返回系统当前日期Now返回系统日期和时间略Year/Month/Day(D)返回年、月、日Year(Now)'返回2003WeekDay(D)返回星期几WeekDay(Now)'返回3Hour(time)返回小时数Hour(Time)'返回21

上述示例的当前日期时间是2003年3月18号、星期三、晚上9点10分。

第3章控制语句与程序调试

教学内容:

3.1选择结构与相关语句

3.2循环语句

3.3其它语句

3.4程序调试3.1选择结构选择结构:当设定条件成立时执行某些语句,条件不成立时则跳过这些语句或执行其它的语句。选择结构中要使用选择语句,有两路分支和多路分支两种情况,对应的选择语句有If语句(两路出口)和SelectCase语句(多路出口)。

返回目录3.1选择结构-If条件语句

1.If<表达式>Then<语句>

其中,<表达式>是一个条件表达式或逻辑表达式

例如,IfData>=90ThenPrint“优秀”

[例3.1]输入一个数,如果是3的倍数则通过消息框输出。

PrivateSubForm_Click()DimDataAsIntegerData=InputBox("请输入一个值:")IfDataMod3=0ThenMsgBoxDataEndSub返回目录Data是3的倍数

Data>=90?输出“优秀”YesNoData>=90?输出“优秀”YesNo输出“合格”输出“计算完毕”3.1选择结构-If条件语句

2.If<表达式>Then<语句1>Else<语句2>

例如,DimDataAsIntegerData=InputBox(“请输入成绩:")IfData>=90ThenPrint“优秀”ElsePrint“合格”

Print"计算完毕"

上例的If语句可以改写为:

IfData<90ThenPrint"合格"ElsePrint"优秀"

返回目录3.1选择结构-If条件语句

3.块状If语句返回目录If<条件表达式>Then<语句块>EndIf

[例3.2]

If<条件表达式>Then<语句块1>Else<语句块2>EndIf

A=InputBox(“A值”):B=InputBox("B值")PrintA,B

IfA<BThenT=A:A=B:B=TEndIf

PrintA,B

3.1选择结构-If条件语句

4.If语句嵌套

If语句嵌套使用可形成多分支的条件语句结构

If

<条件表达式1>Then<语句1>

ElseIf

<条件表达式2>Then<语句2>

Else<语句3>EndIf返回目录说明:

ElseIf之间不要加空格。

Else和位于其上方的最近的If配对3.1选择结构-If条件语句

[例3.3]Weight=InputBox("输入西瓜重量:","计算西瓜款")IfWeight<4ThenPrice=1ElseIfWeight<=7ThenPrice=1.3ElsePrice=1.1EndIfMoney=Price*WeightMsgBox“西瓜重”&Weight&“公斤,单价”&_Price&"元,应收瓜款"&Money&_"元",,"计算西瓜款"返回目录4公斤以下:1.00元/公斤4至7公斤:1.3元/公斤超过7公斤:1.1元/公斤

IfWeight<4ThenPrice=1IfWeight>=4AndPrice<=7ThenPrice=1.3IfWeight>7ThenPrice=1.1

3.1选择结构-If条件语句

[例3.4]

Char=InputBox("输入一个字符","测试字符值")IfChar>="0"AndChar<="9"ThenMsgBox"输入的字符是数字"ElseIfChar>="A"AndChar<="Z"ThenMsgBox"输入的字符是大写字母"ElseIfChar>="a"AndChar<="z"ThenMsgBox"输入的字符是小写字母"ElseMsgBox"输入的字符是其它符号"EndIf返回目录判断输入的是大写字母、小写字母、数字还是其它符号

3.1选择结构-If条件语句

[例3.5]

PrivateSubCommand1_Click()'单击“正确无误”按钮

IfLen(TxtCode.Text)<8ThenLblWarn.Caption="考核证号必须输入,长度为8位"TxtCode.SetFocusElseIfLen(TxtName.Text)=0ThenLblWarn.Caption="考生姓名必须输入"TxtName.SetFocusElseIfLen(TxtSeat.Text)=0ThenLblWarn.Caption="座位号必须输入"TxtSeat.SetFocusElseLblWarn.Caption=""Debug.PrintTxtCode.TextDebug.PrintTxtName.TextDebug.PrintTxtSeat.TextEndIfEndSub

返回目录3.1选择结构-SelectCase选择语句语法格式:

SelectCase<测试表达式>Case<表达式1><语句1>Case<表达式2><语句2>………[CaseElse<语句n+1>]EndSelect功能:根据测试表达式的值,决定程序的流向。

返回目录<测试表达式>值的类型是数值型、字符串型、日期型等,一旦与某个Case后的<表达式>值相等,则执行这个Case中的<语句>,完成后执行EndSelect后的语句。如果所有的Case后的<表达式>都不与<测试表达式>项匹配,则执行CaseElse后的<语句>。

3.1选择结构-SelectCase选择语句[例3.6]学生成绩分等

Data=InputBox("请输入一个成绩","成绩分等")SelectCaseInt(Data/10)Case10MsgBox"满分",,"成绩分等"Case9MsgBox"优秀",,"成绩分等"Case8MsgBox"良好",,"成绩分等"Case7MsgBox"一般",,"成绩分等"Case6MsgBox"合格",,"成绩分等"CaseElseMsgBox"不合格",,"成绩分等"EndSelect返回目录单击窗体确定3.1选择结构-SelectCase选择语句[例3.7]测试输入的字符

Char=InputBox("请输入一个字符","测试")SelectCaseCharCase"0"To"9"MsgBox"字符是数字",,"测试"Case"a"To"z"MsgBox"字符是小写字母",,"测试"Case"A"To"Z"MsgBox"字符是大写字母",,"测试"CaseElseMsgBox"字符是其它符号",,"测试"EndSelect关于SelectCase语句的一些说明见教材

返回目录确定单击窗体3.2循环语句

程序的另一种结构是循环结构循环结构作用是重复执行一段程序循环是有条件的、次数是有限的

VB的循环语句:For…Next、DoWhile…LoopForEach…Next、While…Wend

应用最多的:For…Next与DoWhile…Loop返回目录3.2循环语句-For…Next循环For…Next循环一般应用于循环次数已知的场合

For<循环变量>=初值To终值[Step步长]

语句块(循环体)

Next[循环变量]

工作原理

返回目录循环变量=初值循环变量超出范围?循环体循环变量增加一个步长NoYesStep缺省为1

3.2循环语句-For…Next循环[例3.8]求1+3+5+7+…+99PrivateSubForm_Click()DimSumAsInteger,IAsIntegerSum=0'保存累加和,先清零

ForI=1To99Step2Sum=Sum+INextIMsgBox"1+3+5+…+99="&Sum,,"求和"EndSub

返回目录

本例的特点是数据项之间相差2,即Step的值为2

思考:例中当输出对话框出现时,I的值是多少?如果省略Step2,程序的结果如何?For语句能不能改写成ForI=99To1Step-2?

3.2循环语句-For…Next循环[例3.9]求平均成绩

ConstN=40

'学生人数PrivateSubForm_Click()DimSumAsInteger,IAsIntegerDimDataAsInteger,AverageAsSingleSum=0'存放累加值的变量清零

ForI=1ToN

'循环40次,步长值为1省略

Data=InputBox("输入第"&I&"位同学的成绩","求平均分")Sum=Sum+Data

NextIAverage=Sum/NMsgBox"全班"&N&"名学生的平均分为"&Average,,"求平均分"EndSub

返回目录确定本例的循环变量I控制人数3.2循环语句-For…Next循环[例3.11]求斐波那契级数的前20项

PrivateSubForm_Click()DimA,B,I,TAsIntegerA=1:B=1'生成级数第一、二项

PrintA;B;

ForI=

3To20T=A+B'产生级数新的一项

A=B'让B成为下一组的AB=T'原来A+B的值成为下一组的BPrintB;

IfIMod6=0ThenPrint

NextIEndSub返回目录斐波那契级数:第一、二项为1第三项开始,每一项的值是前两项值之和

每6个数一行3.2循环语句-Do…Loop循环1.当型循环

返回目录DoWhile<条件表达式>

循环体LoopDo

循环体LoopWhile<条件表达式>

条件表达式成立?循环体NoYes条件表达式成立?循环体NoYes先判断后执行

先执行后判断特点:条件表达式成立执行循环体内容

3.2循环语句-Do…Loop循环[例3.12]计算平均分

PrivateSubForm_Click()DimDataAsInteger,SumAsInteger,NAsIntegerDimAverageAsSingleSum=0:N=0Data=InputBox("输入第"&N+1&"个同学的成绩","求平均分")DoWhileData<>-1

'-1表示结束输入

Sum=Sum+DataN=N+1Data=InputBox("输入第"&N+1&"个同学的成绩","求平均分")

LoopAverage=Sum/NMsgBoxN&"位同学的平均分为"&Average,,"求平均分"EndSub返回目录3.2循环语句-Do…Loop循环[例3.13]Sum=1+2+3+…+N

求Sum不超过10000的最大整数值和数据项数N

PrivateSubForm_Click()DimSum,NAsIntegerN=0'开始时项数为0Sum=0'保存累加值的变量Sum清零

DoWhileSum<=10000N=N+1Sum=Sum+NLoopSum=Sum-NN=N-1Print"Sum=";Sum,"N=";NEndSub返回目录当Sum的值超出10000时循环才终止。因此Sum值要减去多加的一个N;而在循环过程中,N也被多加了一个1,需要减去。

3.2循环语句-Do…Loop循环2.直到型循环

返回目录DoUntil<条件表达式>

循环体LoopDo

循环体LoopUntil<条件表达式>特点:条件表达式不成立执行循环体内容

先判断后执行

条件表达式成立?循环体NoYes先执行后判断条件表达式成立?循环体NoYes3.2循环语句-Do…Loop循环[例3.14]计算平均分(要求同例3.12)

PrivateSubForm_Click()DimDataAsInteger,SumAsInteger,NAsIntegerSum=0:N=0Data=InputBox("输入成绩","计算总分")DoUntilData=-1Sum=Sum+DataN=N+1Data=InputBox("输入数据","计算总分")

LoopPrint"全班平均分为:";Sum/NEndSub返回目录DoWhileData<>-1

Sum=Sum+DataN=N+1Data=InputBox("输入数据","计算总分")

Loop3.2循环语句-两重循环两重循环:在一个循环的循环体中还包含另一个循环[例3.15]在窗体上显示一个几何图形PrivateSubForm_Click()DimI,JAsInteger'I、J为循环变量

ForI=1To8'I控制行数(8行)PrintTab(10-I);'定每行*的起始位

ForJ=1ToI

'J控制每行输出I个*

Print"*";

NextJPrint'换行

NextIEndSub返回目录注意:两重循环不能形成交叉3.2循环语句-两重循环[例3.16]输出乘法口诀表PrivateSubForm_Click()DimIAsInteger,JAsInteger,MAsIntegerForI=1To9

ForJ=1ToIM=I*JPrintJ&"*"&I&"="&M&"";NextJPrint'打印换行

NextIEndSub返回目录3.2循环语句-两重循环[例3.17]计算

PrivateSubForm_Click()DimIAsInteger,JAsIntegerDimFAsLong'阶乘值用长整型保存

DimeAsDouble

ForI=0To10F=1'每个阶乘值先置1以便累乘

ForJ=1ToIF=F*JNextJe=e+1/F

NextIPrint"e=";eEndSub返回目录本循环计算F=I!3.2循环语句-多重循环多重循环:循环次数在两重以上的循环结构

[例3.19]计算将1角钱兑换成零钱有多少种方案

PrivateSubForm_Click()DimI,J,K,SAsIntegerS=0'统计兑换1角钱的方案数

ForI=0To10

'1分钱个数

ForJ=0To10Step2

'2分钱个数

ForK=0To10Step5'5分钱个数

IfI+J+K=10ThenS=S+1NextK

NextJ

NextIMsgBox"1角钱兑换成零钱的方案有"&S&"种",,"兑换零钱"EndSub返回目录1角钱以下的硬币有1分、2分和5分种1角钱全换成1分需10个1角钱全换成2分需5个1角钱全换成5分需2个

3.3其他语句-Exit与End

1.Exit语句ExitDo:跳出Do…Loop循环ExitFor:跳出For…Next循环[例3.20]判断一个正整数是否为素数(质数)N=InputBox("请输入一个正整数","验证素数")ForI=2ToN-1IfNModI=0Then

ExitForEndIfNextIIfI=NThenMsgBoxN&"是素数",,"验证素数"ElseMsgBoxN&"不是素数",,"验证素数"EndIf返回目录

素数:一个正整数N除了能被1和自身所整除外,不能被其它任何数所整除。3.3其他语句-Exit与End

2.End语句End:终止程序的运行EndSub:终止一个过程;EndFunction:终止函数过程EndIf:终止条件语句EndType:终止类型声明EndSelect:终止情况语句EndProperty:终止属性过程EndWith:终止With语句返回目录例如:PrivateSubCommand1_Click()

EndEndSub

3.3其他语句-Goto

功能:无条件转向格式:Goto<label>label称为语句标号(数字或标识符)[例3.22]求若干个同学的成绩总分

PrivateSubForm_Click()DimData,SumAsIntegerSum=0loop1:Data=InputBox("输入成绩")IfData=-1Then

GoToloop2ElseSum=Sum+Data

GoToloop1EndIfloop2:Print"总分=";SumEndSub返回目录

Goto语句不符合结构化程序设计的要求,所以不提倡使用。3.4程序调试-程序的错误类型

语法错误运行错误返回目录中文逗号n未赋过值逻辑错误:算法不正确。显然系统不会报告这类出错信息。3.4程序调试-简单调试方法:在程序中适当插入Print语句跟踪变量值的变化返回目录应该是6与24

3.4程序调试-使用调试工具1.断点调试断点:程序执行到该此自动暂停单击“继续”按钮,程序可继续执行。

返回目录

设置断点:在代码窗口中单击该语句左侧的阴影边框。暂停时,将鼠标指针移动到程序中的各个变量上略作停留,系统将以浮动标签的方式显示该变量的值。第4章数组与过程

教学内容:

4.1数组

4.2过程

4.3Shell函数4.1数组-数组的概念数组用于保存大量的、逻辑上有联系的数据数组的特点:数据中的元素在类型上是一致的数组元素在内存空间上是连续存放的数组元素的引用可通过下标进行数组在使用前必须要定义(声明)

返回目录4.1数组-一维数组的定义和使用1.数组的定义(声明)Dim数组名([下界

To]上界)As数据类型

例如:DimData(1To40)AsInteger定义数组可以使用类型符例,DimData%(1To40)下界的默认值为0

例,DimSalary(1000)AsCurrency通过数组名和下标可引用数组中的元素例,Data(25)=95Form1.PrintData(25)返回目录4.1数组-一维数组的定义和使用说明-1:数组定义后的初值:数值型数组各元素为0,逻辑型数组各元素为False,字符串数组各元素为空串("")。可同时声明几个数组,用逗号分隔,例如

DimA%(10To100),B(800)AsLong定义数组时,下标的下界和上界值只能是常数或常数表达式。下例的定义是错误的

N=100:DimData(N)AsInteger定义时,数组的上界值不得超出长整型范围,且数组的上界值不得小于下界值。

返回目录4.1数组-一维数组的定义和使用说明-2:数组的元素个数称为数组长度。Lbound()、Ubound()函数可测定数组的下界与上界值例如:

PrivateSubForm_Click()DimA%(12To24)PrintLBound(A),UBound(A)EndSub用OptionBasen可设定数组的默认下界n的取值只能是0或1设定方法:在代码窗口的通用声明段中输入

OptionBase0

或OptionBase1返回目录4.1数组-一维数组的定义和使用2.数组元素的使用通过数组名和下标[例4.1]PrivateSubCommand1_Click()DimData(5)AsIntegerDimSum,IAsIntegerForI=1To5'输入5个数据到数组中

Data(I)=InputBox("输入第"&I&"个数据")NextIForI=1To5'完成5个数组元素的相加

Sum=Sum+Data(I)NextIPrintSumEndSub返回目录ForI=1To5

Data(I)=InputBox("输入第"&I&"个数据")Sum=Sum+Data(I)NextI4.1数组-一维数组的定义和使用说明:数组实际上是用一个变量名字代表一组数,这组数是连续排列的,用顺序号作为下标区分各个数。

数组下标是一个整型量,如果有小数则自动按四舍五入取整。例如,Data(3.4)=3,而Data(3.5)=2。数组常见的错误:下标出界

返回目录Test(1)=4Test(2)=3Test(3)=2Test(4)超出定义4.1数组-一维数组应用例题[例4.3]输出斐波那契级数的前20项

PrivateSubForm_Click()DimF(20)AsInteger,IAsIntegerF(1)=1:F(2)=1'第一、第二项为1ForI=3To20'第三项起每项为前二项之和

F(I)=F(I-2)+F(I-1)NextIForI=1To20'在窗体上输出

PrintF(I);IfIMod5=0ThenPrintNextIEndSub返回目录4.1数组-一维数组应用例题

[例4.4]

输入一组不重复的数据,找出最大值及其位置PrivateSubForm_Click()ConstLength=5'定义常量Length作为数组最大下标

DimTest%(Length),I%,Max%,L%ForI=1ToLength'通过键盘输入给数组赋值

Test(I)=InputBox("输入第"&I&"个数据")NextIMax=Test(1):L=1'设数组第一个元素为最大值

ForI=2ToLengthIfMax<Test(I)Then'找到新的最大值,记录其值和位置

Max=Test(I)L=IEndIfNextIMsgBox"最大值x="&Max&",位置是"&LEndSub

返回目录4.1数组-一维数组应用例题[例4.5]产生10个整数到数组中,将其顺序颠倒后输出PrivateSubForm_Click()ConstLength=10:DimD(Length)AsInteger,I%,Temp%ForI=1ToLength'给数组赋值并输出

D(I)=14+I:PrintD(I);NextIPrint:Print'换行

ForI=1ToLength/2'交换

Temp=D(I)D(I)=D(Length-I+1)D(Length-I+1)=TempNextIForI=1ToLength'交换后输出

PrintD(I);NextIEndSub返回目录D(1)与D(10)交换

D(2)与D(9)交换

……D(I)与D(10-I+1)

4.1数组-一维数组应用例题[例4.8]

产生100个不重复的3位随机整数,并按每行7列的格式输出PrivateSubForm_Click()

温馨提示

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

评论

0/150

提交评论