百年教育职业培训中心 百年教育学习服务平台
题库试卷

国开学习网电大VisualBasic程序设计形考任务二答案

来源: 更新时间:

报名本机构合作学校,赠送复习资料,复习课程,确保录取。并且可以申请学校奖学金500元~1500元不等!答案:微信搜索【渝粤教育】公众号请同学选择课程【第3章】-【实战演练】“实验3冒泡排序

报名本机构合作学校,赠送复习资料,复习课程,确保录取。并且可以申请学校奖学金500元~1500元不等!

答案:微信搜索【渝粤教育】公众号

请同学选择课程【第3章】-【实战演练】“实验3 冒泡排序程序”,在VB集成开发环境中认真完成实验。

实验完成后,将调试好的程序保存在以“姓名+实验名称”命名的文件夹下,并将该文件夹压缩成.rar或者.zip格式进行提交。 本次实验满分15分,提交后需要辅导教师批阅打分。

实验目的

1理解冒泡排序算法。

2掌握循环、分支结构的使用方法。

3掌握断点设置、监视跟踪等调试方法,深入分析该程序的运行过程、值的变化情况。

实验内容

本实验开发一个“冒泡排序”程序,并通过这个程序,巩固一下第2章所学的程序调试方法。这个程序的运行逻辑是:首先用户在Text1中输入一个整数,单击“添加到初始序列中”按钮后将该整数添加到“初始序列”List1中,如此多次后,再单击“排序”按钮,在List2中显示排序结果,我们期望的运行结果如图3.10所示。

3.10 期望的程序运行结果

实验步骤

1界面设计

(1)首先请同学们参照图3.11完成排序程序的界面设计。

3.11 排序程序的界面设计

2编写事件代码

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

Private Sub Command1_Click()

List1.AddItem Text.Text

End Sub

“排序”按钮的Click事件;

Private Sub Command2_Click()

Dim i, j As Integer

'定义数组,以List1的项目个数为数组维数

Dim strList(List1.ListCount) As Integer

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

Dim strTmp As Integer

'将List1中的项目导入到strList数组中

For i = 0 To List1.ListCount

strList(i) = List1.List(i)

Next i

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

For i = 0 To UBound(strList)

For j = i + 1 To UBound(strList)

If strList(i) > strList(j) Then

strTmp = strList(i)

strList(i) = strList(j)

strList(j) = strTmp

End If

Next j

Next i

'将排序结果输出到List2中

For i = 0 To UBound(strList)

List2.AddItem strList(i)

Next i

End Sub

3运行程序并调试程序语法错误

(1)运行程序,在Text1文本框中输入一个整数,比如1,然后单击“添加到初始序列中”按钮,此时会出现如图3.12所示的错误提示。

[i3.12 实时错误

(2)单击“调试”按钮,进入中断模式,VB编译器将自动标识出引发错误的语句行,如图3.13所示窗体。

3.13 自动定位引发错误的语句行

(3)分析错误原因,很容易发现该行语句的正确写法应该是:

List1.AddItem Text1.Text

(4)修改错误后,按F5键继续执行程序,将出现如图3.14所示界面。

3.14 排序程序运行界面

(5)依次输入整数序列21、9、8、6后,将出现如图3.15所示界面。

3.15 输入初始序列后的界面

(6)单击“排序”按钮后,又出现如图3.16所示的运行错误。

3.16 编译错误

(7)单击“确定”按钮后,再次进入中断模式,编译器以加重显示的形式指出了引发错误的位置,如图3.17所示。

3.17 以加重显示的形式定位错误

(8)分析如图3.16所示的错误提示“要求常数表达式”后,发现引用错误的原因是不能用变量作为数组的下标,即下列数组声明语句不符合VB语法约定:

Dim strList(List1.ListCount) As Integer

为此我们作如下选择,即采用动态数组声明的方法。

Dim strList() As Integer

ReDim strList(List1.ListCount) As Integer

(9)选择完成后,按F5键继续执行,又会出现如图3.18所示的错误提示。

3.18 类型不匹配错误提示

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

3.19 类型不匹配错误定位

(11)分析错误原因发现,我们将数组strList()声明为Integer数据类型,而List1.List()表示的是字符型数据,VB无法进行自动类型转换,因此我们只能通过Val函数进行转换:

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

(12)按F5键继续,程序成功运行,出现如图3.20所示界面。这说明语法错误已基本排除了。但是观察运行结果,发现“排序结果”序列中多出了一个数值0。这种结果并不是我们期望的。

3.20 有问题的运行结果

(13)关闭程序,重新运行,仍然出现图3.20的问题,这说明程序中存在逻辑问题,需要进一步调试。

4设置断点,分析逻辑错误

逻辑错误是最难定位的,对于那些逻辑稍微复杂的程序,常常需要花费大量的时间和精力查找分析。一般要用到设置断点、单步执行和立即调试窗等工具或技术。

(1)单击如图3.21所示位置,设置断点。

3.21 设置断点

(2)按F5键运行程序并输入一组整数,比如5、4、3、2。单击“排序”按钮后,程序将进入中断模式,出现如图3.22所示界面。

3.22 程序遇到断点

(3)在VB集成环境的“立即”窗口中,使用“?”打印strList数组的上界和相关的值,如图3.23所示。当然也可以使用Print、Debug.Print命令,它们等效于“?”。

[3.23 在“立即”窗中观察变量的值

(4)仔细分析不难发现,List1.ListCount的最大值是4,说明数字序列中共有4个数,即5、4、3、2。但是List1.List()的下标是从0开始的,下标最大值应该为3,即:

List1.ListCount – 1

为此,我们需要选择strList()数组的上界和循环次数。

'个性数组声明

ReDim strList(List1.ListCount - 1) As Integer

'修改循环次数

For i = 0 To List1.ListCount - 1

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

Next i

(5)修改后的完整代码及运行结果如图3.24、图3.25[并排这两个图]所示。

图3.24 修改后的代码

图3.25 最终的运行结果

5程序的进一步完善

这个程序经过调试能够正常运行了,但还是存在一些不足,比如我们可以在Text1中输入非整数、字符和汉字等。另外,当重新单击“排序”按钮后,数字序列会被重复添加到List2中。上述情况下,应用程序并不会报错,但这与我们的设计要求是不相符的,因此需要进一步完善程序功能,主要有以下两种措施,这些知识将在后续章节介绍。请同学们先提前思考一下。

(1)通过Keypress事件控制Text1控件的输入,使它只能接收数字。

(2)在“排序”按钮的Click事件中加入List2.Clear语句。


报名联系方式

1、报名热线:13662661040(微信),0755-21017149,QQ:2864330758 郭老师

2、报名地址:深圳市龙华新区工业西路68号中顺商务大厦B704


2022年广 东理工学院成人高考招生简章

2022年广 州城建职业学院成人高等教育招生简章

2022年广 东科学技术职业学院招生简章

2022年广 工业大学 成人 高考 招生简章

2022年广 东生态工程职业学院成人高考招生专业

2022年清 远职业技术学院 成人高考 招生专业简介

2022年韶 关学院成人高考招生简章

2022年广 东财经大学成人 高考 高等教育招生简介

2022年广 东理工学院成人高考招生简章

2022年广 东第二师范学院成人高考招生简章

2022年广 东南方职业学院成人高考招生简章

电话咨询