Numeric Types, Expressions, and Output 1. Chapter 3 Topics Constants of Type int and float...

Post on 30-Dec-2015

226 views 0 download

Transcript of Numeric Types, Expressions, and Output 1. Chapter 3 Topics Constants of Type int and float...

Numeric Types, Expressions, and Output

1

Chapter 3 Topics Constants of Type int and float Evaluating Arithmetic Expressions Implicit Type Coercion and Explicit

Type Conversion Calling a Value-Returning Function Using Function Arguments Using C++ Library Functions in

Expressions Calling a Void Function C++ Manipulators to Format Output String Operations length, find, and

substr

2

3

C++ Data TypesC++ Data Types

structured

array struct union class

address

pointer reference

simple

integral enum

char short int long bool

floating

float double long double

4

C++ Simple Data TypesC++ Simple Data Types

simple types

integral floating

char short int long bool enum float double long double

unsigned

Standard Data Types in C++Integral Types

represent whole numbers and their negatives

declared as int, short, or longFloating Types

represent real numbers with a decimal point

declared as float or doubleCharacter Type

represents single charactersdeclared as char

5

Samples of C++ Data Valuesint sample values

4578 -4578 0

float sample values95.274 95. .2659521E-3 -95E-1 95.213E2

char sample values

‘B’ ‘d’ ‘4’ ‘?’ ‘*’

6

7

2.7E4 means 2.7 x 10 4 =

2.7000 =

27000.0

2.7E-4 means 2.7 x 10 - 4 =

0002.7 =

0.00027

More About Floating Point Values

Floating point numbers have an integer part and a fractional part, with a decimal point in between. Either the integer part or the fractional part, but not both, may be missing

Examples 18.4 500. .8 -127.358

8

More About Floating Point Values Alternatively, floating point values can

have an exponent, as in scientific notation--the number preceding the letter E doesn’t need to include a decimal point

Examples 1.84E1 5E2 8E-1 -.127358E3

9

Division OperatorThe result of the division operator depends

on the type of its operands

If one or both operands has a floating point type, the result is a floating point type. Otherwise, the result is an integer type

Examples11 / 4 has value 211.0 / 4.0 has value 2.7511/ 4.0 has value 2.75

10

11

/*******************************************************FreezeBoil programThis program computes the midpoint between the freezing and boiling points of water*******************************************************/#include < iostream >using namespace std;const float FREEZE_PT = 32.0; // Freezing point of waterconst float BOIL_PT = 212.0; // Boiling point of waterint main(){ float avgTemp; // Holds the result of averaging // FREEZE_PT and BOIL_PT cout << “Water freezes at “ << FREEZE_PT << endl; cout << “ and boils at “ << BOIL_PT << “ degrees.” << endl; avgTemp = FREEZE_PT + BOIL_PT; avgTemp = avgTemp / 2.0; cout << “Halfway between is “; cout << avgTemp << “ degrees.” << endl; return 0;}

12

Function main Continued cout << “Water freezes at “ << FREEZE_PT << endl; cout << “ and boils at “ << BOIL_PT << “ degrees.” << endl;

avgTemp = FREEZE_PT + BOIL_PT; avgTemp = avgTemp / 2.0;

cout << “Halfway between is “; cout << avgTemp << “ degrees.” << endl;

return 0;}

Modulus OperatorThe modulus operator % can only

be used with integer type operands and always has an integer type result

Its result is the integer type remainder of an integer division

Example: 11 % 4 has value 3

because13

)4 11

2 R = 3

14

More C++ Operators

8

int age;

age = 8;

age = age + 1;

age

9

age

15

Prefix FormIncrement Operator

8

int age;

age = 8;

++age;

age

9

age

16

Postfix Form Increment Operator

8

int age;

age = 8;

age++;

age

9

age

17

Decrement Operator

100

int dogs;

dogs = 100;

dogs--;

dogs

99

dogs

Which Form to UseWhen the increment(or decrement)

operator is used in a “stand alone” statement solely to add one(or subtract one) from a variable’s value, it can be used in either prefix or postfix form

18

dogs--; --dogs;

USE EITHER

BUT...When the increment(or decrement)

operator is used in a statement with other operators, the prefix and postfix forms can yield different results

19

We’ll see how later . . .

What is an Expression in C++?An expression is a valid

arrangement of variables, constants, and operators

In C++ each expression can be evaluated to compute a value of a given type

The value of the expression 9.3 * 4.5 is 41.85

20

Operators can be

binary involving 2 operands 2 + 3

unary involving 1 operand - 3

ternary involving 3 operands later

21

22

Some C++ OperatorsPrecedence Operator Description Higher ( ) Function call + Positive - Negative * Multiplication / Division % Modulus

(remainder)

+ Addition - SubtractionLower = Assignment

PrecedenceHigher Precedence determines

which operator is applied first in an expression having several operators

23

AssociativityLeft to right associativity means that

in an expression having 2 operators with the same priority, the left operator is applied first

In C++ the binary operators *, /, %, +, - are all left associative

Expression 9 - 5 - 1 means (9 - 5) - 14 – 1 =

3 24

Evaluate the Expression7 * 10 - 5 % 3 * 4 + 9

(7 * 10) - 5 % 3 * 4 + 9 70 - 5 % 3 * 4 + 9

70 - (5 % 3) * 4 + 9 70 - 2 * 4 + 9 70 - ( 2 * 4) + 9 70 - 8 + 9 (70 - 8 ) + 9

62 + 971

25

ParenthesesParentheses can be used to change the

usual orderParts in() are evaluated firstEvaluate

(7 *(10 - 5) % 3) * 4 + 9(7 * 5 % 3 ) * 4 + 9

( 35 % 3) * 4 + 9 2 * 4 + 9

8 + 9 17

26

Recall Assignment Operator SyntaxVariable = Expression

First, Expression on right is evaluatedThen the resulting value is stored in the

memory location of Variable on left

NOTE: An automatic type coercion occurs after evaluation but before the value is stored if the types differ for Expression and Variable

27

What value is stored?float a;

float b;

a = 8.5;

b = 9.37;

a = b;

28

a

b

a

b

8.5

9.37

?

?

29

What is stored?

?float someFloat;

someFloat

someFloat = 12; // Causes implicit type conversion

someFloat

12.0

30

What is stored?

?

int someInt;

someInt

someInt = 4.8; // Causes implicit type conversion

someInt

4

Type Casting is Explicit Conversion of Typeint(4.8) has value 4

float(5) has value 5.0

float(7/4) has value 1.0

float(7) / float(4) has value1.75

31

Some Expressionsint age;

Example Valueage = 8 8- age - 85 + 8 135 / 8 06.0 / 5.0 1.2float(4 / 8) 0.0float(4) / 8 0.5

32

What values are stored?float loCost;float hiCost;

loCost = 12.342;hiCost = 12.348;

loCost = float(int(loCost * 100.0 + 0.5)) / 100.0;

hiCost = float(int(hiCost * 100.0 + 0.5)) / 100.0;

33

34

Values were rounded to 2 decimal places

12.34

hiCost

12.35

loCost

35

Using Predefined FunctionsA function (subprogram): set of instructions

When activated, it accomplishes a task

main executes when a program is run

Other functions execute only when called

C++ includes a wealth of functions

Predefined functions are organized as a collection of libraries called header files

36

Predefined FunctionsHeader file may contain several functions

To use a predefined function, you need the name of the appropriate header file

You also need to know:Function name

Number of parameters required

Type of each parameter

What the function is going to do

37

Predefined Function ExampleTo use pow (power), include cmath

pow has two numeric parameters

The syntax is: pow(x,y) = xy

x and y are the arguments or parameters

In pow(2,3), the parameters are 2 and 3

HEADER FILE FUNCTION EXAMPLE VALUE OF CALL

38

fabs(x) fabs(-6.4) 6.4

<cmath> pow(x,y) pow(2.0,3.0) 8.0

<cmath> sqrt(x) sqrt(100.0) 10.0

<cmath> log(x) log(2.0) .693147

sqrt(x) sqrt(2.0) 1.41421

<cstdlib> abs(i) abs(-6) 6

Write C++ Expressions forThe square root of b2 - 4ac

sqrt(b * b - 4.0 * a * c)

The square root of the average of myAge and yourAge

sqrt((myAge + yourAge) / 2)39

Manipulators Manipulators are used only in input

and output statements

endl, fixed, showpoint, setw, and setprecision are manipulators that can be used to control output format

endl is use to terminate the current output line and create blank lines in output

40

Using ManipulatorsFixed and Showpointuse the following statement to

specify that(for output sent to the cout stream) decimal format(not scientific notation) be used, and that a decimal point be included(even for floating values with 0 as fractional part)

cout << fixed << showpoint; 41

setprecision(n)Requires #include <iomanip> and

appears in an expression using insertion operator(<<)

If fixed has already been specified, argument n determines the number of places displayed after the decimal point for floating point values

Remains in effect until explicitly changed by another call to setprecision

42

43

What is exact output?#include <iomanip> // For setw() and setprecision()#include <iostream>

using namespace std;

int main(){ float myNumber = 123.4587; cout << fixed << showpoint; // Use decimal format // Print decimal points cout << “Number is ” << setprecision(3) << myNumber << endl; return 0;}

44

OUTPUT

Number is 123.459

Value is rounded if necessary to be displayed with exactly 3 places after the decimal point

Manipulator setw

“Set width” lets us control how many character positions the next data item should occupy when it is output

setw is only for formatting numbers and strings, not char type data

45

setw(n)Requires #include <iomanip> and appears in

an expression using insertion operator(<<)

Argument n is called the fieldwidth specification, and determines the number of character positions in which to display a right-justified number or string(not char data); the number of positions used is expanded if n is too narrow

“Set width” affects only the very next item displayed and is useful to align columns of output 46

47

What is exact output?#include <iomanip> // For setw()#include <iostream>#include <string>

using namespace std;

int main(){ int myNumber = 123; int yourNumber = 5;

cout << setw(10) << “Mine” << setw(10) << “Yours” << endl

<< setw(10) << myNumber << setw(10) << yourNumber << endl;

return 0;}

48

Output

12345678901234567890 Mine Yours 123 5

Each is displayed right-justified andeach is located in a total of 10 positions

position

49

What is exact output?#include <iomanip> // For setw() and setprecision()#include <iostream>

using namespace std;

int main(){ float myNumber = 123.4; float yourNumber = 3.14159;

cout << fixed << showpoint; // Use decimal format; print decimal points cout << “Numbers are: ” << setprecision(4) << endl << setw(10) << myNumber << endl << setw(10) << yourNumber << endl; return 0;}

50

OUTPUT

Numbers are: 123.4000 3.1416

Each is displayed right-justified androunded if necessary and each islocated in a total of 10 positions with 4 places after the decimal point

12345678901234567890

51

float x = 312.0; float y = 4.827;

cout << fixed << showpoint; OUTPUT

cout << setprecision(2) << setw(10) << x << endl ’’’’312.00

<< setw(10) << y << endl; ’’’’’’4.83

cout << setprecision(1) << setw(10) << x << endl ’’’’’312.0

<< setw(10) << y << endl; ’’’’’’’4.8

cout << setprecision(5) << setw(7) << x << endl 312.00000

<< setw(7) << y << endl; 4.82700

More Examplesx

312.0

y

4.827

setfillUsed to fill the unused columns with a

character other than a space when used with the setw manipulator.

cout << setfill(‘*’);cout << setw(5) << 15 << setw(7) << 7634

<< setw(8) << “Warm” << endl;

Output:***15***7634****Warm

52

Left and right maniulatorsDefault setting is that output is right justified

when using setw.To change to left, use

cout << left;Output is then left justified until changed.To change back to right, use

cout << right;

53

HEADER MANIPULATOR ARGUMENT EFFECT FILE TYPE

54

<iostream> showpoint none displays decimal point

<iostream> fixed none suppresses scientific notation

<iomanip> setprecision(n) int sets precision to n digits

<iomanip> setw(n) int sets fieldwidth to n positions

<iostream> endl none terminates output line

55

Formatting Outputendl manipulator moves output to the

beginning of the next line

setprecision(n) outputs decimal numbers with up to n decimal places

fixed outputs floating-point numbers in a fixed decimal format

showpoint forces output to show the decimal point and trailing zeros

56

Types of ManipulatorsTwo types of manipulators:

With parameters

Without parameters Parameterized: require iomanip header

setprecision, setw, and setfill

Nonparameterized: require iostream headerendl, fixed, showpoint, left, right

57

I/O and the string TypeAn input stream variable (cin) and

extraction operator >> can read a string into a variable of the data type string

Extraction operatorSkips any leading whitespace characters

and reading stops at a whitespace character Should not be used to read strings with

blanksThe function getline

Reads until end of the current lineShould be used to read strings with blanks

getline(cin, mystring);

The string TypeTo use the data type string, the program

must include the header file <string>The statement:

string name = "William Jacob";

declares name to be a string variable and also initializes name to "William Jacob"

The first character, 'W', in name is in position 0; the second character, 'i', is in position 1, and so on

The string Type (continued)The variable name is capable of storing any

size stringBinary operator + (to allow the string

concatenation operation), and the array subscript operator [], have been defined for the data type string

For example, If str1 = "Sunny", the statement stores the string "Sunny Day" into str2:

str2 = str1 + " Day";

length FunctionLength returns the number of characters

currently in the stringThe syntax to call the length function is:

strVar.length()

where strVar is variable of the type stringlength has no argumentslength returns an unsigned integerThe value returned can be stored in an

integer variable

size FunctionThe function size is same as the function length

Both functions return the same valueThe syntax to call the function size is:

strVar.size()

where strVar is variable of the type stringAs in the case of the function length, the

function size has no arguments

find Functionfind searches a string for the first

occurrence of a particular substringReturns an unsigned integer value of type string::size_type giving the result of the search

The syntax to call the function find is:strVar.find(strExp)

where strVar is a string variable and strExp is a string expression evaluating to a string

The string expression, strExp, can also be a character

find Function (continued)If successful, find returns the position in strVar where the match begins

For the search to be successful the match must be exact

If unsuccessful, find returns the special value string::npos (“not a position within the string”)

substr Functionsubstr returns a particular substring of a

string

The syntax to call the function substr is:

strVar.substr(expr1,expr2)

where expr1 and expr2 are expressions evaluating to unsigned integers

substr Function (continued)The expression expr1 specifies a position

within the string (starting position of the substring)

The expression expr2 specifies the length of the substring to be returned

swap Functionswap interchanges the contents of two

string variablesThe syntax to use the function swap is

strVar1.swap(strVar2);

where strVar1 and strVar2 are string variables

Suppose you have the following statements:string str1 = "Warm";

string str2 = "Cold";

After str1.swap(str2); executes, the value of str1 is "Cold" and the value of str2 is "War"

String summaryA string is a sequence of zero or more charactersStrings in C++ are enclosed in double quotation

marksThe function length returns the number of characters

currently in the string

The function size returns the number of characters currently in the string

The function find searches a string to locate the first occurrence of a particular substring

The function substr returns a particular substring of a string

The function swap is used to swap the contents of two string variables 70