A Few "C Puzzles"

Thanks to Alan Feuer, "The C Puzzle Book"

Assume that PRINT(i) prints the value of i.

#define	LOW		0
#define	HIGH		5
#define	CHANGE	2

void workover();

int i = LOW;

main() {
	int i = HIGH;
	reset( i / 2 ); 		PRINT(i);
	reset( i = i / 2 ); 		PRINT(i);
	i = reset( i / 2 );		PRINT(i);

	workover( i );			PRINT(i);
}

void workover(int i) {
	i = (i % i) * ((i * i) / (2 * i) + 4);
	PRINT(i);
}

int reset(int i) {
	i = i <= CHANGE ? HIGH : LOW;

	return i;
}

//============================================

int i = 1;

main() {
	int i, j;
	i = reset();
	for (j = 1; j <= 3; j++) {
		PRINT(i, j);
		PRINT(next(i));
		PRINT(last(i));
		PRINT(new(i + j));
	}
}

int reset(void) {
	return i;
}

int next(int j) {
	return j = i++;
}

int last(int j) {
	static int i = 10;
	return j = i--;
}

int new(int i) {
	int j = 10;
	return i = j += i;
}