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