问答题
考生文件夹下有一个工程文件sit5.vbp,窗体上有两个文本框,名称分别为Text1、Text2,都可以多行显示。还有三个命令按钮,名称分别为C1、C2、C3,标题分别为“取数”、“排序”、“存盘”。“取数”按钮的功能是将考生文件夹下的in5.dat文件中的50个整数读到数组中,并在Text1中显示出来;“排序”按钮的功能是对这50个数按升序排序,并显示在Text2中;“存盘”按钮的功能是把排好序的50个数存到考生日录下的out5.dat文件中,如图所示。在窗体中已经给出了全部控件和部分程序代码,要求阅读程序并去掉程序中的注释符,把程序中的?改为正确的内容,并编写“排序”按钮的Click事件过程,使其实现上述功能,但不能修改程序中的其他部分,也不能修改控件的属性。最后将修改后的文件按原文件名存盘。
【正确答案】[操作步骤]
步骤1:打开本题工程文件。
步骤2:打开代码编辑窗口,去掉程序中的注释符“'”,将问号改为正确的内容,并编写代码。
参考答案(阴影部分是需考生填入的内容)
Dim a(50)As Integer
Private Sub C1_Click()
Dim k As Integer, ch As String
Open"in5.dat" For Input As#1
ch=""
For k=1 To 50
Input#1, a(k) '将取出的数据存入教组a中
ch=ch+Str(a(k))+"" '将数据存入ch
Next k
Close=#1
Text1.Text=ch '在Text1文本框中显示文件内容
End Sub
Private Sub C2_Click()
End Sub
Private Sub C3_Click()
Open"out5. dat" For Output As # 1
Print#1, Text2.Text
Close=#1
End Sub
需编写的“排序”按钮的代码
Private Sub C2_Click()
Dim t As Integer
Dim i As Integer
Dim j As Integer
Dim ch As String
ch=""
For i=50 To 2 Step-1'使用冒泡算法从小到大排序
For j=1 To 49
If a(j)>a(j+i)Then'两两比较
t=a(j+i)
a(j+1)=a(j)
a(j)=t
End If
Next j
Next i
For j=1 To 50'将排序后的数组重新赋给ch
ch=ch+Str(a(j))+""
Next j
Text2.Text=ch
End Sub
步骤3:调试并运行程序,关闭程序后按题目要求存盘。
【答案解析】[考点] 本题考点有:Sir()函数、“冒泡法”排序、For循环语句、If判断语句以及文件操作。
Str函数用于数值转化为字符串,语法为:Str(number)。
在循环语句中Step表示步长,可以为正数,表示下一个变量加一个数,也可以为负数,则相反,在默认情况下,步长为1,就不需要使用Step特意标识。
“冒泡法”是一种重要的数据排序算法,它的核心思路是按顺序让一个数列中的每一个数都与它之后的所有的数逐一进行比较,如果该数大于其后面的数,则把这两个位置的数进行交换。通过这样的循环,最终按照从小到大的顺序排列出该数列。从程序提供的代码中呵以看出,整型数组a的使用范围是本窗体中的所有事件过程,用来存放从文件中读取的数据。在排序中,使用双重循环,外循环每循环一次,确定内循环循环的次数,内循环就是把本次循环中最大的数,放在数组的最后面,这样就可以实现对这50个数的升序排序。
注意冒泡排序的用法,理解位置交换的含义和方法,在交换时要有一个中间变量来起到传递的作用,否则会使其中一个值丢失而产生错误。