LECTURE # 6 : STRUCTURED PROGRAMMING C++ Operators Tr.Hadeel Content 2 C++ operators Assignment operators Arithmetic operators Increment and decrement operators Decision making operators (logical and relational) Conditional operator Precedence and associativity of operators Common errors Tr.Hadeel@hotmail.com Operators 3 Data connectors within expression or equation Concept related Operand: data that operator connects and processes Resultant: answer when operation is completed Operators types based on their mission Assignment Arithmetic: addition, subtraction, modulo division, ...etc Relational: equal to, less than, grater than, …etc Logical (decision-making): NOT, AND, OR Tr.Hadeel@hotmail.com Operators (cont.) 4 Operators types based on number of operands Unary operators Have only one operand May be prefix or postfix e.g. -- ++ ! Binary operators Have two operands Infix e.g. == && + Ternary operators Have three operands e.g. ? : Tr.Hadeel@hotmail.com Assignment operators 5 Assignment statement takes the form below varName = expression; Binary operators Expression is evaluated and its value is assigned to the variable on the left side Shorthand notation varName = varName operator expression; c = c + 3; varName operator = expression; Tr.Hadeel@hotmail.com c += 3; Assignment operators (cont.) 6 Assignment between objects of the same type is always supported Assignment operator Sample expression Explnation Assigns Assume: int c = 3, d = 5, e = 4, f = 6, g = 12; += c += 7 -= 10 to c d -= 4 c=c+7 d=d–4 *= e *= 5 e=e*5 20 to e /= f /= 3 f=f /3 2 to f %= g %= 9 g=g%9 3 to g Tr.Hadeel@hotmail.com 1 to d Arithmetic Operators 7 All of them are binary operators C++ operation Algebraic expression C++ expression Addition C++ arithmetic operator + f+7 f + 7 Subtraction - p-c p - c MUltiplication * bm or b . m b * m Division / x / y or x ÷ y x / y Modulus % r mod s r % s Arithmetic expressions appear in straight-line form Parentheses () are used to maintain priority of manipulation Tr.Hadeel@hotmail.com Arithmetic Operators Precedence 8 Operators in parentheses evaluated first Nested/embedded parentheses Multiplication, division, modulus applied next Operators in innermost pair first Operators applied from left to right Addition, subtraction applied last Operators applied from left to right Tr.Hadeel@hotmail.com Arithmetic Operators Precedence 9 Tr.Hadeel@hotmail.com Example 10 The statement is written in algebra as z = pr % q + w / (x – y) How can we write and evaluate the previous statement in C++ ? z = 6 p * 2 r % 3 q + 5 w / 4 Tr.Hadeel@hotmail.com (x - 1 y); 11 Tr.Hadeel@hotmail.com Example: 12 Tr.Hadeel@hotmail.com Increment and Decrement Operators 13 Unary operators Adding 1 to or (subtracting 1 from) variable’s value Increment operator gives the same result of (c=c+1) or (c+=1) Decrement operator gives the same result of (c=c-1) or (c-=1) Tr.Hadeel@hotmail.com Increment and Decrement Operators (cont.) 14 Operator Called Sample expression Explanation ++ Preincrement ++a Increment a by 1, then use the new value of a in the expression in which a resides. ++ Postincrement a++ Use the current value of a in the expression in which a resides, then increment a by 1. Pridecrement --b Decrement b by 1, then use the new value of b in the expression in which b resides. Postdecrement b-- Use the current value of b in the expression in which b resides, decrement b by 1. Tr.Hadeel@hotmail.com Examples 15 Example # 1 int x = 10; cout << “x = “ << ++x << endl; cout << “x = “ << x << endl; output # 1 x = 11 x = 11 Example # 2 int x = 10; cout << “x = “ << x++ << endl; cout << “x = “ << x << endl; output # 2 x = 10 x = 11 Tr.Hadeel@hotmail.com Examples 16 Example # 1 int x = 10 , y; output # 1 y = ++x; x = 11 y = 11 cout << “x = “ << x << endl; cout << “y = “ << y << endl; Example # 2 int x = 10 , y; y = x++; cout << “x = “ << x << endl; cout << “y = “ << y << endl; output # 2 x = 11 y = 10 Tr.Hadeel@hotmail.com Exercise 17 State the order of evaluation of the operators in each of the following C++ statements and show the value of x after each statement is performed. x = 7 + 3 * 6 / 2 - 1; x = 2 % 2 + 2 * 2 - 2 / 2; x = ( 3 * 9 * ( 3 + ( 9 * 3 / ( 3 ) ) ) ); Tr.Hadeel@hotmail.com Answer: 18 15 3 324 Tr.Hadeel@hotmail.com Relational and Equality Operators 19 Binary operators Used in decision -making statements Standard algebraic equality operator or relational operator C++ equality or relational operator Example of C++ condition Meaning of C++ condition > > x > y x is greater than y < < x < y x is less than y >= x >= y x is greater than or equal to y <= x <= y x is less than or equal to y = == x == y x is equal to y != x != y x is not equal to y Relational operators Equality operators Tr.Hadeel@hotmail.com Relational and Equality Operators (cont.) 20 Have the same level of precedence Applied from left to right Used with conditions Return the value true or false Used only with a single condition Tr.Hadeel@hotmail.com Logical Operators 21 Used to combine between multiple conditions && (logical AND) true if both conditions are true 1st condition gender == 1 2nd condition && age >= 65 || (logical OR) true if either of condition is true semesterAverage >= 90 || finalExam >= 90 Tr.Hadeel@hotmail.com Logical Operators (cont.) 22 ! (logical NOT, logical negation) Returns true when its condition is false, and vice versa !( grade == sentinelValue ) Also can be written as grade != sentinelValue Tr.Hadeel@hotmail.com Conditional operator (?:) 23 Ternary operator requires three operands Condition Value when condition is true Value when condition is false Syntax Condition ? condition’s true value : condition’s false value Tr.Hadeel@hotmail.com Examples 24 Example # 1 grade >= 60 ? cout<<“Passed” : cout<<“Failed”; Can be written as cout << (grade >= 60 ? “Passed” : “Failed”); Example # 2 int i = 1, j = 2, Max; Max = ( i > j ? i : j ); Can be written as .. ? Tr.Hadeel@hotmail.com 25 Summary of Operator Precedence and Associativity Operators Associativity Type () [] left to right highest ++ -- static_cast< type >( operand ) left to right unary (postfix) ++ -- + right to left unary (prefix) * / % left to right multiplicative + - left to right additive << >> left to right insertion/extraction < <= left to right relational == != left to right equality && left to right logical AND || left to right logical OR ?: right to left conditional right to left assignment left to right comma = , += > -= - ! & >= *= /= %= * Tr.Hadeel@hotmail.com bool Variables in Expressions 26 false is zero and true is any non-zero The following codes applies implicit conversion between bool and int Code # 1 int bool bool int x = -10 ; flag = x ; // true test1 int int a = flag ; // assign the value 1 b = !flag; // assign the value 0 x = flag + 3; // assign the value 4 Code # 2 test1,test2,test3 ; x = 3 , y = 6 , z = 4 ; = x > y ; // false test2 = !(x == y ); // true test3 = x < y && x < z ; // true test3 = test1 || test2 ; // true test2 = !test1; // true Tr.Hadeel@hotmail.com Common Compilation Errors 27 Attempt to use % with non-integer operands Spaces between pair of symbols e.g. (==, !=, …etc) Reversing order of pair of symbols e.g. =! Confusing between equality (==) and assignment operator (=) Tr.Hadeel@hotmail.com Exercise - 1 28 What is the output of the following program? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include <iostream> using std::cout; using std::endl; int main() { int x; int y; x = 30; y = 2; int z; z = 0; cout << (++++x && z ) << endl; cout << x * y + 9 / 3 << endl; cout << x << y << z++ << endl; return 0; } // end main Tr.Hadeel@hotmail.com Exercise - 2 29 What is wrong with the following program? 1 2 3 4 5 6 int main() { int a,b,c,sum; sum = a + b + c ; return 0; } Tr.Hadeel@hotmail.com 30 End Tr.Hadeel@hotmail.com