vb中的常见错误与分析汇总.docx
- 文档编号:28831173
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:11
- 大小:19.16KB
vb中的常见错误与分析汇总.docx
《vb中的常见错误与分析汇总.docx》由会员分享,可在线阅读,更多相关《vb中的常见错误与分析汇总.docx(11页珍藏版)》请在冰豆网上搜索。
vb中的常见错误与分析汇总
常见错误和难点分析
1.在选择结构中缺少配对的结束语句
对多行式的If块语句中,应有配对的EndIf语句结束。
否则,在运行时系统会显示"块If没有EndIf"的编译错误。
同样对SelectCase语句也应有与其相对应的EndSelect语句。
2.多边选择ElseIf关键字的书写和条件表达式的表示
多边选择ElseIf子句的关键字ElseIf之间不能写有空格,即不能写成ElseIf。
在多个条件表达式的表示时,应从最小或最大的条件依次表示,以避免条件的过滤。
例如,已知输入某课程的百分制成绩mark,要求显示对应五级制的讦定,评定条件如下:
有以下几种表示方式,语法上都没有错,但执行后结果有所不同,请分析哪些正确?
哪些错误?
下面给出的答案中,方法一、二、五正确,其余错误,请分析各自的原因。
方法一:
方法二:
方法三:
方法四:
方法五:
Ifmark>=90Then
Print"优"
ElseIfmark>=80Then
Print"良"
ElseIfmark>=70Then
Print"中"
ElseIfmark>-60Then
Print"及格"
Ifmark<60Then
Print"不及格"
ElseIfmark<70Then
Print"及格"
ElseIfmark<80Then
Print"中"
Ifmark>=60Then
Print"及格"
ElseIfmark>=70Then
Print"中"
Elselfmark>=80Then
Print"良"
Elselfmark>=90Then
Print"优"
Ifmark>=90Then
Print"优"
ElseIf 80<=mark<90Then
Print"良"
ElseIf 70<=mark<80Then
Print"中"
ElseIf 60<=mark<70Then
Print"及格"
Ifmark>=90Then
Print"优"
ElseIf80<=markAndmark<90Then
Print"良"
ElseIf70<=markAndmark<80Then
Print"中"
ElseIf60<=markAndmark<70Then
Else
Print"及格"
EndIf
ElseIfmark<90Then
Print"良"
Else
Print"优"
EndIf
Else
Print"不及格"
EndIf
Else
Print"不及格"
EndIf
Print"及格"
Else
Print"不及格"
EndIf
3.SelectCase语句的使用
(1) "表达式列表i"中不能使用"变量或表达式"中出现的变量。
例如,上述多边选择的例子改为SelectCase语句实现,方法一Case子句中出现变量mark,运行时不管mark的值多少,始终执行CaseElse子句,运行结果不正确;方法二、方法三正确。
方法一:
方法二:
方法三:
SelectCasemark
Casemark>=90
Print"优"
Casemark>=80
Print"良"
Casemark>=70
Print"中"
Casemark>=60
Print"及格"
CaseElse
Print"不及格
SelectCasemark
CaseIs>=90
Print"优"
Casels>=80
Print"良"
CaseIs>=70
Print"中"
CaseIs>=60
Prim"及格"
CaseElse
Print"不及格"
SelectCasemark
CaseIs>=90
Print"优"
Case80To89
Print"良"
Case70To79
Print"中"
Case60TO69
Print"及格"
CaseElse
Print"不及格"
EndSelect
"
EndSelect
EndSelect
(2) 在"变量或表达式"中不能出现多个变量。
实验三第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 '步长为负,初值必须大于等于终值,才能循环
Fori=20To10 '步长为正,初值必须小于等于终值,才能循环
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.数组维数错
数组声明时的维数与引用数组元素时的维数不一致。
例如,下程序段为形成和显示3×5的矩阵:
Dima(3,5)AsLong
Fori=1To3
Forj=1To5
a(i)=i*j
Printa(i);"";
Nextj
Nexti
程序运行到a(i)=i*j语句时出现"维数错误"的信息,因为在Dim声明时是二维数组,引用时的一个下标。
4.Aarry函数使用问题
Aarry函数可方便地对数组整体赋值,但此时只能声明Variant的变量或仅由括号括起的动态数组。
赋值后的数组大小由赋值的个数决定。
例如,要将1,2,3,4,5,6,7这些值赋值给数组a,下表列出了三种错误及相应正确的赋值方法。
Aarry函数表示方法
错误的Aarry函数赋值,
改正的Aarry函数赋值
Dima(1To8) a=Array(1,2,3,4,5,6,7,8)
Dima()a=Array(1,2,3,4,5,6,7)
DimaAsInteger a=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)
Dim aa=Array(1,2,3,4,5,6,7)
5.如何获得数组的上界、下界
Aarry函数可方便地对数组整体赋值,但在程序中如何获得数组的-上界、下界,以保证访问的数组元素在合法的范围内,可使用UBound和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项的斐波那契数列:
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.数组维数错
数组声明时的维数与引用数组元素时的维数不一致。
例如,下程序段为形成和显示3×5的矩阵:
Dima(3,5)AsLong
Fori=1To3
Forj=1To5
a(i)=i*j
Printa(i);"";
Nextj
Nexti
程序运行到a(i)=i*j语句时出现"维数错误"的信息,因为在Dim声明时是二维数组,引用时的一个下标。
4.Aarry函数使用问题
Aarry函数可方便地对数组整体赋值,但此时只能声明Variant的变量或仅由括号括起的动态数组。
赋值后的数组大小由赋值的个数决定。
例如,要将1,2,3,4,5,6,7这些值赋值给数组a,下表列出了三种错误及相应正确的赋值方法。
Aarry函数表示方法
错误的Aarry函数赋值,
改正的Aarry函数赋值
Dima(1To8) a=Array(1,2,3,4,5,6,7,8)
Dima()a=Array(1,2,3,4,5,6,7)
DimaAsInteger a=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)
Dim aa=Array(1,2,3,4,5,6,7)
5.如何获得数组的上界、下界
Aarry函数可方便地对数组整体赋值,但在程序中如何获得数组的-上界、下界,以保证访问的数组元素在合法的范围内,可使用UBound和LBound函数来决定数组访问。
在上例中,若要打印a数组的各个值,可通过下面程序段实现:
Fori=Lbound(A)ToUbound(A)
Printa(i)
Nextl
6.给数组赋值
VB6.0提供了可对数组整体赋值的新功能,方便了数组对数组的赋值操作。
但真正使用不那么方便,有不少限制。
数组赋值形式如下:
数组名2=数组名1
这里的数组名2,实际上在前面的数组声明时,只能声明为Varian的变量,赋值后的数组2的大小、维数、类型同数组名1;否则,若声明成动态或静态的数组,例如:
Dim数组名2()或Dim数组名2(下标)
程序在运行到上述赋值语句时显示"不能给数组赋值"的出错信息。
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vb 中的 常见 错误 分析 汇总
![提示](https://static.bdocx.com/images/bang_tan.gif)