1 operations chapter 4 & section 5.2. 2 expressions as we've seen, in a c++ program, any...
TRANSCRIPT
1
OperationsOperations
Chapter 4Chapter 4&&
Section 5.2Section 5.2
2
ExpressionsExpressions
As we've seen, in a C++ program, any finite As we've seen, in a C++ program, any finite sequence of sequence of objectsobjects and and operationsoperations that that combine to produce a value is called an combine to produce a value is called an expressionexpression..
A temperature conversion example:A temperature conversion example: fahrenheit = 1.8 * celsius + 32;
We now consider C++ We now consider C++ operationsoperations..Why not
fahrenheit = 9/5 * celsius + 32; ?
Numeric ExpressionsNumeric Expressions
C++ provides four familiar arithmetic operators:
+ for performing addition
- for performing subtraction
* for performing multiplication
/ for performing division
Each can be applied to either real (double) or integer (integer (int) [or character () [or character (char)] )] operandsoperands. 3
C++ provides more than 50operations (See Appendix C)
4
DivisionDivisionHowever, / behaves differently for However, / behaves differently for int than for than for double operands: operands:
Type of Operands Kind of Division Performed
intdouble
__________________________
Integer division calculates the quotient, but it also calculates the remainder. To find it we can use the modulus operator %; for example, 9 % 5 = ____.
56 / 10 =
56 % 10 =
1 / 2 =
1 % 2 =
2 / 3 =
2 % 3 =
5
456 / 100 =
456 % 100 =
More examples:
Keep in mind for Project 3
What about mixed-mode (i.e., mixed-type) expressions?
Automatic Type Conversion (p. 73): Promotion: "Narrower" types (fewer storage bits) "widened" e.g., int double; 9/3.0 9.0/3.0;
Explicit Type Conversion (p. 73-4): Type Casting
Use type name to convert an expression:
double(intVal) or (double)intValFunctional Notation Cast Notation
Numeric FunctionsNumeric Functions
The library <cmath> contains a variety The library <cmath> contains a variety of mathematical functions, including:of mathematical functions, including:
sin(x) asin(x)cos(x) acos(x)tan(x) atan(x)sqrt(x) abs(x)exp(x) pow(x, y)log(x) floor(x)log10(x) ceil(x)
6
Hyperbolic functions: cosh(x), sinh(x), tanh(x)
See Appendix Dfor other mathfunctions andother libraries.
Using <cmath> functionsUsing <cmath> functions
7
#include <iostream>
________________________
using namespace std;
int main()
{
cout << "\nEnter base and exponent: ";
double base, exponent;
cin >> base >> exponent;
double result = ________________________;
cout << base << " raised to the power "
<< exponent << " is " << result << endl;
}
C++ libraries whose namesstart with 'c' are C libraries.Their C-names do not havethe 'c' but have .h appended;
e.g., <math.h>
Essentiallysame as '\n'
PrecedencePrecedence
Issue: Is the value of the expressionIssue: Is the value of the expression
2 + 3 * 4
(2 + 3) * 4 (2 + 3) * 4 24 or 2 + (3 * 4) 24 or 2 + (3 * 4) 14 ? 14 ?
Operator __________________Operator __________________ governs governs evaluation order.evaluation order.
* has * has higher precedencehigher precedence than +, so it is than +, so it is applied first, making the answer ______.applied first, making the answer ______.
8
AssociativityAssociativity
Does the expressionDoes the expression
8 - 4 - 28 - 4 - 2
evaluate (8 - 4) - 2 evaluate (8 - 4) - 2 2 or 8 - (4 - 2) 2 or 8 - (4 - 2) 6 ? 6 ?
Precedence doesnPrecedence doesn’’t help us.t help us.
AssociativityAssociativity does. Since - is does. Since - is ______________________________________, the left - is evaluated , the left - is evaluated first.first.
Most C++ operators that we use associate left.Most C++ operators that we use associate left.
See Appendix C for a complete list.See Appendix C for a complete list.9
AssignmentAssignment
Assignment is one operator that is right-Assignment is one operator that is right-associative, which allows expressions like:associative, which allows expressions like:
int w, x, y, z;
____________________________
10
The rightmost = is applied first, assigning z zero, then y is assigned the value of z (0),
w = (x = (y = (z = 0)));
then x is assigned the value of y (0), and finally w is assigned the value of x (0).
Assignment operatorreturns the valuebeing assigned.
Mixed-mode assignments convert the value to type of variable and assign it.
Assignment ShortcutsAssignment Shortcuts
Certain assignments are very common:Certain assignments are very common:var = var + x; // add x to var
var = var - y; // sub y from var
C++ provides shortcuts for them:C++ provides shortcuts for them:
______________________________; // add x to var
______________________________; // sub y from var
11
In GeneralIn General
Most arithmetic expressions of the form:Most arithmetic expressions of the form:var = var value;
can be written in the "shortcut" form:can be written in the "shortcut" form:var = value;
Examples:Examples:double x, y;
cin >> x >> y;
________________________; // double x’s value
________________________; // decrease y by half12
Increment and DecrementIncrement and Decrement
Other common assignments include:Other common assignments include:var = var + 1; // add 1 to var
var = var - 1; // sub 1 from var
so C++ provides shortcuts for them, too:so C++ provides shortcuts for them, too:
________________________; // add 1 to var
_____________;
________________________; // sub 1 from var
________________________;13
Integer variables
only!
Prefix vs. PostfixPrefix vs. Postfix
As long as the increment (or decrement) operator is used as a separate statement:
int y = 0, x = 0;
. . .
++x; // x becomes ____
y++; // y becomes ____
it makes no difference which version is used.
14
15
If the increment operator is used within another expression, it does make a difference whether it is prefix or postfix.
The prefix form of increment produces the final (incremented) value as its result:
int x, y = 0;
x = 2 * (++y);
cout << x << " " << y; //
The prefix decrement behaves similarly.
2 1 is displayed
16
The postfix form of increment produces the original (unincremented) value as its result:
int x, y = 0;
x = 2 * (y++);
cout << x << " " << y; //
The prefix decrement behaves similarly.
0 1 is displayed
I/OI/O
•17
In most programming languages, input and output are performed by functions with names like read() and print(). In C++, however, (but not C) they are performed by ____________ >> and <<:•input_stream >> variable
•output_stream << expression.
18
But these are _____________. Because >> and <<
are operators, these i/o expessions must alsoproduce a ___________.cin >> variable returns ______ as its value;
cout << expression returns _______ as its value.
We know that:
cin >> variable reads a value from the keyboard and assigns it to variable
cout << expression outputs the value of expression to the screen.
19
Arithmetic operators can be chained together in expressions like a + b + c and a - b - c.
Input and output operators can also be chained; for example:
cout << "Width =" << width << " ft.\n";
and
cin >> length >> width;
These work because of the values returned by >> and << and both are ________-associative.
Why???
20
Example:
cout << "Width =" << width << " ft.\n";
_cout << "Width ="_ << width << " ft.\n";
______ << width << " ft.\n";
_cout << width_ << " ft.\n";
______ << " ft.\n";
______; Width = 8.5 ft.
Relational OperationsRelational Operations
C++ provides six operators for comparisons. C++ provides six operators for comparisons.
Each has two operands and produces a Each has two operands and produces a
______________ value ( value (______________________________________):):
x == y x != y
x < y x >= y
x > y x <= y
21Warning: 1 < x < 2
22
C, the parent language of C++, has no bool type. Instead, it uses _____ to represent false
and ______________ values to represent true.
For upward compatibility, C++ also does this:• 0 is interpreted as false• nonzero is interpreted as trueFor input and output, 0 is used for false, 1 for true (see program on Slide #29)unless_____________ is inserted in an I/O statement (see modification of program on Slide #29). It remains in effect for rest of program (unless noboolalpha is used in an I/O statement).
Also, it can be dangerous to compare reals
with _____ and _____ when one or both of the reals may have roundoff error.
See the program on Slide #25.
One of the easiest mistakes to make
in C++ is using __________________
in place of ________________
See the program on Slide #24.
23
#include <iostream>using namespace std;
int main(){ int x; cout << "Enter an integer: "; cin >> x;
if (x = 99) cout << "Yes\n"; else cout << "No\n";}}
24
Executions:
Enter an integer: 99Yes
Enter an integer: -99Yes
Enter an integer: 0Yes
With change:
if (x if (x == 99) 99)
Enter an integer: 99
Yes
Enter an integer: -99
No
Enter an integer: 0
No
//-- Effect of roundoff error//-- Effect of roundoff error#include <iostream>#include <iostream>#include <cmath>#include <cmath>using namespace std;using namespace std;
int main()int main(){{ for (float x = 0; for (float x = 0; x != 50.0; x = x + 0.1); x = x + 0.1) {{ float y = x * sqrt(1 + sin(x));float y = x * sqrt(1 + sin(x)); cout << x << " " << y << endl;;cout << x << " " << y << endl;; }}} }
25
Execution:
0 0
0.1 0.104873
0.2 0.218968
. . .
49.9998 42.937
50.0998 45.782650.1998 48.5246 . . .100.099 76.3241 . . .
With change:
for (float x = 0; x < 50.0; x = x + 0.1)
Enter an integer: 10 0
0.1 0.104873
0.2 0.218968
. . .
49.7998 36.9654
49.8998 39.9954
49.9998 42.937
orabs(x - 50) >= 1E-10
PreconditionsPreconditions
Sometimes values must satisfy certain Sometimes values must satisfy certain requirements for a program to process them requirements for a program to process them (e.g., they must be positive) . (e.g., they must be positive) .
Such requirements are called Such requirements are called preconditionspreconditions or or ______________________________ . They are boolean . They are boolean expressions that must be true in order for expressions that must be true in order for the program to work correctly.the program to work correctly.
A convenient way to check preconditions is A convenient way to check preconditions is to use C++to use C++’’s s assert() mechanism. mechanism. if statement
later
e.g., Project 2.3
26
AssertionsAssertions#include <iostream>#include _________________using namespace std;int main(){
cout << "\nEnter the current month number: "; int month; cin >> month; _______________________________________; // ...}
assert() will halt the program if will halt the program if month < 1 or month > 12 and display a message.
27
NOTE
Logical OperatorsLogical Operators
More complex boolean expressions can be More complex boolean expressions can be built using the logical operators:built using the logical operators:
b1 && b1 // true iff b1, b2 are both true
b1 || b2 // true iff b1 or b2 is true
!b // true iff b is false
Example:Example:cin >> month;
______________________________________
28NOT: assert(1 <= month <= 12);
#include <iostream>#include <iostream>using namespace std;using namespace std;
int main()int main(){{ bool input1, input2, output;bool input1, input2, output; cout << "Enter inputs: ";cout << "Enter inputs: "; cin >> input1 >> input2;cin >> input1 >> input2;
output = (input1 || input2) && !(input1 && input2);output = (input1 || input2) && !(input1 && input2); cout << "Output for inputs " << input1 cout << "Output for inputs " << input1 << " and " << input2 << " is " << output << '\n';<< " and " << input2 << " is " << output << '\n';}}
29
Executions:
Enter inputs: 0 1Output for inputs 0 and 1 is 1
Enter inputs: 1 1Output for inputs 1 and 1 is 0
With change:
cout << "Output for inputs " << boolalpha << input1
<< " and " << input2 << " is " << output << '\n';
Enter inputs: 0 1Output for inputs false and true is true
With change: cin >> boolalpha >> input1 >> input2;
Enter inputs: false true
Output for inputs false and true is true
Binary Half-Adder: (§5.3)Full Adder: (ProgrammingProblems)
Character FunctionsCharacter FunctionsThe library <cctype> contains an assortment The library <cctype> contains an assortment of boolean character-processing functions:of boolean character-processing functions:
isalpha(ch) isalnum(ch)
isdigit(ch) iscntrl(ch)
islower(ch) isupper(ch)
isspace(ch) ispunct(ch)
isprint(ch) isgraph(ch)
and two case-conversion functions:and two case-conversion functions:toupper(ch) tolower(ch)
30
SeeApp. D
Examples:Examples:
Write an assertion that will halt the program if a char object named ch is not an uppercase letter:
31
Write an assertion that will halt the program if ch is not one of ‘A ’ through ‘G ’:
assert('A' <= ch && ch <= 'G');
assert('A' <= ch && ch <= 'Z'); oror assert(isupper(ch));
Operator PrecedenceOperator Precedence
( ) HIGHERHIGHER
+ (positive), (positive), - (negative), (negative), ! (NOT) (NOT)
*, , /, , %
+ (addition), (addition), -- (subtraction) (subtraction)
<, , <=, , >, , >=
<<, >>
==, , !=
&&
||
= LOWERLOWER
See Appendix C for a complete list.See Appendix C for a complete list.
54 operators18 precedence
levels
32
When in doubt,use parentheses!