问答题 下面出现的“考生文件夹”均为c:/wexam/25160001。
在考生文件夹中有工程文件sjt5.vbp及其窗体文件sjt5.frm,该程序是不完整的,请在有?号的地方填入正确内容,然后删除?及所有注释符(即'号)但不能修改其他部分。存盘时不得改变文件名和文件夹。
本题描述如下:
在名称为Form1的窗体上有一个文本框,名称为Text1,MultiLine属性为True,ScrollBars属性为2,两个命令按钮,名称分别为Cmd1和Cmd2,标题分别为“读入数据”和“排序显示保存”,如图5-6所示。程序运行后,如果单击“读入数据”按钮,则读入in.txt文件中的100个整数,放入一个数组中(数组下界为1):如果单击“排序显示保存”按钮,则对这100个整数按从大到小进行排序,把排序后的全部数据在文本框Text1中显示出来,然后存入考生文件夹的out.txt文件中。 (考生文件夹下的标准模块model.bas中的putdata过程可以把指定个数的数组元素存入out.txt文件。)
注意:文件必须存放在考生文件夹下,窗体文件名为sjt5.frm,工程文件名sjt5.vbp,排序结果存入out.txt文件中,否则没有成绩。
【正确答案】[解析]在窗体上建立好控件后,先设置控件属性,再编写事件过程。
文本框显示的内容由Text属性设置:按钮的标题由Caption属性设置,单击命令按钮触发Click事件:在本题中涉及到文件的操作,读入顺序文件以顺序的方式打开,用Input#语句读取数据,另外需要注意的是对文件操作完后,一定要关闭文件。排序的方法有多种,如冒泡排序、选择排序等,本题用的是选择排序法。
选择法排序的思想是:每一次循环从数组的n-i+1(I=1,2,…,n-1)个元素中选择一个值最小的元素与你n-i+1个元素的前面那个元素交换位置,即与整个数组的第i个位置的元素交换位置。如此下去,直到i=n-1时,排序结束。解题步骤:
第一步:建立界面并设置控件的属性。程序中用到的控件及其属性见表5-5。
[*]
第二步:编写程序代码。
程序提供的代码。
model.bas代码:
Sub putdata(a() As Integer,n As Integer)
Dim sFile As String
sFile ="/out.txt"
Open App.Path & sFite For Output As #1
For i= 1 To n
Print #1, a(i) ;
Next
Close #1
End Sub
窗体代码:
Option Explicit
Dim i(1 To 100) As Integer
Private Sub Cmd1_ Click()
Dim j As Integer
Open App.Path&"/in.txt"For Input As #1
' For j = ? To 100
Input #1, i(j)
Text1.Text = Text1.Text & i(j) & Space(5)
Next
Close #1
End Sub
Private Sub Cmd2_Click()
Dim j As Integer
Dim k As Integer
Dim temp As Integer
Dim flag As Boolean
For j = 1 To 100
'flag = ?
For k = 1 To 100 - j
If i(k) > i(k + 1) Then
temp = i (k)
i(k) = i(k + 1)
i(k + 1) = temp
flag = True
End If
' ?
If Not flag Then
Exit For
End If
Next
Text1.Text = ""
For j = 1 To 100
Text1.Text = Text1.Text & i(j) & Space(5)
Next
putdata i, 100
End Sub
参考代码:
Option Explicit
Dim i(1 To 100) As Integer
Private Sub Cmd1_Click()
Dim j As Integer
Open App. Path& "/in.txt" For Input As #1
For j = 1 To 100
Input #1, i(j)
Text1.Text = Text1.Text & i(j) & Space(5)
Next
Close #1
End Sub
Private Sub Cmd2_Click()
Dim j As Integer
Dim k As Integer
Dim temp As Integer
Dim flag As Boolean
For j = 1 To 100
flag = False
For k = 1 To 100 - j
If i(k) < i(k + 1) Then
temp = i (k)
i(k) = i(k + 1)
i(k + 1) = temp
flag = True
End If
Next
If Not flag Then
Exit For
End If
Next
Text1.Text = ""
For j = 1 To 100
Text1.Text = Text1.Text & i(j) & Space(5)
Next
putdata i, 100
End Sub
第三步:调试并运行程序。
第四步:按题目要求存盘。
【答案解析】