2013-10-25 50 views
-7
for(i = 0; i<10 ; ++i) 
    printf("*"); 

根據我的邏輯,這個提示符應該打印9顆星,因爲++ i是第一個操作,在檢查條件之前使i = 1。所以然後從i = 1到i = 9,它會打印出*,這將是9 *。對?爲什麼打印10顆星?

+2

我認爲你需要從一些很好的教程開始。這裏有幾個 http://www.tutorialspoint.com/cprogramming/c_for_loop.htm, http://www.cprogramming.com/tutorial/c/lesson3.html – niko

回答

7

這將打印10分,因爲你是從0計數到9 ..這是10次迭代

第一次迭代將與i=01

++i一旦裏面的東西for循環執行已經付諸行動

步驟for循環:

  1. 引發環與啓動條件(i=0),並檢查終止條件

  2. 行動環路

  3. 動作內部的命令的增量/減量條件(++i) - 這是不執行,除非循環內的命令已被執行

  4. 檢查終止條件(i<9) - 如果條件不符合則退出循環

  5. 行動內環命令再次

  6. 應用遞增/遞減再次

  7. 重複4-7

問:

爲什麼用了這個問題OP downvoted?

對我來說,這個問題似乎對於編程開始的人來說是非常真實的。爲什麼我們不能更加鼓勵和有幫助,而不是讓某人提出真正的問題而使其失去活力?

據我所知,這個問題可能是你們中的大多數人太微不足道,但這不是理由,從問這樣的問題(特別是如果它們是新的編程)

+0

但++ i是第一個函數,所以你會從1-9開始,因爲0沒有進入循環,對吧? – user2918658

+0

@ user2918658第三個子句在每次迭代結束時運行 – SheetJS

+0

@ user2918658否..循環以初始條件開始..在循環內部執行命令,然後繼續執行遞增/遞減條件。 – sukhvir

0

報價勸阻別人:因爲++ i是第一個操作,在檢查條件之前使i = 1

這就是你錯了。 ++我是循環的最後一個操作。

7

按我的邏輯,這提示應該打印9星,因爲++ i的是第一次運行,

在這裏,你錯了。

for (a; b; c) d 

相當於

a; 
while (b) { 
    d; 
    c; 
} 

所以c沒有在第一次執行,但只有一次迭代後。

因此,你有10次迭代。

0

For循環開始這樣 爲(I = 0;我< 10; ++ⅰ)

這裏第一I = 0被評估然後檢查條件I < 10. 然後執行操作,然後循環我會增加,即++ i.then它檢查條件我< 10; 這樣它會繼續到0到9然後停止。

因此,第一次i = 0它不會影響++ i或i ++,因爲它將在循環內的執行語句結束時進行評估。

0

在進入每次迭代之前檢查for循環條件,並在每次迭代後評估增量部分。在第一次迭代中,我是0,它在printf後遞增;不是之前。使用++ i或i ++無關緊要。

3

如果轉換爲相當於這while循環將是:

i = 0; 
while (i<10) { 
    printf("*"); 
    ++i; 
} 

你要找的是什麼;

i = 0; 
while (++i<10) { 
    printf("*"); 
} 

所以相當於for循環將是:

for (i = 0; ++i < 10;) { 
    printf("*"); 
} 

你在哪裏,在遞增的邏輯檢查步驟的變量。

+0

你的第一個代碼塊是不正確的。 ++ I;應該在printf之後,而不是之前。 (但你的核心點似乎對我來說。) – karadoc

+0

對不起,我現在不好修復它。 –