プログラミングを試してみたい人向けのC#プログラミングチュートリアル

分岐と繰返し

POINT
  • 分岐はif、swicthを使用する
  • 繰返しはfor、foreach、while、do whileを使用する
目次

分岐と繰返しで作られるプログラム

プログラムはコンピュータに対する命令を列挙したものです。
ただ、これをしてあれをしてと順番にやることを並べただけでは、世の中の多くのアプリケーションのように柔軟に動いてくれません。
柔軟な動きを可能にしているのが、分岐と繰返しです。

分岐により、色んな条件次第で結果が変わるようになります。
繰返しにより、一つ一つやるべきことをプログラムとして記載しなくても、多くの処理を行ってくれるようになります。
大きな視点では、クラスがプログラムの肝になるのですが、小さな視点では、この分岐と繰返しがプログラムの肝になります。

では、それぞれどのように実現していくかを見ていきましょう。

分岐

まずは、分岐です。
もし○○なら□□するというように、条件次第で処理を変える場合に使用します。
これには、ifとswicthを使用します。

if

分岐の基本はifです。
if (○○なら) then {□□する} else {違ったら△△する}という形式で記載します。

サンプルプログラム
class Program
{
    static void Main()
    {
        System.Console.WriteLine("プログラムについて理解してきましたか?\nYesの場合は'y'、Noの場合は'n'を入力してください。");
        string input = System.Console.ReadLine();
        
        if (input=="y")
        {
            System.Console.WriteLine("その調子でがんばりましょう!");
        } else {
            System.Console.WriteLine("あせらずに少しずつ勉強していきましょう!");
        }

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
プログラムについて理解してきましたか?
Yesの場合は'y'、Noの場合は'n'を入力してください。
y
その調子でがんばりましょう!

サンプルプログラムの実行方法はトップページを参照してください。

解説します。
string input = System.Console.ReadLine();
この行で文字の入力を促して、結果が変数inputに入ります。
if (input=="y")
この行で入力された値がyと同じだったらという判断をしています。
比較する際は=を二つ重ねます。
続く{}で括られた処理が(input=="y")の結果が正だった場合の処理になります。
結果が否の場合は、上記に続くelse {}のカッコで括られた処理が実行されます。
else if (○○) {}と続けた場合は、さらに細かい条件で分岐することができます。

関係演算子と論理演算子

==のように比較用の演算子を関係演算子と言います。
関係演算子には次のものがあります。

演算子 使い方の例 意味
== a == b aとbは等しい
!= a != b aとbは異なる
> a > b aはbより大きい
< a < b aはbより小さい
>= a >= b aはb以上
<= a <= b aはb以下

論理演算子で指定した結果はbool型で正の場合はtrue、非の場合はfalseが返ってきます。
ifはtrueの場合に{}の処理、falseの場合にelse以降の処理を実行します。

また、二つの条件が関わる場合は、次のように論理演算子を使用します。

演算子 使い方の例 意味
&& a && b aかつb、ANDという意味
|| a || b aまたはb、ORという意味

&や|など一つでも動作しますが、&&と2つ重ねることで1つ目の条件に当てはまらない場合、2つ目の比較は実行しない動きになります。
基本的に良いことしかないので、2つ重ねて使用します。

サンプルプログラム
class Program
{
    static void Main()
    {
        System.Console.WriteLine("Yesの場合は'y'、Noの場合は'n'を入力してください。");
        System.Console.WriteLine("プログラムについて理解してきましたか?");
        string input1 = System.Console.ReadLine();
        System.Console.WriteLine("プログラムは楽しいですか?");
        string input2 = System.Console.ReadLine();
        
        if (input1=="y" && input2=="y")
        {
            System.Console.WriteLine("あなたはプログラムに向いています。是非続けましょう!");
        } else if (input1=="y") {
            System.Console.WriteLine("続けていると楽しくなるかもしれません。もう少しです!");
        } else if (input2=="y") {
            System.Console.WriteLine("楽しんで続けていれば、必ず理解できます。もう少しです!");
        } else {
            System.Console.WriteLine("あせらずに少しずつ勉強していきましょう!");
        }

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
Yesの場合は'y'、Noの場合は'n'を入力してください。
プログラムについて理解してきましたか?
y
プログラムは楽しいですか?
y
あなたはプログラムに向いています。是非続けましょう!

論理演算子not

論理演算子には&と|の他にnotの意味がある!があります。
頭に!を付けることで、trueとfalseを逆転します。

サンプルプログラム
class Program
{
    static void Main()
    {
        bool b = true;

        if (b)
        {
            System.Console.WriteLine("trueです。");
        } else {
            System.Console.WriteLine("falseです。");
        }
        
        // !にするとtrueがfalseになる
        if (!b)
        {
            System.Console.WriteLine("trueです。");
        } else {
            System.Console.WriteLine("falseです。");
        }

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
trueです。
falseです。

swich

swichは、変数の値によって処理を分岐します。
swich (変数)
{
    case 値1:
        処理1;
        break;
    case 値2:
        処理2;
        break;
    defalt:
        条件に当てはまらない場合の処理;
        break;
}という形式で記述します。
caseごとの処理の括りが{}ではなく:で始まってbreak;で終わるようにになっているので注意してください。

サンプルプログラム
class Program
{
    static void Main()
    {
        System.Console.WriteLine("プログラムの楽しさを1~3で入力してください。");
        string input = System.Console.ReadLine();

        switch (input)
        {
            case "1":
                System.Console.WriteLine("今後、楽しくなってくれると嬉しいです。");
                break;
            case "2":
                System.Console.WriteLine("これからもっと楽しくなるはずです。");
                break;
            case "3":
                System.Console.WriteLine("とてもプログラミングに向いているようですね。");
                break;
            default:
                System.Console.WriteLine("1~3で入力してください。");
                break;
        }

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
プログラムの楽しさを1~3で入力してください。
2
これからもっと楽しくなるはずです。

繰返し

繰返しは同じような処理を何度もする場合や、配列というデータの塊からデータを探す場合などに使用します。
繰返しの使用方法は3つあります。
for、foreach、while、do whileです。
1つずつ見ていきましょう。

for

forは次の形式で記載します。
for (最初に行う処理; 繰返す条件; 毎回最後に行う処理)
{
    繰り返す処理
}

サンプルプログラム
class Program
{
    static void Main()
    {
        for (int i = 1; i <= 5; i++)
        {
            System.Console.WriteLine(i);
        }

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
1
2
3
4
5

このサンプルでは、最初に行う処理は「int i = 1;」になります。
まず1から始まる変数iを用意するという意味になります。
繰り返す条件は「i <= 5;」です。
変数iが5以下の場合に繰り返します。
毎回最後に行う処理が「i++」です。
変数iに1を足すという意味になります。

forの場合、このように変数を用意して、一定数まで変数をカウントしながら処理をするのが基本型になります。

foreach

foreachは配列というデータの塊に対して繰り返す場合に使います。
次のように記載します。
foreach (型 変数名 in 配列やコレクションなどのデータの塊)
{
    繰り返す処理
}

サンプルプログラム
class Program
{
    static void Main()
    {
        string[] strList = new string[] {"いち", "に", "さん", "よん", "ご"};
        foreach (string s in strList)
        {
            System.Console.WriteLine(s);
        }

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
いち
に
さん
よん
ご

string[] strList = new string[] {"いち", "に", "さん", "よん", "ご"};
この行で配列というデータの塊を用意しています。
「foreach (string s in strList)」で、strListに含まれているデータを一つずつsという変数に入れて繰り返すという意味になります。

while

whileは繰り返す条件のみを指定する形式です。
次のように記載します。
while(繰返す条件)
{
    繰り返す処理
}
forの説明で紹介したサンプルプログラムをwhileを使って記載してみます。

サンプルプログラム
class Program
{
    static void Main()
    {
        int i = 1;
        while(i <= 5)
        {
            System.Console.WriteLine(i);
            i++;
        }

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
1
2
3
4
5

whileの場合はforと違い、最初に行う処理と毎回最後に行う処理は、別途記載する必要があります。
その代わり余計な制約がないので、柔軟な繰返し処理ができます。

do while

do whileは最後に繰返しの条件を指定する方法です。
次のように記載します。
do
{
    繰り返す処理
} while (繰返す条件)

サンプルプログラム
class Program
{
    static void Main()
    {
        int i = 1;
        do
        {
            System.Console.WriteLine(i);
            i++;
        }
        while (i <= 5);

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
1
2
3
4
5

まず処理をしてからでないと繰り返す条件がはっきりしない場合などに使用します。

breakとcontinue

繰返しの処理を作成していると、途中で繰返しを抜けたい場合や次の繰返しにすぐ進みたい場合が出てきます。
繰返しを抜けるにはbreak、次の繰返しに進むにはcontinueを使います。

サンプルプログラム
class Program
{
    static void Main()
    {
        // 10まで繰り返す
        for (int i = 1; i <= 10; i++)
        {
            if (i == 5) 
            {
                // 5は処理を飛ばす
                continue;
            }
            
            System.Console.WriteLine(i);
            
            if (i == 7)
            {
                // 7まで来たら終了する
                break;
            }
        }

        System.Console.ReadKey();  // キー入力待ち
    }
}
実行結果
1
2
3
4
6
7

5のときはcontinueしているため、以降の処理が実行されず5は出力されません。
forの条件は10までとしていますが、7のときにbreakしているため7まで出力して終わっています。