if 〜 else
基本的な条件制御文です。
例示すると、
int a=1;
string s;
if (a==1) s="aは1です";
else s="aは1ではありません";
この例では、整数aに1を初期的に代入しているので、文字列sには、"aは1です"が代入されます。
if の後の( )内は条件式となります。
条件式の答えは、真偽(true 又は false) となりますので、aを論理型データとすれば、
bool
a=true;
string s;
if (a) s="aは真です";
else s="aは真ではありません";
という書き方ができます。
また、条件制御の結果、実行するプログラムブロックが複数ある場合は、{ } でくくります。
bool a=true;
int i;
string s;
if (a)
{
s="aは真です";
i=1;
}
else
{
s="aは真ではありません";
i=2;
}
条件式には、次のような比較演算子又は論理演算子を使うことができます。下段の3カラムは論理演算子に当たります。
演算子表現
|
使用例
|
判断内容
|
>
|
if (a>b)
※a,bのデータ型が数の場合のみ。文字型の場合には
Stringクラスのメソッドを使って次のようにする
if
(Compare(a,b)>0)
|
大きい
|
>=
|
if (a>=b)
※a,bのデータ型が数の場合のみ。文字型の場合には
Stringクラスのメソッドを使って次のようにする
if
(Compare(a,b)>=0)
|
等しいか大きい
|
<
|
if (a<b)
※a,bのデータ型が数の場合のみ。文字型の場合には
Stringクラスのメソッドを使って次のようにする
if
(Compare(a,b)<0) |
小さい
|
<=
|
if (a<=b)
※a,bのデータ型が数の場合のみ。文字型の場合には
Stringクラスのメソッドを使って次のようにする
if
(Compare(a,b)<=0) |
等しいか小さい
|
==
|
if (a==b)
※文字型の場合にはStringクラスのメソッドを使っ
て次のように表現することもできる
if (Equals(a,b)) |
等しい
|
!=
|
if (a ! =b)
※文字型の場合にはStringクラスのメソッドを使っ
て次のように表現することもできる
if (!Equals(a,b)) |
等しくない
|
&&
|
if (a==b &&
c!=d)
|
かつ(AND)
|
||
|
if (a==b || c!=d)
|
又は(OR)
|
!
|
if (!a)
|
でない(NOT)
|
条件式を構成する要素が複雑になると、記述方法に注意が必要です。
&&と||では、&&が優先度が高いため、次の例では、a==b
&& c==d の真偽がまず判断され、この判断結果とe==f の判断結果とのORが判断されて条件式の結果と
なります。
if (
a==b && c==d || e==f )
逆に、|| を優先させたい場合には、次のように&&より優先度の高い ( ) を用います。
if ( a==b &&
( c==d || e==f ) )
else のかわりに else if
を使うと、条件制御を効率よく行うことができます。
bool a=true;b=false;
int i;
string s1,s2;
if (a)
{
s1="aは真です";
i=1;
}
else if (b)
{
s1="aは真ではありません";
i=2;
}
else
{
s1="aは真ではありません";
s2="bは真ではありません";
i=2;
}
|
for 〜 文
for は一定のプログラムブロックを繰り返す制御文です。
for文の書式は次のとおりです。
for (初期値 ; 終了条件 ; 増減分)
具体例としては、
int i , j = 0 ;
for (i=1;i<11;i++) j+=i ;
この例では、iの初期値は1で、i++により1つずつ増加しながら、j に足されて行くことになります。
forで繰り返された結果、1〜10までの和がj に入ることになります。
終了条件にiが合致しなくなった段階でforループから抜ける点に注意してください。
複数のプログラムブロックを繰り返し実行させたい場合は、{ } で囲みます。
int i , j = 0 , k = 0 ;
for (i=1;i<11;i++)
{
j+=i ;
k+=1;
}
増減分として、1つずつ減少させるには、i--のように表示し、増減を1以外で行うためには、 i = i + 10
というように表示します。
for文を多重化することもできます。
int i , j = 0 , k = 0 ;
for (i=1;i<11;i++)
{
for (
j=0;j<10;j++)
{
k=i; j+=i ;
k+=1;
}
※for内のプログラムブロックから、一定の条件でループから抜けるには、breakステートメントを入れます。
|
while 〜 ,do
〜 while 〜文
forは、繰り返す回数が予め決められていますが、whileは条件式に合致するまで、繰り返すため回数に制限はありません。
なお、whileには、プログラムブロック実施前に条件式を判定する方法と、実施後に判定する方法があります。
まず、実施前に判定する方法の記述例です。
int i=0 ;
string s=NULL ;
while (i<10)
{
s+="*";
i+=1;
}
上の例では、整数iがカウンタの役割を担い、iが0から9までインクリメントされることにより、sには*文字が10個並びます。
次に実施後に判定する方法に書き換えます。
int i=0 ;
string s=NULL ;
do
{
s+="*";
i+=1;
}
while (i<10);
この例では、do以下のプログラムブロックが先に実行されますから、sは*文字が9個並びます。
※while文には、回数制限がないため、無限ループにならないよう注意してください。次のような例は確実に
無限ループになり、システムダウンにつながる危険がありま
す。
int i=0 ;
string s=NULL ;
while (i<10)
{
s+="*";
}
※for内のプログラムブロックから、一定の条件でループから抜けるには、breakステートメントを入れます。
|
switch 〜 case 文
if
文は1つの条件式での分岐ですが、switch文を使うと、複数の条件によって多重分岐することができます。
int
i=3;
string s;
switch (i)
{
case 1:
s="大阪行きホームです";
break;
case 2:
s="東京行きホームです";
break;
case
3:
s="富山行きホームです";
break;
case
4:
s="福岡行きホームです";
break;
default:
s="札幌行きホームです";
}
switchの後の( )内が評価式となり、caseで評価式の値を指定することにより、多重分岐を行います。上記の
例
では、整数 i に初期値3を代入しているので、case 3の後のプログラムブロックが実行されます。
次のcaseに実行が流れ込まないよう、break
を入れ忘れないようにしてください。
どのcase条件にも該当しない場合には、default後のプログラムブロックが実行されます。
|