C#: 演習:基礎の復習

1. 温度換算ツール

目標:摂氏と華氏の間で双方向の換算機能を実装する。ユーザーが換算の方向を選択し、温度を入力すると、プログラムが結果を出力する。

要件:

換算式:

▶ サンプル

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つの数値と演算子を入力すると、プログラムは結果を表示するとともに、ゼロ除算の処理も行う。

要件:

▶ サンプル

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までのランダムな整数を生成します。ユーザーは繰り返し数字を当て、正しい数字が判明するまでプログラムが「高すぎます」または「低すぎます」とヒントを出し、その後、試行回数の合計を表示します。

要件:

▶ サンプル

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つの一般的な星のパターン(直角三角形とピラミッド)を出力し、ループと文字列の連結を練習する。

要件:

▶ サンプル

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...whilewhile の違いは何ですか?
A do...while は本体を少なくとも 1 回実行しますが、while はまったく実行しない場合があります。 当てっこゲームでは少なくとも1回の推測が必要なので、do...whileの方が適しています。

📖 まとめ

📝 練習問題

  1. 温度変換機能にループを追加し、ユーザーがqと入力して終了するまで、繰り返し変換を行えるようにする。
  2. 簡易電卓にモジュロ演算(%)の機能を追加する。
  3. 数字当てゲームを改善する:ユーザーが数字以外の値を入力した場合は、アプリがクラッシュするのではなく、再試行するよう促すようにする。
  4. 逆ピラミッド型の型紙(上部が最も広く、下部が最も狭い)を印刷します。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%