1樓:教師小站
●誤差造成:
請看這段程式:
private sub form_click()
dim i as single
for i = 0.2 to 1 step 0.1
print i
next
end sub
輸出結果是:
.2.3
.4.5
.6.7
.8000001
.9000001
你可以把程式放入vb除錯一下,最後2行也這樣。 而且也少執行了一次 。
●這個程式是有解決方法的:**改成 dim i as double 就對了。
●這是因為計算機在計算single的時候是按二進位制移位進行的,也就是說,計算機本身的精度有一定的偏差,在這種情況下,後面不夠0.1了,所以就不迴圈了
**************
●你的程式雖然沒有定義i為single,但執行一次迴圈,變數i變成1.1時,vb就自動把i轉換成了single型別。
●最後,你可以給學生演示這幾種,幫助他們明白:
***********************
還是用你的程式吧:
for i = 0 to 1 step 0.1 ---迴圈11次
for i = 1 to 2 step 0.1 ---誤差!少1次!
for i = 2 to 3 step 0.1 ---迴圈11次
for i = 3 to 4 step 0.1 ---誤差!少1次!
... ...
是不是很奇怪呢?我剛才寫回復的時候也很奇怪:當初值是偶數,次數正確,初值為奇數,就會少一次!
●所以你可以這樣跟學生說,當迴圈到第10次的時候,i變成1.9000001,第11次時i變成2.0000001 了!!!
2.0000001>2,所以最後一次迴圈沒被執行
2樓:
按照公式的意思是:
11.1
1.21.3
1.41.5
1.61.7
1.81.9
211次
不過vb好像最後一個2 沒有執行.
ps.把改成for i = 10 to 20的話執行了11次
3樓:匿名使用者
是奇怪了呢,可能就是浮點數惹得禍,改成這樣就正確了,
for i = 1 to 2 step 0.099999999
所以最好不要用小數做步長.
4樓:逢元修喬亥
執行順序是:
30(j=1)-40(k=6)-50(mk=6)-60-70(k=4)-40-50(mk=4)-60-70(k=2)-40-50(mk=2)-60-70(k=0)-40-80(j=4)-
30-40(k=6)-50(mk=6)-60-70(k=4)-40-50(mk=4)-60-70(k=2)-40-50(mk=2)-60-70(k=0)-40-80(j=7)-
30-40(k=6)-50(mk=6)-60-70(k=4)-40-50(mk=4)-60-70(k=2)-40-50(mk=2)-60-70(k=0)-40-80(j=10)-
30-40(k=6)-50(mk=6)-60-70(k=4)-40-50(mk=4)-60-70(k=2)-40-50(mk=2)-60-70(k=0)-40-80(j=13)-
30-90
可以數出來:
第四十號語句共執行了16次
第五十號語句共執行了12次
執行第90號語句後顯示的結果是:
j=13,k=0,mk=2
所以顯示的是:1302
限於篇幅,我描述的比較簡單,如果有什麼不懂可以詳細說明。
vb計算迴圈的次數
5樓:匿名使用者
碰到這種問題,我通常是這樣來計算的。首先看最內層的迴圈,計算它會迴圈多少,把這個數寫下來(如果是n,就記著n*)。就本題來看,最內層是j迴圈,它從5迴圈到1,共迴圈5次,所以,我會在草稿紙上寫5* ,現在需要*多少還不知道,所以,我再往其上一層檢視,看看還有迴圈嗎?
是迴圈多少次,如果有,按照此法寫下去,如果沒有,就寫1,計算結果。就本題看,其上一層是i迴圈,從1迴圈到3,所以,我會寫 5*3* ,再往其上一層看,沒有了迴圈,所以,最後會寫成這樣的算式:5*3*1=15。
6樓:匿名使用者
for i=1 to 3for j=5 to 1 step -1print i*ja=a+1next jnext iprint a 最後a=15 證明算了15次這是個套嵌 外*內=總次數 外3內5=15
vb 迴圈執行執行次數問題
7樓:匿名使用者
private sub command1_click()for i = 1 to 100
label1.caption = "2" '倒計時timer1.interval = 1000timer1.
enabled = truedo while timer1.enabled = truedoevents
loop
next
end sub
private sub timer1_timer()label1.caption = label1.caption - 1
if label1.caption = 0 thenlabel1.caption = "時間到"
msgbox "111111111111"
timer1.enabled = falseend if
end sub
vb 迴圈次數
8樓:網海1書生
for迴圈分解:
第1次:n=1
a=fun(b,n)+b
fun內部運**況:
形參x=y-1+n=1-1+1=1,實參b=1
形參y=x+y-n=1+1-1=1,實參n=1
fun=x+y=1+1=2
a=fun(b,n)+b=2+1=3
第2次:n=1+1=2
b=fun(n,a)+a
fun內部運**況:
形參x=y-1+n=3-1+2=4,實參n=4
形參y=x+y-n=4+3-4=3,實參a=3
fun=x+y=4+3=7
b=fun(n,a)+a=7+3=10
第3次:n=4+1=5
a=fun(b,n)+b
fun內部運**況:
形參x=y-1+n=5-1+5=9,實參b=9
形參y=x+y-n=9+5-5=9,實參n=9
fun=x+y=9+9=18
a=fun(b,n)+b=18+9=27
第4次:n=9+1=10>6,退出迴圈
此時 n=10, a=27, b=9
所以輸出結果為 10 27 9
這道題的關鍵點在於函式fun的引數x和y是傳址呼叫,函式內部對這兩個形參的值的改變會直接改變外部實參n、a、b的值
vb迴圈語句問題!!急求!!!
9樓:lxt_練習題
第一個問題,沒有看明白,想問什麼。迴圈體內部的語句被迴圈執行的次數,是由迴圈控制語句決定的。
你所說的迴圈語句迴圈次數,是否就是指迴圈控制語句的執行次數?如果你是問這個,那麼,控制語句入口處的語句執行次數一般情況下,是比迴圈體內的語句執行次數多1次,出口處的語句與迴圈體內的語句執行次數是一樣的,因為在進入迴圈體的時候,需要做判斷,符合的就進入迴圈,不符合的就跳過迴圈部分,直接執行迴圈語句之後的。比如for next迴圈,for 語句肯定會被多執行一次。
do while(until)也一樣。但也有例外,比如判斷是否迴圈的語句放在迴圈體中,就會使判斷語句之後的內容少執行一次。如,
do while (1=1)
…………
loop,這個迴圈會一直執行下去,那麼就需要在迴圈體中加入語句,滿足條件時跳出迴圈,如
do while (1=1)
……if i=10 then
exit do
end if
……………
loop
那麼,exit do 之後的語句就會比其前的語句少執行一次。
第二個問題,雙重迴圈與現實中的很多事物都有相似之處,所以其應用也是很廣泛的。比如說,你要想列舉一個學校所有的班級,假設這個學校有三個年級,每個年級有3個班, 那這個情況就與雙重迴圈很相似,你就先列一年級,1、2、3班,同理列二年級,三年級,就是一個典型的雙重迴圈,當你把這些班級都列出來的時候,就是完成了一個雙重迴圈。這個列班級的問題,也是二維陣列的一個典型應用。
關於vb中統計點選窗體次數的問題
10樓:匿名使用者
i 需要是全域性變數,才能在觸發事件時不復位
如果定義在事件裡,就變成是區域性變數,每次觸發滑鼠點選事件,i重新定義,初始值都為0
也可將i定義成靜態變數,可以取到相同效果 static i as integer
11樓:木頭
dim i as integer,在這裡宣告的是全域性變數,就是說,只要程式在執行,這個變數就一直有效
private sub form_click()i = i + 1
text1.text = i
end sub
private sub form_click()dim i as integer這裡宣告變數,只存活在本過程,過程結束,變數就無效了,而每點一次窗體,次過程就會重新執行一下,所以 i就一直是初始值+1,而i 原本沒有賦給初始值,所以預設為0,
i = i + 1
text1.text = i
end sub
12樓:匿名使用者
dim i as integer
放在過程外面就是全域性變數,值是可以累加的
但放在過程裡面。就是區域性變數,單擊一次就是一次變數。不會累加
VB程式For迴圈問題,VB中的For迴圈的問題
把if條件換下就可以了,試試下面的程式 for j 1 to rows 行 for i 1 to columns 列 if j scan int j scan 1.99 then print 1,print 1,str int j scan 0.99 pin1 cstr i print 1,desi...
VB中的For迴圈的問題,VB中FOR迴圈STEP的問題
step 1 表示每一步減1,也就是迴圈第一次是i 4,然後是i 3,i 2 這是稱為 冒泡法 的排序方法,可以這樣理解 外迴圈表示需進行幾輪比較,對4個元素進行比較排序,需要進行3輪比較,所以for i 4 to 2 step 1。而內迴圈則可以這樣說 第一次是i 4,a 1 與a 2 a 2 與...
VB的迴圈問題
你這個問題是不是想說當n 1,n 2和n 3時,執行這段 一次後的值?如果是這樣,那你的理解是對的。這種情況下,你用dim定義s和用static定義s,運算結果沒有區別。但是執行多次的結果就不一樣了。當退出執行這段程式的過程後,用dim定義的變數,不管過程中是否有變化,每次執行過程都是從第一次執行該...