我来回答吧:
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
然后自己看下各变量在每次循环中的具体数值时多少就知道了
我来更正一下一楼的问题1:
如果在代码开头未用Option Explicit强制要求声明,变量在使用前是可以不声明的,所以a可以直接使用。如果是这样:
Option Explicit
Private Sub Command1_Click()
a=""
......
那么程序就会报错了,不但a,下面的n、s、i都要显式声明才能使用。
尽量使用Option Explicit的方式,可以减少程序中因为变量名冲突或未定义而引起的错误。
没看完,补充一下,vb可以不定义变量,直接用,如果用的时候为数字则=0,,字符串则=“”
这么复杂啊,功能也就是这样啊,有写这么多的代码和循环做的必要吗?