記事には広告を含む場合があります。

C言語入門講座

【C言語】for文の書き方とインクリメント・デクリメント

2022年5月28日

C言語で繰り返し処理ってどう書くの?繰り返し処理を使って足し算をしたいんだけど。

こんな疑問にお答えします。

プログラムを書いていると同じ処理を何度も実行させる場面が頻繁にあります。このような処理を繰り返し処理といいます。

C言語ではfor文を使って繰り返し処理が書けます

記事の内容

  • forを使った繰り返し処理の書き方
  • for文で使う変数の宣言方法
  • インクリメントとデクリメントの使い方
oyu
元エンジニアの筆者が解説します。

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つずつ増やしていきますよという意味
oyu
変数名にはiがよく使われます。特に決まりはないので別の名前でもOKです。

for文の1ループ目ではiが0に初期化され、条件式i<3に当てはまるか確認されます。条件式を満たせば{ }内の処理が実行されます。
loop1

2ループ目以降では初期化はされず、代わりに変化式i=i+1が実施されます。その後i<3かどうか調べ、これを満たせば{ }内の処理を実行します。
loop2~

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);
    }
}
oyu
この書き方の方がよく使います。

インクリメントとデクリメントの使い方

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を使っても同じ結果になります。

じゃあなんで2種類の書き方があるの?
oyu
for文では同じ結果になりますが、例えば以下の使い方をすると違う結果になります。

前置の例:

#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文はどう書けばいいの?

oyu
筆者が仕事でよく使っていた書き方は初期化時に変数宣言を行い、変化式には前置インクリメントを使う書き方です。
for(int i=0;i<3;++i) 
{
    printf("Hello\n");
}

変数の宣言は初期化と一緒にやった方がコードがシンプルになります。

変化式では前置(++i)の方が後置(i++)よりプログラムのスピードが速くなるので前置を使っています。

ブログランキング参加中。クリックしてもらえると励みになります。

ブログランキング・にほんブログ村へ

-C言語入門講座