微计算机技术第九章调试与错误分类_第1页
微计算机技术第九章调试与错误分类_第2页
微计算机技术第九章调试与错误分类_第3页
微计算机技术第九章调试与错误分类_第4页
微计算机技术第九章调试与错误分类_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

新教材第9章

调试与错误分类

1

9.1程序错误分类

9.1.1编译错误

编译错误多数是因为不正确的代码产生的,

即在编写程序时写了有错误的语法代码,从而

导致VB编译器无法正确解释源代码而产生错误,

一般包括关键字拼写错误、标点符号遗漏,语

句搭配不当等。比如以下代码,将Dim错误地

写成了Dimm,就会产生编译错误。

PrivateSubFromLoad

DimMystrAsString

DimmIAsInteger

EndSub

2

3

9.1.2实时错误

实时错误是指应用程序出现期间,-

条语句试图执行一条不可能执行的操作而

生的错误。例如下面的语句:

PrivateSubForm_Load0

x=0:y=100

Printy/x

EndSub

这段语句在语法上是正确的,VB编译

器不能检测出错误,因此不会产生编译错

误。但等到实际运行时,当除数Number等

于0时,就会出现实时错误。

MicrosoftVisualBasic

实时错误’11:

除数为零

J结束⑥|惆色量|帮助皿

5

9.1.3逻辑错误

逻辑错误是指程序的运行结果和程

序员是设想有出入时产生的错误。这类

错误并不导致程序在编译期间出现错误,

较难发现,验证程序是否存在逻辑错误

的唯一方法就是将运行结果与设计方案

进行对照比较。比如你想用以下格式显

示一段诗:

6

鄙夜思2£J

床前明月光,疑是地上霜;

举头望明月,低头思故乡。

:确定……[

7

程序员用下列语句实现上述设计:

PrivateSubForm_Load()

MsgBox〃床前明月光,疑是地上霜;〃+_

〃举头望明月,低头思故乡。〃,vbOKOnly,

〃静夜思〃\

EndSub结果出现逻辑错误。

群夜思

床前明月光,疑是地上霜;举头望明月,低头思故乡

8

正确的语句应为:

PrivateSubForm_Load()

MsgBox”床前明月光,疑是地上霜;“+Chr(13)

+_

〃举头望明月,低头思故乡。〃,vbOKOnly,_

〃静夜思〃

EndSub

注意:逻辑错误通常不会产生消息提示。

9

P226习题一、问答题

5.VB程序错误大体可分为哪几种,它们的含义

是什么?

答:VB程序错误大体分为三种:编译错误、实

时错误和语法错误。

编译错误是在编写程序时书写了有错误A语法的

代码,导致VB编译器无法正确解释源代码而

产生的错误,也称语法错误。实时错误是指在

运行期间,一跳语句试图执行一条不可能执行

的操作而产生的错误,也称运行时错误。逻辑

错误是指程序的运行结果和程序员的设想有出

入时产生的错误。

10

9.2程序调试方法

VB本身不能改正错误,但它提供了

一些调试工具辅助程序员查找,分析错

误。有了调试工具,程序员就能够深入

到应用程序内部,彻底地了解发生了什

么,以及为什么会发生。

11

9.2.1用编译器提示错误

VB集成环境提供了、《自动语法检测”功

能,可以在程序员编写程序时自动检测和提

示语法错误。如果使用了该选项,那么程序

员每书写完一行语句并键入回车符时,VB编

译器就会解释该行语句。当发现错误时,就

会加亮显示出现语法错误的语句并显示一个

消息框来解释错误原因并提供帮助,以方便

程序员更正错误。

在“工具”菜单上,单击“选项”子菜

单,可以设置或消除“自动语法检测”选项。

12

选项凶

编辑器I编辑器格式I通用I可连接的I环境I高级I

「代码逡置_________

厂阻动语法检测i©17自动缩进Q)

变量声丽而

Tab宽度(X):R

17自动列出成员©

171自动显示快速信息@)

17:自动显示数据提示6)

・窗口设置----------------

P编辑时可拖放文本也)

P缺省为整个模块查阅®)

17过程分隔符(D

确定|取消|帮助|

P226习题二、程序设计题

1.程序改错。以前面学到的冒泡排序算法为例,开发以下程

序,请上机练习排除其中的错误°

唆工程1-Forml(Code)匚叵区

|Coa>andl1Click~^]

PrivateSubCommandl_Click()~

DimA(1To20)AsInteger

Dimc,jAsInteger

DimTAsString

Fori=1To20

A(i)=Int(Rnd*100)

Nexti

Forc=1To20

Forj=c+lTo20

IfA(c)>A(i)Then

T=A(j)

A(j)=A(c)

A(j)=T

EndIf

Next__

Next

EndSub▼[

14

P226习题二、程序设计题

1.程序调试。

(1)运行程序,结果如下:

20个随机整数排序:

41

86

79

37没有实现冒泡

96

87排序。

5

94

36

.;.产..生.2.0不商机薮

15

P226习题▲、程序设计题

1.程序调试。

(2)分析错误原因:

Forc=1To20

Forj=c+1To20

IfA(c)>A(j)Then,若前者大于后者

暂存小数、

T=A0)

A(j)=A(c),后者暂存大数

A(j)=T5匕语句应改为A(c)=T

EndIf

Next

Next

16

P226习题二、程序设计题

1.程序调试。

(3)修改后的程序:

用工程1-Forml(Code)

CouandlClick

Commandl_Click()

o20)AsInteger

AsInteger

String

Int(Rnd*100)

,A(c)>A(j)Then

T=A(j)

A(j)=A(c)

AAC)

■ri=1ToUBound(A)

Listl.AdditemA(i)

Sub

17

P226习题二、程序设计题

1.程序调试。

(4)程序修改后运行结果:

・Forml

20个随机整数排序;

36

37

41

53

:产生20不荫加函n

18

9.2.2使用调试工具来发现和改正错误

利用VB提供的调试工具,除了可以完

成断点设置、中断表达式、监视表达式、单

步执行、显示变量和属性值外,上能够在实

现应用程序处于中断模式时进行编译、设置

下一条执行语句,进行过程测试等功能。

“调试工具”菜单如下:

19

调试运行(B)查询(6图表①XI

■--***—■**-J-♦,・'P.

隆逐语句①F8

J1逐过程(Q)5hift+F8

4M出。即+升枇十曲

运行到光标处因QMF8

■.,--*'.***!.•»t

添加蝴I@,凝||

编辑强御©sCtrlfW

时快速监视(6…Shift+F9

心切换断点⑴F9

清除所有断点(0Ctrl+Shift+F9

4设置T一条语句网0H+F9

%即TT-袤语句处

调试菜单各功能项的主要含义

1,逐语句:每按一次F8键,应用程序就执

行一条语句,因此也称单步执行。是一

种常见的调试方法。如果程序调用了另

一个过程,逐语句也会执行该过程中的

每一行。

2.逐过程:与逐语句执行过程相似,但如

果程序调用了另一个过程,逐过程不会

进入该过程。

3.跳出:执行当前过程的其它部分,并在

调用该过程的下一行语句处中断执行。

21

调试菜单各功能项的主要含义

4.运行到光标处:执行程序,当下一条语

句为光标所在语句时,中断执行。

5.添加监视:添加对变量和表达式的跟踪,

以便在程序运行时,随时观察变量和表

达式的值。

6.编辑监视:在程序运行时,动态改变所

要监视的变量或表达式。

7.快速监视:主要用于快速查看光标后面

的变量的值。

22

调试菜单各功能项的主要含义

8,切除断点:用于设置或切除断点

9.清除所有断点:用于清除程序中设置的

所有断点。

10.设置下一条语句:程序员可以按自己的

思路改变程序的执行流程。

11.显示下一条语句:快速切换并切换到下

一条执行的语句处,当代码量较大时,

该功能很有用。

23

9.2.3常用的调试技巧

如果程序的运行结果和预想的不一样,

通常可在编辑器中浏览代码,查找并直

接修改可能产生问题的代码。但多数情

况下,即使是非常有经验的程序员也很

难一眼就找处错误,此时常用的方法就

是在程序运行的关键路径上设置一系列

断点,并重新启动应用程序。

24

可供参考的调试技巧:

1.事先做好备份

避免在程序调试过程中,被意外地修改、覆盖或

删除必要的代码部分。

2.分离受怀疑的程序

对于那些代码规模较大,窗口众多的程序而言,

如果能将错误的范围定位于某个窗体或某段代码,

则可以使用分离程序的调试方法。基本思路是找

出错误的代码行(块)或窗体,选择这些代码并

将其复制到一个新的工程中,最后运行新工程,

看一看是否还会出现同样的错误。这样就可以尽

可能地排除程序其它部分的干扰,提高调试效率。

25

可供参考的调试技巧:

3.缩小搜索范围

如果有可能的话,可删除工程中任何第三方控件

和自定义控件,或者看来与问题无关的代码,逐

步缩小搜索范围。或者采用相反的策略,先调试

某一段代码或窗体,再像搭积木似的逐步扩大调

试范围。

2.使用MsgBox语句

如果怀疑程序的错误是由于执行路径或者变量的

值不正确等原因造成的,除了采用设置断点的方

法进行调试以外,还可以借助于MsgBox语句。即

在程序运行的关键点上插入一系列的语句,用来

展示程序的运行路径和这样变量的值。“

使用MsgBox语句的调试技巧示例

设计一个将小写金额转换为大写金额的简化

转换程序,将输入的用数字表示的金额转换为

有汉字表示的大写金额。

PrivateSubform_cIick()

'本程序将根据MyNumber的值返回大写数值

DimMstr(9)AsString

DimMyNumberAsString

DimLstrAsString

Dimi,jAsInteger

DimConvertAsString

27

Mstr(0)=“零":Mstr⑴二“壹”:Mstr(2)二“贰”

Mstr(3)="叁":Mstr(4)="肆":Mstr(5)="伍"

Mstr(6)="陆":Mstr⑺="柒":Mstr(8)="捌

〃Mstr(9)=〃玖〃

MUnit二〃元拾佰仟万拾佰仟亿拾佰仟〃

MyNumber=InputBox(“请输入一个数字",_

〃输入数字〃)

28

Fori=1ToLen(MyNumber)

’从高位到低位逐位取输入数字

j=Vai(Mid(MyNumber,i,1))

'用MsgBox提示当前的数字

MsgBox〃当前的数字是:〃+Str(j)

’取当前数字对应单位左边的字串

Lstr=Mid(MyNumber,i)

’从高位到低位逐位转换成汉语大写字符

Convert=Gonvert+Mstr(j)+Mid(MUnit,Len(Lstr),1)

'用MsgBox提示从高位到低位转换的结果

MsgBox”转换后的字符串是:〃+Convert

Nexti

EndSub

29

P226习题一、问答题

3.简述常用的程序调试蔻巧。

答:

1)事先做好备份;

2)分离受怀疑的程序;

3)缩小搜索范围;

4)使用MsgBox语句。

30

P226习题一、问答题

4.简要说明VB程序调试的主要方法和工具。

答:VB程序调试的主要方法:由编导器提示错误;

使用调试工具来发现和改正错误;太药常用的调

试技巧,如事先做好备份,分离受怀肩的程序?

缩小搜索范围,使用MsgBox语句等。\

主要工具:“调试”菜单下的“逐语句”、“逐过

程”、“跳出”、“运行到光标处”、“添力口监

视”、“快速监视”、“切换断点”等子菜单项。

31

9.3错误捕获及处理方法

1.没有错误捕获及处理过程的程序执行

效果

力寅示charlO.2.1、

正确情况下。程序不会出现任何错误,单

如果指定的驱动器是软盘驱动器时。则只

有驱动器内有磁盘且驱动器关闭时,该程

序才能正确执行,否则产生“设备不可用

之类的错误使程序终止执行。

32

MicrosoftVisualBasic

实时错误‘68':

设备不可即

I结束束®明[1^1帮帆)I

33

2.加入错误捕获及处理过程的程序执行效果

为了防止上述情况的发生、就需要在该

程序中加入错误捕获和处理程序,'提高程序

的可靠性。这样当出现任何异常时,程序会

向用户提示,不再因此而异常退出。,

演示char9.3.1

34

程序代码设计

PrivateSubForm_Load()

,设置控件的有效状态

Drivel.Enabled=True

Dirl.Enabled=True

Filel.Enabled=True

,设置过滤器

Filel.Pattern=''*.exe''

,设置控件的初始驱动器

Drivel.Drive=nc:\n

EndSub

35

程序代码设计

SubDirl_Change()

,改变目录

Filel.Path=Dir1.Path

EndSub

36

程序代码设计

PrivateSubDrivel_Change()

OnErrorGoToCheckError

,改变驱动器

Dirl.Path=Drivel.Drive

ExitSub

CheckError:

错误代码处理

FileExixts=False

Mystr=“发生了以下错误:"+Err.Description

Mystr=Mystr+vbCr+''错误号是:''+Str(Err.Number)

Mystr=Mystr+vbCr+“你输入的文件路径:”+Dirl.Path

MsgBoxMystr,vbQuestion,“错误捕获与处理演示”

EndSub

37

程序代码设计

PrivateSubFilel_Click()

IfFilel.FileName<>Then

FileExists=True

MsgBox「文件名为“"+Filel.FileName+"的路径为:”

+Filel.Path++Filel.FileName)

Else

FileExists=False

MsgBox「找不到文件名为“"+Filel.FileName+"的文件!

,')

EndIf

EndSub38

9.3.2设计错误处理程序的三个步骤

1.捕获错误,并强制程序跳转

即在发生错误时,捕获错误将告知应用程序转

向哪段代码进行错误处理。VB语编嘤常可采用On

ErrorGoTo语句启用错误捕获机制。如果出现运

行时错误,即可借助OnErrorGoTo语句,强制程

序跳转到指定的标记处。需要注意的是,On

ErrorGoTo语句只能在一个过程内部跳转,并且

在一个过程中一次只能启用一个错误捕获。如果要

使错误捕获失效,因可使用OnErrorGoTo0之类

的语句。

39

9.3.2设计错误处理程序的三个步骤

2.编写错误处理程序

编写错误处理程序的第一步是添加一个行标识

符,比如"CheckError",以标志错误处理程序的

开始。行标识符的名称最好具有良好的可读性,并

且后面必须紧跟一个冒号。常规错误处理套序通常

放在过程的结束处,后面紧跟Exit或Exit

Function的行标识符。这样在没有错误发生时,过

程就不会执行错误处理程序了。

40

9.3.2设计错误处理程序的三个步骤

通常的格式为:I

Sub程序名()

OnErrorGoTo行标识符

[正常的程序代码]

ExitSub5正常退出程序

行标识符:

错误处理程序\

EndSub

41

9.3.2设计错误处理程序的三个步骤

3.退出错误处理程序

通常情况下,只有当错误处理程序位于过程中

间位置时,才需要用到专门的错误处理程序退出语

句。一般可以用Resume或ResumeNext语句退出错

误处理程序。Resume语句会继续执行引发错误的那

句代码,而ResumeNext语句则会跳过该语句,执

行引发错误代码的下一句语句。

42

P226习题一、问答题

2.请简要设计错误处理程序的。个步骤。

答:

1)捕获错误,并强制程序跳转

2)编写错误处理程序'

3)退出错误处理程序

43

9.3.3Err对象

Err对象是个运行期对象,它包含了有

关最新错误的信息。当运行中遇到了一个错

误时,或者当用户使用Err对MjUise方法

故意引发一个错误时,它形成了Error对象

的属性。当遇到OnEiror语句时,或使用

ExitSub,ExitFunction语句退出一个过程

后,Err对象的属性值将被清除。若要强制

清除Err对象的属性可以调用它的Clear方法。

44

Err对象的主要属性

属性说明

Number用于标识该错误的专用号g,数值型

Sourse当前项目的名字,字符型\

Description错误描述,如果某个错误没有具体的错

误描述,本属性一般会指明“应用程序

定义错误或对象定义错误”,字符型

LastDLLError在32位的Windows操作系统上,上次调

用动态链接库(DLL)D的系统错误代码,

数值型

45

9.3.4OnError语句

OnError命令有三种形式:

1.OnErrorResumeNext语句:当发生错

误时,VB程序将忽略引发错误的语句,并

继续执行下一条语句。

2.OnErrorGoTo行标识符语句:当发生错

误时,使用该语句强制改变程序的执行方

向。

3.OnErrorGoTo0语句:用于关闭错误捕

获机制。

46

P226习题一、问答题

6.请说明OnErrorGoTo与OnErrorResume

Next的区别。

答:OnErrorGoTo行标识符语句:当发生

错误时,使用该语句强制改变程序的执行

方向。而OnErrorResumeNext语句:当

发生错误时,VB程序将忽略引发错误的语

句,并继续执行下一条语句。

47

P226习题二、程序设计题

2.错误处理。按下图设计一除注程取请使用OnError

GoTo语句对除法程序进行处理,当出现除数为0或其他

异常情况时,使用MsgBox提示错误信息。

除数:

被除数:错误提示

7姿冥也程上

结果:•/错误号是:

运算清除

48

P226习题二、程序设计题

程序代码:

摩工程1-Forml(Code)

CoB>and2|Click

PrivateSubComiRandl_Click()被

OnErrorGoToErrLB一

Text3.Text=Trim(Str(Vai(Textl.Text)/Vai(Text2.Text)))

ExitSub

ErrLB:

DimstrMsgAsString

strMsg=“运算过程出现了如下错误:"+vbCr_

strMsg=strMsg+”错误号悬:"+Trim(Str(Err.Number))+vbCr

strMsg=strMsg+”昔误描述是:"+Err.Descrirrtion

MsgBoxstrMsg,vbQuestion+vbOKOnly,“错误提示“

Text2.SetFocus

曲________________________________________________________________▼|

49

9.3.5如何避免错误

尽管VB提供了多种错误晟及卷理方法,但是调试毕竟是

件费时费事是工作,因此最好病在逑序中尽量避免错误。

避免应用程序中产生错误的若干方法:

1.事先精心设计应用程序,描述清楚相关事件以及代码响应

每一事件的方法,为每一事件过程和每个普通过程都指定

一个特点的、明确的目标。

2.多加注释。如果用注释说明每个过程的目的,在以后分析

代码时,能更深入地理解这些代码。

3.对过程中用到的每个变量或对象都应该在过程开始部分加

以定义。

4.在应用程序中对变量和对象提出一种前后一致的命名方案

50

P226习题一、问答题

1.请思考如何避免错误。

答:

1)事先精心设计应用程序,描述清楚才哀青件以及代码响应

每一事件的方法,为每一事件过程和每个普通过程都指定

一个特点的、明确的目标。

2)多加注释。如果用注释说明每个过程的目的,在以后分

析代码时,能更深入地理解这些代码。

3)对过程中用到的每个变量或对象都应该在过程开始部分加

以定义。

4)在应用程序中对变量和对象提出一种前后一致的命名方案。

51

实验9简单程序调试及错误处理

一、程序调试实验

1.实验要求:开发一个排序程序,首先要求用户在Textl中

输入一个整数,点击“添加到初始系列中”后将该数添加

到“初始系列"Listl中,如此反复多次,再点击“排序”

茗钮,在List2中显示排序结果。期望的运行界面如图所

Zj\O

52

实验9简单程序调试及错误处理

一、程序调试实验

2.实验步骤

第1步:编写程序(在设计界面的基础上)

,排序程序日回区

请输入整数:添加到初始序列中|

初始序列:产序结果:

Listl•|List2

“添加到初始序列中”按钮的Click事件

PrivateSubCommandl_Click()

Listl.AdditemTextl.Text

Textl.Text=

SendKeys”{tab}''

EndSub

54

“排序”按钮的Click事件

PrivateSubCommand2_Click()

Dimi,jAsInteger

,定义数组,以Listl的数目个数为数组维於、I

DimstrList(Listl.ListCount)AsInteger

'ReDimstrList(Listl.ListCount-1)AsInteger

,定义中间临时变量,用于数据交换

DimstrTmpAsInteger

,将Listl中的项目导入到strList中

Fori=0ToListl.ListCount

strList(i)=(Listl.List(i))

Nexti

55

“排序”按钮的Click事件

,按“冒泡”算法完成排序工作

Fori=0ToUBound(strList)

Forj=i+1ToUBound(strList)

IfstrList(i)>strList(j)Then

strTmp=strList(i)

strList(i)=strList(j)

strList(j)=strTmp

EndIf

Nextj

Nexti

,将排序结果输出到List2中].

List2.Clear

Fori=0ToUBound(strList)

Listl.AddltemstrList(i)

Nexti

EndSub

56

第2步:运行程序并调试语法错误

(1)运行程序,在Text!文本框中输入一个整数,然后

点击“添加到初始系列中”按钮,此时会出现如下错

误提示。

licrosoftVisualBasic

实时错误'424':

要求对象

结束(£)|调试①)帮助出)]

57

第2步:运行程序并调试语法错误

(2)点击“调试”按钮,进入中断模式,VB自动标识

出引发错误的与行。

展工程1-Forml(Code)圈]仁

|CoB>andl▼(Click

一「'”添加到初始序列中;按钮的C;ick事件

PrivateSubCommandl_Click()——

中Listl.AdditemText.Text

Textl.Text=""

SendKeys”{tab}”—

tedfSub_________________________________

'“排序”按钮的Click事件

PrivateSubComiriand2_Click()

Dimi,jAsInteger

'定义数缸以Listl的数目个数为数组维数

DimstrList(Listl.ListCount)AsInteger

JReDimstrList(Listl.ListCount-1)AsInteger|

glI卡

58

第2步:运行程序并调试语法错误

(3)分析错误原因,&现该行语句的正确写法是:

List1.AdditemTextl.Text

(4)修改错误后,继续执行程序,出理如下界面:

_____________匚叵区I'

请给入整数:添加到初始序列中

初始序列:排序结果:

排序

59

第2步:运行程序并调试语法错误

(5)在上述界面上依次输入以下整数序列“21,9,8,

6”后,出现以下界面。

*排序程序口口区I

请输入整数:添加到初始序列中

初始序列:排序结果:

1

2

X1

9

8

6

排序

60

第2步:运行程序并调试语法错误

(6)点击“排序”按钮后,又出现如图所示错误。

MicrosoftVisualBasic

61

第2步:运行程序并调试语法错误

(7)点击“确定”按钮后,再次进入中断模式,编辑器

以加重的形式指出了引发错误的位置。

■工程1-Forml(Code)

PrivateSubCommand2_Click()

以Lis11的数目个数为数组维数

ReDimstrList(Listl.ListCornt

定义中间临时变量,用干数据交换

dmstrTmpAsInteger

将Lis11中的项目导入至IstrList中

62

第2步:运行程序并调试语法错误

(8)引发错误的原因算不能用变量作为数组的下标。作

如下修改:

融工程1-Forml(Code)

CoB>and2▼Click

'“排序”按钮的Click事件

PrivateSubCommand2_Click()

Dimi.jAsInteger

'定义数缸以Listl的数目个数为数组维数

ReDimstrList(Listl.ListCount-1)AsInteger

'定义中间临时变量,用于数据交换

DimstrTmpAsInteger

63

第2步:运行程序并调试语法错误

(9)继续执行程序,又出现以下的错误提示

licrosoftVisualBasic

实时错误案胴:

类型不匹配

结束也)r调试@1帮助出)

64

第2步:运行程序并调试语法错误

(10)单击“调试”按钮后,错误定位如图所示。

■工程1-Forml(Code)□n®

CoB*and2

定义中间临时变量,用于数据交换

ImstrTmpAsInteger

'将Listl中的项目导入SUstrList中

Fori=0ToListl.ListCount

strList(i)=Listl.List(i)

Nexti

算法完成排序工作

FoUBound(strList)

i+1ToUEound(strList)

65

第2步:运行程序并调试语法错误

(11)分析错误原因:我们将数组声明为Integer数据类

型,而ListLListO表示的是字符型数据,VB无法进

行自动类型转换。语句修改为:

strList(i)=Val(Listl.List(i)

(12)继续运行,程序成功运行。运行泊次为'

一一匚n区।

请战入整数:添加到初始序列中

初始序列:排序结果:排序结果中多

211了一个数值0,

说明程序中存

在逻辑问题。

排序

66

第3步:设置逻辑断点,分析逻辑错误

(1)设置如图所示的断点:

加工程1-Forml(Code)匚叵区

Comaandl▼|jClick

Fori=0ToListl.ListCount▲I

strList(i)=Vai(Listl.List(i))

Nexti

,按“冒泡”算法完成排序工作

Fori=0ToU

Forj=i+1ToUBound(strList)

IfstrList(i)>strList(j)Then

strTmp=strList(i)

strList(i)=strList(j)

strList(j)=strTmp

EndIf

Nextj

Nexti

'将排序结果输出到List2中

序I

67

第3步:设置逻辑断点,分析逻辑错误

(2)运行程序并输入二组数字,比如“5,4,3,2”。

单击“排序”按钮后,出现如图所示的界面:

序工程1-Forml(Code)二叵区

CoB>and2Click

Fori=0ToListl.ListCount

strList(i)=Vai(Listl.List(i))

Nexti

‘按“冒泡”算法完成排序工作

|Fori=0ToUBound(strList)

Forj=i+lToUBound(strList)

IfstrList(i)>strList(j)Then

strTmp=strList(i)

strList(i)=strList(j)

strList(j)=strTmp

EndIf

Nextj

Nexti

'将排序结果输出到List2中

”1

68

第3步:设置逻辑断点,分析逻辑错误

(3)在Vb集成环境的立即窗口中,使用“?”打印

strList数组的上接和相关的值,结果如图所示:

立即

?ubound(strlist)

4

?strlist(0)

5

?strlist(4)

0

?strlist(3)

2

?strlist(2)

3./

?strlist(1)

4

69

第3步:设置逻辑断点,分析逻辑错误

(4)分析原因:Listl.ListCount的最大值是4,即数字序

列中工有4个数,即“5,4,3,2”。但是Listl.Liist()

下标是从0开始的,下标最大值应该为3。修改程序:

'修改数组声明

ReDimstrList(Listl.ListCount-l)AsInteger

,修改循环次数'

Fori=0ToListl.ListCount-1

strList(i)=Val(Listl.List(i))

Nexti

70

第3步:设置逻辑断点,分析逻辑错误

(5)修改后的运行结果如图所示

・排序程序

请输入整数:添加到初始序列中

初始序列:排序结果:

排序

71

第4步:进一步完善程序

这个程序经过调试能够正常运行了。但还存在一写不足。

例如:

入・排序程序

请输入整数:添加到初始序列中

字数字序列被

符初始序列:排序结果:

0重复添加到

Textl0

aaa0List2

3.23

33

中国0

0

0

3

3

排序

72

第4步:进一步完善程序

修改程序:

(1)通过KeyPress事件控制Textl强件的鲍入,是它只能接收数字。

PrivateSubTextl_KeyPress(KeyAsciiAsInteger)

If

温馨提示

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

评论

0/150

提交评论