講義メモ 後半

p.119 for文のネスト

・for文の中にif文が記述できるように、for文の中にfor文を記述できる。
・形式の中に同型の形式を置くことを入れ子・ネストという。
・回数指定のforの場合、二重繰り返しにすることで、2次元構造を表現しやすい
・for文のネストでカウンタ変数を用いる場合、名前は変えること(主に、外側から順にi、j、kとすることが多い)
・ネスト数の制限はない
for文の中でカウンタ変数の初期化するネストの例:
for (int i = 0; i < 6; i++) {
  for (int j = 0; j < 5; j++) {
    for (int k = 0; k < 20; k++) {
      Console.WriteLine("{0}年{1}組{2}番", i + 1, j + 1, k + 1); //6×5×20=600回実行
    }
  }
}

p.119 kuku01.cs

//p.119 kuku01.cs
using System;
class kuku01 {
    public static void Main() {
        int i, j; //繰り返しカウンタ(iは外側、jは内側)
        for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
            for (j = 1; j <= 9; j++) { //×1から×9について繰返す
                Console.WriteLine("{0} * {1} = {2}", i, j, i * j); //毎回実行(81回)
            }
            Console.WriteLine("------------"); //×9の後に実行(9回)
        }
    }
}

アレンジ演習:p.119 kuku01.cs

・下記のような九九表にしよう

  1  2  3  4  5  6  7  8  9
  2  4  6  8 10 12 14 16 18
  3  6  9 12 15 18 21 24 27
  4  8 12 16 20 24 28 32 36
  5 10 15 20 25 30 35 40 45
  6 12 18 24 30 36 42 48 54
  7 14 21 28 35 42 49 56 63
  8 16 24 32 40 48 56 64 72
  9 18 27 36 45 54 63 72 81
ヒント
・81回繰返す文はWriteLineではなくWriteにする
・表示はi * jのみで、3桁にしよう(p.29)
・9回繰返す文は改行のみのWriteLineにする

作成例

//p.119 kuku01.cs
using System;
class kuku01 {
    public static void Main() {
        int i, j; //繰り返しカウンタ(iは外側、jは内側)
        for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
            for (j = 1; j <= 9; j++) { //×1から×9について繰返す
                Console.Write("{0, 3}", i * j); //毎回実行(81回)積を3桁表示
            }
            Console.WriteLine(); //×9の後に実行(9回)改行のみ
        }
    }
}

アレンジ演習:p.119 kuku01.cs つづき

・下記のような段数までの九九表にしよう
  1  
  2  4  
  3  6  9 
  4  8 12 16
  5 10 15 20 25
  6 12 18 24 30 36
  7 14 21 28 35 42 49
  8 16 24 32 40 48 56 64
  9 18 27 36 45 54 63 72 81

作成例① ムダが大きいバージョン

//アレンジ演習:p.119 kuku01.cs
using System;
class kuku01 {
    public static void Main() {
        int i, j; //繰り返しカウンタ(iは外側、jは内側)
        for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
            for (j = 1; j <= 9; j++) { //×1から×9について繰返す
                if (j <= i) { //段数までなら
                    Console.Write("{0, 3}", i * j); //毎回実行(81回)積を3桁表示
                }
            }
            Console.WriteLine(); //×9の後に実行(9回)改行のみ
        }
    }
}

作成例② 無駄を省いたバージョン

//アレンジ演習:p.119 kuku01.cs
using System;
class kuku01 {
    public static void Main() {
        int i, j; //繰り返しカウンタ(iは外側、jは内側)
        for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
            for (j = 1; j <= 9; j++) { //×1から×9について繰返す
                if (j > i) { //段数を超えたら
                    break; //内側の繰り返しは終了
                }
                Console.Write("{0, 3}", i * j); //毎回実行(81回)積を3桁表示
            }
            Console.WriteLine(); //×9の後に実行(9回)改行のみ
        }
    }
}

作成例③ 最も無駄のないバージョン

//アレンジ演習:p.119 kuku01.cs
using System;
class kuku01 {
    public static void Main() {
        int i, j; //繰り返しカウンタ(iは外側、jは内側)
        for (i = 1; i <= 9; i++) { //1の段から9の段について繰返す
            for (j = 1; j <= i; j++) { //×1から×iについて繰返す
                Console.Write("{0, 3}", i * j); //毎回実行(81回)積を3桁表示
            }
            Console.WriteLine(); //×9の後に実行(9回)改行のみ
        }
    }
}

p.121(Math.PIフィールド)

・C#が提供する定数(p.39)の1つがMath.PIで、Mathクラスに含まれる(クラスは7章で後述)
・Math.PIには適当な精度の円周率が格納されている

p.121 Math.Sinメソッド

・C#が提供するメソッド(p.19)の1つがMath.Sinで、三角関数サインの機能
・ただし、受け取る値(引数)の単位は度ではなくラジアン値
・ラジアン値は180度を円周率とする値。つまり180度はMath.PI、360度はMath.PI×2
・受け取る値(引数)はdouble型で得られる結果もdouble型
・例:Console.WriteLine(Math.Sin(Math.PI)) ⇒ 0.0

p.122 Math.Roundメソッド

・C#が提供するメソッド(p.19)の1つがMath.Roundで、四捨五入の機能
・受け取る値(引数)はdouble型で得られる結果もdouble型
・例:Console.WriteLine(Math.Round(2.56)) ⇒ 3.0

p.121 sin01.cs

//p.121 sin01.cs
using System;
class sin01 {
    public static void Main() {
        double s; //計算用(角度ごとのsin値を格納する)
        //0度から180度(Math.PI)まで180÷45=4度ごとのラジアン値を求めて繰返す
        for (double a = 0.0; a <= Math.PI; a += Math.PI / 45.0) { //1の段から9の段について繰返す
            s = Math.Sin(a); //サイン値を得る
            Console.Write("{0,7:#.#####}:", s); //小数点以下5桁まで全7桁でサイン値を表示
            //サイン値が1の時に50回になるように繰返す
            for (int i = 1; i <= Math.Round(s * 50); i++) {
                Console.Write("*"); //サイン値に比例する数だけ"*"を表示
            }
            Console.WriteLine(); //最期の"*"後に改行
        }
    }
}

アレンジ演習:p.121 sin01.cs

・1行目の「0.0」が表示されず、小数点の位置がずれていることを改善しよう
・小数点以下を5桁固定で末尾の0を省略しないようにしよう

作成例

//アレンジ演習:p.121 sin01.cs
using System;
class sin01 {
    public static void Main() {
        double s; //計算用(角度ごとのsin値を格納する)
        //0度から180度(Math.PI)まで180÷45=4度ごとのラジアン値を求めて繰返す
        for (double a = 0.0; a <= Math.PI; a += Math.PI / 45.0) { //1の段から9の段について繰返す
            s = Math.Sin(a); //サイン値を得る
            Console.Write("{0,7:#.00000}:", s); //小数点以下5桁まで全7桁でサイン値を表示
            //サイン値が1の時に50回になるように繰返す
            for (int i = 1; i <= Math.Round(s * 50); i++) {
                Console.Write("*"); //サイン値に比例する数だけ"*"を表示
            }
            Console.WriteLine(); //最期の"*"後に改行
        }
    }
}

提出:アレンジ演習:p.121 sin01.cs

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です