vb中的常见错误与分析汇总_第1页
vb中的常见错误与分析汇总_第2页
vb中的常见错误与分析汇总_第3页
vb中的常见错误与分析汇总_第4页
vb中的常见错误与分析汇总_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、常见错误和难点分析1在选择结构中缺少配对的结束语句对多行式的 If 块语句中,应有配对的 End If 语句结束。否则,在运行时系统会 显示 块 If 没有 End If 的编译错误。同样对 Select Case语句也应有与其相对 应的 End Select 语句。2多边选择 ElseIf 关键字的书写和条件表达式的表示多边选择 ElseIf 子句的关键字 ElseIf 之间不能写有空格, 即不能写成 Else If在多个条件表达式的表示时, 应从最小或最大的条件依次表示, 以避免条件的过 滤。例如,已知输入某课程的百分制成绩 mark,要求显示对应五级制的讦定, 评定条件如下:有以下几种表

2、示方式, 语法上都没有错, 但执行后结果有所不同, 请分析哪些 正确? 哪些错误 ?下面给出的答案中,方法一、二、五正确,其余错误,请分析各自的原因。方法一:方法二:方法三:方法四:五:方If mark=90ThenIf mark=60ThenIf mark=90ThenIf mark=90ThenPrintPrint 不及格 PrintPrintPr优ElseIf mark=80ThenElseIf mark=70ThenElseIf80=mark90ElseIf 80=mark AndPrintThenmark90 ThenPrint及格Print良ElseIf mark=70ThenEl

3、selfmark=80ThenPrintElseIf70=mark80ElseIf 70=mark AndPrint中PrintThenmark80Then中ElseIf mark-60ThenPrintElselfmark=90Then中良PrintPrintElseIf60=mark70及格Else优ThenElsePrintElsePrint优及格PrintPrint及格End If不及格 ElseEnd IfEnd IfPrint不及格 End If中ElseIf 60=mark And mark=90mark=90Case Is=90PrinPrintPrint 优优t 优Case

4、80 To 89Case mark=80Casels=80Print 良Print良t 良PrinCase 70 To 79Casemark=70Print 中 Case Is=70PrintCase 60 TO 69中PrinPrinCase mark=60t 中 t 及格 PrintCase Is=60Case Else及格Case ElsePrim及格Print 不及格 PrintCase ElseEnd Select不及格End SelectPrin t 不及格 End Select(2) 在变量或表达式 中不能出现多个变量。实验三第 5 题对三门课程奖学金的判断,只能用 If 语句的

5、多边选择,而不能用 SelectCase 语句实现。例如,有人用如下语句表示:Select Case markl , mark2,mark3Case (markl+mark2+mark3)/3=95Print 一等奖 End Select这样就会在 Select Case markl,mark2,mark3语句行出现编辑错误 , 同时Case (markl+mark2 +mark3)/3=95 书写也错误。第四章 常见错误和难点分析1 不循环或死循环的问题主要是循环条件、循环初值、循环终值、循环步长的 设置有问题。例如,以下循环语句不执行循环体:For i=10 To 20 Step-1步长为

6、负,初值必须大于等于终值,才能循环For i=20 To10步长为正,初值必须小于等于终值,才能循环Do While False 循环条件永远不满足,不循环 例如,以下循环语句死循环:For i=10 To 20 Step 0 步长为零,死循环Do While 1 循环条件永远满足,死循环2循环结构中缺少配对的结束语句For Next 语句没有配对的 Next 语句; Do语句没有一个终结的 Loop 语句等。3循环嵌套时,外循环交叉For I=1 to 4For j=1 to 5Next iNext j上述循环的交叉运行时显示 无效的 Next 控制变量引用 。4累加、连乘时,存放累加、连乘

7、结果的变量赋初值问题(1) 一重循环在一重循环中, 存放累加、连乘结果的变量初值设置应 在循环语句前 。例如,求 1100的 3的倍数和,结果放入 Sum变量中,如下程序段,输出结果 如何 ?应作如何改进 ?Private SubForm_Click()For i=3 To 100 Step 3Sum=0Sum=Sum+iNext iPrint SumEnd Sub(2) 多重循环在多重循环中 ,存放累加、 连乘结果的变量初值设置放在外循环语句前, 还是循 环语句前,这要视具体问题 分别对待 。例如,期末 30 位学生参加三门课程的考试,求每个学生的三门课程的平均成绩 如下程序能否实现?ave

8、r=0For i=1 To 30For j=1 To 3m=InputBox( 输入第 &j& 门课的 成绩)aver=aver+mNext javer=aver/3Print averNext I第五章 常见错误和难点分析1Dim数组声明有时用户为了程序的通用性,声明数组的上界用变量来表示,如下程序段:n=InputBox( 输入数组的上界 )Dim a(1 To n) As Integer程序运行时将在 Dim语句处显示 要求常数表达式 的出错信息。即 Dim语句中声明的数组上,下界必须是常数,不能是变量。解决程序通用的问题, 一是将数组声明的很大, 这样浪费一些存储空间; 二是利 用动态

9、数组,将上例改变如下:Dim a() As Integern=InputBox ( 输入数组的上界 )ReDim a(1 To n)As Integer2数组下标越界引用了不存在的数组元素, 即下标比数组声明时的下标围大或小即为越界。 例如, 要形成有如下 30 项的斐波那契数列:1,1,2,3,5,8,13,21,34, ,317811 ,514229,832040正确的程序段如下:Dim a(1 To 30) As Long, i%若将 For i=3 To 30 改为 For i=1 To 30 ,程序运行时会显示 下标越界 的出错 信息,因为开始循环时 i=l ,执行到循环体语句 a(

10、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 的矩阵:Dim a(3,5) As LongFor i=1 To 3For j=1 To 5a(i)=i*jPrint a(i);Next jPrintNext i程序运行到 a(i)=i*j 语句时出现 维数错误 的信息,因为在 Dim 声明时

11、是二维数组,引用时的一个下标。4Aarry 函数使用问题Aarry 函数可方便地对数组整体赋值, 但此时只能声明 Variant 的变量或仅由括 号括起的动态数组。赋值后的数组大小由赋值的个数决定。例如,要将 1,2,3,4,5,6,7 这些值赋值给数组 a,下表列出了三种错误及 相应正确的赋值方法。Aarry 函数表示方法错误的 Aarry 函数赋值 ,改正的 Aarry 函数赋值Dim a(1 To8) a=Array(1,2,3,4,5,6,7,8)Dim a( ) a=Array(1,2,3,4,5,6,7)Dim a AsInteger a=Array(1,2,3,4,5,6,7)D

12、im aa=Array(1,2,3,4,5,6,7)Dim aa()=Array(1,2,3,4,5,6,7)Dim aa=Array(1,2,3,4,5,6,7)5如何获得数组的上界、下界Aarry 函数可方便地对数组整体赋值,但在程序中如何获得数组的 - 上界、下 界,以保证访问的数组元素在合法的围, 可使用 UBound和 LBound函数来决定数 组访问。在上例中,若要打印 a 数组的各个值,可通过下面程序段实现:For i=Lbound(A) To Ubound(A)Print a(i)Next l6给数组赋值VB6.0 提供了可对数组整体赋值的新功能,方便了数组对数组的赋值操作。但

13、真 正使用不那么方便,有不少限制。数组赋值形式如下: 数组名 2=数组名 1这里的数组名 2,实际上在前面的数组声明时,只能声明为 Varian 的变量,赋 值后的数组 2 的大小、维数、类型同数组名 1;否则,若声明成动态或静态的数 组,例如:Dim 数组名 2() 或 Dim数组名 2 ( 下标) 程序在运行到上述赋值语句时显示 不能给数组赋值 的出错信息。第五章 数5.1 知识要点1数组的概念数组 :存放具有相同性质的一组数据, 也就是数组中的数据必须是同一个类型和 性质。数组元素 :数组中的某一个数据项。数组元素的使用同简单变量的使用。2静态数组的声明静态数组 :在声明时已确定了数组元

14、素个数。声明形式 :Dim数组名( 下界 To上界,下界 To上界 ,)As类型此语句声明了数组名、数组维数、数组大小、数组类型。 注意 下界、上界必须为常数,不能为表达式或变量:省略下界,默认为0,也可用 Option Base 语句重新设置下界的值。3动态数组的声明声明形式 : Dim 数组名 ()ReDim Preserve 数组名 ( 下界 To 上界 , 下界To上界 ,) 注意 此时的上界、下界可以是赋了值的变量或表达式。若有 Preserve 关键字,表示 当改变原有数组最末尾的大小时,使用此关键字可以保持数组中原来的数据。4控件数组即相同类型的控件组成的数组 控件数组的建立 :

15、在设计时的窗体上, 通过对某控件的复制和粘贴操作: 在程序 运行时通过 Load 方法实现。控件数组元素 :由控件的 Index 属性值表示数组的 F 标。5数组的操作应掌握的基本操作有:数组初始化、数组输入、数组输出、求数组中的最大 ( 最 小)元素及下标、求和、平均值、排序和查找等。5.2 常见错误和难点分析1Dim数组声明有时用户为了程序的通用性,声明数组的上界用变量来表示,如下程序段:n=InputBox( 输入数组的上界 )Dim a(1 To n) As Integer程序运行时将在 Dim语句处显示 要求常数表达式 的出错信息。即 Dim语句中声 明的数组上,下界必须是常数,不能

16、是变量。解决程序通用的问题, 一是将数组声明的很大, 这样浪费一些存储空间; 二是利 用动态数组,将上例改变如下:Dim a() As Integern=InputBox ( 输入数组的上界 )ReDim a(1 To n)As Integer2数组下标越界引用了不存在的数组元素, 即下标比数组声明时的下标围大或小即为越界。 例如, 要形成有如下 30 项的斐波那契数列:1,1,2,3,5,8,13,21,34,317811 ,514229,832040正确的程序段如下:Dim a(1 To 30) As Long, i%若将 For i=3 To 30 改为 For i=1 To 30 ,程

17、序运行时会显示 下标越界 的出错 信息,因为开始循环时 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 的矩阵:Dim a(3,5) As LongFor i=1 To 3For j=1 To 5a(i)=i*jPrint a(i);Next jPrintNex

18、t i程序运行到 a(i)=i*j 语句时出现 维数错误 的信息,因为在 Dim声明时是二维 数组,引用时的一个下标。4Aarry 函数使用问题Aarry 函数可方便地对数组整体赋值, 但此时只能声明 Variant 的变量或仅由括 号括起的动态数组。赋值后的数组大小由赋值的个数决定。例如,要将 1,2,3,4,5,6,7 这些值赋值给数组 a,下表列出了三种错误及 相应正确的赋值方法。Aarry 函数表示方法错误的 Aarry 函数赋值 ,改正的 Aarry 函数赋值Dim a(1 To8) a=Array(1,2,3,4,5,6,7,8)Dim a( ) a=Array(1,2,3,4,5,6,7)Dim a AsInteger 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函数来决定数 组访问。在上

温馨提示

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

评论

0/150

提交评论