log.c

/*
 * this shows the lazy evaluation of logic expressions in C
 *
 * Matt Bishop, ECS36A
 * April 9, 2024	original version
 */
#include <stdio.h>

int main(void)
{
	int x, y, z, a;

	/* set the values of the variables in the logic expressions */
	x = 12;
	y = 29;
	z = -1;
	printf("x = %d, y = %d, z = %d\n", x, y, z);

	/* lazy evaluation: false || false && ... is false */
	a = (x > y || y < z && x < z);
	printf("(x > y || y < z && x < z) = %d\n", a);

	/* lazy evaluation: false || true && true is true */
	a = (x > y || y > z && x > z);
	printf("(x > y || y > z && x > z) = %d\n", a);

	/* lazy evaluation: false && ... is false */
	a = (x > y && y > z);
	printf("(x > y && y > z) = %d\n", a);

	/* lazy evaluation: false && ... is false */
	/* note the second term is not evaluated  */
	/* so z is not incremented                */
	printf("z = %d\n", z);
	a = (x > y && y > ++z);
	printf("(x > y && y > ++z) = %d\n", a);
	printf("z = %d\n", z);

	/* lazy evaluation: true && true is true */
	/* note the second term is evaluated so  */
	/* z is incremented                      */
	printf("z = %d\n", z);
	a = (x < y && y > ++z);
	printf("(x < y && y > ++z) = %d\n", a);
	printf("z = %d\n", z);

	/*
	 * hasta la vista!
	 */
	return(0);
}


UC Davis sigil
Matt Bishop
Office: 2209 Watershed Sciences
Phone: +1 (530) 752-8060
Email: mabishop@ucdavis.edu
ECS 36A, Programming & Problem Solving
Version of April 2, 2024 at 12:13PM

You can get the raw source code here.

Valid HTML 4.01 Transitional Built with BBEdit Built on a Macintosh