第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]
--------------------------------------------