0% found this document useful (0 votes)
46 views51 pages

Chapter 03

Uploaded by

oCloudii
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
46 views51 pages

Chapter 03

Uploaded by

oCloudii
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 51

Starting Out with C++ Early Objects

Tenth Edition

Chapter 3
Expressions and
Interactivity
3-2

Topics 1of 2

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-3

Topics 2 of 2

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-4

3.1 The cin Object 1 of 3


•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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-5

The cin Object 2 of 3

•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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-6

The cin Object 3 of 3

•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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-7

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-8

Using Mathematical Expressions

•Can be used in assignment statements, with


cout, and in other types of statements

•Examples:

area = 2 * PI * radius;
cout << "border is: " << (2*(l+w));

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-9

Order of Operations 1 of 2
In an expression with > 1 operator, evaluate it in
this order:
First: ( ) expressions in parentheses
Then: - (unary negation) in order, left to right
Then: * / % in order, left to right
Finally: + - in order, left to right

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-10

Order of Operations 2 of 2

Ex: In the expression 2 + 2 * 2 – 2 ,

• Perform the multiplication first


• Perform the addition next
• Finally, perform the subtraction

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-11

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-12

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
m= is written as
x 2 − x1 m = (y2-y1)/(x2-x1);
Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-13

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-14

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-15

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-16

Coercion Rules 1 of 2

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 the
expression on right will be converted to the
type of the variable on left

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-17

Coercion Rules 2 of 2

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-18

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-19

More Type Casting Examples

char ch = 'C';
cout << ch << " is stored as "
<< static_cast<int>(ch);

gallons = static_cast<int>(area/500);

average = static_cast<double>(sum)/count;

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-20

Older Type Cast Styles

double volume = 21.58;


int intVol1, intVol2;
intVol1 = (int) volume; // C-style cast
intVol2 = int (volume); // Prestandard C++
// style cast
C-style cast uses prefix notation
Prestandard C++ cast uses functional notation
static_cast is the current standard

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-21

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-22

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-23

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-24

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 using uppercase letters

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-25

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-26

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

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-27

3.6 Multiple and Combined Assignment

•The assignment operator (=) can be used


multiple times in an expression
x = y = z = 5;
•Assignment associates right to left
x = (y = (z = 5));

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-28

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-29

More Examples of Combined Assignment

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-30

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-31

Stream Manipulators 1 of 2

•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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-32

Stream Manipulators 2 of 2
•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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-33

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-34

Manipulator Examples
Code Displays

const double e = 2.718; blank


double price = 18.0; blank
cout << setw(8) << e << endl; ^^^2.718
cout << left << setw(8) << e << endl; 2.718^^^
cout << setprecision(2); blank
cout << e << endl; 2.7
cout << fixed << e << endl; 2.72
cout << setw(6) << price; 18.00^

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-35

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-36

String Input

Reading in a string object


string str;
cin >> str; // Reads in a string
// containing no blanks
getline(cin, str); // Reads in a string
// that may contain
// blanks

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-37

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-38

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-39

string Member Functions 1 of 2


•length() – the number of characters in a string

string town="Coal City";


int size=town.length(); // size is 9

•length() includes blank characters

•length() does not include the '\0' null


character that terminates the string

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-40

string Member Functions 2 of 2


•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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-41

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-42

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

•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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-43

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 data 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() manipulators.

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-44

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-45

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-46

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-47

3.9 More Mathematical Library Functions


• These require cmath header file
• They take double arguments and return a double
• Some commonly used functions
Function Meaning
abs Absolute value
sin Sine
cos Cosine
tan Tangent
sqrt Square root
log Natural (e) log
pow Raise to a power
Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-48

3.10 Random Numbers

•Random number - a value that is chosen from a


set of possible 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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-49

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 the random number generator with
unsigned int x. x is the “seed value”.
–This should be called at most once in a program

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-50

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 © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved
3-51

Copyright

Copyright © 2020, 2017, 2014 Pearson Education, Inc. All Rights Reserved

You might also like