第4章 条件に応じた処理
この章の目的
Section titled “この章の目的”この章では、条件に応じて処理を変える方法を学習します。
これまでの章では、プログラムは基本的に上から順番に実行されました。
1行目を実行2行目を実行3行目を実行しかし、実際のプログラムでは、常に同じ処理だけを行うわけではありません。
たとえば、次のような処理が必要になります。
点数が60点以上なら「合格」と表示する年齢が20歳以上なら「成人」と表示する購入金額が5000円以上なら送料を無料にする入力された番号によって実行する処理を変える入力された値が正しくなければエラーメッセージを表示するこのように、条件によって処理を変えることを 条件分岐 といいます。
この章では、C# で条件分岐を行うための if 文、else、else if、switch 文を学習します。
この章でできるようになること
Section titled “この章でできるようになること”この章を終えると、次のことができるようになります。
- 条件分岐が必要になる場面を説明できる
if文を使って条件に合うときだけ処理を実行できるelseを使って条件に合わないときの処理を書けるelse ifを使って複数の条件を順番に判定できるswitch文を使って値に応じた多分岐処理を書ける==、!=、>、>=、<、<=を使って条件式を書ける&&、||、!を使って複数の条件を組み合わせられるbool型の値と条件式の関係を説明できる- 入力された値に応じて処理を変えるコンソールアプリを作成できる
本章で使用する環境
Section titled “本章で使用する環境”| 項目 | 内容 |
|---|---|
| 開発環境 | Visual Studio 2022 |
| プロジェクト種類 | コンソール アプリ |
| 対象フレームワーク | .NET 8 |
| ソリューション名 | Chapter04 |
| プロジェクト名 | Ch04_Conditional |
csproj の Nullable は disable に変更してください
プロジェクト作成後、
Ch04_Conditional.csprojを開き、<Nullable>disable</Nullable>に変更してください。詳しい手順は、第 1 章「1-1 プロジェクトを作成する」を参照してください。
補足:ソリューション名とプロジェクト名は別の名前にします
本研修では、ソリューション名は
Chapter04、プロジェクト名はCh04_Conditionalのように分けます。新規作成画面で「ソリューション名」欄を
Chapter04に変更してください。
作業前チェック
Section titled “作業前チェック”作業を始める前に、次の内容を確認してください。
- Visual Studio 2022 でコンソールアプリを作成できる(不安な場合は 付録 B「VS2022 の準備と基本操作」 を参照)
-
.NET 8.0を選択できる - csproj の Nullable を disable に変更できる
-
Console.WriteLineを使って表示できる -
Console.ReadLineで入力を受け取れる -
int.Parseで文字列を整数に変換できる -
int、string、boolの基本的な意味を説明できる - 第 3 章の課題を Git に提出済みである
4-1 条件分岐処理の必要性
Section titled “4-1 条件分岐処理の必要性”条件によって処理を変えたい
Section titled “条件によって処理を変えたい”まず、点数を表示するだけのプログラムを考えます。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { int score = 80;
Console.WriteLine($"点数:{score}"); } }}実行結果:
点数:80このプログラムは、点数を表示するだけです。
しかし、研修や試験のプログラムでは、点数に応じて次のような判定をしたい場合があります。
60点以上なら合格60点未満なら不合格このような場合に、条件分岐を使います。
条件分岐を使った例
Section titled “条件分岐を使った例”次のコードを入力して実行してください。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { int score = 80;
Console.WriteLine($"点数:{score}");
if (score >= 60) { Console.WriteLine("合格です。"); } } }}実行結果:
点数:80合格です。score の値が 60 以上なので、if 文の中の処理が実行されます。
条件に合わない場合
Section titled “条件に合わない場合”score の値を 45 に変更して実行してください。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { int score = 45;
Console.WriteLine($"点数:{score}");
if (score >= 60) { Console.WriteLine("合格です。"); } } }}実行結果:
点数:45今度は「合格です。」が表示されません。
score >= 60 が成り立たないため、if 文の中の処理が実行されなかったからです。
4-2 if 文による条件分岐処理
Section titled “4-2 if 文による条件分岐処理”if 文の基本形
Section titled “if 文の基本形”if 文の基本形は次の通りです。
if (条件式){ 条件式が成り立つときに実行する処理}条件式が成り立つ場合だけ、{ } の中の処理が実行されます。
条件式が true の場合 → 実行する条件式が false の場合 → 実行しない条件式とは、結果が true または false になる式です。
たとえば、次の式は条件式です。
score >= 60score が 80 の場合、これは成り立つので true です。
80 >= 60 → truescore が 45 の場合、これは成り立たないので false です。
45 >= 60 → falseif-else 文
Section titled “if-else 文”条件に合う場合と、条件に合わない場合の両方の処理を書きたい場合は、else を使います。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { int score = 45;
Console.WriteLine($"点数:{score}");
if (score >= 60) { Console.WriteLine("合格です。"); } else { Console.WriteLine("不合格です。"); } } }}実行結果:
点数:45不合格です。if の条件が成り立たない場合、else の中の処理が実行されます。
入力された点数を判定する
Section titled “入力された点数を判定する”次は、キーボードから入力された点数を判定します。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { Console.WriteLine("点数を入力してください。");
string input = Console.ReadLine(); int score = int.Parse(input);
if (score >= 60) { Console.WriteLine("合格です。"); } else { Console.WriteLine("不合格です。"); } } }}実行例:
点数を入力してください。75合格です。実行例:
点数を入力してください。40不合格です。偶数・奇数を判定する
Section titled “偶数・奇数を判定する”第 3 章で学習した % を使うと、偶数・奇数を判定できます。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { Console.WriteLine("整数を入力してください。");
string input = Console.ReadLine(); int number = int.Parse(input);
if (number % 2 == 0) { Console.WriteLine("偶数です。"); } else { Console.WriteLine("奇数です。"); } } }}実行例:
整数を入力してください。8偶数です。number % 2 は、number を 2 で割った余りです。
余りが0 → 偶数余りが1 → 奇数エラーではないが注意したい例:if 文の中身が 1 行だけの場合
Section titled “エラーではないが注意したい例:if 文の中身が 1 行だけの場合”C# では、if 文の中の処理が 1 行だけなら、{ } を省略できます。
if (score >= 60) Console.WriteLine("合格です。");このコードは動作します。
しかし、本研修では基本的に { } を省略しません。
if (score >= 60){ Console.WriteLine("合格です。");}補足:本研修での書き方
本研修では、
if文の処理が 1 行だけでも{ }を書きます。 処理の範囲が分かりやすくなり、後から処理を追加するときのミスを防ぎやすいためです。
エラーになる例:条件式の後ろにセミコロンを付ける
Section titled “エラーになる例:条件式の後ろにセミコロンを付ける”次のコードは、意図した動きになりません。
if (score >= 60);{ Console.WriteLine("合格です。");}if (score >= 60); の末尾に ; が付いているため、if 文の中身が空になってしまいます。
正しくは次のように書きます。
if (score >= 60){ Console.WriteLine("合格です。");}if の条件式の直後には、通常 ; を付けません。
if 文の中に if 文を書く(入れ子)
Section titled “if 文の中に if 文を書く(入れ子)”if 文の中に、さらに if 文を書くこともできます。これを 入れ子(ネスト) と呼びます。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { int score = 85; bool isActive = true;
if (isActive) { if (score >= 60) { Console.WriteLine("受講中で合格点に達しています。"); } else { Console.WriteLine("受講中ですが合格点に達していません。"); } } else { Console.WriteLine("受講していません。"); } } }}実行結果:
受講中で合格点に達しています。入れ子を使うと、複数の条件を段階的に判定できます。
ただし、入れ子が深くなると読みにくくなるため、後で学ぶ && や else if で書き換えることもよくあります。
入れ子は 2 段までを目安に
入れ子は便利ですが、3 段、4 段と深くなるとコードが読みにくくなります。
深くなりそうな場合は、
&&で条件をまとめる、else ifで並列に書く、メソッドに切り出す(第 7 章以降で学習)などの工夫を検討してください。
4-3 関係演算子と論理演算子
Section titled “4-3 関係演算子と論理演算子”関係演算子は、2 つの値を比較するための演算子です。
| 演算子 | 意味 | 例 |
|---|---|---|
== | 等しい | score == 100 |
!= | 等しくない | name != "山田" |
> | より大きい | age > 20 |
>= | 以上 | score >= 60 |
< | より小さい | age < 20 |
<= | 以下 | score <= 100 |
= と == の違い
Section titled “= と == の違い”C# では、= と == は意味が違います。
| 記号 | 意味 | 例 |
|---|---|---|
= | 代入 | score = 80; |
== | 等しいか比較 | score == 80 |
次のコードは、score に 80 を代入しています。
score = 80;次のコードは、score が 80 と等しいかを判定しています。
score == 80注意
条件式で「等しい」を表したいときは、
=ではなく==を使います。
文字列を比較する
Section titled “文字列を比較する”文字列も == や != で比較できます。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { Console.WriteLine("使用したい言語を入力してください。");
string language = Console.ReadLine();
if (language == "C#") { Console.WriteLine("C#を選択しました。"); } else { Console.WriteLine("C#以外を選択しました。"); } } }}実行例:
使用したい言語を入力してください。C#C#を選択しました。論理演算子を使うと、複数の条件を組み合わせられます。
| 演算子 | 読み方 | 意味 |
|---|---|---|
&& | AND | 両方の条件が成り立つ |
|| | OR | どちらか一方の条件が成り立つ |
! | NOT | 条件を反転する |
AND 条件
Section titled “AND 条件”&& は、複数の条件がすべて成り立つ場合に true になります。
次のコードでは、点数が 0 以上 100 以下かどうかを判定します。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { Console.WriteLine("点数を入力してください。");
string input = Console.ReadLine(); int score = int.Parse(input);
if (0 <= score && score <= 100) { Console.WriteLine("有効な点数です。"); } else { Console.WriteLine("点数の範囲が正しくありません。"); } } }}実行例:
点数を入力してください。80有効な点数です。実行例:
点数を入力してください。120点数の範囲が正しくありません。0 <= score && score <= 100 は、次の意味です。
score が 0 以上 かつ score が 100 以下|| は、複数の条件のうち 1 つ以上が成り立つ場合に true になります。
次のコードでは、入力された番号が 1 または 2 かどうかを判定します。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { Console.WriteLine("メニュー番号を入力してください。"); Console.WriteLine("1: 登録"); Console.WriteLine("2: 検索");
string input = Console.ReadLine(); int menu = int.Parse(input);
if (menu == 1 || menu == 2) { Console.WriteLine("有効なメニュー番号です。"); } else { Console.WriteLine("無効なメニュー番号です。"); } } }}実行例:
メニュー番号を入力してください。1: 登録2: 検索1有効なメニュー番号です。NOT 条件
Section titled “NOT 条件”! は、条件の結果を反転します。
bool isDeleted = false;
if (!isDeleted){ Console.WriteLine("このデータは表示対象です。");}!isDeleted は、isDeleted が false のときに true になります。
isDeleted が false ↓!isDeleted は true削除済みではないデータだけを表示したい、というような場面で使います。
補足:&& と || の短絡評価
Section titled “補足:&& と || の短絡評価”&& と || には、条件が確定した時点で残りの式を評価しない という性質があります。これを 短絡評価(ショートサーキット評価)と呼びます。
// 左が false なので、右は評価されないif (false && SomeCheck()){ // 実行されない。さらに SomeCheck() も呼ばれない}
// 左が true なので、右は評価されないif (true || SomeCheck()){ // 実行される。SomeCheck() は呼ばれない}| 演算子 | 短絡の条件 |
|---|---|
&& | 左が false のとき、右を評価しない(全体は false で確定) |
|| | 左が true のとき、右を評価しない(全体は true で確定) |
この性質は、第 11 章で学ぶ null チェック などで重要になります。今は「左から順に評価され、結果が決まったら右側は実行されない」と覚えておけば十分です。
条件式と bool 型
Section titled “条件式と bool 型”条件式の結果は、bool 型の値として扱えます。
int score = 80;bool isPassed = score >= 60;
Console.WriteLine(isPassed);実行結果:
Truescore >= 60 の結果が true なので、isPassed に true が入ります。
次のように、bool 型の変数を if 文に使うこともできます。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { int score = 80; bool isPassed = score >= 60;
if (isPassed) { Console.WriteLine("合格です。"); } else { Console.WriteLine("不合格です。"); } } }}4-4 switch 文による多分岐処理
Section titled “4-4 switch 文による多分岐処理”switch 文とは
Section titled “switch 文とは”switch 文は、1 つの値に応じて処理を分けるときに使います。
たとえば、入力されたメニュー番号によって処理を分ける場合に便利です。
1 → 登録2 → 検索3 → 終了それ以外 → エラーswitch 文の基本形
Section titled “switch 文の基本形”switch 文の基本形は次の通りです。
switch (値){ case 値1: 処理1; break;
case 値2: 処理2; break;
default: どれにも当てはまらない場合の処理; break;}case には、判定したい値を書きます。
default は、どの case にも当てはまらなかった場合に実行されます。
メニュー番号で処理を分ける
Section titled “メニュー番号で処理を分ける”次のコードを入力して実行してください。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { Console.WriteLine("メニューを選択してください。"); Console.WriteLine("1: 社員登録"); Console.WriteLine("2: 社員検索"); Console.WriteLine("3: 終了");
string input = Console.ReadLine(); int menu = int.Parse(input);
switch (menu) { case 1: Console.WriteLine("社員登録を選択しました。"); break;
case 2: Console.WriteLine("社員検索を選択しました。"); break;
case 3: Console.WriteLine("終了します。"); break;
default: Console.WriteLine("メニュー番号が正しくありません。"); break; } } }}実行例:
メニューを選択してください。1: 社員登録2: 社員検索3: 終了2社員検索を選択しました。break の役割
Section titled “break の役割”break は、switch 文の処理を抜けるために使います。
case 1: Console.WriteLine("社員登録を選択しました。"); break;C# の switch 文では、各 case の最後に break が必須 です。
// これはコンパイルエラーになる例case 1: Console.WriteLine("社員登録を選択しました。"); // break を書き忘れているcase 2: Console.WriteLine("社員検索を選択しました。"); break;case 1: の処理が終わったあと、次の case 2: に「すり抜けて落ちる」ことを フォールスルー と呼びます。
C++ や Java では暗黙的にフォールスルーが許されますが、C# は明示しない限り許可されません。break を書き忘れると次のようなコンパイルエラーが出ます。
コントロールが 1 つの case ラベル ('case 1:') から別の case ラベルへフォール スルーすることはできませんC# でのフォールスルーは「明示」が必要
もし意図して次の
caseに処理を続けたい場合は、goto caseを使うか、複数のcaseを連続で並べる(後述)書き方を使います。業務コードでは、
breakで確実に区切る書き方が圧倒的に多いです。本研修でもbreakを必ず書く前提で進めます。
複数の case で同じ処理を行う
Section titled “複数の case で同じ処理を行う”複数の値で同じ処理を行いたい場合は、case を並べて書きます。
switch (menu){ case 1: case 2: Console.WriteLine("登録または検索を選択しました。"); break;
case 3: Console.WriteLine("終了します。"); break;}case 1: と case 2: のように並べた場合、どちらの値でも同じ処理が実行されます。この書き方は フォールスルーではない ため、コンパイルエラーになりません。
default の役割
Section titled “default の役割”default は、どの case にも当てはまらない場合に実行されます。
default: Console.WriteLine("メニュー番号が正しくありません。"); break;入力ミスに対応するため、default はできるだけ書くようにしましょう。
文字列で switch する
Section titled “文字列で switch する”switch 文は、文字列に対しても使えます。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { Console.WriteLine("コマンドを入力してください。"); Console.WriteLine("add: 登録"); Console.WriteLine("search: 検索"); Console.WriteLine("exit: 終了");
string command = Console.ReadLine();
switch (command) { case "add": Console.WriteLine("登録処理を行います。"); break;
case "search": Console.WriteLine("検索処理を行います。"); break;
case "exit": Console.WriteLine("終了します。"); break;
default: Console.WriteLine("不明なコマンドです。"); break; } } }}実行例:
コマンドを入力してください。add: 登録search: 検索exit: 終了search検索処理を行います。if 文と switch 文の使い分け
Section titled “if 文と switch 文の使い分け”if 文と switch 文は、どちらも条件分岐に使えます。
| 使い方 | 向いている場面 |
|---|---|
if 文 | 範囲判定、複雑な条件、大小比較 |
switch 文 | 値ごとに処理を分ける場合 |
例:
点数が60点以上かどうか → if文が向いている
メニュー番号が1、2、3のどれか → switch文が向いている4-5 else if 構文を使った多分岐処理
Section titled “4-5 else if 構文を使った多分岐処理”複数の条件を順番に判定する
Section titled “複数の条件を順番に判定する”点数に応じて評価を分けたい場合を考えます。
90点以上 → A80点以上 → B70点以上 → C60点以上 → D60点未満 → Eこのように、範囲ごとに処理を分けたい場合は、else if が向いています。
else if の基本形
Section titled “else if の基本形”else if の基本形は次の通りです。
if (条件1){ 条件1が成り立つときの処理}else if (条件2){ 条件2が成り立つときの処理}else{ どの条件にも当てはまらないときの処理}上から順番に条件を判定し、最初に成り立った条件の処理だけを実行します。
点数から評価を判定する
Section titled “点数から評価を判定する”次のコードを入力して実行してください。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { Console.WriteLine("点数を入力してください。");
string input = Console.ReadLine(); int score = int.Parse(input);
if (score >= 90) { Console.WriteLine("評価:A"); } else if (score >= 80) { Console.WriteLine("評価:B"); } else if (score >= 70) { Console.WriteLine("評価:C"); } else if (score >= 60) { Console.WriteLine("評価:D"); } else { Console.WriteLine("評価:E"); } } }}実行例:
点数を入力してください。85評価:B判定順序に注意する
Section titled “判定順序に注意する”else if では、条件を書く順番が重要です。
次のコードは、意図した判定になりません。
if (score >= 60){ Console.WriteLine("評価:D以上");}else if (score >= 80){ Console.WriteLine("評価:B以上");}else if (score >= 90){ Console.WriteLine("評価:A");}たとえば score が 95 の場合、最初の score >= 60 が成り立つため、そこで処理が終わります。
そのため、score >= 90 まで到達しません。
範囲を段階的に判定する場合は、条件の厳しいものから順に書くことが多いです。
90以上80以上70以上60以上それ以外送料を判定する
Section titled “送料を判定する”次のコードでは、購入金額に応じて送料を判定します。
namespace Ch04_Conditional{ internal class Program { static void Main(string[] args) { Console.WriteLine("購入金額を入力してください。");
string input = Console.ReadLine(); int amount = int.Parse(input);
int shippingFee;
if (amount >= 5000) { shippingFee = 0; } else if (amount >= 3000) { shippingFee = 300; } else { shippingFee = 600; }
Console.WriteLine($"購入金額:{amount}円"); Console.WriteLine($"送料:{shippingFee}円"); } }}実行例:
購入金額を入力してください。3500購入金額:3500円送料:300円このように、if、else if、else を使うと、業務アプリでよくある判定処理を書けます。
よくあるつまずき
Section titled “よくあるつまずき”この章でよくあるつまずきを確認します。
| つまずき | 原因 | 対応 |
|---|---|---|
if の条件に = を使ってしまう | 代入と比較を混同している | 比較には == を使う |
if (score >= 60); と書いてしまう | 条件式の後ろにセミコロンを付けている | if の直後に ; を付けない |
{ } の範囲が分からない | インデントが崩れている | Ctrl + K → Ctrl + D で整形する |
else がどの if に対応するか分からない | 入れ子やインデントが複雑 | まず単純な構造で書く。深くなりすぎたら && や else if で書き換える |
&& と || を混同する | AND 条件と OR 条件の違いが曖昧 | 「かつ」は &&、「または」は || と覚える |
switch で break を忘れる | case の終了を示していない | C# では break が必須。書き忘れるとコンパイルエラー |
else if の判定順を間違える | 広い条件を先に書いている | 厳しい条件から順に書く |
int.Parse でエラーになる | 数字以外を入力している | この章では数字を入力する。入力エラー対応は 第 15 章「例外処理」 で学ぶ |
学んだことチェック
Section titled “学んだことチェック”次の項目について、自分で説明できるか確認してください。
- 条件分岐とは何かを説明できる
-
if文の基本形を書ける -
elseの役割を説明できる -
if文の入れ子を読める -
else ifの役割を説明できる -
switch文の基本形を書ける -
case、break、defaultの役割を説明できる - C# では
breakを書き忘れるとコンパイルエラーになることを説明できる - 複数の
caseを並べて同じ処理を行えることを知っている -
==と=の違いを説明できる -
!=の意味を説明できる -
&&の意味を説明できる -
||の意味を説明できる -
!の意味を説明できる -
&&と||の短絡評価について簡単に説明できる -
bool型と条件式の関係を説明できる - 入力された値に応じて処理を変えるプログラムを作成できる
研修の進め方によっては、隣の人またはチーム内で説明確認を行います。
次の内容を、自分の言葉で説明してください。
if文はどのようなときに使いますか。elseは何のために使いますか。==と=の違いは何ですか。&&と||の違いは何ですか。switch文はどのような処理に向いていますか。- C# の
switchでbreakを省略するとどうなりますか。 else ifで判定順序が重要になる理由は何ですか。- 入れ子の
ifが深くなりすぎたとき、どんな書き換え方が考えられますか。
説明するときは、完全な答えでなくても構いません。自分の言葉で説明しようとすることが大切です。
この章の演習課題に取り組みます。
本章では タイマー方式 を試験導入します。次の 2 段階で進めてください。
| 段階 | 時間 | 内容 |
|---|---|---|
| ① ソロ作業 | 25 分(タイマーで計測) | 一人で課題に取り組む。タイマーが鳴ったら、完成・未完成にかかわらず作業を止めて Git に提出する |
| ② チーム時間 | 講師が指定する発表開始時刻まで | チーム内でコードレビューを行い、発表者を決める。実装の続行も可。時間配分はチームで管理する |
評価対象はタイマー時点で提出されたコードです(タイマー後に書き足した分は評価には含まれません)。 発表開始時刻は厳守 です。チーム時間中も、その時刻が来たら全員手を止めて発表に移ります。
演習の進め方の詳細は、付録A「演習の進め方」 を参照してください。
この章の演習の進め方
Section titled “この章の演習の進め方”課題はソリューション Kadai04 の中に作成してください。
各課題のプロジェクト名は次の通りです。
| 課題 | プロジェクト名 |
|---|---|
| 課題4-1 | Kd04_01_PassFail |
| 課題4-2 | Kd04_02_EvenOdd |
| 課題4-3 | Kd04_03_ScoreRange |
| 課題4-4 | Kd04_04_MenuSelect |
| 課題4-5(発展) | Kd04_05_GradeJudge |
| 課題4-6(発展) | Kd04_06_LoginCommand |
補足:ソリューションに複数のプロジェクトを追加する方法
最初の課題で
Kadai04ソリューションとKd04_01_PassFailプロジェクトを同時に作成します。2 つ目以降の課題は、ソリューションエクスプローラーで
Kadai04を右クリックし、追加→新しいプロジェクトから追加します。
演習の共通ルール
Section titled “演習の共通ルール”以下は、本章のすべての課題に共通する作業です。各課題の本文には繰り返し書きません。
| 作業 | 内容 | 参照 |
|---|---|---|
| プロジェクト作成時の設定 | 「最上位レベルのステートメントを使用しない」にチェック | 第 1 章 1-1 |
| csproj の編集 | <Nullable>disable</Nullable> に変更 | 第 1 章 1-1 |
| コードを書く場所 | Main メソッドの中(本章 4-1 などのサンプル形式と同じ) | 4-1 |
| ファイルを保存して実行 | Ctrl + S で保存 → F5 で実行 | 第 1 章 1-2 |
特に 2 つ目以降のプロジェクト(Kd04_02_EvenOdd など)も、新規追加するたびに csproj の Nullable を disable に変更する 必要があります。忘れると警告が出やすくなります。
演習課題のコードは、本文と同じ namespace + class Program + Main の枠組みの中に書きます。
提出ルール(タイマー方式)
- 演習スタートと同時に、25 分のタイマー をセットします
- タイマーが鳴ったら、完成・未完成にかかわらず手を止め、その場で
git add→git commit→git pushを行います- これがこの演習の 唯一の提出 です。タイマー後も実装を続けて構いませんが、書き足した分は評価対象には含まれません
コミットメッセージの形式:
Chapter04 タイマー提出: <どの課題まで完成> / <詰まったポイント>例:
Chapter04 タイマー提出: 4-1〜4-3完成、4-4は途中 / 4-4 の switch の書き方で詰まっているChapter04 タイマー提出: 4-1〜4-4全て完成、発展未着手 / 特になしChapter04 タイマー提出: 4-2の途中まで / int と string を + で繋げない理由が不明「どこまでできたか」「詰まったポイント」は短くて構いません。順調なときも「特になし」と明示 してください(順調さの証拠になります)。
タイマー後のチーム時間の使い方
タイマー後、講師が指定する 発表開始時刻 までがチーム時間です。チーム内で次の 3 つを自由に管理してください。
- コードレビュー:他のメンバーの commit を読んで、気づいたことを共有する
- 発表者の選出:発表開始時刻に、チームから 1 人が要点を発表できるよう、誰が話すかを決めておく
- 実装の続行(任意):途中だった課題を続けても構いません(提出後の追加分は評価対象外ですが、理解を深める意義はあります)
どの順番で進めるか、何分ずつ使うかはチームの判断です。ただし 発表開始時刻は厳守 です。その時刻までにレビューと発表者選出を必ず終わらせてください。
まずは、全員が必須課題に取り組んでください。
課題4-1 合格判定
Section titled “課題4-1 合格判定”点数を入力し、60 点以上なら「合格です。」、60 点未満なら「不合格です。」と表示してください。
実行例:
点数を入力してください。75合格です。実行例:
点数を入力してください。45不合格です。条件:
Console.ReadLineを使うint.Parseを使うif-elseを使う
課題4-2 偶数・奇数判定
Section titled “課題4-2 偶数・奇数判定”整数を入力し、偶数か奇数かを判定してください。
実行例:
整数を入力してください。12偶数です。実行例:
整数を入力してください。7奇数です。条件:
%を使うif-elseを使う
課題4-3 点数の範囲チェック
Section titled “課題4-3 点数の範囲チェック”点数を入力し、0 以上 100 以下なら「有効な点数です。」、それ以外なら「不正な点数です。」と表示してください。
実行例:
点数を入力してください。85有効な点数です。実行例:
点数を入力してください。120不正な点数です。条件:
&&を使うif-elseを使う
課題4-4 メニュー選択
Section titled “課題4-4 メニュー選択”メニュー番号を入力し、選択内容を表示してください。
1: 登録2: 検索3: 終了実行例:
メニューを選択してください。1: 登録2: 検索3: 終了2検索を選択しました。条件:
switch文を使うdefaultを書く- 不正な番号の場合は「メニュー番号が正しくありません。」と表示する
必須課題が終わった人は、発展課題に取り組んでください。
課題4-5 評価判定
Section titled “課題4-5 評価判定”点数を入力し、次の基準で評価を表示してください。
| 点数 | 評価 |
|---|---|
| 90点以上 | A |
| 80点以上90点未満 | B |
| 70点以上80点未満 | C |
| 60点以上70点未満 | D |
| 60点未満 | E |
実行例:
点数を入力してください。82評価:B条件:
else ifを使う- 判定順序に注意する
課題4-6 ログイン → コマンド処理
Section titled “課題4-6 ログイン → コマンド処理”ユーザー ID とパスワードを入力してログインし、ログイン成功時のみコマンドを入力させて処理内容を表示してください。 ログイン失敗時は、その時点で終了します(コマンド入力に進みません)。
正しい認証情報
| 項目 | 値 |
|---|---|
| ユーザーID | admin |
| パスワード | csharp |
コマンド一覧
| コマンド | 表示内容 |
|---|---|
add | 登録処理を行います。 |
list | 一覧表示を行います。 |
search | 検索処理を行います。 |
exit | 終了します。 |
| それ以外 | 不明なコマンドです。 |
実行例(ログイン成功):
ユーザーIDを入力してください。adminパスワードを入力してください。csharpログイン成功コマンドを入力してください。search検索処理を行います。実行例(ログイン失敗):
ユーザーIDを入力してください。adminパスワードを入力してください。wrongログイン失敗条件:
- ユーザー ID とパスワードの比較に
stringの==を使う - ログイン判定に
&&を使う - ログイン失敗時はコマンド入力ステップに進まない(
if-elseでフロー制御する) - コマンドの判定に
switch文を使い、defaultを書く
ヒント:認証 → 操作の流れ
現場の業務アプリでは「まずログイン、その後に各種操作」というフローが一般的です。 この課題はその流れをミニ版で体験する内容です。
if (ログイン成功) { ... コマンド処理 ... } else { ログイン失敗を表示 }の構造で組み立てます。
提出前チェックリスト
Section titled “提出前チェックリスト”提出前に、次の項目を確認してください。
- プログラムを Visual Studio から実行できる
-
if文を使っている -
elseを使っている - 必要に応じて
else ifを使っている - 必要に応じて
switch文を使っている -
==と=を正しく使い分けている -
&&または||を使った条件を書ける - 入力値を使って条件分岐している
-
defaultやelseで想定外の入力に対応している - セミコロンの付け忘れがない
-
ifの条件式の直後に不要な;がない - インデントが整っている
- Git に commit している
- Git に push している
Git への提出
Section titled “Git への提出”タイマーが鳴ったら、第 4 章の課題プロジェクト群(Kadai04 ソリューション)をその場で Git に提出します。
git statusgit add .git commit -m "Chapter04 タイマー提出: <どこまで完成> / <詰まったポイント>"git push実行例:
git commit -m "Chapter04 タイマー提出: 4-1〜4-3完成、4-4は途中 / 4-4 の switch の使いどころで悩んだ"Git の詳しい操作は、付録 C「Git のインストールと提出ルール」 を参照してください。
コミットメッセージの形式は、本章冒頭「演習課題 > 提出ルール(タイマー方式)」を参照してください。
この章のまとめ
Section titled “この章のまとめ”この章では、条件に応じた処理について学習しました。
この章で学んだ主な内容は次の通りです。
- 条件によって処理を変えることを条件分岐という
if文を使うと、条件が成り立つときだけ処理を実行できるelseを使うと、条件が成り立たない場合の処理を書けるif文は入れ子にもできるが、深くなりすぎないように注意するelse ifを使うと、複数の条件を順番に判定できるswitch文を使うと、値ごとに処理を分けられる- C# の
switch文ではbreakが必須(暗黙のフォールスルーは不可) - 複数の
caseを並べて書くことで、同じ処理を共有できる defaultは、どのcaseにも当てはまらない場合に実行される==は比較、=は代入である&&は「かつ」、||は「または」、!は否定を表す&&と||は短絡評価され、結果が確定した時点で残りの式は評価されない- 条件式の結果は
trueまたはfalseになる - 条件分岐では、判定順序や条件の範囲に注意する必要がある
次章では、繰り返し処理 を学習します。
繰り返し処理を使うと、同じような処理を何度も書かずに、条件や回数に応じて繰り返し実行できるようになります。
この章で学んだ条件式は、繰り返し処理の「いつ止めるか」という判定にも使います。