• 沒有找到結果。

效果描述

设计程序“打印乘法口诀”。当用户单击窗体时,在窗体上打印九九乘法口诀。运行结果 如图 2-21 所示。

图 2-21 任务 10 运行结果

设计分析

这个九九乘法口诀是一个直角三角形图形。如果用前面的单重循环,可以很容易地输出 一行或一列,但很难同时输出行列,因此本程序中我们采用双重循环结构实现。

计算“条件”值

执行循环体 Yes 条件为真吗?

No

完成步骤

窗体 Form1 的单击事件过程代码:

Private Sub Form_ Click () Dim i, j As Single For i = 1 To 9 For j = 1 To i

Print j ; " * " ; i ; " = " ; i * j ; Next j

Print Next i

End Sub

程序中外层循环控制变量 i 从 1 变化到 9,控制循环执行 9 次,内层循环控制变量 j 的初 值为 1,但终值是随外层循环控制变量 i 的变化而变化的。比如当 i 值为 5 时,j 要从 1 变化 到 5,j 每变化一次,内层循环的循环体“Print j…i*j;”语句就要执行 1 次。即输出从“1*5=5”

变化到“5*5=25”。当内层循环体执行完 5 次后,应输出一个换行,即在内层循环语句之后应 有一个“print”语句。然后外层循环控制变量 i 再增加一个增量 1,i 变为 6,之后内层循环的 j 又要从 1 变化到 6 继续新一轮的循环。因此在程序中对于内层循环的循环体“Print j…i*j;”

语句总计要执行 1+2+3+…+9=45 次。

知识链接

一、多重循环

本程序的第一个 For…Next 循环语句中,又包含了两个 For…Next 循环语句,这种在循环 语句的循环体中又包含有另一个循环的循环结构,称为多重循环,也称为循环嵌套。

循环嵌套层数没有具体限制,但在循环嵌套中需注意以下问题:

(1)内层与外层循环不得交叉。

如:

For i=1 to 5 For i=1 to 5

For j=1 to 10 For j=1 to 10

Next i Next j

Next j Next i

错误 正确

(2)内层与外层循环的循环变量名不得相同。

二、应用程序错误与调试

应用程序在运行过程中出现错误是不可避免的,有时甚至防不胜防。虽然经过测试可以 消除许多潜在的错误,但实际上不可能消除所有的错误。例如除零错、数据溢出、文件被误删 除等。

在应用程序中查找并修改错误的过程叫程序调试,程序调试是为了发现错误而执行程序。

VB 提供了几种调试工具,不但对查找错误特别有效,而且对于意外事故的防范也可以在程序

中设计错误处理程序实现。

1.常见错误分析

VB 程序错误可分为三种:编译错误、逻辑错误和运行时错误。

(1)编译错误

编译错误是由于违反 VB 的语法而产生的错误,也叫语法错误,如关键字拼写错误、分隔 符号遗漏、块控制结构不完整或不匹配等。编译错误可以通过程序编译发现,是比较容易查找 的错误。

避免编译错误可单击“工具”菜单下的“选项”命令,显示如图 2-22 所示的对话框,选 中“编辑器”选项卡中的“自动语法检测”。在输入程序代码时,每输入一行代码(按回车或 移动光标到其他行)后,VB 都会自动对该行进行语法检查,系统自动检测出错误,将错误加 亮,并显示出错对话框,如图 2-23 所示。

图 2-22 “自动语法检测”选项设置

图 2-23 代码编辑过程中发现的语法错误

另外,如果选择“文件”菜单的“生成…EXE”命令,或者选择“运行”菜单的“启动”

或“全编译执行”命令,都会启动 VB 的编译程序。编译程序可以检测所有语法错误,如图 2-24 所示的出错信息,单击“确定”按钮后,程序将暂停执行,进入调试状态。

图 2-24 程序编译过程中发现的语法错误

(2)逻辑错误

逻辑错误是程序运行后,由于所编写的代码不能实现预期的功能而产生的错误。程序中 的语句是合法的,编译程序不能发现错误,程序也能被执行,但执行结果却不正确。逻辑错误 通常难于查找,需要对程序进行深层次分析,或使用专门的程序测试工具。

(3)运行时错误

运行时错误是指程序在运行时由不可预料的原因导致的错误,如输入非法数据、要读写 的文件被意外删除等。运行时错误可能在程序交付使用很久以后才被发现。VB 能够捕获大多 数运行时错误,产生错误后,VB 将中止应用程序,并显示出错信息,如图 2-25 所示。若单击

“调试”,将切换到程序调试状态;若单击“结束”,将退出程序。

图 2-25 运行时错误

为避免运行时错误影响程序运行,可以设置错误陷阱,即在程序中设置错误处理程序。

2.程序调试

程序调试可利用“调试”工具栏(如图 2-26 所示)、菜单或错误处理程序进行。

图 2-26 “调试”工具栏

中断 逐语句 跳出 立即窗口 调用堆栈

快速监视 本地窗口

逐过程 结束

启动

切换断点 监视窗口

(1)“调试”工具栏 说明:

1)切换断点。设置或取消断点。断点是一个可执行的语句行,程序执行到断点处将中断 运行进入调试状态。

2)逐语句。每次执行程序代码的一行,可以跟踪到过程中。

3)逐过程。每次执行程序代码的一行,但不跟踪到过程中。

4)跳出。执行当前过程的其他部分,在调用其他过程处中断执行。

5)本地窗口。显示局部变量的当前值。

6)立即窗口。当程序处于中断模式时,允许执行代码或查询值。

7)监视窗口。显示选定表达式的值。

8)快速监视。当程序处于中断模式时,列出表达式的当前值。

9)调用堆栈。当程序处于中断模式时,呈现一个对话框来显示所有已被调用但尚未完成 运行的过程。

(2)调试菜单

VB 的菜单中包含全部测试工具。在“调试”菜单中包括“逐语句”、“逐过程”、“运行到 光标处”、“添加监视”、“切换断点”、“清除所有断点”等;在“视图”菜单中包括“本地窗口”、

“立即窗口”、“调用堆栈”等。

(3)调试工具的使用

下面介绍几种常用调试工具的使用方法:

1)断点调试。一条可执行语句,如果被设置成断点,则程序运行时执行到该语句会暂停,

此时将鼠标指针移动到程序中的各个变量上略作停留,系统将以浮动标签的方式显示该变量的 值;单击工具栏上的“继续运行”按钮,程序可继续执行。

断点的设置方法:①在代码窗口中单击该语句左侧的阴影边框,边框上将出现一个棕色 的圆点,同时语句的底色被置成棕色,如图 2-27 所示;②在代码窗口中选定一条语句,打开

“调试”菜单,选择“切换断点”命令,该语句的左侧将出现棕色圆点。

图 2-27 设置断点

要取消断点,则可以在棕色圆点上再次单击鼠标,棕色圆点即消失。

2)逐语句执行。打开“调试”菜单,选择“逐语句”命令(或按 F8 键),系统执行程序 的第一条语句后暂停,该语句的底色被置成黄色,此时可将鼠标停留在各个变量上,通过浮动 标签观察变量的值;再次选择“调试”菜单中的“逐语句”命令,或者按 F8 键,系统将执行 程序中的第二条可执行语句,然后暂停,通过反复按 F8 键可逐句完成程序的运行。

要终止逐语句执行方式,可以打开“调试”菜单,选择“跳出”命令,系统即恢复正常 运行方式将程序执行完毕;或者单击工具栏上的“结束”按钮,终止程序的运行。

3)使用立即窗口。在设置了断点或采取逐行执行的模式下,可以在立即窗口中观察变量 或表达式的值,方法是:首先打开“视图”菜单,选择“立即窗口”命令,打开立即窗口;当 程序运行处于暂停状态时,在立即窗口中输入“Print <变量名>”或“? <变量名>”,即可在立 即窗口中显示某变量的值。

在不中断程序运行的情况下,使用“Debug.Print<变量名>”,也可以在立即窗口中显示指 定变量的值。Debug 是 VB 提供的标准系统对象,该对象的 Print 方法可以将变量、表达式的 值直接输出到立即窗口中。例如,可以在上述程序的“Next J”后插入一条语句:

Debug.Print F

程序执行完毕,可见立即窗口中有一系列的阶乘值,据此可判断阶乘的计算是否正确。

4)逐过程。打开“调试”菜单,选择“逐过程”命令(或者按下 Shift+F8 组合键),将 以逐过程方式运行程序。

逐语句方式是针对程序中所有可执行语句,一次只执行一条语句,然后暂停;在逐过程 方式下,如果当前语句是普通语句,则与逐语句方式相同,如果当前语句是过程调用语句,被 调用过程一次执行完毕,不论该过程有多长,然后返回当前过程的下一条语句。

终止逐过程运行方式与终止逐语句运行方式的操作相同。

相關文件