Skip to content

第4章 条件に応じた処理

この章では、条件に応じて処理を変える方法を学習します。

これまでの章では、プログラムは基本的に上から順番に実行されました。

1行目を実行
2行目を実行
3行目を実行

しかし、実際のプログラムでは、常に同じ処理だけを行うわけではありません。

たとえば、次のような処理が必要になります。

点数が60点以上なら「合格」と表示する
年齢が20歳以上なら「成人」と表示する
購入金額が5000円以上なら送料を無料にする
入力された番号によって実行する処理を変える
入力された値が正しくなければエラーメッセージを表示する

このように、条件によって処理を変えることを 条件分岐 といいます。

この章では、C#で条件分岐を行うための if 文、elseelse ifswitch 文を学習します。


この章でできるようになること

Section titled “この章でできるようになること”

この章を終えると、次のことができるようになります。

  • 条件分岐が必要になる場面を説明できる
  • if 文を使って条件に合うときだけ処理を実行できる
  • else を使って条件に合わないときの処理を書ける
  • else if を使って複数の条件を順番に判定できる
  • switch 文を使って値に応じた多分岐処理を書ける
  • ==!=>>=<<= を使って条件式を書ける
  • &&||! を使って複数の条件を組み合わせられる
  • bool 型の値と条件式の関係を説明できる
  • 入力された値に応じて処理を変えるコンソールアプリを作成できる

項目内容
開発環境Visual Studio 2022
プロジェクト種類コンソール アプリ
対象フレームワーク.NET 8
プロジェクト名Chapter04_Conditional

作業を始める前に、次の内容を確認してください。

  • Visual Studio 2022でコンソールアプリを作成できる
  • .NET 8.0 を選択できる
  • Console.WriteLine を使って表示できる
  • Console.ReadLine で入力を受け取れる
  • int.Parse で文字列を整数に変換できる
  • intstringbool の基本的な意味を説明できる
  • 第3章の内容をGitに提出済みである

まず、点数を表示するだけのプログラムを考えます。

using System;
class Program
{
static void Main()
{
int score = 80;
Console.WriteLine($"点数:{score}");
}
}

実行結果:

点数:80

このプログラムは、点数を表示するだけです。

しかし、研修や試験のプログラムでは、点数に応じて次のような判定をしたい場合があります。

60点以上なら合格
60点未満なら不合格

このような場合に、条件分岐を使います。


次のコードを入力して実行してください。

using System;
class Program
{
static void Main()
{
int score = 80;
Console.WriteLine($"点数:{score}");
if (score >= 60)
{
Console.WriteLine("合格です。");
}
}
}

実行結果:

点数:80
合格です。

score の値が 60 以上なので、if 文の中の処理が実行されます。


score の値を 45 に変更して実行してください。

using System;
class Program
{
static void Main()
{
int score = 45;
Console.WriteLine($"点数:{score}");
if (score >= 60)
{
Console.WriteLine("合格です。");
}
}
}

実行結果:

点数:45

今度は「合格です。」が表示されません。

score >= 60 が成り立たないため、if 文の中の処理が実行されなかったからです。


if 文の基本形は次の通りです。

if (条件式)
{
条件式が成り立つときに実行する処理
}

条件式が成り立つ場合だけ、{ } の中の処理が実行されます。

条件式が true の場合 → 実行する
条件式が false の場合 → 実行しない

条件式とは、結果が true または false になる式です。

たとえば、次の式は条件式です。

score >= 60

score80 の場合、これは成り立つので true です。

80 >= 60 → true

score45 の場合、これは成り立たないので false です。

45 >= 60 → false

条件に合う場合と、条件に合わない場合の両方の処理を書きたい場合は、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 の中の処理が実行されます。


次は、キーボードから入力された点数を判定します。

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
不合格です。

第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 の条件式の直後には、通常 ; を付けません。


関係演算子は、2つの値を比較するための演算子です。

演算子意味
==等しいscore == 100
!=等しくないname != "山田"
>より大きいage > 20
>=以上score >= 60
<より小さいage < 20
<=以下score <= 100

C#では、=== は意味が違います。

記号意味
=代入score = 80;
==等しいか比較score == 80

次のコードは、score80 を代入しています。

score = 80;

次のコードは、score80 と等しいかを判定しています。

score == 80

注意

条件式で「等しい」を表したいときは、= ではなく == を使います。


文字列も ==!= で比較できます。

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 は、isDeletedfalse のときに true になります。

isDeleted が false
!isDeleted は true

削除済みではないデータだけを表示したい、というような場面で使います。


条件式の結果は、bool 型の値として扱えます。

int score = 80;
bool isPassed = score >= 60;
Console.WriteLine(isPassed);

実行結果:

True

score >= 60 の結果が true なので、isPassedtrue が入ります。

次のように、bool 型の変数を if 文に使うこともできます。

using System;
class Program
{
static void Main()
{
int score = 80;
bool isPassed = score >= 60;
if (isPassed)
{
Console.WriteLine("合格です。");
}
else
{
Console.WriteLine("不合格です。");
}
}
}

switch 文は、1つの値に応じて処理を分けるときに使います。

たとえば、入力されたメニュー番号によって処理を分ける場合に便利です。

1 → 登録
2 → 検索
3 → 終了
それ以外 → エラー

switch 文の基本形は次の通りです。

switch (値)
{
case 値1:
処理1;
break;
case 値2:
処理2;
break;
default:
どれにも当てはまらない場合の処理;
break;
}

case には、判定したい値を書きます。

default は、どの case にも当てはまらなかった場合に実行されます。


次のコードを入力して実行してください。

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 は、switch 文の処理を抜けるために使います。

case 1:
Console.WriteLine("社員登録を選択しました。");
break;

C#の switch 文では、通常、各 case の最後に break を書きます。

break を忘れると、コンパイルエラーになる場合があります。


default は、どの case にも当てはまらない場合に実行されます。

default:
Console.WriteLine("メニュー番号が正しくありません。");
break;

入力ミスに対応するため、default はできるだけ書くようにしましょう。


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 文は、どちらも条件分岐に使えます。

使い方向いている場面
if範囲判定、複雑な条件、大小比較
switch値ごとに処理を分ける場合

例:

点数が60点以上かどうか
→ if文が向いている
メニュー番号が1、2、3のどれか
→ switch文が向いている

4-5 else if構文を使った多分岐処理

Section titled “4-5 else if構文を使った多分岐処理”

点数に応じて評価を分けたい場合を考えます。

90点以上 → A
80点以上 → B
70点以上 → C
60点以上 → D
60点未満 → E

このように、範囲ごとに処理を分けたい場合は、else if が向いています。


else if の基本形は次の通りです。

if (条件1)
{
条件1が成り立つときの処理
}
else if (条件2)
{
条件2が成り立つときの処理
}
else
{
どの条件にも当てはまらないときの処理
}

上から順番に条件を判定し、最初に成り立った条件の処理だけを実行します。


次のコードを入力して実行してください。

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

else if では、条件を書く順番が重要です。

次のコードは、意図した判定になりません。

if (score >= 60)
{
Console.WriteLine("評価:D以上");
}
else if (score >= 80)
{
Console.WriteLine("評価:B以上");
}
else if (score >= 90)
{
Console.WriteLine("評価:A");
}

たとえば score95 の場合、最初の score >= 60 が成り立つため、そこで処理が終わります。

そのため、score >= 90 まで到達しません。

範囲を段階的に判定する場合は、条件の厳しいものから順に書くことが多いです。

90以上
80以上
70以上
60以上
それ以外

次のコードでは、購入金額に応じて送料を判定します。

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円

このように、ifelse ifelse を使うと、業務アプリでよくある判定処理を書けます。


この章でよくあるつまずきを確認します。

つまずき原因対応
if の条件に = を使ってしまう代入と比較を混同している比較には == を使う
if (score >= 60); と書いてしまう条件式の後ろにセミコロンを付けているif の直後に ; を付けない
{ } の範囲が分からないインデントが崩れているCtrl + KCtrl + D で整形する
else がどの if に対応するか分からない入れ子やインデントが複雑まず単純な構造で書く
&& と `` を混同する
switchbreak を忘れるcase の終了を示していないcase の最後に break を書く
else if の判定順を間違える広い条件を先に書いている厳しい条件から順に書く
int.Parse でエラーになる数字以外を入力しているこの章では数字を入力する。入力エラー対応は例外処理で学ぶ

次の項目について、自分で説明できるか確認してください。

  • 条件分岐とは何かを説明できる
  • if 文の基本形を書ける
  • else の役割を説明できる
  • else if の役割を説明できる
  • switch 文の基本形を書ける
  • casebreakdefault の役割を説明できる
  • === の違いを説明できる
  • != の意味を説明できる
  • && の意味を説明できる
  • || の意味を説明できる
  • ! の意味を説明できる
  • bool 型と条件式の関係を説明できる
  • 入力された値に応じて処理を変えるプログラムを作成できる

研修の進め方によっては、隣の人またはチーム内で説明確認を行います。

次の内容を、自分の言葉で説明してください。

  1. if 文はどのようなときに使いますか。
  2. else は何のために使いますか。
  3. === の違いは何ですか。
  4. &&|| の違いは何ですか。
  5. switch 文はどのような処理に向いていますか。
  6. else if で判定順序が重要になる理由は何ですか。

説明するときは、完全な答えでなくても構いません。
自分の言葉で説明しようとすることが大切です。


この章の演習課題に取り組みます。

制限時間は 50分 です。

時間内にすべて完成しなくても構いません。
できたところまでを保存し、Gitに提出してください。

提出について

制限時間になったら、完成・未完成に関わらず作業を止めます。 できたところまでをGitにcommitし、pushしてください。 未完成の場合は、どこまでできたかを報告できるようにしておきましょう。


まずは、全員が必須課題に取り組んでください。


点数を入力し、60点以上なら「合格」、60点未満なら「不合格」と表示してください。

実行例:

点数を入力してください。
75
合格です。

実行例:

点数を入力してください。
45
不合格です。

条件:

  • Console.ReadLine を使う
  • int.Parse を使う
  • if-else を使う

整数を入力し、偶数か奇数かを判定してください。

実行例:

整数を入力してください。
12
偶数です。

実行例:

整数を入力してください。
7
奇数です。

条件:

  • % を使う
  • if-else を使う

点数を入力し、0以上100以下なら「有効な点数」、それ以外なら「不正な点数」と表示してください。

実行例:

点数を入力してください。
85
有効な点数です。

実行例:

点数を入力してください。
120
不正な点数です。

条件:

  • && を使う
  • if-else を使う

メニュー番号を入力し、選択内容を表示してください。

1: 登録
2: 検索
3: 終了

実行例:

メニューを選択してください。
1: 登録
2: 検索
3: 終了
2
検索を選択しました。

条件:

  • switch 文を使う
  • default を書く
  • 不正な番号の場合は「メニュー番号が正しくありません」と表示する

必須課題が終わった人は、発展課題に取り組んでください。


点数を入力し、次の基準で評価を表示してください。

点数評価
90点以上A
80点以上90点未満B
70点以上80点未満C
60点以上70点未満D
60点未満E

実行例:

点数を入力してください。
82
評価:B

条件:

  • else if を使う
  • 判定順序に注意する

購入金額を入力し、次の基準で送料を表示してください。

購入金額送料
5000円以上0円
3000円以上5000円未満300円
3000円未満600円

実行例:

購入金額を入力してください。
4200
送料:300円

条件:

  • else if を使う
  • 送料を変数に保存してから表示する

ユーザーIDとパスワードを入力し、両方が正しければ「ログイン成功」、どちらかが違えば「ログイン失敗」と表示してください。

正しい値は次の通りです。

項目
ユーザーIDadmin
パスワードcsharp

実行例:

ユーザーIDを入力してください。
admin
パスワードを入力してください。
csharp
ログイン成功

条件:

  • string の比較を使う
  • && を使う

文字列でコマンドを入力し、処理内容を表示してください。

コマンド表示内容
add登録処理を行います
list一覧表示を行います
search検索処理を行います
exit終了します
それ以外不明なコマンドです

実行例:

コマンドを入力してください。
search
検索処理を行います。

条件:

  • switch 文を使う
  • default を書く
  • コマンドは文字列で判定する

課題が終わったら、できたところまでをGitに提出します。

まず、現在の状態を確認します。

Terminal window
git status

変更されたファイルを追加します。

Terminal window
git add .

コミットします。

Terminal window
git commit -m "Chapter04 条件に応じた処理"

ファイルサーバー上のリポジトリへpushします。

Terminal window
git push

Gitの操作でエラーが出た場合は、自己判断で同じ操作を繰り返さず、講師に確認してください。


提出前に、次の項目を確認してください。

  • プログラムをVisual Studioから実行できる
  • if 文を使っている
  • else を使っている
  • 必要に応じて else if を使っている
  • 必要に応じて switch 文を使っている
  • === を正しく使い分けている
  • && または || を使った条件を書ける
  • 入力値を使って条件分岐している
  • defaultelse で想定外の入力に対応している
  • セミコロンの付け忘れがない
  • if の条件式の直後に不要な ; がない
  • インデントが整っている
  • Gitにcommitしている
  • Gitにpushしている

この章では、条件に応じた処理について学習しました。

この章で学んだ主な内容は次の通りです。

  • 条件によって処理を変えることを条件分岐という
  • if 文を使うと、条件が成り立つときだけ処理を実行できる
  • else を使うと、条件が成り立たない場合の処理を書ける
  • else if を使うと、複数の条件を順番に判定できる
  • switch 文を使うと、値ごとに処理を分けられる
  • default は、どの case にも当てはまらない場合に実行される
  • == は比較、= は代入である
  • && は「かつ」、|| は「または」、! は否定を表す
  • 条件式の結果は true または false になる
  • 条件分岐では、判定順序や条件の範囲に注意する必要がある

次章では、繰り返し処理 を学習します。

繰り返し処理を使うと、同じような処理を何度も書かずに、条件や回数に応じて繰り返し実行できるようになります。