if文
条件によって処理を分けたい場合にif文を使用します。
if (条件式)
文;
条件式は真偽値で判定します。
判定結果が真(0以外)であれば文が実行されます。
セミコロンは文の終わりです。
例を見てみましょう。
#include <stdio.h>
int main()
{
int tosi = 17;//年齢
if (tosi < 18)
printf("あなたは未成年です\n");
return 0;
}
年齢が18歳未満のときにprint文を1つ実行する例です。
ifの実行文printfはインデント(字下げ)をすると読みやすくなります。
もう1つ見てみましょう。
#include <stdio.h>
int main()
{
int tosi = 17;
if (tosi < 18) {
printf("あなたは未成年です\n");
printf("まだ選挙に行けません\n");
}
return 0;
}
年齢が18歳未満のときにprint文を2つ実行する例です。
文を複数実行する場合には、中括弧 { } でくくります。
1文しかなくても、中括弧 { } でくくってかまいません。
{ } で囲った文はインデント(字下げ)をすると読みやすくなります。
比較演算子(関係演算子)
ifで使う条件式は比較演算子を使って判定します。
以下の様な演算子があります。
演算子 | 意味 | 例 |
---|---|---|
== | 等しい | if (x == 0) |
!= | 等しくない | if (x != 0) |
<= | 以下 | if (x <= 0) |
< | より小さい | if (x < 0) |
>= | 以上 | if (x >= 0) |
> | より大きい | if (x > 0) |
else文
if文の形式にはもう一つあります。
if (条件式)
文1;
else
文2;
判定結果が真(0以外)であれば文1が実行されます。
偽(0)の場合は文2が実行されます。
例を見てみましょう。
#include <stdio.h>
int main()
{
int tosi = 17;
if (tosi < 10)
printf("あなたは10歳未満です\n");
else
printf("あなたは10歳以上です\n");
return 0;
}
(tosi < 10)の条件が正しいときに、「あなたは10歳未満です」を出力し
そうでない場合に、「あなたは10歳以上です」を出力します。
もう1つ複数実行する場合を見てみましょう。
#include <stdio.h>
int main()
{
int tosi = 17;
if (tosi < 10) {
printf("あなたは10歳未満です\n");
printf("小学校に通っている可能性が高いです\n");
} else {
printf("あなたは10歳以上です\n");
printf("小学校に通っている可能性は低いです\n");
}
return 0;
}
文を複数実行する場合には、中括弧 { } でくくります。
次はif else の連続を見てみましょう。
#include <stdio.h>
int main()
{
int tosi = 40;
if (tosi < 10)
printf("あなたの年齢は 0~ 9 歳です\n");
else if (tosi < 20)
printf("あなたの年齢は 10~ 19 歳です\n");
else if (tosi < 30)
printf("あなたの年齢は 20~ 29 歳です\n");
else if (tosi < 40)
printf("あなたの年齢は 30~ 39 歳です\n");
else
printf("あなたの年齢は 40歳以上です\n");
return 0;
}
もう1つ、同じプログラムを { } を使ってい書いています。
#include <stdio.h>
int main()
{
int tosi = 40;
if (tosi < 10) {
printf("あなたの年齢は 0~ 9 歳です\n");
} else if (tosi < 20) {
printf("あなたの年齢は 10~ 19 歳です\n");
} else if (tosi < 30) {
printf("あなたの年齢は 20~ 29 歳です\n");
} else if (tosi < 40) {
printf("あなたの年齢は 30~ 39 歳です\n");
} else {
printf("あなたの年齢は 40歳以上です\n");
}
return 0;
}
{ } を使っているだけの違いなのですが、 { } があると人が目で見るときに、どのifの終わりか、どのelseの終わりかが見やすくなるため、バグを産む可能性が減ります。
論理演算子
if文では複数の条件を組み合わせたり、否定したりして使用することができます。
この演算にand(論理積)、or(論理和)、not(否定)の論理演算子を使用します。
演算子 | 読み | 例 | 意味(a、bは条件式を指します) |
---|---|---|---|
&& | AND (論理積) | a && b | a、b両方真のときに真となり、それ以外のときは偽 |
|| | OR (論理和) | a || b | a、bのいずれかが真であれば真となり、それ以外は偽 |
! | NOT (否定) | !a | aの否定(aが真の時に偽、偽の時に真) |
ANDの例を見てみましょう。
if (nenrei >= 20 && nenrei < 30) printf("年齢は20代です\n");
この場合、
上の表の条件式a は nenrei >= 20 に相当します。
上の表の条件式b は nenrei < 20 に相当します。
ですから、
nenrei が 10 ならば、a は偽、bは真 なので、AND結果は偽となります。
nenrei が 25 ならば、a は真、bは真 なので、AND結果は真となります。
nenrei が 40 ならば、a は真、bは偽 なので、AND結果は偽となります。
AND 論理積
ANDの動作をまとめると以下のようになります。
a、b両方真のときに真となり、それ以外のときは偽
a | b | a && b |
---|---|---|
真 | 真 | 真 |
真 | 偽 | 偽 |
偽 | 真 | 偽 |
偽 | 偽 | 偽 |
OR 論理和
ORの動作をまとめると以下のようになります。
a、bのいずれかが真であれば真となり、それ以外は偽
a | b | a || b |
---|---|---|
真 | 真 | 真 |
真 | 偽 | 真 |
偽 | 真 | 真 |
偽 | 偽 | 偽 |
NOT 否定
NOTの動作をまとめると以下のようになります。
aの否定(aが真の時に偽、偽の時に真)
a | !a |
---|---|
真 | 偽 |
偽 | 真 |
書き方は以下のようになります。
if ( !(nenrei >= 20)) printf("年齢は20代未満です\n");
キャスト演算子(型変換)
キャスト演算子は型を変換する場合に使用します。
以下の例を見てください。
double dval;
int ival;
dval = 5.2;
ival = (int)5.2; ←キャスト・int型に変換する
if ((int)dval==5) printf("I am 5.\n"); ←キャスト・int型に変換する
#include <stdio.h>
void main()
{
double dval;
int ival;
dval = 5.2;
ival = (int)dval;
printf("dval=%3.1f ival=%d\n", dval, ival);
if ((int)dval==5) printf("I am 5.\n");
return;
}
実行結果
dval=5.2 ival=5
I am 5.
見ての通りの使い方です。
整数変換したので切り捨てられています。
キャストは型宣言で使用するものが使用できます。
コメント