第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_Conditional |
作業前チェック
Section titled “作業前チェック”作業を始める前に、次の内容を確認してください。
- Visual Studio 2022でコンソールアプリを作成できる
-
.NET 8.0を選択できる -
Console.WriteLineを使って表示できる -
Console.ReadLineで入力を受け取れる -
int.Parseで文字列を整数に変換できる -
int、string、boolの基本的な意味を説明できる - 第3章の内容をGitに提出済みである
4-1 条件分岐処理の必要性
Section titled “4-1 条件分岐処理の必要性”条件によって処理を変えたい
Section titled “条件によって処理を変えたい”まず、点数を表示するだけのプログラムを考えます。
using System;
class Program{ static void Main() { int score = 80;
Console.WriteLine($"点数:{score}"); }}実行結果:
点数:80このプログラムは、点数を表示するだけです。
しかし、研修や試験のプログラムでは、点数に応じて次のような判定をしたい場合があります。
60点以上なら合格60点未満なら不合格このような場合に、条件分岐を使います。
条件分岐を使った例
Section titled “条件分岐を使った例”次のコードを入力して実行してください。
using System;
class Program{ static void Main() { int score = 80;
Console.WriteLine($"点数:{score}");
if (score >= 60) { Console.WriteLine("合格です。"); } }}実行結果:
点数:80合格です。score の値が 60 以上なので、if 文の中の処理が実行されます。
条件に合わない場合
Section titled “条件に合わない場合”score の値を 45 に変更して実行してください。
using System;
class Program{ static void Main() { 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 を使います。
using System;
class Program{ static void Main() { int score = 45;
Console.WriteLine($"点数:{score}");
if (score >= 60) { Console.WriteLine("合格です。"); } else { Console.WriteLine("不合格です。"); } }}実行結果:
点数:45不合格です。if の条件が成り立たない場合、else の中の処理が実行されます。
入力された点数を判定する
Section titled “入力された点数を判定する”次は、キーボードから入力された点数を判定します。
using System;
class Program{ static void Main() { Console.WriteLine("点数を入力してください。");
string input = Console.ReadLine(); int score = int.Parse(input);
if (score >= 60) { Console.WriteLine("合格です。"); } else { Console.WriteLine("不合格です。"); } }}実行例:
点数を入力してください。75合格です。実行例:
点数を入力してください。40不合格です。偶数・奇数を判定する
Section titled “偶数・奇数を判定する”第3章で学習した % を使うと、偶数・奇数を判定できます。
using System;
class Program{ static void Main() { 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 の条件式の直後には、通常 ; を付けません。
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 “文字列を比較する”文字列も == や != で比較できます。
using System;
class Program{ static void Main() { Console.WriteLine("使用したい言語を入力してください。");
string language = Console.ReadLine();
if (language == "C#") { Console.WriteLine("C#を選択しました。"); } else { Console.WriteLine("C#以外を選択しました。"); } }}実行例:
使用したい言語を入力してください。C#C#を選択しました。論理演算子を使うと、複数の条件を組み合わせられます。
| 演算子 | 読み方 | 意味 |
|---|---|---|
&& | AND | 両方の条件が成り立つ |
| ` | ` | |
! | NOT | 条件を反転する |
&& は、複数の条件がすべて成り立つ場合に true になります。
次のコードでは、点数が0以上100以下かどうかを判定します。
using System;
class Program{ static void Main() { 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 かどうかを判定します。
using System;
class Program{ static void Main() { 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有効なメニュー番号です。! は、条件の結果を反転します。
bool isDeleted = false;
if (!isDeleted){ Console.WriteLine("このデータは表示対象です。");}!isDeleted は、isDeleted が false のときに true になります。
isDeleted が false ↓!isDeleted は true削除済みではないデータだけを表示したい、というような場面で使います。
条件式とbool型
Section titled “条件式とbool型”条件式の結果は、bool 型の値として扱えます。
int score = 80;bool isPassed = score >= 60;
Console.WriteLine(isPassed);実行結果:
Truescore >= 60 の結果が true なので、isPassed に true が入ります。
次のように、bool 型の変数を if 文に使うこともできます。
using System;
class Program{ static void Main() { 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 “メニュー番号で処理を分ける”次のコードを入力して実行してください。
using System;
class Program{ static void Main() { 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 を書きます。
break を忘れると、コンパイルエラーになる場合があります。
defaultの役割
Section titled “defaultの役割”default は、どの case にも当てはまらない場合に実行されます。
default: Console.WriteLine("メニュー番号が正しくありません。"); break;入力ミスに対応するため、default はできるだけ書くようにしましょう。
文字列でswitchする
Section titled “文字列でswitchする”switch 文は、文字列に対しても使えます。
using System;
class Program{ static void Main() { 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 “点数から評価を判定する”次のコードを入力して実行してください。
using System;
class Program{ static void Main() { 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 “送料を判定する”次のコードでは、購入金額に応じて送料を判定します。
using System;
class Program{ static void Main() { 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 に対応するか分からない | 入れ子やインデントが複雑 | まず単純な構造で書く |
&& と ` | ` を混同する | |
switch で break を忘れる | case の終了を示していない | 各 case の最後に break を書く |
else if の判定順を間違える | 広い条件を先に書いている | 厳しい条件から順に書く |
int.Parse でエラーになる | 数字以外を入力している | この章では数字を入力する。入力エラー対応は例外処理で学ぶ |
学んだことチェック
Section titled “学んだことチェック”次の項目について、自分で説明できるか確認してください。
- 条件分岐とは何かを説明できる
-
if文の基本形を書ける -
elseの役割を説明できる -
else ifの役割を説明できる -
switch文の基本形を書ける -
case、break、defaultの役割を説明できる -
==と=の違いを説明できる -
!=の意味を説明できる -
&&の意味を説明できる -
||の意味を説明できる -
!の意味を説明できる -
bool型と条件式の関係を説明できる - 入力された値に応じて処理を変えるプログラムを作成できる
研修の進め方によっては、隣の人またはチーム内で説明確認を行います。
次の内容を、自分の言葉で説明してください。
if文はどのようなときに使いますか。elseは何のために使いますか。==と=の違いは何ですか。&&と||の違いは何ですか。switch文はどのような処理に向いていますか。else ifで判定順序が重要になる理由は何ですか。
説明するときは、完全な答えでなくても構いません。
自分の言葉で説明しようとすることが大切です。
この章の演習課題に取り組みます。
制限時間は 50分 です。
時間内にすべて完成しなくても構いません。
できたところまでを保存し、Gitに提出してください。
提出について
制限時間になったら、完成・未完成に関わらず作業を止めます。 できたところまでをGitにcommitし、pushしてください。 未完成の場合は、どこまでできたかを報告できるようにしておきましょう。
まずは、全員が必須課題に取り組んでください。
課題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 送料判定”購入金額を入力し、次の基準で送料を表示してください。
| 購入金額 | 送料 |
|---|---|
| 5000円以上 | 0円 |
| 3000円以上5000円未満 | 300円 |
| 3000円未満 | 600円 |
実行例:
購入金額を入力してください。4200送料:300円条件:
else ifを使う- 送料を変数に保存してから表示する
課題4-7 ログイン判定
Section titled “課題4-7 ログイン判定”ユーザーIDとパスワードを入力し、両方が正しければ「ログイン成功」、どちらかが違えば「ログイン失敗」と表示してください。
正しい値は次の通りです。
| 項目 | 値 |
|---|---|
| ユーザーID | admin |
| パスワード | csharp |
実行例:
ユーザーIDを入力してください。adminパスワードを入力してください。csharpログイン成功条件:
stringの比較を使う&&を使う
課題4-8 コマンド判定
Section titled “課題4-8 コマンド判定”文字列でコマンドを入力し、処理内容を表示してください。
| コマンド | 表示内容 |
|---|---|
add | 登録処理を行います |
list | 一覧表示を行います |
search | 検索処理を行います |
exit | 終了します |
| それ以外 | 不明なコマンドです |
実行例:
コマンドを入力してください。search検索処理を行います。条件:
switch文を使うdefaultを書く- コマンドは文字列で判定する
Gitへの提出
Section titled “Gitへの提出”課題が終わったら、できたところまでをGitに提出します。
まず、現在の状態を確認します。
git status変更されたファイルを追加します。
git add .コミットします。
git commit -m "Chapter04 条件に応じた処理"ファイルサーバー上のリポジトリへpushします。
git pushGitの操作でエラーが出た場合は、自己判断で同じ操作を繰り返さず、講師に確認してください。
提出前チェックリスト
Section titled “提出前チェックリスト”提出前に、次の項目を確認してください。
- プログラムをVisual Studioから実行できる
-
if文を使っている -
elseを使っている - 必要に応じて
else ifを使っている - 必要に応じて
switch文を使っている -
==と=を正しく使い分けている -
&&または||を使った条件を書ける - 入力値を使って条件分岐している
-
defaultやelseで想定外の入力に対応している - セミコロンの付け忘れがない
-
ifの条件式の直後に不要な;がない - インデントが整っている
- Gitにcommitしている
- Gitにpushしている
この章のまとめ
Section titled “この章のまとめ”この章では、条件に応じた処理について学習しました。
この章で学んだ主な内容は次の通りです。
- 条件によって処理を変えることを条件分岐という
if文を使うと、条件が成り立つときだけ処理を実行できるelseを使うと、条件が成り立たない場合の処理を書けるelse ifを使うと、複数の条件を順番に判定できるswitch文を使うと、値ごとに処理を分けられるdefaultは、どのcaseにも当てはまらない場合に実行される==は比較、=は代入である&&は「かつ」、||は「または」、!は否定を表す- 条件式の結果は
trueまたはfalseになる - 条件分岐では、判定順序や条件の範囲に注意する必要がある
次章では、繰り返し処理 を学習します。
繰り返し処理を使うと、同じような処理を何度も書かずに、条件や回数に応じて繰り返し実行できるようになります。