1 / 15

第 6 回 制御のながれ(2)

第 6 回 制御のながれ(2). ループ制御 for while do – while break continue ラベルと goto 文. 繰り返し文  - for 文 -. ある処理を設定した条件となるまで、何度も繰り返し実行させる 式は、省略が可能であるが、 セミコロンは省略できない!!. for( 初期設定式; 継続条件 ; 更新式) 文 (statement) or ブロック( { 複数の文 }). 初期設定式を評価する 継続条件を判断して真である間 ループボディの処理を実行する 更新式を評価する. ループボディ.

cheri
Download Presentation

第 6 回 制御のながれ(2)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第6回 制御のながれ(2) • ループ制御 • for • while • do – while • break • continue • ラベルとgoto 文

  2. 繰り返し文 - for 文 - • ある処理を設定した条件となるまで、何度も繰り返し実行させる • 式は、省略が可能であるが、セミコロンは省略できない!! for(初期設定式; 継続条件 ; 更新式) 文(statement)or ブロック({ 複数の文}) • 初期設定式を評価する • 継続条件を判断して真である間 • ループボディの処理を実行する • 更新式を評価する ループボディ

  3. for 文のフローチャート for ループ 始まり 初期設定式 偽 継続判定式 真 ループボディの 処理 更新式 for ループ終了

  4. 初期設定式 継続条件 更新式 ループボディ 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); }

  5. 繰り返し - while 文 - • 条件式が真である限り、処理部の実行を繰り返す • 書式 while( 条件式 ) 処理部 • 処理部は、文かブロック(複数の文を{}で括る) • 0回以上の繰り返しに用いられる • cf. do-while

  6. while のフローチャート while ループ開始 条件式 ループボディ の処理 while ループ終了

  7. 条件式 ループボディ while を使ったプログラム例 i = 1; sum = 0; while ( i <= 10 ){ sum = sum + i; i ++; } Q.上のwhile ループを for ループに書き直すとどうなるか?

  8. 無限ループ  • while ( 1 ) •  判定式が常に真であるため、無限ループとなる • for( 初期設定式; ;更新式 ) •  継続判定式を空文にすると、常に継続となり無限ループとなる • 通常、ループボディで無限ループを終了させる条件分岐を入れ、break によってループを抜け出す

  9. do – while  ループ • 繰り返し(ループ)が1回以上である場合に使用する • 1度は必ずループボディの処理を行う do 文 or ブロック while( 式 ); • 繰り返すかどうかの判断は、ループボディの処理をしてから行われる。

  10. do-while のフローチャート ループ開始 ループ処理部 (ループボディ) 1 継続条件式 0 ループ終了

  11. 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; }

  12. break 文、continue 文 • break 文 • 最も内側のループの制御または、switchから抜け出す • continue 文 • 以降のループのイタレーションの処理をスキップして次のイタレーションに制御を移す • while や do の場合は、テスト(判定)部分がただちに実行される • for の場合は、更新式がただちに実行される

  13. break 文の例 fp = fopen("hoge","w"); while( 1 ){ ch = getchar(); if( ch == '\n' ) break; putc(ch,fp); } fclose(fp); 無限ループの脱出に 使用

  14. continue 文の例空白をスキップして文字数をカウント count = 0; while( (ch=getchar()) != EOF ){ if( isspace(ch) ) continue; count ++; }

  15. ラベルとgoto 文 • ラベル(名札)をつける • 制御の途中でラベルを付けることができる • ラベルは、コロンで終端 label1: • goto 文 … プログラム中につけられたラベルに制御を移す goto <label_name> 例) for( i = 0; i < n ; i ++) for( j = 0; j < i; j ++){ if( v[ i ] [ j ] > 0 ) goto found; ... } } found: ... •  ただし、goto 文は処理の流れを著しく見難くするだけでなく、コンパイラによる最適化も困難にするため、使用は差し控える • goto 文を使わなくても、必ず同じ制御フローは実現できる

More Related