講義メモ

・p.150「foreach文による反復処理」から

提出フォロー:アレンジ演習:p.148 sort01.cs

・5人の名前を全て小文字にした要素を追加して10要素にし、どう整列されるか確認しよう
 ⇒小文字と大文字は同じ順序だが、同じ字の小文字と大文字では小文字の方が前になる
・英記号「!,#,$,%,&」がどう整列されるか確認しよう
 ⇒文字コード順になる(文字コードは順に 21,23,24,25,26)
・負の数を含む実数値の場合、どう整列されるか確認しよう
 ⇒小さい(-∞に近い)ものからの順になる
・「ちぢっつづてで」のように小文字や濁点を含むひらがなの場合、どう整列されるか確認しよう
 ⇒文字コード順になる(文字コードは順に 3061,3062,3063,3064,3065,3066,3067)

作成例

//アレンジ演習:p.148 sort01.cs
using System;
class sort01 {
    public static void Main() {
        string[] name = new string[10]{
            "Eric", "Peter", "Frank", "Kate", "Thomas", 
            "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]);
        }
        char[] c = {'!', '#' , '$' , '%', '&'}; //文字コード 21,23,24,25,26
        Array.Sort(c); //文字コード順になる
        for (int i = 0; i < c.Length; i++) {
            Console.WriteLine(c[i]);
        }
        double[] d = {-3.14, 3.14, 2.25, 0, -2.25}; //負の数を含む実数値
        Array.Sort(d); //小さい(-∞に近い)ものからの順になる
        for (int i = 0; i < d.Length; i++) {
            Console.WriteLine(d[i]);
        }
        char[] j = {'ち','ぢ','っ','つ','づ', 'て', 'で'}; //文字コード 3061,3062,3063,3064,3065,3066,3067
        Array.Sort(j); //文字コード順になる
        for (int i = 0; i < j.Length; i++) {
            Console.WriteLine(j[i]);
        }
    }
}

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

・foreach文は配列などのデータ構造の全要素について繰返したい場合の簡略構文で、各種の構造に対応している
・ここでは配列での利用法の理解を。
・配列における書式: foreach (型 作業変数名 in 配列名) {繰返し内容}
・配列から1要素ずつ作業変数にコピーされるので、これを用いる処理を繰返し内容に記述する
・ただし、作業変数はコピーなので、書き換えはエラーになる
・よって、配列の要素値に格納したり、変更したりする処理は記述できない
・なお、配列における書式では、配列の型情報が得られるので、作業変数の型は暗黙の型(var)で良い
 ※ チームルールによっては、foreach文の作業変数の型はvarのみとしている場合ある

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

・2つあるforeach文の作業変数の型をvarにしよう

作成例

//アレンジ演習: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 (var str in Animal) { //作業変数strは自動的にAnimalのstring型になる
            Console.WriteLine(str);
        }
        Console.WriteLine();
        foreach (var i in Num) { //作業変数iは自動的にNumのint型になる
            Console.WriteLine(i);
        }
    }
}

アレンジ演習:p.150 foreach01.cs(続き)

・以下の2次元配列の全要素をforeachで表示しよう
  string[,] Animal = new [,]{{"犬", "猫"}, {"雉", "猿"}};
・以下のジャグ配列の全要素をforeachで表示しよう(2重ループになる)
  int[][] Num = new[]{new[]{10, 20, 30}, new[]{40, 50}};

作成例

//アレンジ演習:p.150 foreach01.cs
using System;
class foreach01
{
    public static void Main()
    {
        string[,] Animal = new [,]{{"犬", "猫"}, {"雉", "猿"}}; //2次元配列
        foreach (var str in Animal) { //1次元配列の場合と全く同じで良い
            Console.WriteLine(str);
        }
        Console.WriteLine();
        int[][] Num = new[]{new[]{10, 20, 30}, new[]{40, 50}}; //ジャグ配列は配列の配列なので
        foreach (var i in Num) { //作業変数iは自動的に配列になる
            foreach (var j in i) { //よって作業変数jは内側の配列の要素になる
                Console.WriteLine(j);
            }
        }
    }
}

p.152 練習問題 ヒント

・合計用の変数を0で初期化
・コンソールに「受験者数:」と表示し、受験者数の変数に入力
・受験者数を要素数とする点数の配列を生成
・カウンタ用の変数を0から受験者数未満について繰返しながら:
 ①点数の配列の各要素に点数を入力
 ②点数の配列の各要素の値を合計用の変数に足し込む
・合計用の変数を実数に変換し、受験者数で割って平均値を得て表示
・点数の配列をソート
・点数の配列をリバース(逆順にすることで降順になる)
・点数の配列の全件を表示

作成例

//p.152 練習問題
using System;
class ex0601 {
    public static void Main() {
        int sum = 0; //合計用の変数を0で初期化
        Console.Write("受験者数:"); int num = int.Parse(Console.ReadLine()); 
        int[] point = new int[num]; //受験者数を要素数とする点数の配列を生成
        for (int i = 0; i < num; i++) { //カウンタ用の変数を0から受験者数未満について繰返し
            Console.Write("{0}:", i); point[i] = int.Parse(Console.ReadLine()); 
            sum += point[i]; //点数の配列の各要素の値を合計用の変数に足し込む
        }
        Console.WriteLine("平均値:{0}",(double)sum / num); //合計用の変数を実数に変換し、受験者数で割って平均値を得て表示
        Array.Sort(point); //点数の配列をソート
        Array.Reverse(point); //点数の配列をリバース(逆順にすることで降順になる)
        foreach (int i in point) { //点数の配列の全件について繰返す
            Console.WriteLine(i);
        }
    }    
}

コメントを残す

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