违停罚单上没有金额:VB高手请进

来源:百度文库 编辑:高考问答 时间:2024/05/15 02:36:31
输出2~1000内的素数
Private Sub Form_click()
Dim i As Integer, n As Integer
For i = 2 To 1000
If i = 2 Or 3 Then
Print i
Else
For n = 2 To Sqr(i)
If i Mod n <> 0 Then Exit For
Next n
Print i
Next i
End Sub
这个哪里有问题啊
Private Sub Form_click()
Dim i As Integer, n As Single
For i = 2 To 1000
If i = 2 Or 3 Then
Print i
Else
For n = 2 To Sqr(i)
If i Mod n <> 0 And n < Sqr(i) Then Exit For
Next n
Print i
End If
Next i
End Sub
为什么这样也错了啊

一、方法问题:第一个程序中,可以先直接输出2,然后从3到1000循环,步长是2,这样速度可以提高;n循环设置可以从3到sqr(i),步长2;If i Mod n <> 0 Then Exit For 设置也有问题,应该是i Mod n = 0 退出循环,因为i可以被n整除,i不是质数,同时最好设置一个判断i是不是质数的标志。

二、其他的问题:
1、If i = 2 Or 3 Then 是错误的,应该是If i = 2 Or i = 3 Then
2、过程应该是Form_Load;
3、而且End If也不配套;4、print方法不特别好,可以使用Debug.Print;或者设置一个文本框,其MultiLine设置为True,再将ScrollBars设置为2

三、程序改成这样,你看一下:
Private Sub Form_load()
Dim i As Integer, n As Integer, x As Boolean
Text1 = "2"
For i = 3 To 1000 Step 2
x = True
For n = 3 To Sqr(i) Step 2
If i Mod n = 0 Then x = False: Exit For
Next n
If x = True Then Text1 = Text1 & "," & i
Next i
End Sub

死循环把
endif没有咩,还是我自己错了,汗。。。