サンプルプログラム cntl1.c
(8-1)if文
if文のフォーマットは、
if (式) (処理);
処理が複数行にわたる場合には、
if (式) { (処理1) (処理2) ----- (処理n) }
のように記述します。
(式)には比較演算子のほか、数値、変数、論理演算式、戻り値がある関数など、数値を返すものならなんでもOKです。
また、else ifやelseを使って、
if (式1) { (処理) // 式1が真のとき実行されます } else if (式2) { (処理) // 式2が真のとき実行されます } else if (式3) { (処理) // 式3が真のとき実行されます } else { (処理) // 式1~3がすべて偽のとき実行されます }
のように複数の条件式を記述することもできます。
if文の例
#include <stdio.h> int sub( int a ) { return( ! a ); } void main( void ) { int a, b, c, d, e, f, g, h, i; int x, y; a = b = c = d = // 同じ値で初期化する場合には、このようにまとめて初期化できます。 e = f = g = h = i = 0; x = 0; y = 1; if( 0 ) a = 1; // ① if( 1 ) b = 1; // ② if( 1 > 9 ) c = 1; // ③ if( x ) d = 1; // ④ if( x < 9 ) e = 1; // ⑤ if( x && y ) f = 1; // ⑥ if( x || y ) g = 1; // ⑦ if( sub(1) ) h = 1; // ⑧ if( sub(0) ) i = 1; // ⑨ printf( "a = %d\n", a ); printf( "b = %d\n", b ); printf( "c = %d\n", c ); printf( "d = %d\n", d ); printf( "e = %d\n", e ); printf( "f = %d\n", f ); printf( "g = %d\n", g ); printf( "h = %d\n", h ); printf( "i = %d\n", i ); printf( "x = %d\n", x ); printf( "y = %d\n", y ); }
というプログラムを実行しますと結果は以下のようになると思います。
a = 0 b = 1 c = 0 d = 0 e = 1 f = 0 g = 1 h = 0 i = 1 x = 0 y = 1
C言語の場合0以外の値はすべて真(true)であり、if文の後の処理が実行されます。
0のときだけ偽(false)であり、if文の後の処理は実行されません。
では①から順番に見ていきましょう。
まず、①の評価式は 数値の 0 です。
これは偽(false)であるため処理(a = 1)は実行されません。
よって表示は a = 0 になっています。
②ですが、評価式は数値の 1 です。
これは真(true)であるため処理(b = 1)が実行されます。
よって表示は b = 1 になっています。
③ですが、評価式は (1 > 9) となっていますので、1は9より大きくありませんのでこの不等式は偽(false)になります。
よって表示は c = 0 になっています。
④ですが、評価式は x です。
変数xは0で初期化されていますので偽(false)になります。
よって表示は d = 0 になっています。
⑤ですが、評価式は (x < 9) となっていますので、xは9より小さいので真(true)になります。
よって表示は e = 1 になっています。
⑥ですが、評価式は (x && y) となっていますので、xの値は0で偽(false)、yの値は1で真(true)、
論理積(AND)なので偽(false)になります。
よって表示は f = 0 になっています。
⑦ですが、評価式は (x || y) となっていますので、xの値は0で偽(false)、yの値は1で真(true)、
論理和(OR)なので真(true)になります。
よって表示は g = 1 になっています。
⑧ですが、評価式はsub関数の戻り値で引数に1(true)を渡しています。sub関数は引数の否定(NOT)を返すので戻り値は偽(false)になります。
よって表示は h = 0 になっています。
⑨ですが、評価式はsub関数の戻り値で引数に0(false)を渡しています。sub関数は引数の否定(NOT)を返すので戻り値は真(true)になります。
よって表示は、i = 1 になっています。