
求真相帝。。一道素数VB题
单击“读数据”将1oo个正整数读入数组a中,单击"素数"将a中所有素数存入b中,。。答案如下,求解释OptionBase1Dima(100)AsInteger,numAs...
单击“读数据”将1oo个正整数读入数组a中,单击"素数"将a 中所有素数存入b中,。。答案如下,求解释
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 中
For k = 1 To 100
flag = True
i = 2
Do While i <= Int(a(k) / 2) And flag
If Int(a(k) / i) = a(k) / i Then
flag = False
Else
i = i + 1
End If
Loop
If flag = True Then
num = num + 1
b(num) = a(k)
End If
Next k
'以下程序段将 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
求详解。答案中flag是什么作用,为什么do while 后还要and flag。
另外在求素数中Do While i <= Int(Sqr(a(k))) 和Do While i <= Int(a(k)/2)的效果一样??? 展开
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 中
For k = 1 To 100
flag = True
i = 2
Do While i <= Int(a(k) / 2) And flag
If Int(a(k) / i) = a(k) / i Then
flag = False
Else
i = i + 1
End If
Loop
If flag = True Then
num = num + 1
b(num) = a(k)
End If
Next k
'以下程序段将 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
求详解。答案中flag是什么作用,为什么do while 后还要and flag。
另外在求素数中Do While i <= Int(Sqr(a(k))) 和Do While i <= Int(a(k)/2)的效果一样??? 展开
2个回答
展开全部
flag是判断是否是素数,每次判断一个数字是否是素数之前,先设置它为True
For k = 1 To 100
flag = True' 这里设置成true
i = 2
Do While i <= Int(a(k) / 2) And flag'判断是否有被除尽过
'当a(k)可以被i除尽的时候flag会被置成false结果就是循环退出
If Int(a(k) / i) = a(k) / i Then
flag = False
Else
i = i + 1
End If
Loop
'如果一直都没有除尽,那么flag就一直都是true,所以a(k)就是素数
If flag = True Then
num = num + 1
b(num) = a(k)
End If
Next k
Do While i <= Int(Sqr(a(k))) 和Do While i <= Int(a(k)/2)
效果是一样的,但是计算量不一样,因为sqr(a(k)) 要小于int(a(k)/2),判断约数的时候只要判断到sqr(a(k))就可以了,但是如果多算一些是没有影响的
不明白的百度HI我
For k = 1 To 100
flag = True' 这里设置成true
i = 2
Do While i <= Int(a(k) / 2) And flag'判断是否有被除尽过
'当a(k)可以被i除尽的时候flag会被置成false结果就是循环退出
If Int(a(k) / i) = a(k) / i Then
flag = False
Else
i = i + 1
End If
Loop
'如果一直都没有除尽,那么flag就一直都是true,所以a(k)就是素数
If flag = True Then
num = num + 1
b(num) = a(k)
End If
Next k
Do While i <= Int(Sqr(a(k))) 和Do While i <= Int(a(k)/2)
效果是一样的,但是计算量不一样,因为sqr(a(k)) 要小于int(a(k)/2),判断约数的时候只要判断到sqr(a(k))就可以了,但是如果多算一些是没有影响的
不明白的百度HI我
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询