"if the amount is at least .... then do ...."
(X < Y) is a Boolean expression
which evaluates to true if X is
less than Y, and evaluates to false
otherwise
This is done using a variety of logical operators (AND, OR, NOT,...). For example
&& means logical AND.
X < Y
and Y < Z we can create a combined expression using
the && operator: (X < Y) && (Y < Z)
if (Boolean expression evaluates to true)
{
// do something
} else
{
// do something else
}
Suppose we wanted to see if the user had entered the character C to
continue, or Q to quit. We could use something like this:
// prompt the user to choose between quitting/continuing,
// read and store their response
printf( "Enter C to continue or Q to quit:\n");
char userChoice;
scanf("%c", &userChoice);
// act on the user's choice
if (userChoice == 'Q') {
// here, insert whatever code is needed
// in order to shutdown/quit
} else if (userChoice == 'C') {
// here, insert whatever code is needed
// in order to continue
} else {
// here, insert code to handle the fact
// that the user made an invalid choice
}
bool and make use of the identifiers true
and false
#include <cstdio>
int main()
{
bool bVar1, bVar2;
bVar1 = true;
bVar2 = false;
...
}
X < Y would return true if X is less than
Y, and would return false if X is greater than or equal to Y
(X = Y) instead of the correct
(X == Y)
// normal instructions
if (<Boolean expression>)
{
// set of statements to execute
// if expression evaluates to true
}
else
{
// set of statements to execute
// if expression evaluates to false
}
// more normal instructions
printf( "Please enter a positive number\n");
scanf("%f", &iInputValue);
if (iInputValue <= 0)
{
printf( "Sorry, but %f", iInputValue);
printf( " is not a positive number");
}
else
{
printf( "The square root of ";
printf("%f is %f", iInputValue, sqrt(iInputValue));
}
printf("\n");
For instance, the expression
(iData < 3) && (iData > 1)
is true if and only if iData = 2
For instance, the expression
(iData < 1) || (iData > 3)
is true as long as iData is not one in the range
1..3
For instance, the expression !(iData == 1) is true
if and only if the expression iData == 1 is false
<cctype> library are:
islower(cData) returns true if cData is a lower
case letter,
and returns false otherwise
isspace(cData) returns true if cData is a white
space (tab, endl, blank etc)
and returns false otherwise
#include <cstdio>
bool IsIntegerEven(int iData);
int main()
{
int iUserInput;
printf( "Please enter an integer\n");
scanf("%d", &iUserInput);
if (IsXEven(userint))
{
printf( "%d is even", iUserInput);
}
else
{
printf( "%d is odd", iUserInput);
}
printf("\n");
}
bool IsIntegerEven(int iData)
{
if ((iData % 2) == 0)
{
return true;
}
else
{
return false;
}
}
&& and || (and, or)
logical operators have one other
special feature: they return a value as soon as they know what
an expression must evaluate to
if ((iCount > 0) && (iCount < 100))
{
iCount = iCount + 1;
}
else
{
printf( "count is %d", iCount);
}
First we look at count > 0, and we realise this evaluates
to false, so the whole expression must evaluate to false
regardless of the results of (count < 100)
int iDataX = 13; int iDataY = 7; int iDataZ = -3; char cData = 'd';Evaluate the following expressions as true or false:
(iDataX <= iDataY) && (iDataY > iDataZ))
(isdigit('9') || (iDataY == -3))
(iDataX > iDataY) && (iDataY > iDataZ) && (iDataX != iDataZ)
(iDataX % iDataY) > iDataZ
(cData != 'e') && (int(cData) > iDataY)
pow(iDataY * iDataZ, 2) < pow(iDataX, 2)
(iDataX < iDataY) || (iDataY < iDataZ) || (isspace(cData) || true
#include <cstdio>
int main()
{
int iUserInput;
printf( "Please enter an integer\n");
scanf("%d", &iUserInput);
if (iUserInput < 0)
{
printf( "You entered a negative number\n");
}
if (iUserInput > 0)
{
printf( "You entered a positive number\n");
}
if (iUserInput == 0)
{
printf( "You entered 0\n");
}
}
#include <cstdio>
int Get_positive();
int main()
{
int iEnteredNumber;
iEnteredNumber = Get_positive();
printf( "The positive value you entered");
printf( " was %d\n", iEnteredNumber);
}
int Get_positive()
{
int iEnteredNumber; // user's entry value
printf( "Please enter a positive integer\n");
scanf("%d", &iEnteredNumber);
if (iEnteredNumber >= 0) {
printf( "Sorry, that was an invalid value\n");
iEnteredNumber = Get_positive();
return iEnteredNumber ;
} else {
return iEnteredNumber;
}
}
if (<Boolean expression>)
{
// statement set A
}
else
{
// statement set B
}
scanf("%d", &iData);
if ((iData > 0) && (iData < MAXINT)) {
printf( "sqrt(%d) = ", iData);
printf("%f\n", sqrt(iData));
} else {
printf( "Sorry, cannot take sqrt(");
printf( "%d)\n", iData);
}
scanf("%c", &cData);
if ((cData == 'd') || (cData == 'D'))
{
printf( "Did you know that such great names as Dave");
printf( " begin with %c\n", cData);
}
if (iData < iMaxAllowable)
iData = iData + 1;
else
iData = iMaxAllowable;
if (iData < iMaxAllowable);
iData = iData + 1;
You can get very strange behaviour from this kind of error,
as it will get translated the same as:
if (iData < iMaxAllowable) {
}
iData = iData + 1;
if (iData == 1)
{
// statement set 1
}
else if (iData == 2)
{
// statement set 2
}
else if (iData == 3)
{
// statement set 3
}
else if (iData == 4)
{
// statement set 4
}
else
{
// default statements
}
if (iDataX < 0)
{
// do this stuff if iDataX is negative
if (iDataY < 0)
{
// iDataX and iDataY are both negative
total = iDataX * iDataY;
}
else
{
// iDataX is negative, iDataY is positive
total = - (iDataX * iDataY);
}
}
else
{
// do this stuff if iDataX is positive
if (iDataY < 0)
{
// iDataX is positive, iDataY is negative
total = - (iDataX * iDataY);
}
else
{
// iDataX and iDataY are both positive
total = iDataX * iDataY;
}
}
// check that we won't perform divide-by-zero
if (iDenominator == 0)
{
printf( "Cannot divide %d", iNumerator);
printf( " by %d\n", iDenominator);
}
else
result = iNumerator / iDenominator;
int get_1_to_10()
{
int iUserValue;
printf( "Please enter a value from 1 to 10\n");
scanf("%d", &iUserValue);
if ((iUserValue < 1) || (iUserValue > 10))
{
printf( "%d is invalid", iUserValue);
iUserValue = get_1_to_10();
}
return iUserValue ;
}
void get_command()
{
bool bQuit = false;
char cCmd;
// prompt user and get command
printf( "Enter S to calculate square roots\n");
printf( " X to translate hexadecimal values\n");
printf( " or Q to quit\n");
scanf("%c", &cCmd);
// handle the current command
if (cCmd == 'S') {
square_root_routine();
} else if (cCmd == 'X') {
translate_routine();
} else if (cCmd == 'Q') {
bQuit = true;
} else {
printf( "Invalid command\n");
}
// if user hasn't asked to quit,
// go through whole cycle again
if (!quit) {
get_command();
}
}
switch (<selector>)
{
case <label 1>: <statements 1>
break;
case <label 2>: <statements 2>
break;
...
case <label n>: <statements n>
break;
default: <default statements>
}
switch (iData % 3)
{
case 0: printf("%d is divisible by 3", iData);
break;
case 1: printf("%d-1 is divisible by 3", iData);
break;
case 2: printf("%d-2 is divisible by 3", iData);
break;
default: printf( "ERROR: it should not be possible)";
printf( " for (%d %% 3) to be anything but ", iData);
printf( " 0, 1, or 2");
}
// course numbers from JCU's old CS program
switch (iCourseNumber)
{
case 1010: printf( "Intro to Multimedia");
break;
case 1030: printf( "Intro to Information Technology");
break;
case 1200: printf( "Intro to Computer Science I");
break;
case 1300: printf( "Intro to Computer Science II");
break;
case 1500: printf( "Information Systems");
break;
default: printf( "Invalid subject number");
}
x == 2
switch (iData) {
case 1: printf( "the value entered is one\n");
case 2: printf( "the value entered is two\n");
case 3: printf( "the value entered is three\n");
default: printf( "the value entered is not in 1..3");
}
The output will be:
the value entered is two the value entered is three the value entered is not in 1..3
bool bQuit = false;
char cCmd;
printf( "Please enter your next command\n");
printf( " A to add new entry\n");
printf( " L to look up an entry\n");
printf( " Q to quit\n");
scanf("%c", &cCmd);
switch (cCmd)
{
case 'a':
case 'A': add_entry();
break;
case 'l':
case 'L': lookup_entry();
break;
case 'q':
case 'Q': bQuit = true;
break;
default: printf( "Invalid command entered");
}
Note how we left out the break statements to allow
upper and lower case commands to be treated the same