在考生文件夹下有一个工程文件sjt5.vbp,其功能是:
单击“读数据”按钮,则把考生文件夹下in5.dat文件中的100个正整数读入数组a中,同时显示在Text1文本框中;
单击“素数”按钮,则将数组a中所有素数(只能被1和自身整除的数称为素数)存入数组b中,并将数组b中的元素显示在文本框Text2中。
在给出的窗体文件中已经有了全部控件(如图5所示),但程序不完整。
要求:完善程序使其实现上述功能。
注意:考生不得修改窗体文件中已经存在的控件和程序,在结束程序运行之前,必须先执行“素数”操作,然后再用窗体右上角的关闭按钮结束程序,否则无成绩。最后程序按原文件名存盘。
[题目提供的源程序]
Option Base 1
Dim a(100) As Integer, num As Integer
Private Sub Command1_Click()
Dim k As Integer
Open App.Path & "\in5.dat" For Input As #1
For k=1 To 100
Input #1, a(k)
Text1=Text1+Str(a(k))+Space(2)
Next k
Close #1
End Sub
Private Sub Command2_Click()
Dim b(100) As Integer
num=0
If Len(Text1.Text)=0 Then
MsgBox "请先执行"读数据"功能!"
Else
’考生应编写的程序(功能:生成存放素数的数组b)
’注意:请务必将数组b的元素个数存入变量num中
’以下程序段将b数组的内容显示在Text2中
For i=1 To num
Text2.Text=Text2.Text+Str(b(i))+Space(2)
Next i
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
Open App.Path & "\out5.dat" For Output As #1
Print #1, Text2.Text
Close #1
End Sub
参考答案:
[操作步骤]
第1步:打开工程文件sjt5.vbp。
第2步:编写程序。参考程序如下:
For k=1 To 100
flag=True ’假定a(k)是素数,用flag为真来表示
For i=2 To Sqr(a(k))
If a(k)Mod i=0 Then
flag=False ’假定不成立,修改flag的值为False
Exit For ’得出结论后,无须继续检查
End If
Next i
If flag=True Then ’a(k)是素数,计数并将a(k)存入数组b中
num=num+1
b(num)=a(k)
End If
Next k
第3步:调试、运行并保存程序。
解析:
程序在Command1_Click事件过程中将100个整数读入到数组a中。在Command2_Click事件过程中,首先检查文本框中是否有内容,在有内容的情况下再判断该数是否为素数。判断一个数是否为素数算法为:对于数n,用n除以2到之间的全部整数,若都除不尽,则n是素数,否则n不是素数。要表达“都除不尽”这一条件是困难的,可采用以下方法解决:先假定数n是素数,再用2到之间的整数去与n相除,如果其中有一个数能整除n则说明假定不成立,n不是素数。