Tips

C# 練習問題 12

C# 練習問題 12

C# 練習問題 12


C#のオリジナル練習問題です。
今回は配列からの出題です。

問題①


以下の選択肢のうち、配列の宣言として正しいものを全て選びなさい

A. int[] a;
B. string[] b;
C. float c[];
D. double[3] d;
E. Object[] e;

問題②


以下の選択肢のうち、配列の生成および初期化としてコンパイルが成功するものを全て選びなさい

A. int[] a = new int[];
B. int[] b = new int[0];
C. int[] c = new int[3] { 1 };
D. int[] d = new int[]{ 1, 2, 3 };
E. int[] e = { };

問題③


次のコードと出力結果を確認してください。

using System;
class Practice12_Q3 {
	static void Main(string[] args) {

		string[] array = { "ネコ", "は", "魚", "が", "好き", };
		Console.Write(/* insert code here */);

	}
}

6行名どのコードを挿入すると、「ネコは魚が好き」と出力されますか。1つ選びなさい。

A. array[1] + array[2] + array[3] + array[4] + array[5]
B. array[0] + array[1] + array[2] + array[3] + array[4]
C. array[5] + array[4] + array[3] + array[2] + array[1]
D. array
E. array.Length

問題④


次のコードと出力結果を確認してください。

using System;
class Practice12_Q4 {
	static void Main(string[] args) {
		int[] ary = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

		foreach (int i in ary) {

			if (i % 2 == 0) {
				continue;
			}
			Console.Write(i);
		}
	}
}

上記のコードをコンパイル、および実行したときの結果について、正しいものを1つ選択しなさい。

A. 02468
B. 13579
C. 0123456789
D. 無限ループになる
E. コンパイルエラーが発生する

解答・解説を見る

解答・解説


配列とは、同じデータ型の値を複数まとめて扱えるデータ構造です。

問題①の解説


配列の宣言の構文は以下の通りです。

構文

データ型[] 配列名;

データ型にはintなどの値型や、Objectなどの参照型のいずれも指定することができます。
データ型の後に[]を付けることで、直後の識別子が配列となります。
配列名に使える識別子のルールは、変数と同じです。(識別子の解説はこちら → C# 練習問題 1
構文通りに宣言されている選択肢 A、 B、 E が正解となります。
ちなみに、C#では選択肢Cのように配列名の後ろに[]を付ける形式は許可されずコンパイルエラーとなります。
選択肢Dも、宣言時の[]内に要素数を記述することもできないため間違いです。

《答え》A、B、E

問題②の解説


配列は宣言しただけでは使えません。配列を宣言したら、配列の生成を行います。
配列の生成の構文は以下の通りです。

構文

配列名 = new データ型[要素数];

配列の宣言と生成は一度に行うことができます。

構文

データ型[] 配列名 = new データ型[要素数];

要素数とは、その配列が確保する領域の数です。
要素数の数だけ配列にデータを格納することができます。

また、配列の生成時に{}を使って初期値を与えることを配列の初期化といいます。

構文

データ型[] 配列名 = new データ型[] { 要素1, 要素2, 要素3, … };
データ型[] 配列名 = new データ型[3] { 要素1, 要素2, 要素3 };

1つ目では要素数を指定していませんが、{}で渡した値の数だけ配列の領域が確保されます。
2つ目では要素数を指定しています。その場合{}で渡す初期値は指定した数だけ必要です。
次のように記述することもできます。

構文

データ型[] 配列名 = { 要素1, 要素2, 要素3, … };

こちらも要素の数だけ自動的に領域が確保され、要素数が決定します。

では、それぞれの選択肢を見てみましょう。
選択肢A
int[] a = new int[];
右辺の[]に要素数が指定されていないため、コンパイルエラーとなります。
※ 初期化を伴わない場合、要素数は必ず指定する必要があります。
選択肢B
int[] b = new int[0];
正しい配列の生成であるため、正解です。
選択肢C
int[] c = new int[3] { 1 };
要素数が3なのに対して、初期値が1つしか渡されていないためコンパイルエラーとなります。
選択肢D
int[] d = new int[] { 1, 2, 3 };
要素数の数だけ初期値が渡されているため、正解です。
選択肢E
int[] e = { };
この場合、要素数0の配列が生成されます。構文的には問題ないため正解です。

《答え》B、D、E

問題③の解説


配列からの要素取得と代入の構文は以下の通りです。

構文

Console.Write( 配列名[インデックス] );
配列名[インデックス] = 値;

インデックスは添え字や要素番号とも呼びます。
インデックスは0から数え始めることに注意しましょう。
例えば配列の先頭のデータを取得する場合、配列名[0] と記述します。

問題文の配列 array は、データ型はstring、配列名がarray、要素数は5つの配列です。
それぞれの要素と中身の値が以下のように対応します。
array[0] → “ネコ”
array[1] → “は”
array[2] → “魚”
array[3] → “が”
array[4] → “好き”
これを文字列結合で出力すると、「ネコは魚が好き」となるため、Bが正解となります。
ちなみに、選択肢Dのように配列名をそのまま出力すると、System.String[] と出力されます。
選択肢Eの「配列名.Length」は、配列の要素数を取得します。本問であれば5となります。

《答え》B

問題④の解説


配列から値を全て取り出したいとき、C#ではforeach文を使うと便利です。
foreach文は、引数で与えた配列の要素数分だけループします。

構文

foreach (データ型 変数名 in 配列名) {
// 処理
}

注意点としては、キーワード in の前の変数のデータ型を配列のデータ型と一致させることです。
処理がループする度に、配列の要素が先頭から1つずつ変数に取り出されるイメージで動きます。

本問では整数型の配列 ary の中身が、変数 i に取り出されます。
i の値が2の倍数だとcontinueして次のループに進むため、偶数は出力されません。
奇数のみ出力されるため、出力結果は「13579」となり、Bが正解です。

《答え》B

※ Console.Write()
()の中をコンソール画面に出力します。その際、改行は行われません。
※ Console.WriteLine()
()の中をコンソール画面に出力し、改行します。

< 次の問題  前の問題 > >>

[Unity_317×90]

ゲーム制作関連のオススメ連載リンク

とっても手軽なゲーム制作体験!
Unityゲーム開発基礎

実際のリリースゲームを題材にしたハンズオンゲーム制作連載
実践unityゲーム開発

Recent News

Recent Tips

Tag Search