/* puzzle.t - from C puzzle book */ #define puzzle(which) ( puts( "-----which-----\n" ), which() ) main() { puzzle( op1 ); puzzle( op2 ); puzzle( op3 ); puzzle( op4 ); puzzle( op5 ); puzzle( op6 ); puzzle( prep1 ); puzzle( prep2 ); } op1() { int x; x = - 3 + 4 * 5 - 6; printf("%d\n",x); x = 3 + 4 % 5 - 6; printf("%d\n",x); x = - 3 * 4 % - 6 / 5; printf("%d\n",x); x = ( 7 + 6 ) % 5 /2; printf("%d\n",x); } #define PRINTX printf( "%d\n", x ) op2() { int x, y, z; x = 2; x *= 3 + 2; PRINTX; x *= y = z = 4; PRINTX; x = y == z; PRINTX; x == (y == z); PRINTX; } #define PRINT(int) printf( "int = %d\n", int ) op3() { int x, y, z; x = 2; y = 1; z = 0; x = x && y || z; PRINT(x); PRINT( x || ! y && z ); x = y = 1; z = x ++ - 1; PRINT(x); PRINT(z); z += - x ++ + ++ y;PRINT(x);PRINT(z); z = x / ++ x; PRINT(z); } op4() { int x, y, z; x = 03; y = 02; z = 01; PRINT( x | y & z ); PRINT( x | y & ~ z ); PRINT( x ^ y & ~ z ); PRINT( x & y && z ); x = 1; y = -1; PRINT( ! x | x ); PRINT( ~ x | x ); PRINT( x ^ x ); x <<= 3; PRINT(x); y <<= 3; PRINT(y); y >>= 3; PRINT(y); } op5() { int x, y, z; x = 1; y = 1; z = 1; x += y += z; PRINT( x < y ? y : x ); PRINT( x < y ? x ++ : y ++ ); PRINT(x); PRINT(y); PRINT( z += x < y ? x ++ : y ++ ); PRINT(y); PRINT(z); x = 3; y=z=4; PRINT( (z >= y >= x) ? 1 : 0 ); PRINT( z >= y && y >= x ); } #define PRINT3(x,y,z) printf("x=%d\ty=%d\tz=%d\n",x,y,z) op6() { int x, y, z; x = y = z = 1; ++x || ++y && ++z; PRINT3(x,y,z); x = y = z = 1; ++x && ++y || ++z; PRINT3(x,y,z); x = y = z = 1; ++x && ++y && ++z; PRINT3(x,y,z); x = y = z = -1; ++x && ++y || ++z; PRINT3(x,y,z); x = y = z = -1; ++x || ++y && ++z; PRINT3(x,y,z); x = y = z = -1; ++x && ++y && ++z; PRINT3(x,y,z); } #define FUDGE(k) k+3 #define PR(a) printf("a= %d\t",(int)(a)) #define PRINTNEW(a) PR(a); putchar( '\n' ); #define PRINT2(a,b) PR(a); PRINT(b) #define PRINT3NEW(a,b,c) PR(a); PRINT2(b,c) #define MAX(a,b) (a