d-1 university of washington computer programming i lecture 4: arithmetic expressions © 2000 uw cse
TRANSCRIPT
![Page 1: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/1.jpg)
D-1
University of WashingtonComputer Programming I
Lecture 4:
Arithmetic Expressions
© 2000 UW CSE
![Page 2: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/2.jpg)
D-2
Arithmetic expressions
Integer and floating-point (double) types
Unary and binary operators
Precedence
Associativity
Conversions and casts
Symbolic constants
Overview
![Page 3: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/3.jpg)
D-3
We need precise rules that define exactly what an expression means: What is the value of 4 - 4 * 4 + 4?
Arithmetic on a computer may differ from everyday arithmetic or math: (1.0 / 9.0) * 9.0 could be 0.99999998213
2 / 3 is zero in C, not .667 (!)
Why Study Expressions?
![Page 4: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/4.jpg)
D-4
double area, radius;
area = 3.14 * radius * radius;
assignment statement expression
Execution of an assignment statement:Evaluate the expression on the right hand sideStore the value of the expression into the variable named on the left hand side
Assignment Statement: Review
![Page 5: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/5.jpg)
D-5
Expressions are things that have valuesA variable by itself is an expression: radiusA constant by itself is an expression: 3.14
Often expressions are combinations of variables, constants, and operators.
area = 3.14 * radius * radius;
Expressions
![Page 6: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/6.jpg)
D-6
Expression EvaluationSome terminology:
Data or operand means the integer or floating-point constants and/or variables in the expression.
Operators are things like addition, multiplication, etc.
The value of an expression will depend on the data types and values and on the operators used
Additionally, the final result of an assignment statement will depend on the type of the assignment variable.
![Page 7: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/7.jpg)
D-7
Arithmetic Types: ReviewC provides two different kinds of numeric values
Integers (0, 12, -17, 142)Type intValues are exactConstants have no decimal point or exponent
Floating-point numbers (3.14, -6.023e23)Type doubleValues are approximate (12-14 digits precision typical)Constants must have decimal point and/or exponent
![Page 8: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/8.jpg)
D-8
Operator JargonBinary: operates on two operands
3.0 * b
zebra + giraffe
Unary: operates on one operand
-23.4
C operators are unary or binary
Puzzle: what about expressions like a+b+c?Answer: this is two binary ops, in sequence
![Page 9: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/9.jpg)
D-9
Constants of type double:0.0, 3.14, -2.1, 5.0, 6.02e23, 1.0e-3not 0 or 17
Operators on doubles:unary: -binary: +, -, *, /Note: no exponentiation operator in C
Expressions with doubles
![Page 10: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/10.jpg)
D-10
Declarations
double height, base, radius, x, c1, c2;
Sample expressions (not statements):
0.5 * height * base
( 4.0 / 3.0 ) * 3.14 * radius * radius * radius
- 3.0 + c1 * x - c2 * x * x
Example Expressions with doubles
![Page 11: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/11.jpg)
D-11
Constants of type int:
0, 1, -17, 42
not 0.0 or 1e3
Operators on ints:unary: -binary: +, -, *, /, %
Expressions with ints
![Page 12: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/12.jpg)
D-12
Integer operators include integer division and integer remainder:
symbols / and %
Caution: division looks like an old friend, but there is a new wrinkle!
int Division and Remainder
2 rem 1
100 )299
200
99
2 rem 99
100 )299
200
99
![Page 13: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/13.jpg)
D-13
/ is integer division: no remainder, no rounding
299 / 100 2
6 / 4 1
5 / 6 0
int Division and Remainder
![Page 14: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/14.jpg)
D-14
/ is integer division: no remainder, no rounding
299 / 100 2
6 / 4 1
5 / 6 0
% is mod or remainder:
299 % 100 99
6 % 4 2
5 % 6 5
int Division and Remainder
![Page 15: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/15.jpg)
D-15
Given: total_minutes 359
Find: hours 5minutes 59
Solution in C:
Expressions with ints: Time Example
![Page 16: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/16.jpg)
D-16
Given: total_minutes 359
Find: hours 5minutes 59
Solution in C:
Expressions with ints: Time Example
hours = total_minutes / 60 ;minutes = total_minutes % 60 ;
![Page 17: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/17.jpg)
D-17
int radius;double volume;double pi = 3.141596;..volume = ( 4/3 ) * pi * radius *radius * radius;
A Cautionary Example
![Page 18: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/18.jpg)
D-18
Sometimes only ints make sense
the 15th spreadsheet cell, not the 14.997th cellDoubles may be inaccurate representing “ints”
In mathematics 3 • 15 • (1/3) = 15But, 3.0 * 15.0 * (1.0 / 3.0) might be 14.9999997
Last, and least operations with doubles is slower on some computersdoubles often require more memory
Why Use ints? Why Not doubles Always?
![Page 19: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/19.jpg)
D-19
Precedence determines the order of evaluation of operators.
Is a + b * a - b equal to ( a + b ) * ( a - b ) or a + ( b * a ) - b ?? And does it matter?
Try this:
4 + 3 * 2 - 1
Order of Evaluation
![Page 20: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/20.jpg)
D-20
Precedence determines the order of evaluation of operators.
Is a + b * a - b equal to ( a + b ) * ( a - b ) or a + ( b * a ) - b ?? And does it matter?
Try this:
4 + 3 * 2 - 1
Order of Evaluation
![Page 21: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/21.jpg)
D-21
Precedence determines the order of evaluation of operators.
Is a + b * a - b equal to ( a + b ) * ( a - b ) or a + ( b * a ) - b ?? And does it matter?
Try this:
4 + 3 * 2 - 1
(4 + 3) * (2 - 1) =
4 + (3 * 2) - 1 =
Order of Evaluation
![Page 22: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/22.jpg)
D-22
Precedence determines the order of evaluation of operators.
Is a + b * a - b equal to ( a + b ) * ( a - b ) or a + ( b * a ) - b ?? And does it matter?
Try this:
4 + 3 * 2 - 1
(4 + 3) * (2 - 1) =
4 + (3 * 2) - 1 =
Order of Evaluation
7
![Page 23: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/23.jpg)
D-23
Precedence determines the order of evaluation of operators.
Is a + b * a - b equal to ( a + b ) * ( a - b ) or a + ( b * a ) - b ?? And does it matter?
Try this:
4 + 3 * 2 - 1
(4 + 3) * (2 - 1) =
4 + (3 * 2) - 1 =
Order of Evaluation
7
9
![Page 24: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/24.jpg)
D-24
Precedence rules:
1. do ( )’s first, starting with innermost2. then do unary minus (negation): -3. then do “multiplicative” ops: *, /, %4. lastly do “additive” ops: binary +, -
Operator Precedence Rules
![Page 25: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/25.jpg)
D-25
Precedence doesn’t help if all the operators have the same precedence
Is a / b * c equal to
a / ( b * c ) or ( a / b ) * c ??
Associativity determines the order among consecutive operators of equal precedence
Does it matter? Try this: 15 / 4 * 2
Precedence Isn’t Enough
![Page 26: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/26.jpg)
D-26
Associativity determines the order among consecutive operators of equal precedence
Does it matter? Try this: 15 / 4 * 2
(15 / 4) * 2 = 3 * 2 = 6
15 / (4 * 2) = 15 / 8 = 1
Associativity Matters
![Page 27: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/27.jpg)
D-27
Most C arithmetic operators are “left associative”, within the same precedence level
a / b * c equals (a / b) * ca + b - c + d equals ( ( a + b ) - c ) + d
C also has a few operators that are right associative.
Associativity Rules
![Page 28: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/28.jpg)
D-28
The Full Story...
C has about 50 operators & 18 precedence levels…
A "Precedence Table" shows all the operators, their precedence and associativity.Look on inside front cover of our
textbookLook in any C reference manual
When in doubt: check the tableWhen faced with an unknown operator:
check the table
![Page 29: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/29.jpg)
D-29
Mathematical formula: ________ - b + b2 - 4 a c ---------------------- 2 a
C formula:
(- b + sqrt ( b * b - 4.0 * a * c) ) / ( 2.0 * a )
Precedence and Associativity: Example
![Page 30: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/30.jpg)
D-30
b * b - 4.0 * a * c
Depicting Expressions
![Page 31: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/31.jpg)
D-31
b * b - 4.0 * a * c
2.5 2.5
*
6.25
Depicting Expressions
![Page 32: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/32.jpg)
D-32
b * b - 4.0 * a * c
2.5 2.5 -1.0 15.2
* *
6.25 -4.0
*
-60.8
Depicting Expressions
![Page 33: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/33.jpg)
D-33
b * b - 4.0 * a * c
2.5 2.5 -1.0 15.2
* *
6.25 -4.0
*
-60.8
-
67.05
Depicting Expressions
![Page 34: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/34.jpg)
D-34
What is 2 * 3.14 ?
Compiler will implicitly (automatically) convert int to double when they occur together:
int + double double + double (likewise -, *, /)
2*3 * 3.14 (2*3) * 3.14 6 * 3.14 6.0 * 3.14 18.84
2/3 * 3.14 (2/3) * 3.14 0 * 3.14 0.0 * 3.14 0.0
We strongly recommend you avoid mixed types: e.g., use 2.0 / 3.0 * 3.14 instead.
Mixed Type Expressions
![Page 35: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/35.jpg)
D-35
int total, count, value;
double avg;
total = 97 ; count = 10;
avg = total / count ; /*avg is 9.0!*/
value = total*2.2; /*bad news*/
Conversions in Assignments
implicit conversion to int – drops fraction with no warning
implicit conversion to double
![Page 36: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/36.jpg)
D-36
Use a cast to explicitly convert the result of an expression to a different typeFormat: (type) expressionExamples (double) myage (int) (balance + deposit)This does not change the rules for evaluating the expression itself (types, etc.)Good style, because it shows the reader that the conversion was intentional, not an accident
Explicit Conversions
![Page 37: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/37.jpg)
D-37
int total, count ;
double avg;
total = 97 ; count = 10 ;
/* explicit conversion to double (right way)*/
avg = (double) total / (double) count); /*avg is 9.7 */
Using Casts
![Page 38: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/38.jpg)
D-38
int total, count ;
double avg;
total = 97 ; count = 10 ;
/* explicit conversion to double (right way)*/
avg = (double) total / (double) count); /*avg is 9.7 */
/* explicit conversion to double (wrong way)*/
avg = (double) (total / count) ; /*avg is 9.0*/
Using Casts
![Page 39: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/39.jpg)
D-39
Named constants:
#define PI 3.14159265#define HEIGHT 50#define WIDTH 80#define AREA (HEIGHT * WIDTH)
...circle_area = PI * radius * radius ;volume = length * AREA;
#define - Symbolic Constants
Note: = and ; are not used for #define
() can be used in #define
![Page 40: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/40.jpg)
D-40
Centralize changes
No "magic numbers" (unexplained constants)
use good names instead
Avoid typing errors
Avoid accidental assignments to constants
double pi ; vs. pi = 3.14 ; #define PI 3.14 ... ... pi = 17.2 ; PI = 17.2 ; syntax error
Why #define?
![Page 41: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/41.jpg)
D-41
•Every variable, value, and expression in C has a type•Types matter - they control how things behave (results of expressions, etc.)•Lots of cases where types have to match up•Start now: be constantly aware of the type of everything in your programs!
Types are Important
![Page 42: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/42.jpg)
D-42
•Write in the clearest way possible to help the reader
•Keep it simple; break very complex expressions into multiple assignment statements
•Use parentheses to indicate your desired precedence for operators when it is not clear
•Use explicit casts to avoid (hidden) implicit conversions in mixed mode expressions and assignments
•Be aware of types
Advice on Writing Expressions
![Page 43: D-1 University of Washington Computer Programming I Lecture 4: Arithmetic Expressions © 2000 UW CSE](https://reader035.vdocument.in/reader035/viewer/2022062409/56649eb55503460f94bbd8ee/html5/thumbnails/43.jpg)
D-43
We’ll discuss input and output
See you then!
Next Time