・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);
}
}
}