for (表示式1; 表示式2; 表示式3)
{
語句;
}
;
隔開的,千萬不要寫成逗號。for(表示式1;表示式2;表示式3)
的後面千萬不要加分號,很多新手都會犯這種錯誤——會情不自禁地在後面加分號。
for (迴圈變數賦初值; 迴圈條件; 迴圈變數增值)
{
語句;
}
# include <stdio.h> int main(void) { int i; int sum = 0; //sum的英文意思是“總和” for (i=1; i<=100; ++i) //++是自加的意思, ++i相當於i = i + 1 { sum = sum + i; /*等價於sum += i;但是不建議這麼寫, 因為sum = sum + i看起來更清楚、更舒服*/ } printf("sum = %dn", sum); return 0; }輸出結果是:
# include <stdio.h> int main(void) { int i = 1; int sum = 0; for (; i<=100; ++i) { sum = sum + i; } printf("sum = %dn", sum); return 0; }當然表示式1加上也行,大不了再重新賦一次值。
i=1;
表示式1隻執行這一次,下面都不會再執行了。{}
。但基於程式碼規範化,if、else、for、while、do 後面的執行語句不論有多少行,就算只有一行也要加{}
。(
,以突出關鍵字。for(i=1; i<=100;++i)
完全可以寫成for(i=1; i<101; ++i)
,而且建議大家盡量使用這種寫法。也就是說,迴圈語句的迴圈條件盡量寫成半開半閉的,不管是 for 迴圈還是 while 迴圈。for(i=1; i<101; ++i)
實際上是 1≤i<101,是半開半閉的;而for(i=1; i<=100; ++i)
實際上是 1≤i≤100,是全閉的。那麼為什麼建議使用半開半閉的呢?因為如果寫成 i<=100 的話,那麼每次判斷的時候都要判斷兩次,即 i<100 和 i==100,而寫成 i<101 的話每次只需要判斷一次。<=
右邊是變數或表示式的時候。這時候要以可讀性為第一要素,即哪種好理解就使用哪種。現在 CPU 速度那麼快,也不在乎那點效率。所以前面說“盡量”,沒有要求一定要那樣寫。# include <stdio.h> int main(void) { int i; int sum = 0 ; for (i=1; i<100; i+=2) //i+=2;等價於i = i + 2; { sum = sum + i; } printf("sum = %dn", sum); return 0; }輸出結果是:
a=++i;
完全可以寫成i++; a=i;
。而a=i++;
也完全可以寫成a=i; i++;
。而且,這也是一種很好的程式風格。# include <stdio.h> int main(void) { int n = 0; int i = 0; int m = 1; int sum=0; printf("請輸入n的值:"); scanf("%d", &n); for (i=1; i<=n; ++i) { m = m * i; sum = sum +m; } printf ("sum = %dn", sum); return 0; }這個程式雖然短,但邏輯性很強,演算法很好,所以建議讀者記住。因為邏輯性強,所以只看是很難明白的,自己在紙上試一下,將自己當成計算機一步步地計算就明白了。
# include <stdio.h> int main(void) { int i; int sum = 0; for (i=3; i<100; ++i) { if (0 == i%3) { sum = sum +i; } } printf("sum = %dn", sum); return 0; }輸出結果是:
# include <stdio.h> int main(void) { int i; int sum = 0; for (i=3; i<100; i+=3) { sum = sum +i; } printf("sum = %dn", sum); return 0; }因為 ++i 每次只加 1,而 i+=3 每次加 3,所以這種寫法與第一種寫法比較起來計算機少執行很多步,所以執行起來更快。由此可知,完成相同的功能,演算法不一樣則效果就不一樣。對計算機而言當然是執行得越快越好。
# include <stdio.h> # include <math.h> //要用sqrt() int main(void) { int i; //迴圈變數 int x; //儲存每個數的二次方根 for (i=1; i<1000; ++i) { x = sqrt(i); /*如果i不是完全平方數, 那麼sqrt(i)肯定是小數, 而i是int型, 所以x是sqrt(i)取整後的值, 這樣x*x肯定不等於i*/ if (x*x == i) { printf("%dt", i); // t是跳到下一個Tab位置 } } printf("n"); return 0; }輸出結果是:
1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256 289 324 361 400 441 484 529 576 625 676 729 784 841 900 961
# include <stdio.h> int main(void) { int i; //迴圈變數 for (i=1; i*i<1000; ++i) { printf("%dt", i * i); // t是跳到下一個Tab位置 } printf("n"); return 0; }輸出結果是:
1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256 289 324 361 400 441 484 529 576 625 676 729 784 841 900 961