
VB For next 循环嵌套
求1~50的所有素数素数是指除了1和该数本身不能被任何数整除的数,判断一个自然数是否为素数,只要依次用2~Sqr(n)作为除数去除n。若n不能被其中任何一个数整除,则n为...
求1~50的所有素数
素数是指除了1和该数本身不能被任何数整除的数,判断一个自然数是否为素数,只要依次用2~Sqr(n)作为除数去除n。若n不能被其中任何一个数整除,则n为素数。
以下为相关程序:
01 Private Sub Command1_Click()
02 a=””
03 For n=1 To 50 Step 2
04 s=0
05 For i=2 To Int(Sqr(n))
06 If n Mod i=0 Then
07 s=1
08 Exit For
09 End If
10 Next
11 If s=0 Then a=a&Str(n)&vbCrLf
12 Next
13 Print a
14 End Sub
问题:
1、 02行-a=””,事先没有定义,也没有用“类型声明字符”,怎么可以直接用于程序?
2、 For循环,当n=1时,s=0;子循环“For i=2 To Int(Sqr(n))”的循环变量i取值范围为i=2 To 1;当i=2时,n Mod i =1 Mod 2 =0,则s=1,然后执行Exit For 跳出子循环。
当n=3时,s=0;子循环“For i=2 To Int(Sqr(n))”的循环变量i取值范围为i=2 To 1;当i=2时,n Mod i =3 Mod 2 =1,然后执行Exit For 跳出子循环。
当n=5时,s=0;子循环“For i=2 To Int(Sqr(n))”的循环变量i取值范围为i=2 To 2;当i=2时,5 Mod i =5 Mod 2 =1,然后执行Exit For 跳出子循环。
当n=7时,s=0;子循环“For i=2 To Int(Sqr(n))”的循环变量i取值范围为i=2 To 2;当i=2时,n Mod i =7 Mod 2 =1,然后执行Exit For 跳出子循环。
当n=9时,s=0;子循环“For i=2 To Int(Sqr(n))”的循环变量i取值范围为i=2 To 3;当i=2时,n Mod i =9 Mod 2 =1,然后执行Exit For 跳出子循环。
…………………………………………
…………………………………………
也就是说,只要Exit For语句放在IF 语句中间,当i=2时,n Mod i值=1时,则有s=1,即程序往后执行Exit For语句,子循环“For i=2 To Int(Sqr(n))”没有机会进行i=Int(Sqr(n))的取值,而只有当s=0时,才能算出素数。如果不要 Exit For语句,是不是也能达到目的?
以上是我的理解,应该是存在错误的,还请各位高手斧正!
3、我对其中06~09行的循环体If语句有疑问,为什么不写成:
If n Mod i=0 Then s=1
Exit For
而非要写成块形式而多用一句End If?
以上是我对此程序的种种疑问,请各位大侠予以解答!非常感谢! 展开
素数是指除了1和该数本身不能被任何数整除的数,判断一个自然数是否为素数,只要依次用2~Sqr(n)作为除数去除n。若n不能被其中任何一个数整除,则n为素数。
以下为相关程序:
01 Private Sub Command1_Click()
02 a=””
03 For n=1 To 50 Step 2
04 s=0
05 For i=2 To Int(Sqr(n))
06 If n Mod i=0 Then
07 s=1
08 Exit For
09 End If
10 Next
11 If s=0 Then a=a&Str(n)&vbCrLf
12 Next
13 Print a
14 End Sub
问题:
1、 02行-a=””,事先没有定义,也没有用“类型声明字符”,怎么可以直接用于程序?
2、 For循环,当n=1时,s=0;子循环“For i=2 To Int(Sqr(n))”的循环变量i取值范围为i=2 To 1;当i=2时,n Mod i =1 Mod 2 =0,则s=1,然后执行Exit For 跳出子循环。
当n=3时,s=0;子循环“For i=2 To Int(Sqr(n))”的循环变量i取值范围为i=2 To 1;当i=2时,n Mod i =3 Mod 2 =1,然后执行Exit For 跳出子循环。
当n=5时,s=0;子循环“For i=2 To Int(Sqr(n))”的循环变量i取值范围为i=2 To 2;当i=2时,5 Mod i =5 Mod 2 =1,然后执行Exit For 跳出子循环。
当n=7时,s=0;子循环“For i=2 To Int(Sqr(n))”的循环变量i取值范围为i=2 To 2;当i=2时,n Mod i =7 Mod 2 =1,然后执行Exit For 跳出子循环。
当n=9时,s=0;子循环“For i=2 To Int(Sqr(n))”的循环变量i取值范围为i=2 To 3;当i=2时,n Mod i =9 Mod 2 =1,然后执行Exit For 跳出子循环。
…………………………………………
…………………………………………
也就是说,只要Exit For语句放在IF 语句中间,当i=2时,n Mod i值=1时,则有s=1,即程序往后执行Exit For语句,子循环“For i=2 To Int(Sqr(n))”没有机会进行i=Int(Sqr(n))的取值,而只有当s=0时,才能算出素数。如果不要 Exit For语句,是不是也能达到目的?
以上是我的理解,应该是存在错误的,还请各位高手斧正!
3、我对其中06~09行的循环体If语句有疑问,为什么不写成:
If n Mod i=0 Then s=1
Exit For
而非要写成块形式而多用一句End If?
以上是我对此程序的种种疑问,请各位大侠予以解答!非常感谢! 展开
展开全部
我来回答吧:
1、VB默认使用变量之前需要先声明(或定义)
那么,你需要在
a=""
之前添加代码:
dim a as string
即可;
2、这个问题其实没什么好解释的,你判断错了,多积累经验就行了。
判断一个数是不是素数,只需要验证它不能整除全部的从2到int(sqrt(n))的数即可,这一点你没有错。
在程序中,下面这一段不对的。
“ 当n=9时,s=0;子循环“For i=2 To Int(Sqr(n))”的循环变量i取值范围为i=2 To 3;当i=2时,n Mod i =9 Mod 2 =1,然后执行Exit For 跳出子循环。
”
n Mod i = 9 Mod 2 =1
不满足if语句的条件 if(n Mod i)= 0
就直接跳过if语句体,执行
End if
是不会执行到Exit for的。这个步骤没有问题。
再来回答:如果不要 Exit For语句,是不是也能达到目的?
答案:可以的,但是这样慢。因为一旦我们判断出了一个数能够被其他数整除,比如64,它需要判断从 2-8的所有数都不能被整除才行。
一旦我判断到4,64 mod 4 =0 ,我就知道它不是素数了。
我就不需要再计算下去,所有exit for,就节省了运算时间。这在大两数据的计算中很明显的。
3、这两个表达都是符合语法的,但是作用不同。
if...then...这种结构,如果if语句成立,只会执行then后面这一行的命令,比如这个:
If n Mod i=0 Then s=1
Exit For
这种写法,相当于
06 If n Mod i=0 Then
07 s=1
08 End If
09 Exit For
而if
then
end if
如果if语句成立,就会处理then到end if之间的所有语句。
解释完毕。
——————————
汗,用惯VB.NET了。
VB确实是默认不强制声明,但最好用Option Explicit强制要求声明
1、VB默认使用变量之前需要先声明(或定义)
那么,你需要在
a=""
之前添加代码:
dim a as string
即可;
2、这个问题其实没什么好解释的,你判断错了,多积累经验就行了。
判断一个数是不是素数,只需要验证它不能整除全部的从2到int(sqrt(n))的数即可,这一点你没有错。
在程序中,下面这一段不对的。
“ 当n=9时,s=0;子循环“For i=2 To Int(Sqr(n))”的循环变量i取值范围为i=2 To 3;当i=2时,n Mod i =9 Mod 2 =1,然后执行Exit For 跳出子循环。
”
n Mod i = 9 Mod 2 =1
不满足if语句的条件 if(n Mod i)= 0
就直接跳过if语句体,执行
End if
是不会执行到Exit for的。这个步骤没有问题。
再来回答:如果不要 Exit For语句,是不是也能达到目的?
答案:可以的,但是这样慢。因为一旦我们判断出了一个数能够被其他数整除,比如64,它需要判断从 2-8的所有数都不能被整除才行。
一旦我判断到4,64 mod 4 =0 ,我就知道它不是素数了。
我就不需要再计算下去,所有exit for,就节省了运算时间。这在大两数据的计算中很明显的。
3、这两个表达都是符合语法的,但是作用不同。
if...then...这种结构,如果if语句成立,只会执行then后面这一行的命令,比如这个:
If n Mod i=0 Then s=1
Exit For
这种写法,相当于
06 If n Mod i=0 Then
07 s=1
08 End If
09 Exit For
而if
then
end if
如果if语句成立,就会处理then到end if之间的所有语句。
解释完毕。
——————————
汗,用惯VB.NET了。
VB确实是默认不强制声明,但最好用Option Explicit强制要求声明
展开全部
是一共经历了6次循环,循环体内你改变终值和步长不会对循环次数产生影响,但改变循环变量会产生影响,你将程序改成:
private
sub
form_click()
dim
m
as
integer,
n
as
integer,
k
as
integer
n
=
-3:
k
=
-3
for
m
=
8
to
k
step
n
m
=
m
+
1
n
=
n
-
m
k
=
k
-
1
print
m
print
k
print
n
next
m
end
sub
然后自己看下各变量在每次循环中的具体数值时多少就知道了
private
sub
form_click()
dim
m
as
integer,
n
as
integer,
k
as
integer
n
=
-3:
k
=
-3
for
m
=
8
to
k
step
n
m
=
m
+
1
n
=
n
-
m
k
=
k
-
1
m
k
n
next
m
end
sub
然后自己看下各变量在每次循环中的具体数值时多少就知道了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我来更正一下一楼的问题1:
如果在代码开头未用Option Explicit强制要求声明,变量在使用前是可以不声明的,所以a可以直接使用。如果是这样:
Option Explicit
Private Sub Command1_Click()
a=""
......
那么程序就会报错了,不但a,下面的n、s、i都要显式声明才能使用。
尽量使用Option Explicit的方式,可以减少程序中因为变量名冲突或未定义而引起的错误。
如果在代码开头未用Option Explicit强制要求声明,变量在使用前是可以不声明的,所以a可以直接使用。如果是这样:
Option Explicit
Private Sub Command1_Click()
a=""
......
那么程序就会报错了,不但a,下面的n、s、i都要显式声明才能使用。
尽量使用Option Explicit的方式,可以减少程序中因为变量名冲突或未定义而引起的错误。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没看完,补充一下,vb可以不定义变量,直接用,如果用的时候为数字则=0,,字符串则=“”
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这么复杂啊,功能也就是这样啊,有写这么多的代码和循环做的必要吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |