Chapter 3: Expressions and Interactivity
Starting Out with C++
Early Objects
Ninth Edition
by Tony Gaddis, Judy Walters,
and Godfrey Muganda
Copyright © 2017, 2014 Pearson Education, Inc.
Topics
3.1 The cin Object
3.2 Mathematical Expressions
3.3 Data Type Conversion and Type Casting
3.4 Overflow and Underflow
3.5 Named Constants
Copyright © 2017, 2014 Pearson Education, Inc. 3-2
Topics (continued)
3.6 Multiple and Combined Assignment
3.7 Formatting Output
3.8 Working with Characters and Strings
3.9 More Mathematical Library Functions
3.10 Random Numbers
Copyright © 2017, 2014 Pearson Education, Inc. 3-3
3.1 The cin Object
• cin is the standard input object
• Like cout, requires iostream file
• Used to read input from keyboard
• Often used with cout to display a user
prompt first
• Data is retrieved from cin with >>, the
stream extraction operator
• Input data is stored in one or more
variables
Copyright © 2017, 2014 Pearson Education, Inc. 3-4
The cin Object
• User input goes from keyboard to the input
buffer, where it is stored as characters
• cin converts the data to the type that
matches the variable
int height;
cout << "How tall is the room? ";
cin >> height;
Copyright © 2017, 2014 Pearson Education, Inc. 3-5
The cin Object
• Can be used to input multiple values
cin >> height >> width;
• Multiple values from keyboard must be
separated by spaces or [Enter]
• Must press [Enter] after typing last value
• Multiple values need not all be of the same type
• Order is important; first value entered is stored
in first variable, etc.
Copyright © 2017, 2014 Pearson Education, Inc. 3-6
3.2 Mathematical Expressions
• An expression is something that can be
evaluated to produce a value.
• It can be a constant, a variable, or a combination
of constants and variables combined with
operators and grouping symbols
• We can create complex expressions using
multiple mathematical operators
• Examples of mathematical expressions:
2
height
a + b / c
Copyright © 2017, 2014 Pearson Education, Inc. 3-7
Using Mathematical Expressions
• Can be used in assignment statements, with
cout, and in other types of statements
• Examples: This is an
expression
area = 2 * PI * radius;
cout << "border is: " << (2*(l+w));
These are
expressions
Copyright © 2017, 2014 Pearson Education, Inc. 3-8
Order of Operations
In an expression with > 1 operator, evaluate
it in this order:
Do first: ( ) expressions in parentheses
- (unary negation) in order, left to right
Do next:
Do next: * / % in order, left to right
Do last: + - in order, left to right
Ex: In the expression 2 + 2 * 2 – 2 ,
Evaluate Evaluate Evaluate
2nd 1st 3rd
Copyright © 2017, 2014 Pearson Education, Inc. 3-9
Associativity of Operators
• - (unary negation) associates right to left
• * / % + - all associate left to right
• parentheses ( ) can be used to override the
order of operations
Expression Value
2 + 2 * 2 – 2 4
(2 + 2) * 2 – 2 6
2 + 2 * (2 – 2) 2
(2 + 2) * (2 – 2) 0
Copyright © 2017, 2014 Pearson Education, Inc. 3-10
Algebraic Expressions
• Multiplication requires an operator
Area = lw is written as Area = l * w;
• There is no exponentiation operator
Area = s2 is written as Area = pow(s, 2);
(note: pow requires the cmath header file)
• Parentheses may be needed to maintain order of
operations
y 2 y1 is written as
m
x 2 x1 m = (y2-y1)/(x2-x1);
Copyright © 2017, 2014 Pearson Education, Inc. 3-11
3.3 Data Type Conversion
and Type Casting
• Operations are performed between
operands of the same type
• If operands do not have the same type,
C++ will automatically convert one to be
the type of the other
• This can impact the results of calculations
Copyright © 2017, 2014 Pearson Education, Inc. 3-12
Hierarchy of Data Types
• Highest long double
double
float
unsigned long long int
long long int
unsigned long int
long int
unsigned int
• Lowest int
• Ranked by largest number they can hold
Copyright © 2017, 2014 Pearson Education, Inc. 3-13
Type Coercion
• Coercion: automatic conversion of an
operand to another data type
• Promotion: conversion to a higher type
• Demotion: conversion to a lower type
Copyright © 2017, 2014 Pearson Education, Inc. 3-14
Coercion Rules
1) char, short, unsigned short are
automatically promoted to int
2) When operating with values of different
data types, the lower-ranked one is
promoted to the type of the higher one.
3) When using the = operator, the type of
expression on right will be converted to
the type of variable on left
Copyright © 2017, 2014 Pearson Education, Inc. 3-15
Coercion Rules – Important Notes
1) If demotion is required by the =
operator,
- the stored result may be incorrect if there
is not enough space available in the
receiving variable
- floating-point values are truncated when
assigned to integer variables
2) Coercion affects the value used in a
calculation. It does not change the
type associated with a variable.
Copyright © 2017, 2014 Pearson Education, Inc. 3-16
Type Casting
• Is used for manual data type conversion
• Format
static_cast<Data Type>(Value)
• Example:
cout << static_cast<int>(4.2);
// Displays 4
Copyright © 2017, 2014 Pearson Education, Inc. 3-17
More Type Casting Examples
char ch = 'C';
cout << ch << " is stored as "
<< static_cast<int>(ch);
gallons = static_cast<int>(area/500);
avg = static_cast<double>(sum)/count;
Copyright © 2017, 2014 Pearson Education, Inc. 3-18
Older Type Cast Styles
double volume = 21.58;
int intVol1, intVol2;
intVol1 = (int) volume; // C-style
// type cast
intVol2 = int (volume); //Prestandard
// C++ style
// type cast
C-style cast uses prefix notation
Prestandard C++ cast uses functional notation
static_cast is the current standard
Copyright © 2017, 2014 Pearson Education, Inc. 3-19
3.4 Overflow and Underflow
• Occurs when assigning a value that is too
large (overflow) or too close to zero
(underflow) to be held in a variable
• This occurs with both int and floating-point
data types
Copyright © 2017, 2014 Pearson Education, Inc. 3-20
Overflow Example
// Create a short int initialized to
// the largest value it can hold
short int num = 32767;
cout << num; // Displays 32767
num = num + 1;
cout << num; // Displays -32768
Copyright © 2017, 2014 Pearson Education, Inc. 3-21
Handling Overflow and Underflow
Different systems handle the problem
differently. They may
– display a warning / error message
– stop the program
– continue execution with the incorrect value
Using variables with appropriately-sized data
types can minimize this problem
Copyright © 2017, 2014 Pearson Education, Inc. 3-22
3.5 Named Constants
• Also called constant variables
• Variables whose content cannot be changed
during program execution
• Used for representing constant values with
descriptive names
const double TAX_RATE = 0.0775;
const int NUM_STATES = 50;
• Often named in uppercase letters
Copyright © 2017, 2014 Pearson Education, Inc. 3-23
Defining and Initializing
Named Constants
• The value of a named constant must be
assigned when the variable is defined:
const int CLASS_SIZE = 24;
• An error occurs if you try to change the value
stored in a named constant after it is defined:
// This won’t work
CLASS_SIZE = CLASS_SIZE + 1;
Copyright © 2017, 2014 Pearson Education, Inc. 3-24
Benefits of Named Constants
• They make program code more readable by
documenting the purpose of the constant in
the name:
const double TAX_RATE = 0.0775;
. . .
salesTax = purchasePrice * TAX_RATE;
• They improve accuracy and simplify program
maintenance:
const double TAX_RATE = 0.0775;
Copyright © 2017, 2014 Pearson Education, Inc. 3-25
3.6 Multiple and Combined Assignment
• The assignment operator (=) can be used
multiple times in an expression
x = y = z = 5;
• Associates right to left
x = (y = (z = 5));
Done Done Done
3rd 2nd 1st
Copyright © 2017, 2014 Pearson Education, Inc. 3-26
Combined Assignment
• Applies an arithmetic operation to a
variable and assigns the result as the new
value of that variable
• Operators: += -= *= /= %=
• These are also called compound operators
or arithmetic assignment operators
• Example:
sum += amt; is short for sum = sum + amt;
Copyright © 2017, 2014 Pearson Education, Inc. 3-27
More Examples
x += 5; means x = x + 5;
x -= 5; means x = x – 5;
x *= 5; means x = x * 5;
x /= 5; means x = x / 5;
x %= 5; means x = x % 5;
The right hand side is evaluated before the
combined assignment operation is done.
x *= a + b; means x = x * (a + b);
Copyright © 2017, 2014 Pearson Education, Inc. 3-28
3.7 Formatting Output
• We can control how output displays for
numeric and string data
– size
– position
– number of digits
• This requires the iomanip header file
Copyright © 2017, 2014 Pearson Education, Inc. 3-29
Stream Manipulators
• Are used to control features of an output field
• Some affect just the next value displayed
setw(x): Print a value in a field at least x
spaces wide.
– It will use more spaces if the specified field width is not
big enough.
– It right-justifies the value if it does not require x spaces.
– Decimal points in floating-point values use a space.
– All characters in strings, including space characters, use
space
Copyright © 2017, 2014 Pearson Education, Inc. 3-30
Stream Manipulators
• Some affect values until changed again
– fixed: Use decimal notation (not E-notation)
for floating-point values.
– setprecision(x):
• When used with fixed, print floating-point value
using x digits after the decimal.
• Without fixed, print floating-point value using x
significant digits.
• Rounding is used if x is smaller than the number of
significant digits
Copyright © 2017, 2014 Pearson Education, Inc. 3-31
Stream Manipulators
• Some additional manipulators:
– showpoint: Always print a decimal point for
floating-point values. This is useful with
fixed and setprecision when printing
monetary values.
– left, right: left- or right justification of a
value in a field.
Copyright © 2017, 2014 Pearson Education, Inc. 3-32
Manipulator Examples
const double e = 2.718;
double price = 18.0; Displays
cout << setw(8) << e << endl; ^^^2.718
cout << left << setw(8) << e
<< endl; 2.718^^^
cout << setprecision(2);
cout << e << endl; 2.7
cout << fixed << e << endl; 2.72
cout << setw(6) << price; 18.00^
Copyright © 2017, 2014 Pearson Education, Inc. 3-33
3.8 Working with Characters and Strings
• char: holds a single character
• string: holds a sequence of characters
• Both can be used in assignment statements
• Both can be displayed with cout and <<
Copyright © 2017, 2014 Pearson Education, Inc. 3-34
String Input
Reading in a string object
string str;
cin >> str; // Reads in a string
// with no blanks
getline(cin, str); // Reads in a string
// that may contain
// blanks
Copyright © 2017, 2014 Pearson Education, Inc. 3-35
Character Input
Reading in a character:
char ch;
cin >> ch; // Reads in any non-blank char
cin.get(ch); // Reads in any char
ch=cin.get();// Reads in any char
cin.ignore();// Skips over next char in
// the input buffer
Copyright © 2017, 2014 Pearson Education, Inc. 3-36
cin.ignore()
General form: cin.ignore(n,c);
• n – number of characters to skip
• c – stop when character c is encountered
How it works:
• It stops if c is encountered before n
characters have been skipped. Otherwise,
n characters are skipped.
• Use cin.ignore(); to skip a single
character
Copyright © 2017, 2014 Pearson Education, Inc. 3-37
string Member Functions
• length() – the number of characters in a string
string firstPrez="George Washington";
int size=firstPrez.length(); // size is 17
• length() includes blank characters
• length() does not include the '\0' null
character that terminates the string
Copyright © 2017, 2014 Pearson Education, Inc. 3-38
string Member Functions
• assign() – put repeated characters in a string.
• It can be used for formatting output.
string equals;
equals.assign(80,'=');
. . .
cout << equals << endl;
cout << "Total: " << total << endl;
Copyright © 2017, 2014 Pearson Education, Inc. 3-39
String Operators
= Assigns a value to a string
string words;
words = "Tasty ";
+ Joins two strings together
string s1 = "hot", s2 = "dog";
string food = s1 + s2; // food = "hotdog"
+= Concatenates a string onto the end of another one
words += food; // words now = "Tasty hotdog"
Copyright © 2017, 2014 Pearson Education, Inc. 3-40
Using C-Strings
• A C-string is stored as an array of characters
• The programmer must indicate the maximum
number of characters at definition
const int SIZE = 5;
char temp[SIZE] = "Hot";
• NULL character (\0) is placed after final
character to mark the end of the string
H o t \0
• The programmer must make sure that the array
is big enough for desired use. temp can hold up
to 4 characters plus the \0.
Copyright © 2017, 2014 Pearson Education, Inc. 3-41
C-String and Keyboard Input
• Reading in a C-string
const int SIZE = 10;
char Cstr[SIZE];
cin >> Cstr; // Reads in a C-string with no
// blanks. It will write past the
// end of the array if the input
// string is too long.
cin.getline(Cstr, SIZE);
// Reads in a C-string that may
// contain blanks. Ensures that <= 9
// chars are read in.
• You can also use setw() and width() to control input
field widths
Copyright © 2017, 2014 Pearson Education, Inc. 3-42
C-String and Input Field Width
• The setw() stream manipulator can be used
with cin as well as with cout.
• When used with cin and a target C-string array,
setw() limits the number of characters that are
stored in the array
const int SIZE = 10;
char Cstr[SIZE];
cin >> setw(SIZE) >> Cstr;
• cin.width() can also provide this limit
cin.width(SIZE);
cin >> Cstr;
Copyright © 2017, 2014 Pearson Education, Inc. 3-43
C-String Initialization vs. Assignment
• A C-string can be initialized at the time of its
creation, just like a string object
const int SIZE = 10;
char month[SIZE] = "April";
• However, a C-string cannot later be assigned a
value using the = operator; you must use the
strcpy() function
char month[SIZE];
month = "August" // wrong!
strcpy(month, "August"); //correct
Copyright © 2017, 2014 Pearson Education, Inc. 3-44
More on C-Strings and Keyboard Input
• cin can be used to put a single word from the
keyboard into a C-string
• The programmer must use cin.getline() to
read an input string that contains spaces
• Note that cin.getline() ≠ getline()
• The programmer must indicate the target C-string
and maximum number of characters to read:
const int SIZE = 25;
char name[SIZE];
cout << "What's your name? ";
cin.getline(name, SIZE);
Copyright © 2017, 2014 Pearson Education, Inc. 3-45
3.9 More Mathematical Library Functions
• These require cmath header file
• They take double arguments and return a
double
• Some commonly used functions
abs Absolute value
sin Sine
cos Cosine
tan Tangent
sqrt Square root
log Natural (e) log
pow Raise to a power
Copyright © 2017, 2014 Pearson Education, Inc. 3-46
3.10 Random Numbers
• Random number - a value that is chosen from a
set of values. Each value in the set has an equal
likelihood of being chosen.
• Random numbers are used in games and in
simulations.
• You have to use the cstdlib header file
Copyright © 2017, 2014 Pearson Education, Inc. 3-47
Getting Random Numbers
• rand
– Returns a random number between 0 and the
largest int the computer holds
– Will yield the same sequence of numbers each
time the program is run
• srand(x)
– Initializes random number generator with
unsigned int x. x is the “seed value”.
– This should be called at most once in a program
Copyright © 2017, 2014 Pearson Education, Inc. 3-48
More on Random Numbers
• Use time() to generate different seed values
each time that a program runs:
#include <ctime> //needed for time()
…
unsigned seed = time(0);
srand(seed);
• Random numbers can be scaled to a range:
int max=6;
int num;
num = rand() % max + 1;
Copyright © 2017, 2014 Pearson Education, Inc. 3-49
Chapter 3: Expressions and Interactivity
Starting Out with C++
Early Objects
Ninth Edition
by Tony Gaddis, Judy Walters,
and Godfrey Muganda
Copyright © 2017, 2014 Pearson Education, Inc.