Decisions are based on *Boolean expressions*,
algebra-like expressions with a value of true or false.
The term Boolean is named after George Boole,
a well-known mathematician, philosopher, and logician, who
developed a systematic approach to logic now known as
*Boolean algebra*. The basis of Boolean
algebra was published in his text "The Laws of Thought", and
provides a significant part of the foundation of computer science.

The C language does not have a separate Boolean data type.
Recall that the design philosophy of C is minimalist and explicit
rather than bloated and abstract.
Boolean values in C are represented as they are stored internally,
as integer values. A value of 0 is interpreted as `false`

and any non-zero value is interpreted as `true`

.
A derived Boolean type called `bool`

is
provided in the standard header file `stdbool.h`

,
along with `true`

and `false`

constants. We can use this to make our C code more self-documenting,
rather than defining Boolean variables as `int`

.

Since the C language does not have a separate Boolean data type, there are no built-in constants. Traditionally, C programmers would define a Boolean variable as an integer.

#include <sysexits.h> int main() { int raining; raining = 0; // 0 means false, non-zero means true ... return EX_OK; }

However, the `bool`

data type and the values
`true`

and `false`

are
now defined in the standard header file
`stdbool.h`

. While not part of the C
language, it is included with all modern C compilers.

#include <stdbool.h> #include <sysexits.h> int main() { bool raining; raining = false; ... return EX_OK; }

Fortran provides logical constants `.true.`

and `.false.`

. The periods are actually part of
the constants, and are a vestige of
early Fortran, which used periods to delineate many
program elements (tokens) in order to make parsing easier.

program example implicit none logical raining raining = .false. end program

A *relational expression* is a Boolean
expression (an expression with a value of true or false)
that compares (tests the relation between) two values
of any type, such as integers, real numbers, or strings.

Relational expressions in C are actually integers, with
a value of 0 for false and 1 for true, which
can be represented as `false`

and `true`

if `stdbool.h`

is included in the program.
C constructs such as `if`

statements and loops will
interpret a value of zero as false and any non-zero value as true.

Relational expressions in Fortran have the data type
`logical`

and a value
of `.false.`

or `.true.`

.

Relational expressions are formed using
*Relational operators* and two values.
C and Fortran provide the usual arithmetic
relations such as "equals", "less than",etc.

Floating point values should NEVER be compared for equality. Due to round-off error, it is possible that the actual value might be slightly different than the expected value and therefore not equal to the value we're looking for. For example, the following condition is likely to fail, because 0.1 cannot be accurately represented in binary floating point. Even if it could be represented accurately, the value of thickness might be off due to round off during computations.

if ( thickness == 0.1 )

Fortran 90 and later use more intuitive symbols for operators, while Fortran 77 and earlier use old style operators. Fortran 90 is backward-compatible with Fortran 77, so the old style operators can still be used. This allows old Fortran 77 code to be compiled with the newer compilers, but newly written code should use the new operators.

**Table 18.2. Relational Operators**

Relational Operator | C | Fortran 90 and Later | Fortran 77 and Earlier |
---|---|---|---|

Not equal | != | /= | .ne. |

Equals | == | == | .eq. |

Less than | < | < | .lt. |

Less or equal | <= | <= | .le. |

Greater than | > | > | .gt. |

Greater or equal | >= | >= | .ge. |

Fortran 90 adopted the operators from C to replace the arcane .ne., etc., except for !=, because '!' marks the beginning of a comment in Fortran.

Some Boolean expressions entail more than one relation. For example, an airline may want to offer free peanuts to both kids and seniors, in which case we would want to know if age < 18 or age >= 65.

What is the data type of a Boolean expression in C? In Fortran?

What values represents true and false in C? In Fortran?

Are there named Boolean constants in C?

What is a relational expression?