Presentation is loading. Please wait.

Presentation is loading. Please wait.

情報処理Ⅱ 2006年10月20日(金).

Similar presentations


Presentation on theme: "情報処理Ⅱ 2006年10月20日(金)."— Presentation transcript:

1 情報処理Ⅱ 2006年10月20日(金)

2 本日学ぶこと 制御文 問題 for, while, do~while if~else, switch~case 九九の表を出力できる?
1st, 2nd, 3rd, 4th, …, 1000th と順番に序数を生成 できる?

3 ダイクストラの構造化プログラミング プログラムは,「順接」,「反復」,「分岐」の組み合わせで表現できる. 順接 反復 分岐 処理2 処理1
条件 処理 条件 条件を満たす ときの処理 条件を満たさ ないときの処理

4 for 構文 最初に「条件」を満たしていな ければ,1回も「処理」をしない. for (初期化; 条件; 増分) { よく使う 初期化 条件
 処理  } 最初に「条件」を満たしていな ければ,1回も「処理」をしない. 初期化 条件 処理 増分

5 (for i less than or equal to 10)
0, 0.1, ..., 1.0 を取り出すには ループ用の変数iは整数型にする. for文を用いて,i の値を 0, 1, ..., 10 と変えるようにする. i / 10.0 は,0, 0.1, ..., 1.0 となる. for (i = 0; i <= 10; i++) { iの初期値は0 iの値を1増やす i = i + 1 と等価 iは10まで (for i less than or equal to 10)

6 九九プログラム 方針 1≦i≦9, 1≦j≦9の各(i,j)について,i * jを計算する.
1≦j≦9のそれぞれのjの値に対して, 1≦i≦9のそれぞれのiの値との積を計算し,出力する for (j = 1; j <= 9; j++) { for (i = 1; i <= 9; i++) { printf("%2d ", i * j); } printf("\n"); 上の例では,「forの二重ループ」とも言う. 三重,四重,…と増やすこともできる. for文の中にfor文… for文の「入れ子 (ネスト)」という i=3, j=9

7 while よく使う 構文 while (条件) { 処理 } 最初に「条件」を満たしていな ければ,1回も「処理」をしない. 条件 処理

8 whileとfor while文をfor文で記述可能 for文をwhile文で記述可能 使い分けは?
条件 処理 初期化 条件 処理 増分 空文 (くうぶん)

9 do~while 構文 少なくとも1回は「処理」をする. while文で記述可能 do { 処理がbreakを含む場合は やや煩雑
たまに使う 構文 do { 処理 } while (条件); 少なくとも1回は「処理」をする. while文で記述可能 処理がbreakを含む場合は やや煩雑 セミコロンを忘れずに 条件 処理

10 if 構文 if (条件) { よく使う 条件 処理 条件 条件を満たす ときの処理 条件を満たさ ないときの処理 処理 }
条件を満たすときの処理 } else { 条件を満たさないときの処理 条件 処理 条件 条件を満たす ときの処理 条件を満たさ ないときの処理

11 多分岐(1) 構文 if (条件1) { たまに使う if 文の入れ子 if (条件2) { 条件1~2をともに満たすときの処理
 条件1~2をともに満たすときの処理  } else {  条件1を満たすが,条件2を満たさないときの処理  }  条件1を満たさないときの処理 if 文の入れ子

12 多分岐(2) 構文 if (条件1) { よく使う 条件1を満たすときの処理 } else if (条件2){
 条件1を満たすときの処理  } else if (条件2){  条件1は満たさず,条件2を満たすときの処理  } else if (条件3) {  条件1~2は満たさず,条件を3を満たすときの処理  } else {  条件1~3のいずれも満たさないときの処理  }

13 AND条件とOR条件 構文 if (条件1 && 条件2) { if (条件1 || 条件2) { よく使う
 条件1~2をともに満たすときの処理  } else {  条件1~2の少なくとも一方を満たさないときの処理  } if (条件1 || 条件2) {  条件1~2の少なくとも一方を満たすときの処理  条件1~2をともに満たさないときの処理

14 序数プログラム 方針 1≦number≦1000の各整数に対して(for文を用いて), その序数となる単語を求めて出力する 出力方法
printf("%dst", 1); ⇒ 1st printf("%dnd", 2); ⇒ 2nd printf("%drd", 3); ⇒ 3rd printf("%dth", 4); ⇒ 4th

15 序数プログラム 方針(つづき) 接尾辞のつけかた 下2桁が「11」,「12」もしくは「13」のとき,"th" 下1桁が「1」のとき,"st"
下1桁が「2」のとき,"nd" 下1桁が「3」のとき,"rd" それ以外は,"th" 下?桁 整数xの下1桁 ⇒ xを10で割った余り ⇒ x % 10 整数xの下2桁 ⇒ xを100で割った余り ⇒ x % 100

16 switch~case 多分岐を実現するもう一つの方法 構文 switch (整数値) { たまに使う コロン … 整数値 値1の処理
 値1の処理  break;  case 値2:  値2の処理  …  default:  それ以外の処理   } 整数値 値1の処理 値2の処理 それ以外 の処理 break コロン

17 switch~caseにbreakが なかったら
滅多に使わない 構文 switch (整数値) {  case 値1:  値1の処理  case 値2:  値2の処理  …  default:  それ以外の処理   } 整数値 値1の処理 値2の処理 それ以外 の処理

18 序数プログラムを書き換える ifをswitch~caseに置き換える

19 制御文に関する補足 ブロック breakとcontinue 無限ループ

20 ブロック 「{ 処理 }」をブロック(複合文)という 「処理」には複数の文が書ける. セミコロンまでが一つの文.
制御文を用いた if (…) {…} なども(セミコロンはなくても)一つの文. ブロックの先頭で,変数を宣言できる.この変数は,ブロックが終わると利用できなくなる.

21 { と } が省略可能なとき 「処理」が一つの文のときは,{ と } を省略できる.
if (条件)  処理 ただし,条件を満たすときにする処理,満たさないときにする処理が紛らわしくなるので,常に { と } をつけるようにしておくとよい if (条件) 処理1; 処理2; if (条件) { 処理1; 処理2; } if (条件1) if (条件2) 処理1; else 処理2; if (条件1) { if (条件2) 処理1; } else 処理2; 「処理が一つの文のときは,{ と } を省略できる」の代わりに 「処理は一つの文でなければならない.ここで,文とは,単文,複合文(ブロック),if文,for文,while文,…,である」 と表現することもできる. 条件の真偽にかかわらず 処理2を実行する. 違う! 条件1が真,条件2が偽のとき に限り,処理2を実行する. 違う!

22 breakとcontinue break continue 注意点
for, while, do, switchの処理の中で使用でき,それぞれのブロックを抜ける. continue for, while, doの処理の中で使用でき,反復の先頭に戻る. forでは,増分してから条件判定へ while, doでは,ただちに条件判定へ 注意点 ifやelseのブロックでbreakをすると,そのブロックではなく,すぐ外の(forなどの)ブロックを抜ける 入れ子の中から一気に抜けることはできない(gotoが必要)

23 無限ループ 例 注意点 while (1) { for (;;) {
たまに使う while (1) { 処理 } for (;;) { 注意点 通常は,「処理」の中にif文を設け,何らかの条件でbreakによって抜けるように書く. 条件 (恒真) 処理

24 まとめ 「反復」は,for, while, do~while 「分岐」は,if, switch~case
制御文は入れ子にできる.「{」と「}」の対応に注目して読む breakはブロックを抜け,continueは反復の先頭に戻る.適用される制御文に注意


Download ppt "情報処理Ⅱ 2006年10月20日(金)."

Similar presentations


Ads by Google