4章 処理の流れを制御しよう

 

概要

条件によって、プログラムの処理の流れを変えたり、処理を繰り返す方法について学びます。

この処理の流れを制御する方法を覚えることによって、高度なプログラムを作成できるようになります。

 

この章の目標

比較演算子と論理演算子の使い方をマスターする。

処理の分岐と繰り返し方法について覚える。

 

--------------------------------------------

4.1 評価と処理の分岐

--------------------------------------------

条件によって処理する内容を変える条件分岐として、if文とswitch文があります。

--------------------------------------------

4.1.1 if文

 

4章 判定しよう−if〜else−[pp.40-48]

 

・書式

if( @ ){

  A;

}

else{

  B;

}

 

評価が偽の場合の処理Bがない場合は、else{}の部分は、省略できます。また、中かっこ{}は、AやBの処理が一つの命令のみの場合は、処理する命令が明らかなので省略できます。

 

・処理

@式を評価し、真ならばAを処理し、偽ならばBを処理します。

実際の評価では、@式の値を数値として処理し、偽を0、真を0以外の数値として処理します。

 

4.1-1 if文の処理の流れ

 

・条件式

@式の条件式として、次のような比較式がよく用いられます。

 

if( x <= y )

xがy以下か、評価します。

 

比較式で使用される比較演算子には、関係演算子と等値演算子があります。

また、より複雑な条件式として、次のような論理演算子を用いる表現もあります。

 

if( (x==1) && (y==1) )

xが1に等しく、かつ、yが1に等しいか、評価します。

 

各演算子の説明は、第2章の資料「演算子のまとめ」を参照して下さい。

--------------------------------------------

4.1.2 switch文

 

・書式

switch( @ )

{

case A:

  C;

case B:

  D;

.

.

.

default:

  E;

}

 

defaultの部分は、省略できます。

 

・処理

@の値と等しいcaseの値(A、B、・・・)の処理(C、D、・・・)を実行し、等しい値がない場合は、defaultの処理Eを実行します。

なお、次の処理の実行は、各処理(C、D、・・・)の最後に、breakがある場合とない場合によって異なります。

breakがある場合は、switch文を終わり次の処理に移り、ない場合は、次のcase(default)に書かれている処理を実行します。

 

4.1-2 switch文の処理の流れ(breakがない場合)

 

4.1-3 switch文の処理の流れ(breakがある場合)

--------------------------------------------

●プログラム例

例題4-1[p.43]

例題4-2[p.44]

 

P例:4.1-1)

#include <stdio.h>

 

main()

{

        int x;

 

        printf("x = ");

        scanf("%d",&x);

        if(x >= 5)

                printf("x は、5以上\n");

        else

                printf("x は、5未満\n");

}

・例

% x = 3

% x は、5未満

 

例題4-3[pp.45-46]

 

P例:4.1-2)

#include <stdio.h>

 

main()

{

        int x;

 

        printf("x = ");

        scanf("%d",&x);

        switch( x )

        {

                case 1:

                        printf("case 1:\n");

                        break;

                case 2:

                        printf("case 2:\n");

                default:

                        printf("default:\n");

        }

}

・例

% x = 2

% case 2:

% default:

 

--------------------------------------------

4.2 処理の繰り返し

--------------------------------------------

処理を繰り返す方法として、while文やfor文があります。

5章 繰り返そう−whileループとforループ−(pp.54-71)

--------------------------------------------

4.2.1 while文

 

・書式

while( @ )

{

        A;

}

 

・処理

@の繰り返し評価を行ってから真ならばAの処理を実行し、再び@の評価を行います。偽ならばwhile文から抜け出します。

 

4.2-1 while文の処理の流れ

--------------------------------------------

4.2.2 do-while文

 

・書式

do{

        A;

}while( @ );

 

・処理

まず、Aの処理を実行してから@の繰り返し評価を行い、真ならば再びAの処理を実行します。偽ならばdo-while文から抜け出します。

従って、@の評価に関係なく、必ず1回はAの処理を実行します。

4.2-2 do-while文の処理の流れ

--------------------------------------------

4.2.3 for文

 

・書式

for(@;A;B){

        C;

}

 

・処理

まず、for文の処理を実行する最初の一回のみ制御変数の初期化(@)を行います。そして、条件式(A)を評価し、真ならばCの処理を実行し、偽ならばfor文から抜け出します。

なお、評価が真でCの処理を実行した後は、制御変数の変更(B)を行い、再び、条件式(A)の評価に戻ります。

 

4.2-3 for文の処理の流れ

--------------------------------------------

 

●プログラム例

P例の(4.2-1)から(4.2-4)までは、1から10までの整数の足し算を行うプログラム例です。

 

P例:4.2-1)

#include<stdio.h>

 

main()

{

        int x,y;

 

        x = y = 0;

        while( x<10 ){

                ++x;

                y += x;

        }

        printf("x = %d, y = %d\n",x,y);

}

・結果

% x = 10, y = 55

 

例題5-3[p.58]

 

P例:4.2-2)

#include<stdio.h>

 

main()

{

        int x,y;

 

        x = y = 0;

        do{

                ++x;

                y += x;

        }while( x<10 );

        printf("x = %d, y = %d\n",x,y);

}

・結果

% x = 10, y = 55

 

例題5-4[p.59]

例題5-7[p.63]

 

P例:4.2-3)

#include<stdio.h>

 

main()

{

        int x,y;

 

        y = 0;

        for(x=1;x<=10;x++){

                y += x;

        }

        printf("x = %d, y = %d\n",x,y);

}

・結果

% x = 11, y = 55

 

P例:4.2-4)

#include<stdio.h>

 

main()

{

        int x,y;

 

        y = 0;

        x = 1;

        for(;;){

                y += x;

                ++x;

                if(x>10) break;

        }

        printf("x = %d, y = %d\n",x,y);

}

・結果

% x = 11, y = 55

 

例題5-8[p.65]

 

P例:4.2-5)

#include<stdio.h>

main()

{

        int i;

 

        for(i=0;i<5;i++){

                if(i==3) continue;

                printf("i = %d\n",i);

        }

}

・結果

% i = 0

% i = 1

% i = 2

% i = 4

 

例題5-9[p.66]

例題5-10[p.67]

2重ループでのbreak[p.68]

--------------------------------------------