vb中的常见错误与分析汇总.docx

上传人:b****9 文档编号:26019025 上传时间:2023-06-17 格式:DOCX 页数:13 大小:20.01KB
下载 相关 举报
vb中的常见错误与分析汇总.docx_第1页
第1页 / 共13页
vb中的常见错误与分析汇总.docx_第2页
第2页 / 共13页
vb中的常见错误与分析汇总.docx_第3页
第3页 / 共13页
vb中的常见错误与分析汇总.docx_第4页
第4页 / 共13页
vb中的常见错误与分析汇总.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

vb中的常见错误与分析汇总.docx

《vb中的常见错误与分析汇总.docx》由会员分享,可在线阅读,更多相关《vb中的常见错误与分析汇总.docx(13页珍藏版)》请在冰豆网上搜索。

vb中的常见错误与分析汇总.docx

vb中的常见错误与分析汇总

常见错误和难点分析

1•在选择结构中缺少配对的结束语句

对多行式的If块语句中,应有配对的EndIf语句结束。

否则,在运行时系统会显示"块If没有EndIf"的编译错误。

同样对SelectCase语句也应有与其相对应的EndSelect语句。

2•多边选择Elself关键字的书写和条件表达式的表示

多边选择Elself子句的关键字Elself之间不能写有空格,即不能写成ElseIf<

在多个条件表达式的表示时,应从最小或最大的条件依次表示,以避免条件的过滤。

例如,已知输入某课程的百分制成绩mark,要求显示对应五级制的讦定,

评定条件如下:

有以下几种表示方式,语法上都没有错,但执行后结果有所不同,请分析哪些正确?

哪些错误?

下面给出的答案中,方法一、二、五正确,其余错误,请分析各自的原因。

方法一:

方法二:

方法三:

方法四:

五:

fmark>=90Then

fmark<60Then

Ifmark>=60Then

Ifmark>=90Then

Ifmark>=90Then

Print"

Print"不及格"

Print"

Print"

Pr

优"

ElseIfmark<70Then

及格"

优“

优"

ElseIfmark>=80Then

ElseIfmark>=70Then

ElseIf

80<=mark<90

ElseIf80<=markAnd

Print"

Then

mark<90Then

Print"

及格“

Print"

良“

ElseIfmark<80Then

中"

良“

Print"

良"

Pr

ElseIfmark>=70Then

Elselfmark>=80Then

Print"

ElseIf

70<=mark<80

ElseIf70<=markAnd

Print"

中"

Print"

Then

mark<80Then

中"

ElseIfmark<90Then

良“

Print"

Pr

Elselfmark>-60Then

Print"

Elselfmark>=90Then

中"

良“

Print"

Print"

ElseIf

60<=mark<70

及格“

Else

优"

Then

Else

Print"

Else

Print"

优"

及格"

Print"

Print"

及格“

EndIf

不及格"

Else

EndIf

EndIf

Print"

不及格"

EndIf

中"

Elself60<=markAndmark<70Then

Pr

及格"

Else

Pr

不及格”

EndIf

3.SelectCase语句的使用

(1)"表达式列表i"中不能使用"变量或表达式"中出现的变量

例如,上述多边选择的例子改为SelectCase语句实现,方法一Case子句中出现变量mark,运行时不管mark的值多少,始终执行CaseElse子句,运行结果不正确;方法二、方法三正确。

方法一:

方法二:

方法三:

SelectCasemark

SelectCase

SelectCasemark

mark

Case

CaseIs>=90

mark>=90

CaseIs>=90

Prin

Print"

Prin

t"优"

优"

t"优"

Case80To89

Casemark>=80

Casels>=80

Print"良"

Print"

良"

t"良

Prin

Case70To79

Casemark>=70

II

Prin

t"中"

CaseIs>=70

Print"

Case60TO69

中"

Prin

Prin

Casemark>=60

t"中"

t"及格"

Print"

CaseIs>=60

CaseElse

及格"

CaseElse

Prim

"及格"

Prin

t"不及格"

Print"

CaseElse

EndSelect

不及格"

EndSelect

Prin

t"不及格"

EndSelect

⑵在"变量或表达式"中不能出现多个变量。

实验三第5题对三门课程奖学金的判断,只能用If语句的多边选择,而不能用

SelectCase语句实现。

例如,有人用如下语句表示:

SelectCasemarkl,mark2,mark3

Case(markl+mark2+mark3)/3>=95

Print"一等奖"

EndSelect

这样就会在"SelectCasemarkl,mark2,mark3"语句行出现编辑错误,同时

Case(markl+mark2+mark3)/3>=95书写也错误。

第四章常见错误和难点分析

1.不循环或死循环的问题主要是循环条件、循环初值、循环终值、循环步长的设置有问题。

例如,以下循环语句不执行循环体:

 

Fori=10To20Step-1

步长为负,初值必须大于等于终值,才能循环

 

DoWhileFalse'循环条件永远不满足,不循环例如,以下循环语句死循环:

Fori=10To20Step0'步长为零,死循环

DoWhile1'循环条件永远满足,死循环2.循环结构中缺少配对的结束语句

For…Next语句没有配对的Next语句;Do语句没有一个终结的Loop语句等。

3.循环嵌套时,外循环交叉

ForI=1to4

Forj=1to5

Nexti

Nextj

上述循环的交叉运行时显示"无效的Next控制变量引用"。

4.累加、连乘时,存放累加、连乘结果的变量赋初值问题

(1)一重循环

在一重循环中,存放累加、连乘结果的变量初值设置应在循环语句前。

例如,求1〜100的3的倍数和,结果放入Sum变量中,如下程序段,输出结果如何?

应作如何改进?

PrivateSubForm_Click()

Fori=3To100Step3

Sum=0

Sum=Sum+i

Nexti

PrintSum

EndSub

(2)多重循环

在多重循环中,存放累加、连乘结果的变量初值设置放在外循环语句前,还是循环语句前,这要视具体问题分别对待。

例如,期末30位学生参加三门课程的考试,求每个学生的三门课程的平均成绩如下程序能否实现?

aver=0

Fori=1To30

Forj=1To3

m=InputBox("输入第"&j&"门课的成绩")

aver=aver+m

Nextj

aver=aver/3

Printaver

NextI

第五章常见错误和难点分析

1.Dim数组声明

有时用户为了程序的通用性,声明数组的上界用变量来表示,如下程序段:

n=InputBox("输入数组的上界")

Dima(1Ton)AsInteger

程序运行时将在Dim语句处显示"要求常数表达式"的出错信息。

即Dim语句中声明的数组上,下界必须是常数,不能是变量。

解决程序通用的问题,一是将数组声明的很大,这样浪费一些存储空间;二是利用动态数组,将上例改变如下:

Dima()AsInteger

n=InputBox("输入数组的上界")

ReDima(1Ton)AsInteger

2.数组下标越界

引用了不存在的数组元素,即下标比数组声明时的下标围大或小即为越界。

例如,要形成有如下30项的斐波那契数列:

1,1,2,3,5,8,13,21,34,…,317811,514229,832040

正确的程序段如下:

Dima(1To30)AsLong,i%

若将Fori=3To30改为Fori=1To30,程序运行时会显示"下标越界"的出错信息,因为开始循环时i=l,执行到循环体语句a(i)=a(i-2)+a(i-1),数组下标i-2、i-1均小于下界1。

同样若将上例:

a(i)+a(i-2)+a(i-1)语句改为:

a(i+2)=a(i)+a(i+1)

程序运行时也会显示"下标越界"的出错信息,这时是数组下标大于上界30。

3.数组维数错

数组声明时的维数与引用数组元素时的维数不一致。

例如,下程序段为形成和显示3X5的矩阵:

Dima(3,5)AsLong

Fori=1To3

Forj=1To5

a(i)=i*j

Printa(i);"";

Nextj

Print

Nexti

程序运行到a(i)=i*j语句时出现"维数错误"的信息,

因为在Dim声明时是二维

数组,引用时的一个下标。

4.Aarry函数使用问题

Aarry函数可方便地对数组整体赋值,但此时只能声明Variant的变量或仅由括号括起的动态数组。

赋值后的数组大小由赋值的个数决定。

例如,要将1,2,3,4,5,6,7这些值赋值给数组a,下表列出了三种错误及相应正确的赋值方法。

Aarry函数表示方法

错误的Aarry函数赋值,

改正的Aarry函数赋值

Dima(1To

8)a=Array(1,2,3,4,5,6,7,8)

Dima()a=Array(1,2,3,4,5,6,7)

DimaAs

ntegera=Array(1,2,3,4,5,6,7)

Dimaa=Array(1,2,3,4,5,6,7)

Dim

aa()=Array(1,2,3,4,5,6,7)

Dimaa=Array(1,2,3,4,5,6,7)

5.如何获得数组的上界、下界

Aarry函数可方便地对数组整体赋值,但在程序中如何获得数组的-上界、下界,以保证访问的数组元素在合法的围,可使用UBounc和LBound函数来决定数组访问。

在上例中,若要打印a数组的各个值,可通过下面程序段实现:

Fori=Lbound(A)ToUbound(A)

Printa(i)

Nextl

6.给数组赋值

VB6.0提供了可对数组整体赋值的新功能,方便了数组对数组的赋值操作。

但真正使用不那么方便,有不少限制。

数组赋值形式如下:

数组名2=数组名1

这里的数组名2,实际上在前面的数组声明时,只能声明为Varian的变量,赋值后的数组2的大小、维数、类型同数组名1;否则,若声明成动态或静态的数组,例如:

Dim数组名2()或Dim数组名2(下标)

程序在运行到上述赋值语句时显示"不能给数组赋值"的出错信息。

第五章数

5.1知识要点

1.数组的概念

数组:

存放具有相同性质的一组数据,也就是数组中的数据必须是同一个类型和性质。

数组元素:

数组中的某一个数据项。

数组元素的使用同简单变量的使用。

2.静态数组的声明

静态数组:

在声明时已确定了数组元素个数。

声明形式:

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

此语句声明了数组名、数组维数、数组大小、数组类型。

[注意]下界、上界必须为常数,不能为表达式或变量:

省略下界,默认为0,

也可用OptionBase语句重新设置下界的值。

3.动态数组的声明

声明形式:

Dim数组名()

ReDim[Preserve]数组名([下界To]上界[,[下界

To]上界[,…]])

[注意]

此时的上界、下界可以是赋了值的变量或表达式。

若有Preserve关键字,表示当改变原有数组最末尾的大小时,使用此关键字可以保持数组中原来的数据。

4.控件数组

即相同类型的控件组成的数组

控件数组的建立:

在设计时的窗体上,通过对某控件的复制和粘贴操作:

在程序运行时通过Load方法实现。

控件数组元素:

由控件的Index属性值表示数组的F标。

5.数组的操作

应掌握的基本操作有:

数组初始化、数组输入、数组输出、求数组中的最大(最

小)元素及下标、求和、平均值、排序和查找等。

5.2常见错误和难点分析

1.Dim数组声明

有时用户为了程序的通用性,声明数组的上界用变量来表示,如下程序段:

n=InputBox("输入数组的上界")

Dima(1Ton)AsInteger

程序运行时将在Dim语句处显示"要求常数表达式"的出错信息。

即Dim语句中声明的数组上,下界必须是常数,不能是变量。

解决程序通用的问题,一是将数组声明的很大,这样浪费一些存储空间;二是利用动态数组,将上例改变如下:

Dima()AsInteger

n=InputBox("输入数组的上界")

ReDima(1Ton)AsInteger

2.数组下标越界

引用了不存在的数组元素,即下标比数组声明时的下标围大或小即为越界。

例如,要形成有如下30项的斐波那契数列:

正确的程序段如下:

Dima(1To30)AsLong,i%

若将Fori=3To30改为Fori=1To30,程序运行时会显示"下标越界"的出错信息,因为开始循环时i=l,执行到循环体语句a(i)=a(i-2)+a(i-1),数组下标i-2、i-1均小于下界1。

同样若将上例:

a(i)+a(i-2)+a(i-1)语句改为:

a(i+2)=a(i)+a(i+1)

程序运行时也会显示"下标越界"的出错信息,这时是数组下标大于上界30。

3.数组维数错

数组声明时的维数与引用数组元素时的维数不一致。

例如,下程序段为形成和显示3X5的矩阵:

Dima(3,5)AsLong

Fori=1To3

Forj=1To5

a(i)=i*j

Printa(i);"";

Nextj

Print

Nexti

程序运行到a(i)=i*j语句时出现"维数错误"的信息,因为在Dim声明时是二维

数组,引用时的一个下标。

4.Aarry函数使用问题

Aarry函数可方便地对数组整体赋值,但此时只能声明Variant的变量或仅由括号括起的动态数组。

赋值后的数组大小由赋值的个数决定。

例如,要将1,2,3,4,5,6,7这些值赋值给数组a,下表列出了三种错误及相应正确的赋值方法。

Aarry函数表示方法

错误的Aarry函数赋值,

改正的Aarry函数赋值

Dima(1To

8)a=Array(1,2,3,4,5,6,7,8)

Dima()a=Array(1,2,3,4,5,6,7)

DimaAs

ntegera=Array(1,2,3,4,5,6,7)

Dimaa=Array(1,2,3,4,5,6,7)

Dim

aa()=Array(1,2,3,4,5,6,7)

Dimaa=Array(1,2,3,4,5,6,7)

5•如何获得数组的上界、下界

Aarry函数可方便地对数组整体赋值,但在程序中如何获得数组的-上界、下界,以保证访问的数组元素在合法的围,可使用UBounc和LBound函数来决定数组访问。

在上例中,若要打印a数组的各个值,可通过下面程序段实现:

Fori=Lbound(A)ToUbound(A)

Printa(i)

Nextl

6•给数组赋值

VB6.0提供了可对数组整体赋值的新功能,方便了数组对数组的赋值操作。

但真正使用不那么方便,有不少限制。

数组赋值形式如下:

数组名2=数组名1

这里的数组名2,实际上在前面的数组声明时,只能声明为Varian的变量,赋

值后的数组2的大小、维数、类型同数组名1;否则,若声明成动态或静态的数组,例如:

Dim数组名2()或Dim数组名2(下标)

程序在运行到上述赋值语句时显示"不能给数组赋值"的出错信息。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1