プログラムを書いていると同じ処理を何度も実行させる場面が頻繁にあります。このような処理を繰り返し処理といいます。
C言語ではfor文を使って繰り返し処理が書けます。
記事の内容
- forを使った繰り返し処理の書き方
- for文で使う変数の宣言方法
- インクリメントとデクリメントの使い方
forを使った繰り返し処理の書き方
forの使い方
for(初期化;条件式;変化式) { 処理; }
初期化、条件式、変化式の間はセミコロン「;」で区切ります。
例:
#include <stdio.h> void main() { int i; for(i=0;i<3;i=i+1) { printf("Hello(i=%d)\n",i); //この処理を繰り返し実行 } }
実行結果
Hello(i=0)
Hello(i=1)
Hello(i=2)
「printf("Hello(i=%d)\n",i);」の行が3回実行されていますよね。このようにfor文を使うと同じ処理を指定した回数だけ繰り返し実行できます。
何回実行するかはfor直後のカッコ内で決めています。カッコ内には以下の3つが書かれています。
- 初期化「i=0」:iを0に初期化
- 条件式「i<3」:iが3より小さいうちはループを続けますよという意味
- 変化式「i=i+1」:iは1つずつ増やしていきますよという意味
for文の1ループ目ではiが0に初期化され、条件式i<3に当てはまるか確認されます。条件式を満たせば{ }内の処理が実行されます。
2ループ目以降では初期化はされず、代わりに変化式i=i+1が実施されます。その後i<3かどうか調べ、これを満たせば{ }内の処理を実行します。
「i<3」でなくなったら処理を実行せずにループを抜けます。
for文における変数宣言
変数iの宣言はfor文の中で書くこともできます。先ほどの例は以下のように書き直せます。
#include <stdio.h> void main() { for(int i=0;i<3;i=i+1) //変数宣言も一緒に書ける { printf("Hello(i=%d)\n",i); } }
インクリメントとデクリメントの使い方
for文ではインクリメントまたはデクリメント処理を頻繁に使います。
名前 | 書き方例 | 説明 |
インクリメント | ++i(前置) i++(後置) |
iに1を足す(i=i+1と同じ) |
デクリメント | --i(前置) i--(後置) |
iから1を引く(i=i-1と同じ) |
例:
#include <stdio.h> void main() { for(int i=0;i<3;++i) //i=i+1の代わりに++iにした { printf("Hello(i=%d)\n",i); } }
実行結果
Hello(i=0)
Hello(i=1)
Hello(i=2)
i++の代わりに++iを使っても同じ結果になります。
前置の例:
#include <stdio.h> void main() { int i=0, j=0; i=++j; //前置インクリメント printf("i=%d, j=%d\n",i,j); }
実行結果
i=1, j=1
後置の例:
#include <stdio.h> void main() { int i=0, j=0; i=j++; //後置インクリメント printf("i=%d, j=%d\n",i,j); }
実行結果
i=0, j=1
iの実行結果が違いますよね。これは前置と後置で以下のような処理順の違いがあるからです。
- 「i=++j」の意味:「i=j」をしてから「j=j+1」
- 「i=j++」の意味:「j=j+1」をしてから「i=j」
処理スピードは前置の方が速いのでfor文では前置を使うのをおすすめします。
まとめ:結局for文はどう書けばいいの?
for(int i=0;i<3;++i) { printf("Hello\n"); }
変数の宣言は初期化と一緒にやった方がコードがシンプルになります。
変化式では前置(++i)の方が後置(i++)よりプログラムのスピードが速くなるので前置を使っています。
C言語で行き詰まったら…
-
C言語・C++がわからない時に質問できるサイト・サービス5選
C言語を独学で勉強しているけど内容がイマイチわからない。もはや何がわからないのかもわからない。 C++のエラーが解決できない。ググってもわからない。わかる人に解説してほしい。 こんなお悩みにお答えしま ...
続きを見る