C++   条件文

ホーム   C/C++チュートリアル


この章では、C++ の「条件分岐」と「繰り返し処理」を説明します。

if 文

if.cpp


#include <iostream>

int main()
{
    if (true)
    {
        std::cout << "True"  << std::endl;
    } else {
        std::cout << "False" << std::endl;
    }
    
    if (false)
    {
        std::cout << "True"  << std::endl;
    } else {
        std::cout << "False" << std::endl;
    }
    
    std::cout << "true  is " << true  << "." << std::endl;
    std::cout << "false is " << false << "." << std::endl;
    
    if (-1)
    {
        std::cout << "True"  << std::endl;
    } else {
        std::cout << "False" << std::endl;
    }
    
    if (0)
    {
        std::cout << "True"  << std::endl;
    } else {
        std::cout << "False" << std::endl;
    }
    
    std::cout << "10==10 is " << (10==10) << "." << std::endl;
    std::cout << "10==20 is " << (10==20) << "." << std::endl;
    
    return 0;
}
    

実行結果


True
False
true  is 1.
false is 0.
True
False
10==10 is 1.
10==20 is 0.
    

コード説明

  1. C++ には、文字列型や正数値型の他にも真偽型という型もあります。
  2. 真偽値型は bool というキーワードで表し、true(真) とfalse(偽) の2種類の値しかありません。
  3. if ( ) の ( ) の中の値が真の場合は、それに続く { } の中の処理が実行されます。
  4. if ( ) の ( ) の中の値が偽の場合は、else に続く { } の中の処理が実行されます。
  5. 0 以外の整数値は、真とみなされます。一方 0 という整数値は、偽とみなされます。
  6. -0 は偽ですが、-1 は真とみなされます。
  7. 10 == 10 は正解なので真とみなされます。10 == 20 は不正解なので偽とみなされます。
  8. if 文の else キーワード以降は省略することができます。else 以降を省略した場合は、if ( ) の ( ) の中が偽の場合は何の処理も行われません。


if 文は、if else 文を使って、3つ以上の選択肢を設定することができます。

ifelse.cpp


#include <iostream>

void yourscore(int code);

int main()
{
    yourscore(70);
    yourscore(90);
    yourscore(50);
    yourscore(30);
    
    return 0;
}

void yourscore(int score)
{
    if ( score >= 80 )
    {
        std::cout << "成績はAです。" << std::endl;
    } else if ( score >= 60 ) {
        std::cout << "成績はBです。" << std::endl;
    } else if ( score >= 40 ) {
        std::cout << "成績はCです。" << std::endl;
    } else {
        std::cout << "また頑張りましょう。" << std::endl;
    }
}
    

実行結果


成績はBです。
成績はAです。
成績はCです。
また頑張りましょう。
    

コード説明

  1. 「if ( score >= 80 )」の >= という記号は比較演算子で、80 以上という意味になります。> が 80 より上と 80 を含まないのに比べ、>= は 80 も含みます。
  2. 「 else if ( score >= 60 )」などすることで、複数の条件を設定することができます。条件は上から判定されますので、最初に「if ( score >= 0)」などとしてしまうと、すべての score が含まれてしまい、そこで処理が止まります。
  3. 最後の「} else {」は省略できます。else を省略して、どの条件にも当てはまらない場合は、何も処理されません。

switch 文

条件分岐の方向が多くある場合には、switch 文を使うのも便利です。

switch.cpp


#include <iostream>

void character(char code);

int main()
{
    character('C');
    character('A');
    character('B');
    character('D');
    character(65);

    
    
    return 0;
}

void character(char code)
{
    switch (code)
    {
    case 'A':
        std::cout << 'A' << std::endl;
        break;
    case 'B':
        std::cout << 'B' << std::endl;
        break;
    case 'C':
        std::cout << 'C' << std::endl;
        break;
    default:
        std::cout << "not matching." << std::endl;
    }
}
    

実行結果


C
A
B
not matching.
A
    

コード説明

  1. C++ には、char というデータ型もあります。char は、 1バイト文字を1文字だけ格納できるデータ型です。1つの文字は、 実際には文字コードという整数値になっています。int が -21億から +21億までの大きな整数値を格納することができるのに対して、char は -128 から +127 までの整数値しか格納することができません。しかしその分 メモリの使用量も少なくなります。
  2. switch ( ) の ( ) の間には、整数値か整数値を格納した変数を指定します。 文字列型や条件文は指定できません。
  3. swith 文は、( ) の間で指定した値と同じ値を持つ case キーワードの位置ま飛びます。そして、そこに記述された処理をします。
  4. case キーワードの後に指定できる値は整数値だけです。値の後にはコロン : をつけます。
  5. case キーワードで始まった処理は break キーワードが現れるまで続きます。もし break キーワードを記述しなければ、次の case キーワードの処理も実行されてしまいます。
  6. break キーワードには、セミコロン ; をつけます。
  7. どの case キーワードの値にも一致しなかった場合は、default キーワードの処理が実行されます。
  8. default キーワードには、コロン : をつけます
  9. default キーワードは省略できます。default キーワードを省略した場合にどの case キーワードにも一致しなかった場合は、何の処理も行われません。
  10. 'A' の文字コードは 65 です。

while 文

while.cpp


#include <iostream>

int main()
{
    int num = 1;
    
    while (num < 11)
    {
        std::cout << num << "回目" << std::endl;
        num++;
    }
    std::cout << "End..." << std::endl;
    return 0;
}
    

実行結果


1回目
2回目
3回目
4回目
5回目
6回目
7回目
8回目
9回目
10回目
End...
    

コード説明

  1. while 文は、while キーワードの次に( と )で囲んで真偽値の得られる 「条件(condition)」というものを書きます。
  2. 「(num < 11)」の < という記号は、比較演算子と呼ばれるものです。num が 11 より小さい場合は真になり、11以上の場合は偽になります。
  3. 「num++;」の ++ という記号はインクリメント(increment、増加)という演算子です。numの値を1つだけ増やします。
  4. num が 11になり「(num < 11)」が偽になった場合は、while文は終了します。


while 文は break キーワードで終了させることもできます。

break.cpp


#include <iostream>

int main()
{
    int num = 1;
    
    while (num)
    {
        std::cout << num << "回目" << std::endl;
        num++;
        if (num > 10) { break; }
    }
    std::cout << "End..." << std::endl;
    return 0;
}
    

実行結果は先ほどと同じです。

コード説明

  1. 「while (num)」の場合、num の値が 0 以外の場合は、真になります。
  2. このサンプルにように、最初のnumが1以上の場合は、このままでは無限ループになります。
  3. 「if (num > 10)」の > も比較演算子です。num の値が10より上であれば真になります。
  4. 「{ break; }」というふうに、break; と記述すると、その段階で繰り返し処理が終了します。


continue というキーワードを使うと、繰り返し処理を その回の処理だけスキップできます。

continue.cpp


#include <iostream>

int main()
{
    int num = 0;
    
    while (num < 11)
    {
        num++;
        if (num % 2 != 0 ) { continue; }
        std::cout << num << "回目" << std::endl;
    }
    std::cout << "End..." << std::endl;
    return 0;
}
    

実行結果


2回目
4回目
6回目
8回目
10回目
End...
    

コード説明

  1. 「if (num % 2 != 0 )」の、% という記号は整数の割り算の余りを求める「算術演算子」です。
  2. 整数を2で割ると、奇数の場合は余りが1になり、偶数の場合は余りが0になります。
  3. 「!=」という記号は比較演算子です。左辺の値と右辺の値が違う場合に真になります。
  4. 「{ continume; }」結果として、num が奇数の場合には、continue キーワードが 実行されて、その回の処理はスキップされます。

  5. do-while 文を使うと、条件に合致するかどうかに関わらず、最低一回は処理が実行される繰り返し文が書けます。

    dowhile.cpp

    
    #include <iostream>
    
    int main()
    {
        int num = 0;
        
        do {
            std::cout << num << "回目" << std::endl;
            num++;
            if (num > 10) { break; }
        } while (num);
        std::cout << "End.." << std::endl;
        
        return 0;
    }
        

    実行結果

    
    0回目
    1回目
    2回目
    3回目
    4回目
    5回目
    6回目
    7回目
    8回目
    9回目
    10回目
    End..
        

    コード説明

    1. 「do {」、通常、数値の 0 は偽と判定され、その先に進めませんが、do キーワードで始めることによって、判定されることを避けて、処理を進めています。
    2. 「} while (num);」、最後に、条件を判定することにより、最低1回は実行されることになります。条件式の後にセミコロン ; が必要なことに気をつけてください。

    for 文

    繰り返す回数が前もって決まっている場合などは、while 文よりも、for 文の方が よく使われます。

    for.cpp

    
    #include <iostream>
    
    int main()
    {
        for (int i=1; i <= 10; i++)
        {
            std::cout << i << "回目" << std::endl;
        }
        std::cout << "End.." << std::endl;
        
        return 0;
    }
        

    実行結果

    
    1回目
    2回目
    3回目
    4回目
    5回目
    6回目
    7回目
    8回目
    9回目
    10回目
    End..
        

    コード説明

    1. for 文は ( と ) の間に、初期値、条件式、更新式(インクリメントなど)を セミコロン ; で区切って記述します。3つの項目が並んでいるので分かりやすいです。
    2. 「int i=1;」初期値に使われる変数名は、イテレーター(iterator、反復子)の頭文字をとって、i が慣習的に使われます。さらに変数が必要な場合は、i からアルファベットを辿って、j、k、l などと命名されます。
    3. 「i <= 10;」<= という記号は比較演算子です。i の値が 10 以下、つまり 10 が含まれています。一方、i < 10 とすると、10 未満、つまり 10 は含まれません。 ここでは、i < 11; とするよりも i <= 10 とする方が感覚的に意味が分かりやすくなると思います。
    4. 「i++;」最後に i の値をインクリメントします。このインクリメントは、for 文が一回繰り返される最後に処理されます。



368 visits
Posted: Dec. 10, 2019
Update: Dec. 23, 2019

ホーム   C/C++チュートリアル   目次