Tips

C# 練習問題 7

C# 練習問題 7

C# 練習問題 7


C#のオリジナル練習問題です。

問題①


次のコードを確認してください。

using System;

namespace Blog {
	class Practice7_Q1 {
		static void Main(string[] args) {

			bool b1 = 10 < 10;
			bool b2 = 10 != 11;

			Console.Write(b1 + " " + b2);
		}
	}
}

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

A. True True
B. True False
C. False True
D. False False

問題②


次のコードを確認してください。

using System;

namespace Blog {
	class Practice7_Q2 {
		static void Main(string[] args) {

			bool b1 = 10 != 10 ^ 20 >= 20;
			bool b2 = 10 == 10 ^ 20 <= 20;

			Console.Write(b1 + " " + b2);
		}
	}
}

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

A. True True
B. True False
C. False True
D. False False

問題③


次のコードを確認してください。

using System;

namespace Blog {
	class Practice7_Q3 {
		static void Main(string[] args) {

			int m = 0, n = 0;

			bool b1 = m++ > 0 && n++ > 0;
			bool b2 = ++m > 1 || ++n > 1;

			Console.Write(b1 + " " + b2 + " " + m + " " + n);
		}
	}
}

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

A. True True 2 2
B. True False 2 1
C. False False 2 0
D. False True 2 0
E. False False 2 1
F. False True 2 2

解答・解説を見る

解答


問題①:C
問題②:B
問題③:D

解説


関係演算子論理演算子についての問題です。

関係演算子
関係演算子 使用例 説明
> x > y xがyより大きい場合にTrue。
>= x >= y xがyより大きいか等しい場合にTrue。
< x < y xがyより小さい場合にrue。
<= x <= y xがyより小さいか等しい場合にTrue。
== x == y xとyが等しい場合にTrue。
!= x != y xとyが等しくない場合にTrue。
論理演算子
論理演算子 使用例 説明
!x xがTrueでない場合にTrue。(否定 NOT)
& x & y xとyが共にTrueであればTrue、それ以外はFalse。(論理積 AND)
左右のオペランドを演算する。
&& x && y xとyが共にTrueであればTrue、それ以外はFalse。(論理積 AND)
xがFalseの場合、yは演算されない。
| x | y xとyのいずれかがTrueであればTrue、それ以外はFalse。(論理和 OR)
左右のオペランドを演算する。
|| x || y xとyのいずれかがTrueであればTrue、それ以外はFalse。(論理和 OR)
xがTrueの場合、yは演算されない。
^ x ^ y xとyが等しくない場合True、それ以外はFalse。(排他的論理和 XOR)

問題①の解説


関係演算子「<」は、左辺が右辺よりも小さい場合にTrueとなります。
したがって、双方が同じ値である場合、Falseとなります。
また、「!=」は、左辺と右辺が等しくない場合にTrueとなります。

上記のルールに則った演算結果は以下の通りであり、
10 < 10 ⇒ False
10 != 11 ⇒ True

「False True」と出力されるため、答えはCとなります。

問題②の解説


論理演算子「^」は、双方の論理値が異なる場合のみTrueを返します。

関係演算子の結果を論理値で書き換えると以下のようになり、
10 != 10 ^ 20 >= 20 ⇒ False ^ True ⇒ True
10 == 10 ^ 20 <= 20 ⇒ True ^ True ⇒ False

「False True」と出力されるため、答えはBとなります。

問題③の解説


インクリメント、関係演算子、論理演算子の複合問題です。
この問題では、「&&」と「||」の左右のオペランドの扱いと、インクリメントの前置後置に注意します。

[csharp firstline=”7″] int m = 0, n = 0;

bool b1 = m++ > 0 && n++ > 0; // 実行後、m = 1, n = 0
bool b2 = ++m > 1 || ++n > 1; // 実行後、m = 2, n = 0
[/csharp]

最初、m ⇒ 0、n ⇒ 0 であるため、m++ > 0 && n++ > 0 の結果はFalseとなります。
m++ > 0 と n++ > 0 はそれぞれ個別に評価してもFalseですが、「&&」は左オペランドがFalseのとき右オペランドを評価しないため、n++ > 0 は無視されています。
その結果、mの値は後置の++によって式の評価後にインクリメントされて 1 となりますが、無視されたnの値は 0 のままとなります。

次の式は、m ⇒ 1、n ⇒ 0 で開始され、++m > 1 || ++n > 1 の結果はTrueとなります。
mの値は前置の++によって、式の評価前にインクリメントされて 2 となっているため、++m > 1 を個別に評価するとTrueです。
「||」は左オペランドがTrueのとき右オペランドを評価しないため、++n > 1 は無視されます。
無視されたnはインクリメントが行われないため、nの値は 0 のままとなります。

最終的に、b1 = False、b2 = True、m ⇒ 2、n ⇒ 0 となり、「False True 2 0」と出力されるため、答えはDとなります。

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

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

[Unity_317×90]

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

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

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

Recent News

Recent Tips

Tag Search