C#: 演習:基礎の復習
1. 温度換算ツール
目標:摂氏と華氏の間で双方向の換算機能を実装する。ユーザーが換算の方向を選択し、温度を入力すると、プログラムが結果を出力する。
要件:
- ユーザーに方向を選択するよう促す(1:摂氏から華氏、2:華氏から摂氏)
- ユーザーから温度値を入力してもらう
- 変換式を適用し、その結果を(小数点以下2桁で)表示してください
- 無効な選択があった場合は、分かりやすいメッセージを表示する
換算式:
- 摂氏から華氏へ:
F = C * 9 / 5 + 32 - 華氏から摂氏へ:
C = (F - 32) * 5 / 9
▶ サンプル
CSHARP
Console.WriteLine("Temperature Converter");
Console.WriteLine("1. Celsius to Fahrenheit");
Console.WriteLine("2. Fahrenheit to Celsius");
Console.Write("Choose (1 or 2): ");
string choice = Console.ReadLine();
if (choice == "1")
{
Console.Write("Enter Celsius temperature: ");
double celsius = double.Parse(Console.ReadLine());
double fahrenheit = celsius * 9 / 5 + 32;
Console.WriteLine($"{celsius}°C = {fahrenheit:F2}°F");
}
else if (choice == "2")
{
Console.Write("Enter Fahrenheit temperature: ");
double fahrenheit = double.Parse(Console.ReadLine());
double celsius = (fahrenheit - 32) * 5 / 9;
Console.WriteLine($"{fahrenheit}°F = {celsius:F2}°C");
}
else
{
Console.WriteLine("Invalid choice. Please enter 1 or 2.");
}
TEXT
📖 参照専用
Temperature Converter
1. Celsius to Fahrenheit
2. Fahrenheit to Celsius
Choose (1 or 2): 1
Enter Celsius temperature: 100
100°C = 212.00°F
TEXT
📖 参照専用
Temperature Converter
1. Celsius to Fahrenheit
2. Fahrenheit to Celsius
Choose (1 or 2): 2
Enter Fahrenheit temperature: 32
32°F = 0.00°C
2. シンプルな電卓
目標:四則演算に対応した電卓を作成する。ユーザーが2つの数値と演算子を入力すると、プログラムは結果を表示するとともに、ゼロ除算の処理も行う。
要件:
- ユーザーに2つの数値と演算子(+, -, *, /)を入力するよう促す
switchステートメントを使用して演算子に一致させ、対応する演算を実行する- ゼロ除算がないか確認し、わかりやすいエラーメッセージを表示する
- 無効な演算子に対してメッセージを表示する
▶ サンプル
CSHARP
Console.Write("Enter the first number: ");
double num1 = double.Parse(Console.ReadLine());
Console.Write("Enter an operator (+ - * /): ");
string op = Console.ReadLine();
Console.Write("Enter the second number: ");
double num2 = double.Parse(Console.ReadLine());
double result;
switch (op)
{
case "+":
result = num1 + num2;
Console.WriteLine($"{num1} + {num2} = {result}");
break;
case "-":
result = num1 - num2;
Console.WriteLine($"{num1} - {num2} = {result}");
break;
case "*":
result = num1 * num2;
Console.WriteLine($"{num1} * {num2} = {result}");
break;
case "/":
if (num2 == 0)
{
Console.WriteLine("Error: Division by zero is not allowed!");
}
else
{
result = num1 / num2;
Console.WriteLine($"{num1} / {num2} = {result}");
}
break;
default:
Console.WriteLine("Invalid operator!");
break;
}
TEXT
📖 参照専用
Enter the first number: 10
Enter an operator (+ - * /): +
Enter the second number: 3.5
10 + 3.5 = 13.5
TEXT
📖 参照専用
Enter the first number: 8
Enter an operator (+ - * /): /
Enter the second number: 0
Error: Division by zero is not allowed!
3. 数字当てゲーム
目的:このプログラムは、1から100までのランダムな整数を生成します。ユーザーは繰り返し数字を当て、正しい数字が判明するまでプログラムが「高すぎます」または「低すぎます」とヒントを出し、その後、試行回数の合計を表示します。
要件:
Randomクラスを使用して、1 から 100 までのランダムな整数を生成するwhileループを使用して、ユーザーに繰り返し推測させる- 推測するたびに、「高すぎる」または「低すぎる」というヒントを与える
- 正解した場合は、お祝いのメッセージと試行回数の合計を表示する
▶ サンプル
CSHARP
Random random = new Random();
int target = random.Next(1, 101);
int guess;
int attempts = 0;
Console.WriteLine("Number Guessing Game (1-100)");
do
{
Console.Write("Enter your guess: ");
guess = int.Parse(Console.ReadLine());
attempts++;
if (guess > target)
{
Console.WriteLine("Too high!");
}
else if (guess < target)
{
Console.WriteLine("Too low!");
}
else
{
Console.WriteLine($"Congratulations! The answer is {target}. You got it in {attempts} attempts.");
}
} while (guess != target);
TEXT
📖 参照専用
Number Guessing Game (1-100)
Enter your guess: 50
Too low!
Enter your guess: 75
Too high!
Enter your guess: 62
Too low!
Enter your guess: 68
Congratulations! The answer is 68. You got it in 4 attempts.
4. 星の模様
目標:入れ子になった for ループを使用して、2つの一般的な星のパターン(直角三角形とピラミッド)を出力し、ループと文字列の連結を練習する。
要件:
- 直角三角形:i 行目に i 個の星を印刷する
- ピラミッド:各行に適切な数の先頭スペースとアスタリスクを印刷し、アスタリスクを中央に揃える
- 行数はユーザーの入力によって決まります
▶ サンプル
CSHARP
Console.Write("Enter the number of rows: ");
int rows = int.Parse(Console.ReadLine());
Console.WriteLine("Right Triangle:");
for (int i = 1; i <= rows; i++)
{
for (int j = 1; j <= i; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
Console.WriteLine("Pyramid:");
for (int i = 1; i <= rows; i++)
{
for (int s = 1; s <= rows - i; s++)
{
Console.Write(" ");
}
for (int j = 1; j <= 2 * i - 1; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
TEXT
📖 参照専用
Enter the number of rows: 5
Right Triangle:
*
**
***
****
*****
Pyramid:
*
***
*****
*******
*********
❓ よくある質問
Q
double.Parse が数値以外の入力を受け取った場合はどうなりますか?A
FormatException をスローします。実際のプロジェクトでは、安全な変換を行うために double.TryParse を使用してください。Q なぜ
Random.Next(1, 101) の上限は 101 なのでしょうか?A このメソッドは半開区間を使用しているためです。-
Next(1, 101) は、101 を除く 1 から 100 までの整数を生成します。Q ピラミッドの各列あたりの星の数はどのように計算されますか?
A i 列目の星の数は
2 * i - 1 個です。つまり、1列目は1個、2列目は3個、3列目は5個……という具合です。Q
do...while と while の違いは何ですか?A
do...while は本体を少なくとも 1 回実行しますが、while はまったく実行しない場合があります。 当てっこゲームでは少なくとも1回の推測が必要なので、do...whileの方が適しています。📖 まとめ
- 温度変換プログラムでは、
if...else ifの条件分岐と算術演算を練習しました - このシンプルな電卓では、
switch分岐処理とゼロ除算の処理を実践しました - 数字当てゲームで、
do...whileのループとRandomクラスを練習しました - 星形のパターンでは、入れ子になった
forループと文字列連結の手法が練習された
📝 練習問題
- 温度変換機能にループを追加し、ユーザーが
qと入力して終了するまで、繰り返し変換を行えるようにする。 - 簡易電卓にモジュロ演算(
%)の機能を追加する。 - 数字当てゲームを改善する:ユーザーが数字以外の値を入力した場合は、アプリがクラッシュするのではなく、再試行するよう促すようにする。
- 逆ピラミッド型の型紙(上部が最も広く、下部が最も狭い)を印刷します。