関係式と論理式

01	/****************************/
02	/* 関係式と論理式           */
03	/*      coded by Y.Suganuma */
04	/****************************/
05	#include <stdio.h>
06
07	int main()
08	{
09		int a = 10;
10		int b = 20;
11		int x;
12	/*
13	     データの入力
14	*/
15		printf("a %d   b %d\n", a, b);
16		printf("整数データを1つ入力して下さい ");
17		scanf("%d",&x);
18	/*
19	     様々な関係式と論理式
20	*/
21		printf("a < -1 < b ? %d\n", a < -1 < b);
22		printf("a < x < b ? %d\n", (a < x) && (x < b));
23		printf("x < a or x > b ? %d\n", (x < a) || (x > b));
24		printf("~(a + b + x) ? %d\n", !(a + b + x));
25		printf("a = b ? %d\n", a == b);
26		printf("a ≠ b ? %d\n", a != b);
27
28		return 0;
29	}
		
21 ~ 26 行目

  printf の「"」の中に記述した関係式・論理式の出力をしています.21 行目では,a < -1 の結果が偽( 0 )になるため,真( 1 )が出力されます.目的とする結果を得るためには,22 行目のように記述する必要があります.24 行目は,通常の論理式として見ると奇妙な式ですが,C/C++ では,0 以外の整数値をすべて真と見るため,このような式も意味を持ってきます(出力結果参照).また,25 行目にあるように,等しいか否かを調べるのは,「==」であることに注意して下さい.「=」と書いてしまう場合がよく見受けられます.

  入力データとして,15 を与えると,このプログラムは以下の結果を出力します.
a < -1 < b ? 1
a < x < b ? 1
x < a or x > b ? 0
~(a + b + x) ? 0
a = b ? 0
a ≠ b ? 1