講義メモ

・p.147「暗黙の型指定がなされた配列」から

提出:アレンジ演習:p.146 jagged02.cs

・2つあるforを2重ループにして見やすくしよう
・ヒント:下記の●を0から1まで繰返せばよい
        for (int j = 0; j < name[●].Length; j++) { //含まれる配列の要素数について繰返す
            Console.WriteLine(name[●][j]); //含まれる配列の要素を表示
        }

作成例

//アレンジ演習:p.146 jagged02.cs
using System;
class jagged02 {
    public static void Main() {
        string[][] name = new string[2][]; //(2次元)ジャグ配列の宣言と上位次元の要素数=含む配列の数は2と指定
        name[0] = new string[2]{"田中", "工藤"}; //含まれる配列①の初期化(2要素)
        name[1] = new string[3]{"吉田", "佐藤", "池田"}; //含まれる配列②の初期化(3要素)
        for (int i = 0; i < name.Length; i++) { //含まれる配列数(2)について繰返す
            for (int j = 0; j < name[i].Length; j++) { //含まれる配列のそれぞれの要素数(2,3)について繰返す
                Console.WriteLine(name[i][j]); //含まれる配列の要素を表示
            }
        }
    }
}

p.147 暗黙の型指定がなされた配列

・varキーワードにより、初期化された変数の型を自動決定できる(p.61)
・これは、配列に対しても適用可能
・「var []」や「var [][]」などになるわけではなく、配列としての型になる
・書式例: var 配列名 = new []{値,…};

p.147 var03.cs

//p.147 var03.cs
using System;
class var03
{
    public static int Main()
    {
        var name = new []{"太郎", "次郎", "三郎", "四郎"}; //nameはstring[]型となる
        for (var i = 0; i < name.Length; i++) { //Lengthは4になる
            Console.WriteLine(name[i]);
        }
        var f = new[] { 0.5, 0.9, 1.5, 2.3 }; //fはdouble型になる
        for (var i = 0; i < f.Length; i++) { //Lengthは4になる
            Console.WriteLine(f[i]);
        }
        Console.WriteLine("nameの型は{0}, naの型は{1}", name.GetType(), f.GetType()); //System.String[],System.Double[]
        return 0;
    }
}

アレンジ演習:p.146 jagged02.cs ②

・配列nameをvarで暗黙の型指定ができるかどうか確認しよう
・可能であり、string[][]型になる。

作成例

//アレンジ演習:p.146 jagged02.cs
using System;
class jagged02 {
    public static void Main() {
        var name = new string[2][]; //(2次元)ジャグ配列の宣言と上位次元の要素数=含む配列の数は2と指定
        name[0] = new string[2]{"田中", "工藤"}; //含まれる配列①の初期化(2要素)
        name[1] = new string[3]{"吉田", "佐藤", "池田"}; //含まれる配列②の初期化(3要素)
        for (int i = 0; i < name.Length; i++) { //含まれる配列数(2)について繰返す
            for (int j = 0; j < name[i].Length; j++) { //含まれる配列のそれぞれの要素数(2,3)について繰返す
                Console.WriteLine(name[i][j]); //含まれる配列の要素を表示
            }
        }
    }
}

p.148 1次元配列のソート

・C#が提供するArrayというクラスがあり、配列を扱う便利なメソッド等を持っている
・その1つがArray.Sortで、引数として1次元配列名を指定すると、要素を昇順に整列する
・また、全要素を逆順にするArray.Reverseもあり、Array.Sortの後に実行することで降順の整列にできる

p.148 sort01.cs アレンジ演習

・かなや漢字での動作を確認しよう
① new string[5]{"あ", "ぁ", "ア", "ァ", "亜"};
 ⇒ ァ、ぁ、ア、あ、亜 となる
② new string[5]{"一", "二", "三", "四", "五"};
 ⇒ 一、五、三、四、二 となる
③ new double[5]{3.14, -3.14, 0.0, -1 / 0.0, 1 / 0.0}; //「-1 / 0.0」は-∞、「1 / 0.0」は∞
 ⇒ -∞、-3.14、0、3.14、∞ となる

作成例③

//アレンジ演習:p.148 sort01.cs
using System;
class sort01
{
    public static void Main()
    {
        //string[] name = new string[5]{"あ", "ぁ", "ア", "ァ", "亜"}; //①
        //string[] name = new string[5]{"一", "二", "三", "四", "五"}; //②
        double[] name = new double[5]{3.14, -3.14, 0.0, -1 / 0.0, 1 / 0.0}; //③「-1 / 0.0」は-∞、「1 / 0.0」は∞
        for (int i = 0; i < name.Length; i++) { //全要素について
            Console.WriteLine(name[i]); //整列前を表示
        }
        Console.WriteLine(); //改行
        Array.Sort(name); //昇順に整列
        for (int i = 0; i < name.Length; i++) { //全要素について
            Console.WriteLine(name[i]); //整列後を表示 -∞、-3.14、0、3.14、∞ となる
        }
        Console.WriteLine(); //改行
        Array.Reverse(name); //逆順にする(Sort後なので降順になる)
        for (int i = 0; i < name.Length; i++) { //全要素について
            Console.WriteLine(name[i]);
        }
    }
}

p.150 foreach文による反復処理

・for文の変型で「データ構造(コレクション)に属する全データについて繰返す」のが、foreach文
・配列を指定すると「配列の全要素について繰返す」となるので便利
・foreachでは、作業用の変数を指定して、そこに1つずつデータ(要素値)が得られる
・書式: foreach(型 作業用の変数 in 配列等のコレクション名) { 作業用の変数を用いる処理 }
※ 作業用の変数の型は、配列等のコレクションの型にするが、varにすることが多い
※ 作業用の変数は要素値のコピーなので、値を書き換えても元の値には影響しない

p.150 foreach01.cs

//p.150 foreach01.cs
using System;
class foreach01
{
    public static void Main()
    {
        string[] Animal = new string[]{"犬", "猫", "雉", "猿"};
        int[] Num = new int[]{10, 20, 30, 40};
        foreach (string str in Animal) { //配列Animalの全要素について繰返す
            Console.WriteLine(str);
        }
        Console.WriteLine(); //改行
        foreach (int i in Num) { //配列Numの全要素について繰返す
            Console.WriteLine(i);
        }
    }
}

アレンジ演習 p.148 sort01.cs ②

・foreachを用いて簡略化しよう
・作業変数の型はvarにすること

作成例

//アレンジ演習:p.148 sort01.cs ②
using System;
class sort01
{
    public static void Main()
    {
        //string[] name = new string[5]{ァ、ぁ、ア、あ、亜};
        //string[] name = new string[5]{"一", "二", "三", "四", "五"};
        double[] name = new double[5]{3.14, -3.14, 0.0, -1 / 0.0, 1 / 0.0}; //「-1 / 0.0」は-∞、「1 / 0.0」は∞
        foreach (var w in name) { //【変更】全要素について
            Console.WriteLine(w); //整列前を表示
        }
        Console.WriteLine(); //改行
        Array.Sort(name); //昇順に整列
        foreach (var w in name) { //【変更】全要素について
            Console.WriteLine(w); //整列前を表示
        }
        Console.WriteLine(); //改行
        Array.Reverse(name); //逆順にする(Sort後なので降順になる)
        foreach (var w in name) { //【変更】全要素について
            Console.WriteLine(w); //整列前を表示
        }
    }
}

p.152 練習問題 ヒント

・p.136 Average02.csを元にすると良い
・実行イメージから考えよう

受験者数:3
1人目の点数:50
2人目の点数:60
3人目の点数:80
平均点は63.3
降順にすると
80
60
50

作成例

//p.152 練習問題
using System;
class average02 {
    public static void Main() {
        Console.Write("受験者数:"); int no = int.Parse(Console.ReadLine());
        int[] point = new int[no]; //int型の配列pointを受験者数の分生成
        int sum = 0; //合計
        for (int i = 0; i < no; i++) { //全要素について繰返す(※要素値を書き換えるのでforeachは不可)
            Console.Write("{0}番:", i + 1); point[i] = int.Parse(Console.ReadLine());
            sum += point[i]; //要素値をsumに足し込む
        }
        double average = (double)sum / no; //合計を件数で割って平均値を得る
        Console.WriteLine("平均点 = {0:##.#}", average); //平均値(小数点以下1桁)を表示
        Array.Sort(point); //昇順に整列
        Array.Reverse(point); //逆順にする(Sort後なので降順になる)
        Console.WriteLine("降順にすると");
        foreach (var w in point) { //全要素について繰返す
            Console.WriteLine(w);
        }
    }
}

コメントを残す

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