講義メモ ・p.127「do while文」から 提出:アレンジ演習:p.125 menu01.cs ・終了フラグ「bool bEnd = false;」を用いずに同じ処理になるようにしよう 作成例 //アレンジ演習:p.125 menu01.cs using System; class menu01 { public static void Main() { //bool bEnd = false; //【削除】bool型の変数で表した終了フラグをオフにする while (true) { //無限ループ Console.WriteLine("***** Menu *****"); Console.WriteLine("0:終了"); Console.WriteLine("1:ファイル"); Console.WriteLine("2:編集"); Console.WriteLine("****************"); Console.Write("選択---- "); string strAns = Console.ReadLine(); switch (strAns) { //入力された文字列に応じて分岐 case "0": //0:終了 //bEnd = true; //【削除】終了フラグをオンにする break; //switch構造を抜ける(繰返しは抜けない) case "1": //1:ファイル Console.WriteLine("ファイルが選択されました"); break; //switch構造を抜ける(繰返しは抜けない) case "2": //2:編集 Console.WriteLine("編集が選択されました"); break; //switch構造を抜ける(繰返しは抜けない) default: Console.WriteLine("入力に間違いがあります"); break; //switch構造を抜ける(繰返しは抜けない) } Console.WriteLine(); //改行 if (strAns == "0") { //【変更】0が入力されていた? Console.WriteLine("それでは、このプログラムを終了します"); break; //繰り返しを抜ける } } } } p.127 do while文 ・for文、while文は前判定繰り返しであり、繰り返しの1回目の直前に継続条件をチェックする ・よって、1度も繰返さないことがある場合にも便利 ・しかし、実行してみないと繰返すかどうか決められない場合は、後判定繰り返しの方が良い ・後判定繰り返しにはdo while文を用いる ・書式: do { 繰り返し内容 } while(継続条件); //末尾にセミコロンが必須 ※「繰り返し内容が1行の場合{}を省略できる」が、推奨されない。 ・利用例としては「特定の値が得られるまで繰返す」が多い 例: string ans; do { Console.Write("もう一回?(y/n):"); ans = Console.ReadLine(); } while (ans != "y" && ans != "n"); //つまり、yかnが入力されていたら抜ける アレンジ演習:p.128 do_while01.cs ・上記の例を追記して動作を確認しよう 作成例+参考 //p.128 do_while01.cs using System; class do_while01 { public static void Main() { int i = 10; do { //後判定繰り返しに入る Console.WriteLine("i = {0}", i); //1回目は無条件に実行 } while (i > 20); //継続条件に合わないので繰り返し終了 string ans; do { Console.Write("もう一回?(y/n):"); ans = Console.ReadLine(); } while (ans != "y" && ans != "n"); //つまり、yかnが入力されていたら抜ける //【参考】何かが入力されるまで繰返す場合 do { ans = Console.ReadLine(); } while (ans == ""); //何も入力されなければ抜けない } } ※ 5.6 goto文は基本的に禁止されているので扱いません p.130 continue ・繰り返し構文の中でbreakを実行すると、その繰り返しからの脱出が可能 ・代わりにcontinueを実行すると、繰り返し処理の残りをスキップして、繰り返しを続行できる ・「次行こう、次」のイメージ ・繰り返しの内容がシンプルな場合はif等で代用できるが、ifのネストなどで複雑になっている場合には非常に便利 アレンジ演習① p.130 continue01.cs ・continueを用いずに同じ処理を行うようにしよう 作成例 //アレンジ演習① p.130 continue01.cs --- 0から100未満の2の倍数の合計を求める using System; class continue01 { public static void Main() { int sum = 0; for (int i = 0; i < 100; i++) { if (i % 2 == 0) { //iを2で割って余りが0かどうか(偶数かどうか) sum += i; Console.WriteLine("i = {0, 2}, sum = {1, 4}", i, sum); //【移動】 } } Console.WriteLine("合計は {0}です", sum); } } アレンジ演習② p.130 continue01.cs ・iが奇数の場合に、continueを実行する代わりに  「続けますか?(y/n)」と表示して、yが入力されたらcontine、nが入力されたらbreakしよう 作成例 //アレンジ演習② p.130 continue01.cs --- 0から100未満の2の倍数の合計を求める using System; class continue01 { public static void Main() { int sum = 0; for (int i = 0; i < 100; i++) { if (i % 2 == 0) { //iを2で割って余りが0かどうか(偶数かどうか) sum += i; Console.WriteLine("i = {0, 2}, sum = {1, 4}", i, sum); } else { //奇数? Console.Write("続けますか?(y/n):"); string ans = Console.ReadLine(); if (ans == "y") { continue; //次の偶数に進む } else { break; //次の偶数に進まないで繰り返しを抜ける } } } Console.WriteLine("合計は {0}です", sum); } } アレンジ演習③ p.130 continue01.cs ・y/n以外が入力されたら、y/nが入力されるまで繰返すようにしよう(二重ループになる) 作成例 //アレンジ演習③ p.130 continue01.cs --- 0から100未満の2の倍数の合計を求める using System; class continue01 { public static void Main() { int sum = 0; for (int i = 0; i < 100; i++) { if (i % 2 == 0) { //iを2で割って余りが0かどうか(偶数かどうか) sum += i; Console.WriteLine("i = {0, 2}, sum = {1, 4}", i, sum); } else { //奇数? string ans; do { Console.Write("続けますか?(y/n):"); ans = Console.ReadLine(); } while (ans != "y" && ans != "n"); if (ans == "y") { continue; //次の偶数に進む } else { break; //次の偶数に進まないで繰り返しを抜ける } } } Console.WriteLine("合計は {0}です", sum); } } p.132 練習問題1 ヒント ・BMI=体重÷(身長×身長)なので、これが22となる体重は 22×身長×身長 で得られる ・この身長はメートル単位なので、センチメートルにすると 22×(身長÷100)×(身長÷100) ・この計算を、身長=160から身長<=180について1刻みで繰り返し、身長と体重を表示すれば良い 実行例: 身長:160 体重:56.32 身長:161 体重:57.0262 身長:162 体重:57.7368 身長:163 体重:58.4518 身長:164 体重:59.1712 身長:165 体重:59.895 身長:166 体重:60.6232 身長:167 体重:61.3558 身長:168 体重:62.0928 身長:169 体重:62.8342 身長:170 体重:63.58 身長:171 体重:64.3302 身長:172 体重:65.0848 身長:173 体重:65.8438 身長:174 体重:66.6072 身長:175 体重:67.375 身長:176 体重:68.1472 身長:177 体重:68.9238 身長:178 体重:69.7048 身長:179 体重:70.4902 身長:180 体重:71.28 作成例 //p.132 練習問題1 using System; using System.Security.Cryptography; class continue01 { public static void Main() { for(double height = 160; height <= 180; height++){ //身長160cmから180cmについて繰り返す double weight = 22 * (height / 100) * (height / 100); //その身長でBMIが22になる体重を得る Console.WriteLine("身長:{0} 体重:{1}", height, weight); //身長と体重を表示 } } } p.132 練習問題2 ヒント ・合計用の変数sumを0で初期化しておく ・コンソールから整数nを入力することを、1以上の値が入力されるまで繰返す ・カウント用の変数iを1からnまでについて「sumにiを足しこむこと」を繰返す ・sumの値を表示 作成例(シンプルバージョン) //p.132 練習問題2 using System; class ex0502 { public static void Main() { int sum = 0, n = 0; //合計用、入力用 do { Console.Write("n : "); n = int.Parse(Console.ReadLine()); } while (n <= 0); for(int i = 1; i <= n; i++){ //1から入力値について繰返す sum += i; //合計に足し込む } Console.WriteLine("結果:{0}", sum); //表示 } } 作成例(リッチバージョン) //p.132 練習問題2 using System; class ex0502 { public static void Main() { int sum = 1, n = 0; //合計用、入力用 do { Console.Write("n : "); n = int.Parse(Console.ReadLine()); } while (n <= 0); Console.Write("1"); //式の先頭を表示 for(int i = 2; i <= n; i++){ //1から入力値について繰返す Console.Write(" + {0}", i); //式の途中を表示 sum += i; //合計に足し込む } Console.WriteLine(" = {0}", sum); //合計を表示 } } 第6章 配列 p.133 6.1 配列とは ・配列とは、同じ型で同じ意味の変数をまとめて「●●の■番目」として扱う仕組み ・この●●を配列名、■を添字(インデックス、指標)という。 ・配列に含まれる変数を要素といい、その数を要素数という ・配列の利用には変数と同様に宣言が必要 ・宣言の書式: 型[] 配列名; ・そして、宣言した配列名を用いて、要素数に応じた領域を確保する(配列の生成) ・生成の書式: 配列名 = new 型[要素数]; ・基本的に宣言の型と生成の型は等しくなる ・宣言と生成は(変数の宣言と代入のように)まとめて実行できる ・宣言と生成の書式: 型[] 配列名 = new 型[要素数]; ・例:  string[] names = new string[3]; //3つの名前を格納する配列の宣言と生成 ・宣言と生成の代わりに、配列に格納する値を用いた初期化も可能 ・初期化の書式: 型[] 配列名 = {値①, 値②, …}; ・この書式を用いると、要素数が値の数で決まるので、保守性が高くなる ・例:  string[] names = {"スラリン", "ホイミン"}; //配列namesの要素数は2  string[] names = {"スラリン", "ホイミン", "リムル"}; //配列namesの要素数は3になる ※ 要素数を記述する書式もあるが、チームルールでその利用を禁止する場合もある ※ C/C++では要素数が初期値の数より小さくてもOKだが、C#では文法エラーになる ・要素は「配列名[添字]」で変数と同様に扱える ・なお、添字は0スタートであり、末尾の要素の添字は要素数-1。配列名[要素数]は存在しないので注意。 ・例(上の例の場合):  names[0]は"スラリン"、names[1]は"ホイミン"、names[2]は"リムル"、names[3]はない ・配列はC#システム内部でstring型と同様にオブジェクト扱いになっており、要素数を返すLengthプロパティがある ・利用書式: 配列名.Length ・よって、配列の全要素に対する繰り返しでは、要素数を記述する代わりにLengthを用いると良い ※ チームルールで要素数を記述することを禁止する場合もある 提出:アレンジ演習 p.136 average02.cs ・点数を3個から4個にしても、それ以外を一切変更する必要がないことを確認しよう 次回予告:p.137「2次元配列」から