情報処理Ⅱ 2005年10月21日(金) 本日学ぶこと 制御文 for, while, do~while if~else, switch~case 問題 九九の表を出力できる? 1st, 2nd, 3rd, 4th, …, 1000th と順番に序数を生成 できる? 2 ダイクストラの構造化プログラミング プログラムは,「順接」,「反復」,「分岐」の組み合わせで表 現できる. 順接 反復 処理1 条件 条件 処理 条件を満たす ときの処理 処理2 分岐 条件を満たさ ないときの処理 3 for よく使う 構文 for (初期化; 条件; 増分) { 処理 } • 初期化 最初に「条件」を満たしていな ければ,1回も「処理」をしない. 条件 処理 増分 4 0, 0.1, ..., 1.0 を取り出すには ループ用の変数iは整数型にする. for文を用いて,i の値を 0, 1, ..., 10 と変えるよ うにする. i / 10.0 は,0, 0.1, ..., 1.0 となる. 5 九九プログラム 方針 1≦i≦9, 1≦j≦9の各(i,j)について,i * jを計算する. 1≦j≦9のそれぞれのjの値に対して, 1≦i≦9のそれぞれのiの値との積を計算し,出力する 変数jを変化させるためのfor文を書き,その中に, 変数iを変化させるためのfor文を書く. • for文の「入れ子」という 6 while よく使う 構文 while (条件) { 処理 } • 条件 最初に「条件」を満たしていな ければ,1回も「処理」をしない. 処理 7 whileとfor while while文をfor文で記述可能 for (; 条件;) { 空文 処理 (くうぶん) } • 処理 初期化 条件 処理 増分 for文をwhile文で記述可能 条件 for 処理がcontinueを含む場合はやや煩雑 使い分けは? for: 「反復の回数」や「初期化と増分」が決まっているとき while: 「反復の回数」や「増分」が不確定・不規則なとき 8 do~while 構文 do { 処理 } while (条件); たまに使う セミコロンを忘れずに • 少なくとも1回は「処理」をする. while文で記述可能 処理がbreakを含む場合は やや煩雑 処理 条件 9 if よく使う 構文 if (条件) { 処理 } 条件 • 処理 if (条件) { 条件を満たすときの処理 } else { 条件を満たさないときの処理 } 条件 • • 条件を満たす ときの処理 条件を満たさ ないときの処理 10 多分岐(1) たまに使う 構文 if 文の入れ子 if (条件1) { if (条件2) { 条件1~2をともに満たすときの処理 } else { 条件1を満たすが,条件2を満たさないときの処理 } } else { 条件1を満たさないときの処理 } • – • – • • 11 多分岐(2) よく使う 構文 if (条件1) { 条件1を満たすときの処理 } else if (条件2){ 条件1は満たさず,条件2を満たすときの処理 } else if (条件3) { 条件1~2は満たさず,条件を3を満たすときの処理 } else { 条件1~3のいずれも満たさないときの処理 } • • • • 12 AND条件とOR条件 よく使う 構文 if (条件1 && 条件2) { 条件1~2をともに満たすときの処理 } else { 条件1~2の少なくとも一方を満たさないときの処理 } if (条件1 || 条件2) { 条件1~2の少なくとも一方を満たすときの処理 } else { 条件1~2をともに満たさないときの処理 } • • • • 13 序数プログラム 方針 1≦i≦1000の各整数に対して(for文を用いて),その序数と なる単語を求めて出力する 出力方法 • printf("%dst", 1); ⇒ "1st" • printf("%dnd", 2); ⇒ "2nd" • printf("%drd", 3); ⇒ "3rd" • printf("%dth", 4); ⇒ "4th" 14 序数プログラム 方針(つづき) 接尾辞のつけかた • 下2桁が「11」,「12」もしくは「13」のとき,"th" • 下1桁が「1」のとき,"st" • 下1桁が「2」のとき,"nd" • 下1桁が「3」のとき,"rd" • それ以外は,"th" 15 switch~case 多分岐を実現するもう一つの方法 構文 switch (整数値) { case 値1: コロン 整数値 値1の処理 break; case 値2: 値2の処理 値1の処理 break; break … default: それ以外の処理 } たまに使う • • • 値2の処理 … それ以外 の処理 • break • 16 switch~caseにbreakが なかったら 滅多に使わない 構文 switch (整数値) { case 値1: 値1の処理 case 値2: 値2の処理 … default: それ以外の処理 } 整数値 値1の処理 • 値2の処理 • … • それ以外 の処理 17 序数プログラムを書き換える ifをswitch~caseに置き換える 18 制御文に関する補足 ブロック breakとcontinue 無限ループ 19 ブロック 「{ 処理 }」をブロック(複合文)という 「処理」には複数の文が書ける. • セミコロンまでが一つの文. • 制御文を用いた if (…) {…} なども(セミコロンはなくて も)一つの文. ブロックの先頭で,変数を宣言できる.この変数は,ブロックが 終わると消滅する. 20 { と } が省略可能なとき 「処理」が一つの文のときは,{ と } を省略できる. if (条件) 処理 • ただし,条件を満たすときにする処理,満たさないときにする 処理が紛らわしくなるので,常に { と } をつけるようにし ておくとよい if (条件) 処理1; 処理2; if (条件) { 処理1; 処理2; } if (条件1) if (条件2) 処理1; else 処理2; if (条件1) { if (条件2) 処理1; } else 処理2; 違う! 違う! 条件の真偽にかかわらず 処理2を実行する. 条件1が真,条件2が偽のとき に限り,処理2を実行する. 21 breakとcontinue break for, while, do, switchの処理の中で使用でき,それ ぞれのブロックを抜ける. continue breakは よく使う for, while, doの処理の中で使用でき,反復の先頭に戻 る. • forでは,増分してから条件判定へ • while, doでは,ただちに条件判定へ 注意点 ifやelseのブロックでbreakをすると,そのブロックではなく, すぐ外の(forなどの)ブロックを抜ける 多段の反復を一気に抜けることはできない(gotoが必要) 22 無限ループ たまに使う 例 while (1) { 処理 } for (;;) { 処理 } • 条件 (恒真) 処理 • 注意点 通常は,「処理」の中にif文を設け,何らかの条件でbreakに よって抜けるように書く. 23 まとめ 「反復」は,for, while, do~while 「分岐」は,if, switch~case breakはブロックを抜け,continueは反復の先頭に戻る. 適用される制御文に注意 24
© Copyright 2024 ExpyDoc