C言語 標準関数 | 応用 | サンプル

標準関数
構文
応用

管理人

プライバシーポリシー


繰り返し文(do , while , for)の条件判定位置

■while文:先に条件式を評価して、真であれば処理を実行する。

■for文:while文と同様に先に条件式を評価して、真であれば処理を実行する。

■do..while文:while文やfor文と異なり、処理を実行してから条件式を評価する。

真とは偽(0)以外を指します。つまり、偽以外は全て真(!0)です。

各々の詳細は以降を参照して下さい。

while文

while文の一般式は次のようになっています。

while( 条件式 ) { 処理 }
次の処理

先に「条件式」を評価してその結果が真(!0)であった場合、「処理」を行います。
条件式の評価結果が偽(0)であった場合、「処理」を行わず、「次の処理」を行います。

「処理」中にbreak文があった場合は、その時点で処理を中断して条件式を評価せずに「次の処理」を行います。
「処理」中にcontinue文があった場合は、その時点で「処理」を中断して(再度)「条件式」を評価します。

サンプル(while)

main() {

  int cond1;

  cond1 = 3;
  while( cond1 ) {
    printf( "cond1(a)=%d\n" , cond1-- );
  }

  printf( "----------\n" );

  cond1 = 0;
  while( cond1 ) {
    printf( "cond1(b)=%d\n" , cond1++ );
  }

  printf( "----------\n" );

  cond1 = 0;
  while( cond1 == 0 ) {
    printf( "cond1(c)=%d\n" , cond1++ );
  }

  printf( "----------\n" );

  cond1 = 0;
  while( 1 ) {
    cond1++;
    if( cond1 < 3 ) {
      printf( "cond1(d)=%d\n" , cond1 );
      continue;
    }
    break;
  }
}

実行結果(while)

cond1(a)=3
cond1(a)=2
cond1(a)=1
----------
----------
cond1(c)=0
----------
cond1(d)=1
cond1(d)=2

for文

for文の一般式は次のようになっています。

for( 初期化式 ; 条件式 ; 再初期化式 ) { 処理 }
次の処理

「初期化式」はfor文の実行時に最初に一回だけ実行されます。2回目以降の初期化式には、「再初期化式」を使用します。
初期化式(再初期化式を含む)を実行後に条件式を評価します。

条件式の評価結果が真(!0)であった場合は、「処理」を行います。

条件式の評価結果が真であった場合の実行の順序は、

初期化式(初回だけ) → 条件式 → 処理 → 再初期化式(2回目以降) → 条件式 → 処理 → 再初期化式(2回目以降) → 条件式 → 処理・・・

であり、条件式の評価結果が偽になるまで、この実行順序の繰り返しになります。

尚、初期化式、条件式、再初期化式は省略することも可能ですが、セミコロン(;)は必要です。初期化式、条件式、再初期化式の全てを省略した場合は、

for( ; ; ) { 処理 }

のような記述になります。条件式を省略した場合の評価結果は常に真です。

「処理」中にbreak文があった場合は、その時点で処理を中断して条件式を評価せずに「次の処理」を行います。
「処理」中にcontinue文があった場合は、その時点で「処理」を中断して(再度)「条件式」を評価します。

サンプル(for)

main() {

  int i , k;

  /* よくあるfor文 */
  for( i=0 ; i<3 ; i++ ) {
    printf( "i=%d\n" , i );
  }

  /* 処理が1度も実行されないfor文 */
  for( k=0 ; k==1 ; k++ ) {
    printf( "k=%d\n" , k );
  }
}

実行結果(for)

i=0
i=1
i=2

do..while文

do..while文の一般式は次のようになっています。

do { 処理 } while( 条件式 )
次の処理

先に「処理」を実行してから「条件式」を評価して、真であれば再度「処理」を行う。

「処理」中にbreak文があった場合は、その時点で処理を中断して条件式を評価せずに「次の処理」を行います。
「処理」中にcontinue文があった場合は、その時点で「処理」を中断して(再度)「条件式」を評価します。

サンプル(do..while)

main() {

  int i;

  /* 1回だけ「処理」を実行 */
  i = 0;
  do {
    printf( "i(a)=%d\n" , i );
  } while ( i != 0 );

  /* 複数回「処理」を実行 */
  i = 0;
  do {
    printf( "i(b)=%d\n" , i );
    if( i < 2 ) {
      printf( "i(c)=%d\n" , i++ );
      continue;
    }
    printf( "i(d)=%d\n" , i );
    break;
  } while ( i < 5 );
}

実行結果(do..while)

i(a)=0
i(b)=0
i(c)=0
i(b)=1
i(c)=1
i(b)=2
i(d)=2


Copyright © 2008-2015 http://hitorilife.com All Rights Reserved.