講義メモ 後半

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

・配列を初期化によって生成する場合、型を省略してvar型にできる
・書式: var 配列名 = new [] {値, …};
・こうすると、配列の型は指定されたすべての値を格納できる型に決まる
・例: var s = new []{"ABC", "DE"}; //string型になる
・例: var d = new []{1, 1.2f, 3.14}; //double型になる
・指定されたすべての値を格納できる型がない場合や、null指定の場合はエラーになる
・例: var e = new []{"1", 1.2f}; //エラー

p.147(int型を返すmainメソッド)

・mainメソッドは通常戻り値型はvoidだが、終了状態を示す整数値を返す「int main(){…}」とすることもできる
・こうした場合、正常終了であれば「return 0;」を、でなければ「return 負の数;」を記述できる
※ p.147 var03.csの場合「return 0;」しかしていないので、int型を返すmainメソッドにする必要性はない

p.147(配列とGetType)

・配列名.GetTypeは、文字列「.NET型名[]」を返す。例:"System.Int32[]"
・2次元配列名.GetTypeは、文字列「.NET型名[,]」を返す。例:"System.String[,]"
・2次元ジャグ配列名.GetTypeは、文字列「.NET型名[][]」を返す。例:"System.Double[][]"

アレンジ演習: p.147 var03.cs

・2次元配列もvar型にできることを確認しよう。また、GetTypeでの表示を確認しよう。
・ジャグ配列もvar型にできることを確認しよう。また、GetTypeでの表示を確認しよう。

作成例

//アレンジ演習:p.147 var03.cs
using System;
class var03
{
    public static void Main()
    {
        var name = new []{"太郎", "次郎", "三郎", "四郎"};
        for (var i = 0; i < name.Length; i++) {
            Console.WriteLine(name[i]); 
        }
        Console.WriteLine("nameの型は{0}", name.GetType()); //System.String[]
        var f = new[] { 0.5, 0.9, 1.5, 2.3 };
        for (var i = 0; i < f.Length; i++) {
            Console.WriteLine(f[i]);
        }
        Console.WriteLine("fの型は{0}", f.GetType()); //System.Double[]
        //【以下追加】
        var names = new [,]{{"太郎", "次郎" }, {"三郎", "四郎" } }; //2次元配列
        Console.WriteLine("namesの型は{0}", names.GetType()); //System.String[,]
        var namej = new []{new[]{"太郎", "次郎" }, new[]{"三郎"} }; //ジャグ配列
        Console.WriteLine("namejの型は{0}", namej.GetType()); //System.String[][]
    }
}

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

・C#が提供するArrayクラスのSortメソッドに引数として配列名を渡すと、全要素を昇順(小⇒大)に整列してくれる
・また、このクラスのReverseメソッドに引数として配列名を渡すと、全要素を逆順にしてくれる
・よって、全要素を降順(大⇒小)に整列するには、Sortメソッド、Reverseメソッドの順に用いると良い

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

・nameをvar型にしても動作することを確認しよう
・2次元配列やジャグ配列を渡すとどうなるか確認しよう

作成例

//アレンジ演習:p.148 sort01.cs
using System;
class sort01
{
    public static void Main()
    {
        var name = new []{"Eric", "Peter", "Frank", "Kate", "Thomas"}; //【変更】
        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]);
        }
        Console.WriteLine();
        Array.Reverse(name); //逆順にする(降順にソートしたことになる)
        for (int i = 0; i < name.Length; i++) {
            Console.WriteLine(name[i]);
        }
        //【以下追加】
        var names = new [,]{{200, 300 }, {100, 500 } }; //2次元配列
        //Array.Sort(names); //昇順にソートする ⇒ 実行時エラー
        var namej = new []{new[]{"太郎", "次郎" }, new[]{"三郎"} }; //ジャグ配列
        //Array.Sort(namej); //昇順にソートする ⇒ 実行時エラー
    }
}

アレンジ演習:p.150 foreach01.cs

・配列と作業変数を全てvar型にできることを確認しよう
・2次元配列を渡すとどうなるか確認しよう
 ⇒1次元配列と同様に全要素が順に用いられる
・ジャグ配列を渡すとどうなるか確認しよう
 ⇒foreachを2重ループにすることで、要素配列から全要素が順に用いられる

作成例

//アレンジ演習:p.150 foreach01.cs
using System;
class foreach01
{
    public static void Main()
    {
        var Animal = new string[]{"犬", "猫", "雉", "猿"}; //string[]型になる
        var Num = new int[]{10, 20, 30, 40}; //int[]型になる
        foreach (var str in Animal) { //string型になる
            Console.WriteLine(str);
        }
        Console.WriteLine();
        foreach (var i in Num) { //int型になる
            Console.WriteLine(i);
            //i = 0; //文法エラーになる
        }
        //【以下追加】
        Console.WriteLine();
        var names = new [,]{{200, 300 }, {100, 500 } }; //2次元配列
        foreach (var i in names) { //int型になる
            Console.WriteLine(i);
        }
        Console.WriteLine();
        var namej = new []{new[]{"太郎", "次郎" }, new[]{"三郎"} }; //ジャグ配列
        foreach (var i in namej) { //String[]型になる
            //Console.WriteLine(i); //System.String[]になってしまう
            foreach (var j in i) { //string型になる
                Console.WriteLine(j); //値が表示される
            }
        }
    }
}

p.152 練習問題 ex0601.cs ヒント

① intまたはvar型の変数として、受験者数、合計点を0で初期化
② コンソールから受験者数を入力し整数化 ※0以下が入力されたらやりなおし
③ 受験者数を要素数とする点数の配列を生成
④ 受験者数の分、下記を繰返す
 ・コンソールから点数を入力し整数化してて点数[添字]に代入
 ・点数を合計点に足しこむ
⑤ 合計点を実数化してから受験者数で割って平均点を得て表示
⑥ 点数の配列をソートし、逆順にする
⑦ 点数の配列の全要素を表示

作成例

//p.152 練習問題 ex0601.cs 
using System;
class ex0601
{
    public static void Main()
    {
        var num = 0; //受験者数
        var sum = 0; //合計点
        do {
            Console.Write("受験者数:"); num = int.Parse(Console.ReadLine());
        } while (num <= 0); //正の数が入力されるまで繰返す
        var point = new int[num]; //受験者数分の配列を生成
        for (int i = 0; i < num; i++) { //受験者数分だけ繰返す
            Console.Write("{0}番の点数:", i + 1); point[i] = int.Parse(Console.ReadLine());
            sum += point[i]; //合計に足し込む
        }
        Console.WriteLine("平均点={0}", (double)sum / num); //合計を実数化して受験者数で割る
        Array.Sort(point); //昇順にソート
        Array.Reverse(point); //逆順にすると降順になる
        Console.WriteLine("*** 点数(降順)***");
        foreach (var i in point) { //全点数について繰返す
            Console.WriteLine(i);
        }
    }
}

コメントを残す

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