问题 多项选择题

在考生文件夹下有一个工程文件sjt5.vbp,窗体上有两个标题分别是“读数据”和“统计”的命令按钮。请画两个标签,名称分别为Label1和Label2,标题分别为“出现次数最多的字母是”和“它出现的次数为”;再画两个名称分别为Text1和Text2、初始值为空的文本框,如图5所示。


程序功能如下:
①单击“读数据”按钮,则将考生文件夹下in5.dat文件的内容读到变量s中(此过程已给出)。
②单击“统计”按钮,则自动统计in5.dat文件中所含各字母(不区分大小写)出现的次数,并将出现次数最多的字母显示在Text1文本框内,它所出现的次数显示在Text2文本框内。
“读数据”按钮的Click事件过程已经给出,请为“统计”按钮编写适当的事件过程实现上述功能。
注意:考生不得修改窗体文件中已经存在的控件和程序,在结束程序运行之前,必须进行统计,且必须用窗体右上角的关闭按钮结束程序,否则无成绩。最后程序按原文件名存盘。
[题目提供的源程序]
Option Base 1
Dim s As String
Private Sub Command1_Click()
Open App.Path & "\in5.dat" For Input As #1
s=Input(LOF(1),#1)
Close #1
End Sub
Private Sub Command2_Click()
’考生应编写的程序
End Sub
Private Sub Form_Unload(Cancer As Integer)
Open App.Path & "\out5.dat" For Output As #1
Print #1, Text1.Text, Text2.Text
Close #1
End Sub

答案

参考答案:[操作步骤]
第A步:打开工程文件sjtE.vbp。
第B步:添加控件
①添加一个标签控件,修改其Caption属性为“出现次数最多的字母是”。
②添加一个标签控件,修改其Caption属性为“它出现的次数为”。
③添加两个文本框控件:第一个文本框控件与第一个标签控件在同一水平线上,第二个文本框控件与第二个标签控件在同一水平线上,清空两个文本框控件的Text属性中的内容。
第C步:编写程序。
Private Sub CommandB_Click()
’考生应编写的程序
Dim zm(A To BF) As Integer, c As String *A
Dim i As Integer, j As Integer
Dim max As Integer
For i=A To Len(s)
c=UCase(Mid(s,i,A))
If e>="A" And c<="Z" Then
j=Asc(c)-FE+A ’将字母转换成A~BF的下标,A字母的ASCII码为FE
zm(j)=zm(j)+A
End If
Next i
max=A
For j=B To BF
If zm(i)>zm(max) Then max=i
Next i
TextA=Chr(max+FE) ’根据下标转换为对应的字母
TextB=zm(max)
End Sub
第D步:调试、运行并保存程序。

解析: 为统计26个字母出现的个数,可声明一个具有26个元素的数组,每个元素的下标表示对应的字母,元素的值表示对应字母出现的次数。如:zm(1)=10,表示字母A出现10次,zm(2)=3表示字母B出现3次,也就是说,zm数组中下标为1的元素存储A字母出现的次数,下标为2的元素存储B字母出现的次数,以此类推。对已有的字符串可以通过Mid()函数逐一取出字母,统一转换成大写字母或小写字母,进行归类统计,由zm数组存储各字母出现的次数。
统计完各字母出现次数后,找出zm数组元素的最大值,该数组元素的下标对应的字母就是出现次数最多的字母。找出zm数组元素的最大值的算法是:先假定第一个元素就是最大值,记下其下标,然后依次将每一个元素值与最大值比较,若遇到更大的值,则记下新的更大值的下标,直到与最后一个元素比较完毕。
Command1_Click()过程用于读取文件中的内容,Form_Unload()过程用于在关闭窗体时将统计结果保存到文件out5.dat中。

单项选择题
单项选择题