Index

HOME > プログラムTOP > C++




C++の基礎知識(7)

【制御文篇】

| ●if...else文 | ●switch...case文 | ●while文 | ●do...while文 | ●for文 |
( 記述篇, データ型篇, 定数篇, 変数篇, 演算子篇, 関数篇, ポインタ篇, 構造体篇, クラス篇, 番外篇 )

sasaraan programming

Exposition

●if...else文

 if(式){ ... }文は、ある式が真である場合にのみ機能します。ただし、else{ ... }文を付け加えると、式が偽の場合の処理も行うことができます。
 また、if(式1){ ... } else if(式2){ ... }文では、複数の式の真偽を判断させることができます。こちらも、後に else ... 文を加えると、すべての式が偽であった場合の処理を記述することができます。なお、この場合、式が真になった段階の処理で構文を抜けます。後の処理はスキップされます。さらに、return文でも構文を抜け出すことができます。
// 一つの式のみ判断
bool b;
if (b) {
    printf("bは真です");
}
// 一つの式の真偽を判断して分岐
bool b;
if (b) {
    printf("bは真です");
} else {
    printf("bは偽です");
} 
// {}内が一行の時は省略可
if (b) printf("bは真です");
// 複数の式を判断して分岐
unsigned n;
if (n == 0) {
    printf("nは0です");
} else if (n == 1) {
    printf("nは1です");
} else if (n == 2) {
    printf("nは2です");
} else {
    printf("nは3以上です");
} 

●switch...case文

 switch(式){case 値: ... } 文では、複数の分岐をさせることが可能です。各分岐は case ... 文を記述することでいくつでも追加することができます。ただし、分岐に使える値は整数値のみです。
 この時、プログラムは、条件に合った箇所以降(次以降のcase文)の処理をすべて行います。これを防ぐためには break文を挿入します。処理は break の箇所でストップし、構文を抜けることになります。また、return文でも構文を抜けることになります。
 また、default文を追加することで、すべての条件に合わなかったときの処理を記述することができます。
// 条件分岐 : 0,1,2,それ以外
unsigned int n;
switch (n) {
    case 0:
        printf("0です");
        break;
    case 1:
        printf("1です");
        break;
    case 2:
        printf("2です");
        break;
    default:
        printf("3以上です");
} 
// 条件分岐 : 0,1,2,それ以外
// わざと break文を省いた場合
// 0,1,2の時は同じ処理
unsigned int n;
switch (n) 
{
    case 0:
    case 1:
    case 2:
        printf("3未満です");
        break;
    default:
        printf("3以上です");
} 

●while文

 while(式){ ... } 文は、式が真である間、処理を繰返し実行します。この時、式が常に真であるときは、無限ループとなりプログラムは終了しなくなってしまうので注意が必要です。
 ただし、break文や return文を挿入することで、途中で構文を抜けることができます。また、continue文を挿入すると、それ以降の一回分の処理がスキップされ、次回の処理が始まります。
// 'a'...'z'を出力
char c = 'a';
int i = 0;
while (i++ < 26) {
    printf("%c", c++);
}
// {}内が一行の時は省略可
while (i++ < 26) printf("%c", c++);
// 'a'...'z'を出力、ただし'f'の前で中止
char c = 'a';
int i = 0;
while (i++ < 26) {
    printf("%c", c++);
    if (c == 'f') break;
} 
// 'a',,,'z'を出力、ただし'f'を除く
char c = 'a';
int i = 0;
while (i++ < 26) {
    if (c == 'f') {
        c++;
        continue;
    }
    printf("%c", c++);
}
// 無限ループ
int i = 0;
while (1) {    
    i++;
    if (i > 10) break;
}	

●do...while文

 do{ ... }while(式) 文は、while ... 文の中身({}の中)を少なくとも一回は実行するように改良されたものです。そのほかの用法は while ... 文と同じです。
// 'a'...'z'を出力
char c = 'a';
int i = 0;
do {
    printf("%c", c++);
} while (i++ < 25);
// {}内が一行の時は省略可
do printf("%c", c++);
while (i++ < 25); 

●for文

 for ... 文は式の評価の他に、変数の初期化や繰返し処理を定型化することができます。書式は、for(変数の初期化; 判断する式; 変数の繰返し処理){ ... }となります。式が真の間、処理を繰り返します。変数は複数設定することが可能ですが、一方で、()の中の3つの要素はいずれも省略可能です。すべて省略すると無限ループとなりますので注意が必要です。
 ただし、break文や return文を挿入することで、途中で構文を抜けることができます。また、continue文を挿入すると、それ以降の一回分の処理がスキップされ、次回の処理が始まります。
// 基本形 : 'a'...'z'を出力
char c = 'a';
int i;
for (i = 0; i < 26; i++) {
    printf("%c", c++);
}
// 複数の変数を初期化
char c;
int i;
for (i=0, c='a'; i < 26; i++, c++) {
    printf("%c", c);
}
// 初期化の省略
// {}内が一行の時は省略可
char c = 'a';
int i = 0;
for ( ; i < 26; i++) printf("%c", c++);
// 'a'...'z'を出力。ただし'f'を除く
char c;
int i ;
for (i=0, c='a'; i < 26; i++, c++) {
    if (c == 'f') {
        continue;
    }
    printf("%c", c);
}
// 無限ループ
char c = 'a';
int i = 0;
for ( ; ; ) {
    printf("%c", c++);
    i++;
    if (i > 25) break;
} 

www.sasaraan.net

(c) morijoh