
一道VB试题
执行下面程序后,单击命令按钮,则窗体上显示的第一行是:第二行是:第三行是:PrivateSubCommand3_Click()DimsAsString,tAsString...
执行下面程序后,单击命令按钮,则窗体上显示的第一行是 : 第二行是: 第三行是:
Private Sub Command3_Click()
Dim s As String, t As String
Dim k As Integer, m As Integer
s = "BASICY"
k = 1: m = k
For k = 1 To Len(s) Step m + 1
t = t & Chr(Asc(Mid(s, m, 1)) + k)
k = k + 1
If Mid(s, k, 1) = "y" Then Exit For
m = m + k
Print t
Next k
Print m
End Sub
第一行是C我看明白了,但是为什么第二行和第三行分别显示CW和8 呢?
为什么循环到第三次时,就不输出t的值,而直接输出了m的值? 展开
Private Sub Command3_Click()
Dim s As String, t As String
Dim k As Integer, m As Integer
s = "BASICY"
k = 1: m = k
For k = 1 To Len(s) Step m + 1
t = t & Chr(Asc(Mid(s, m, 1)) + k)
k = k + 1
If Mid(s, k, 1) = "y" Then Exit For
m = m + k
Print t
Next k
Print m
End Sub
第一行是C我看明白了,但是为什么第二行和第三行分别显示CW和8 呢?
为什么循环到第三次时,就不输出t的值,而直接输出了m的值? 展开
5个回答
展开全部
一、循环可以简化为:For k = 1 To 6 Step 2,因步长是2,下次执行到For语句k会自动加2
二、第一次循环
t=t & Chr(Asc(Mid('BASICY',m,1))+k) 这里K=1,M=1,t="C"
k=k+1 这里K=1+1=2
m=m+k 这里M=1+2=3
输出t的值C
三、第二次循环,执行到For语句k会自动加2,由2加2变成4
t=t & Chr(Asc(Mid('BASICY',m,1))+k) 这里K=4,M=3,t="C"&"W"="CW"
k=k+1 这里K=4+1=5
m=m+k 这里M=3+5=8
输出t的值CW
三、第三次循环,执行到For语句k会自动加2,由5加2变成7,由于是1 to 6,所以k已经超了,直接跳出循环--输出m的值8
四、If Mid(s,k,1)="y" Then Exit For这句永远无效,因为BASICY里没有小写的y
五、Chr(Asc(Mid('BASICY',m,1))+k),是从BASICY里取第m个字母,然后从这个字母向后数到第k个字母。
第一次从B向后数1下=C,第二次从S向后数4下依次是TUVW得到W
二、第一次循环
t=t & Chr(Asc(Mid('BASICY',m,1))+k) 这里K=1,M=1,t="C"
k=k+1 这里K=1+1=2
m=m+k 这里M=1+2=3
输出t的值C
三、第二次循环,执行到For语句k会自动加2,由2加2变成4
t=t & Chr(Asc(Mid('BASICY',m,1))+k) 这里K=4,M=3,t="C"&"W"="CW"
k=k+1 这里K=4+1=5
m=m+k 这里M=3+5=8
输出t的值CW
三、第三次循环,执行到For语句k会自动加2,由5加2变成7,由于是1 to 6,所以k已经超了,直接跳出循环--输出m的值8
四、If Mid(s,k,1)="y" Then Exit For这句永远无效,因为BASICY里没有小写的y
五、Chr(Asc(Mid('BASICY',m,1))+k),是从BASICY里取第m个字母,然后从这个字母向后数到第k个字母。
第一次从B向后数1下=C,第二次从S向后数4下依次是TUVW得到W
展开全部
首先步长是2,尽管在循环体中m的值变化了,步长也是不变的
第一次执行循环体
t=C
K=2
M=3
next k为4 因为步长是2
第二次执行循环体
t=CW
K=5
M=8
next k为7 大于终值,则不再循环,不知对不对,仅是鄙人想法,希望对你有所帮助
第一次执行循环体
t=C
K=2
M=3
next k为4 因为步长是2
第二次执行循环体
t=CW
K=5
M=8
next k为7 大于终值,则不再循环,不知对不对,仅是鄙人想法,希望对你有所帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为第一行时你的K值已经通过 k = k + 1 变为2了,然后你在next K,不就是4了吗?本来你检索到得字母为s,s+4=w,明白了吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题的关键在于step,第一次上来step=1+1=2,此时已经确定了k每次增2,虽然在以后的循环中m的值不断改变,但是他不会在影响step,所以第二次循环k=k+2,由于在第一次循环中k已经增1,所以此时k=4;综上,第二次Mid(s, m, 1)=S,S的后四个字母就是W,所以t是上次的C加这次的W是CW,此时的m=m+k+1=8;当第二次循环时k=4+1+2=7已经大于 Len(s)(6),所以不再循环,打印出m为8.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第3次循环应该K=7 而len(s)=6 跳出循环了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询