第6回 制御のながれ(2) ループ制御 for while do – while break continue ラベルとgoto 文 繰り返し文 - for 文 ある処理を設定した条件となるまで、何度も 繰り返し実行させる for(初期設定式; 継続条件 ; 更新式) 文(statement) or ブロック({ 複数の文}) 1. 初期設定式を評価する ループボディ 2. 継続条件を判断して真である間 I. ループボディの処理を実行す る II. 更新式を評価する 式は、省略が可能であるが、セミコロンは省 略できない!! for 文のフローチャート for ループ 始まり 初期設定式 偽 継続判定式 真 ループボディの 処理 更新式 for ループ終了 forのプログラム例: (1から10までを足す) #include <stdio.h> main(){ int i; int sum=0; 初期設定式 継続条件 更新式 ループボディ for( i = 1; i <= 10; i ++ ) sum = sum + i; printf(" sum (1 – 10) = %d ∖n",sum); } 繰り返し - while 文 条件式が真である限り、処理部の実行を繰り 返す 書式 while( 条件式 ) 処理部 処理部は、文かブロック(複数の文を{}で括 る) 0回以上の繰り返しに用いられる cf. do-while while のフローチャート while ループ開始 条件式 ループボディ の処理 while ループ終了 while を使ったプログラム例 i = 1; sum = 0; while ( i <= 10 ){ sum = sum + i; i ++; } 条件式 ループボディ Q.上のwhile ループを for ループに書き直すとどうなるか? 無限ループ while ( 1 ) for( 初期設定式; ;更新式 ) 判定式が常に真であるため、無限ループとなる 継続判定式を空文にすると、常に継続となり無 限ループとなる 通常、ループボディで無限ループを終了させ る条件分岐を入れ、break によってループを 抜け出す do – while ループ 繰り返し(ループ)が1回以上である場合に使用する 1度は必ずループボディの処理を行う do 文 or ブロック while( 式 ); 繰り返すかどうかの判断は、ループボディの処理を してから行われる。 do-while のフローチャート ループ開始 ループ処理部 (ループボディ) 1 継続条件式 0 ループ終了 do – while の利用例 – itoa 関数 /* itoa : 整数n を 文字列s に変換する */ char* itoa(int n){ int i, sign; char s[20]; if( (sign = n) < 0 ) n = -n; i = 0; do{ s[i ++] = n % 10 + '0'; }while( (n /= 10) > 0 ); if( sign < 0 ) s[i ++] = '-'; s[ i ] = '\0'; reverse(s); return s; } break 文、continue 文 break 文 最も内側のループの制御または、switchから抜 け出す continue 文 以降のループのイタレーションの処理をスキップ して次のイタレーションに制御を移す while や do の場合は、テスト(判定)部分がた だちに実行される for の場合は、更新式がただちに実行される break 文の例 fp = fopen("hoge","w"); while( 1 ){ ch = getchar(); if( ch == '\n' ) 無限ループの脱出に break; 使用 putc(ch,fp); } fclose(fp); continue 文の例 空白をスキップして文字数をカウント count = 0; while( (ch=getchar()) != EOF ){ if( isspace(ch) ) continue; count ++; } ラベルとgoto 文 ラベル(名札)をつける 制御の途中でラベルを付けることができる ラベルは、コロンで終端 label1: goto 文 … プログラム中につけられたラベルに制御を移す goto <label_name> 例) • ただし、goto 文は処理の流れを著 for( i = 0; i < n ; i ++) しく見難くするだけでなく、コンパイラ for( j = 0; j < i; j ++){ による最適化も困難にするため、使 if( v[ i ] [ j ] > 0 ) 用は差し控える goto found; ... • goto 文を使わなくても、必ず同じ } 制御フローは実現できる } found: ...
© Copyright 2024 ExpyDoc