Home > Articles > Programming > C/C++

  • Print
  • + Share This
This chapter is from the book

2.5. Decision Making: Equality and Relational Operators

Executable statements either perform actions (such as calculations or input or output of data) or make decisions (we’ll soon see several examples of these). We might make a decision in a program, for example, to determine whether a person’s grade on an exam is greater than or equal to 60 and whether the program should print the message “Congratulations! You passed.” This section introduces a simple version of C’s if statement that allows a program to make a decision based on the truth or falsity of a statement of fact called a condition. If the condition is true (i.e., the condition is met), the statement in the body of the if statement is executed. If the condition is false (i.e., the condition isn’t met), the body statement isn’t executed. Whether the body statement is executed or not, after the if statement completes, execution proceeds with the next statement after the if statement.

Conditions in if statements are formed by using the equality operators and relational operators summarized in Fig. 2.9. The relational operators all have the same level of precedence and they associate left to right. The equality operators have a lower level of precedence than the relational operators and they also associate left to right. [Note: In C, a condition may actually be any expression that generates a zero (false) or nonzero (true) value.]

Fig. 2.9. Equality and relational operators.

Algebraic equality or relational operator

C equality or relational operator

Example of C condition

Meaning of C condition

Equality operators

 

 

 

=

==

x == y

x is equal to y

!=

x != y

x is not equal to y

Relational operators

 

 

 

>

>

x > y

x is greater than y

<

<

x < y

x is less than y

>=

x >= y

x is greater than or equal to y

<=

x <= y

x is less than or equal to y

Figure 2.10 uses six if statements to compare two numbers entered by the user. If the condition in any of these if statements is true, the printf statement associated with that if executes. The program and three sample execution outputs are shown in the figure.

Fig. 2.10. Using if statements, relational operators, and equality operators.

 1   // Fig. 2.10: fig02_10.c
 2   // Using if statements, relational
 3   // operators, and equality operators.
 4   #include <stdio.h>
 5
 6   // function main begins program execution
 7   int main( void )
 8   {
 9      int num1; // first number to be read from user
10      int num2; // second number to be read from user
11
12      printf( "Enter two integers, and I will tell you\n" );
13      printf( "the relationships they satisfy: " );
14
15      scanf( "%d%d", &num1, &num2 ); // read two integers
16
17      if ( num1 == num2 ) {                          
18         printf( "%d is equal to %d\n", num1, num2 );
19      } // end if                                                                        
20
21      if ( num1 != num2 ) {
22         printf( "%d is not equal to %d\n", num1, num2 );
23      } // end if
24
25      if ( num1 < num2 ) {
26         printf( "%d is less than %d\n", num1, num2 );
27      } // end if
28
29      if ( num1 > num2 ) {
30         printf( "%d is greater than %d\n", num1, num2 );
31      } // end if
32
33     if ( num1 <= num2 ) {
34         printf( "%d is less than or equal to %d\n", num1, num2 );
35      } // end if
36
37      if ( num1 >= num2 ) {
38         printf( "%d is greater than or equal to %d\n", num1, num2 );
39      } // end if
40   } // end function mai

The program uses scanf (line 15) to input two numbers. Each conversion specifier has a corresponding argument in which a value will be stored. The first %d converts a value to be stored in the variable num1, and the second %d converts a value to be stored in the variable num2.

Comparing Numbers

The if statement in lines 17–19

if ( num1 == num2 ) {                           
   printf( "%d is equal to %d\n", num1, num2 );
}                                              

compares the values of variables num1 and num2 to test for equality. If the values are equal, the statement in line 18 displays a line of text indicating that the numbers are equal. If the conditions are true in one or more of the if statements starting in lines 21, 25, 29, 33 and 37, the corresponding body statement displays an appropriate line of text. Indenting the body of each if statement and placing blank lines above and below each if statement enhances program readability.

A left brace, {, begins the body of each if statement (e.g., line 17). A corresponding right brace, }, ends each if statement’s body (e.g., line 19). Any number of statements can be placed in the body of an if statement.2

Figure 2.11 lists from highest to lowest the precedence of the operators introduced in this chapter. Operators are shown top to bottom in decreasing order of precedence. The equals sign is also an operator. All these operators, with the exception of the assignment operator =, associate from left to right. The assignment operator (=) associates from right to left.

Fig. 2.11. Precedence and associativity of the operators discussed so far.

Operators

Associativity

()

 

 

 

left to right

*

/

%

 

left to right

+

-

 

 

left to right

<

<=

>

>=

left to right

==

!=

 

 

left to right

=

 

 

 

right to left

Some of the words we’ve used in the C programs in this chapter—in particular int and if—are keywords or reserved words of the language. Figure 2.12 contains the C keywords. These words have special meaning to the C compiler, so you must be careful not to use these as identifiers such as variable names.

Fig. 2.12. C’s keywords.

Keywords

auto

double

int

struct

break

else

long

switch

case

enum

register

typedef

char

extern

return

union

const

float

short

unsigned

continue

for

signed

void

default

goto

sizeof

volatile

do

if

static

while

Keywords added in C99 standard

_Bool _Complex _Imaginary inline restrict

Keywords added in C11 standard

_Alignas _Alignof _Atomic _Generic _Noreturn _Static_assert _Thread_local

  • + Share This
  • 🔖 Save To Your Account