for(i = 0; i<10 ; ++i)
printf("*");
根據我的邏輯,這個提示符應該打印9顆星,因爲++ i是第一個操作,在檢查條件之前使i = 1。所以然後從i = 1到i = 9,它會打印出*,這將是9 *。對?爲什麼打印10顆星?
for(i = 0; i<10 ; ++i)
printf("*");
根據我的邏輯,這個提示符應該打印9顆星,因爲++ i是第一個操作,在檢查條件之前使i = 1。所以然後從i = 1到i = 9,它會打印出*,這將是9 *。對?爲什麼打印10顆星?
這將打印10分,因爲你是從0
計數到9
..這是10次迭代
第一次迭代將與i=0
不1
++i
一旦裏面的東西for循環執行已經付諸行動
步驟for循環:
引發環與啓動條件(i=0
),並檢查終止條件
行動環路
動作內部的命令的增量/減量條件(++i
) - 這是不執行,除非循環內的命令已被執行
檢查終止條件(i<9
) - 如果條件不符合則退出循環
行動內環命令再次
應用遞增/遞減再次
重複4-7
問:
爲什麼用了這個問題OP downvoted?
對我來說,這個問題似乎對於編程開始的人來說是非常真實的。爲什麼我們不能更加鼓勵和有幫助,而不是讓某人提出真正的問題而使其失去活力?
據我所知,這個問題可能是你們中的大多數人太微不足道,但這不是理由,從問這樣的問題(特別是如果它們是新的編程)
但++ i是第一個函數,所以你會從1-9開始,因爲0沒有進入循環,對吧? – user2918658
@ user2918658第三個子句在每次迭代結束時運行 – SheetJS
@ user2918658否..循環以初始條件開始..在循環內部執行命令,然後繼續執行遞增/遞減條件。 – sukhvir
報價勸阻別人:因爲++ i是第一個操作,在檢查條件之前使i = 1
這就是你錯了。 ++我是循環的最後一個操作。
按我的邏輯,這提示應該打印9星,因爲++ i的是第一次運行,
在這裏,你錯了。
for (a; b; c) d
相當於
a;
while (b) {
d;
c;
}
所以c
沒有在第一次執行,但只有一次迭代後。
因此,你有10次迭代。
For循環開始這樣 爲(I = 0;我< 10; ++ⅰ)
這裏第一I = 0被評估然後檢查條件I < 10. 然後執行操作,然後循環我會增加,即++ i.then它檢查條件我< 10; 這樣它會繼續到0到9然後停止。
因此,第一次i = 0它不會影響++ i或i ++,因爲它將在循環內的執行語句結束時進行評估。
在進入每次迭代之前檢查for循環條件,並在每次迭代後評估增量部分。在第一次迭代中,我是0,它在printf後遞增;不是之前。使用++ i或i ++無關緊要。
如果轉換爲相當於這while循環將是:
i = 0;
while (i<10) {
printf("*");
++i;
}
你要找的是什麼;
i = 0;
while (++i<10) {
printf("*");
}
所以相當於for循環將是:
for (i = 0; ++i < 10;) {
printf("*");
}
你在哪裏,在遞增的邏輯檢查步驟的變量。
你的第一個代碼塊是不正確的。 ++ I;應該在printf之後,而不是之前。 (但你的核心點似乎對我來說。) – karadoc
對不起,我現在不好修復它。 –
我認爲你需要從一些很好的教程開始。這裏有幾個 http://www.tutorialspoint.com/cprogramming/c_for_loop.htm, http://www.cprogramming.com/tutorial/c/lesson3.html – niko