プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也
基本制御構造(1) Whileプログラムで使う制御構造 if ~ else 文 条件判定式が偽のとき実行する プログラム(ブロック) } 条件判定式 が真か Yes 真のとき 実行 No 条件判定式 が真か Yes No 偽のとき 実行 真のとき 実行
基本制御構造(2) Whileプログラムで使う制御構造 while 文 while (条件判定式) { 条件判定式が真の間中,繰り返し 実行されるプログラム(ブロック) } 条件判定式 が真か No Yes 真のとき 繰り返し実行
その他の制御構造(1) 基本的に if文と while文の組み合わせで表現可能. for 文 以下の while プログラムと等価 条件判定式が真の間, 繰り返し実行されるプログラム(ブロック) } 以下の while プログラムと等価 初期化文; while (条件判定式) { 条件判定式が真の間, 繰り返し実行されるプログラム(ブロック); 実行文; 初期化文 条件判定式 が真か No Yes 真のとき 繰り返し実行 実行文
その他の制御構造(2) do ~ while 文 以下の while プログラムと等価 do { 条件判定式が真の間, 繰り返し実行されるプログラム(ブロック) } while (条件判定式); 以下の while プログラムと等価 条件判定式が真の間, 繰り返し実行されるプログラム(ブロック); while (条件判定式) { 条件判定式が真の間, 繰り返し実行されるプログラム(ブロック); } 真のとき 繰り返し実行 条件判定式 が真か No Yes
その他の制御構造(3) if ~else if ~ else 文 if (条件判定式1) { 条件判定式1が真のとき, 実行されるプログラム(ブロック) } else if (条件判定式2) { 条件判定式1が偽で 条件判定式2が真のとき, 実行されるプログラム(ブロック) : } else if (条件判定式n) { 条件判定式1からn-1がすべて偽で 条件判定式nが真のとき, 実行されるプログラム(ブロック) } else { 条件判定式1からnがすべて偽のとき, 実行されるプログラム(ブロック) } 条件判定式1 が真か Yes 真のとき 実行 No 条件判定式2 が真か Yes 真のとき 実行 No : 条件判定式n が真か Yes 真のとき 実行 No すべて偽の とき実行
その他の制御構造(4) switch 文 switch (数値式1) { case 定数1: 数値式が定数1と一致するとき, 実行されるプログラム(ブロック) break; case 定数2: 数値式が定数2と一致するとき, 実行されるプログラム(ブロック) break; : case 定数n: 数値式が定数nと一致するとき, 実行されるプログラム(ブロック) break; default: 数値式がいずれとも一致しないとき, 実行されるプログラム(ブロック) } 数値式==定数1 か Yes 定数1のとき 実行 No 数値式==定数2 か Yes 定数2のとき 実行 No : 数値式==定数n か Yes 定数nのとき 実行 No すべて偽の とき実行
ジャンプ文 break文 continue文 ループを途中で抜ける場合に用いる while (…) { : break; } ループの次の繰り返しに飛ぶ場合に用いる continue;
無限ループ 無限ループの書き方(いろいろある) while (1) { : } for (;;) {
多重ループ ループの中にループが入れ子になったもの (ネスト構造). int x, y, z; for (z = 1; ; z++) { for (x = 1; x < z; x++) { for (y = x; y < z; y++) { if (x * x + y * y == z * z) { printf(“x=%d, y=%d, z=%d\n”,x,y,z); break; } } } }
手続き 手続き:一連の処理を行う機能単位. 名前をつけることができ,その名前で何度でも呼び出すことができる. FORTRAN, Basic --- サブルーチン Pascal --- プロシージャ(手続き) C, C++ --- 関数 Java --- メソッド 名前をつけることができ,その名前で何度でも呼び出すことができる.
手続きの有効性 z = x * y を行うWhile プログラム z = 0; c = 0; while (c < y) { int plus(int z, int y) { int d = 0; while (d < y) { z++; d++; } return z; main() { int z = 0; int c = 0; while (c < y) { z = plus(z, y); c++; z = 0; c = 0; while (c < y) { d = 0; while (d < x) { z++; d++; } c++;