270 likes | 328 Views
What is the Result and Type of the Following Expressions?. int x=2, y=15; double u=2.0, v=15.0; -x x+y x-y x*v y / x x/y y%x x%y u*v u/v v/u u%v x * u (x+y)*u u /(x-x) x++ u++ u = --x u = x-- u *= ++x; v /= x; . Types. are these constants legal? .5 5.E 0.5e3 0.5E-3 0.5E-3.5
E N D
What is the Result and Type of the Following Expressions? int x=2, y=15; double u=2.0, v=15.0; -x x+y x-y x*v y / x x/y y%x x%y u*v u/v v/u u%v x * u (x+y)*u u /(x-x) x++ u++ u = --x u = x-- u *= ++x; v /= x;
Types • are these constants legal? • .5 5.E0.5e30.5E-30.5E-3.5 • ’a’’%’’Ab’”Ab” • are these variable names legal? • MyTotalMy_Total__MyTotalMy Total • what does this mean? int mytotal=0; int yourtotal(1); • what would be stored in myvar? int myvar; myvar=2.56; • what would be stored in yourvar? double yourvar; yourvar=5/2;
Boolean Algebra • logical expressions have the one of two values - true or false • a rectangle has three sides. • the instructor has a pleasant smile • the branch of mathematics that deals with this type of logic is called Boolean algebra • developed by the British mathematician George Boole in the 19th century • C++ makes extensive use of Boolean algebra in the form of logical expressions; what is an expression again? • three key logical operators in C++: • && - logical “and”, binary • ||- logical “or”, binary • ! - logical “not”, unary
P Q P && Q False False False False True False True False False True True True Boolean Algebra • truth tables • Lists all combinations of operand values and the result of the operator for each combination • truth table for && (logical “and’)
P Q P || Q False False False False True True True False True True True True Boolean Algebra • truth table for || (logical “or”)
Boolean Algebra • truth table for ! (logical “not”) P !P False True True False
Boolean Algebra • can create complex logical expressions by combining simple logical expressions • example • ! (P && Q) • a truth table can be used to determine when a logical expression is true • note that & and | are also legal operators, make sure to use correct ones P Q P && Q ! (P && Q) False False False True False True False True True False False True True True True False
Example Logical Expressions bool P = true;bool Q = false;bool R = true;bool S = P && Q; bool T = P && !Q bool U = !Q || R; bool V = P || !Q || !R; bool W = P && Q && !R; bool X = Q || (P && R); bool Y = !(R && !Q);bool Z = !(P && Q && R);
Relational Operators • equality operators == note the two equal signs != • examples inti = 32; int k = 45; bool q = i == k; bool r = i != k;
Relational Operators • ordering operators < > >= () <= () • examples int i = 5; int k = 12; bool p = i < 10; bool q = k > i; bool r = i >= k; bool s = k <= 12;
Operator Precedence Expanded • precedence of operators (from highest to lowest) () Unary + - * / % + - > < >= >= != == && || =
Examples of Logical Expressions • int a = 5; int b = 10 int c = 20; • bool d = a < b; bool e = a > b; • bool f = (a > b) || (b < c ); • bool g = (a > b) && (b < c ); • bool h = !(a < b); bool i = !(a==b); • bool j = 2*a == b; bool k = (a+b) >= c; • bool l = !((a+b) != c); • bool m = (a+b) == (c-a); • bool n = (a+b) >= (c-a); • int o=a; • int p=o=b;what is the outcome of this statement? • bool q=true; q = d = false;
Operator Precedence Revisited • same or different? (a*b)+c a*b + c a*(b+c) a*b + c (a+b) > c a + b > c a+(b>c) a + b > c (a > b) == (b > c) a > b == b > c (a == b) > (b == c) a == b > b == c (a != b) && (c <= d) a != b && c <= d (a > b) && (c || d) a > b && c || d (a = b) && c a = b && c
Conditional Constructs • provide ability to control whether a statement is executed • two constructs • if-statement • if • if-else • if-else-if • switch-statement
Blocks and Local Variables • a list of statements enclosed in curly brackets is called a block • block may be placed anywhere a statement can be placed (note the placement of brackets: if ((saleType == ’W’) || (saleType == ’w’)) { total = price * number; } • a variable can be declared and used within block, such variable is local to the block and does not exist outside of it else if ((saleType == ’R’) || (saleType == ’R’)){ double subtotal; subtotal = price * number; total = subtotal + subtotal * TAX_RATE; } variable scope – area in program where a variable can be used • what’s the scope of a variable local to function? block? • pitfall: a local variable is accessed outside of the block
expression true false action The Basic If-Statement • syntax if(expression) action • if the expression is true then execute action • action is either a single statement or a block • example 1:if (value > 0) value =0; • example 2: if (value < 0) { value = -value; ++i; }
Sorting Two Numbers cout << "Enter two integers: "; int n1, n2; cin >> n1 >> n2; if (n1 > n2) { int tmp = n1; n1 = n2; n2 = tmp; } cout << ”Numbers in order: “ << n1 << " " << n2 << endl; programming idiom– a common way of accomplishing a simple task swapping values of two variables with a third is an idiom
The If-Else Statement • syntax if (expression) action1else action2 • if expression is true thenexecute action1otherwiseexecute action2 if (v == 0) cout << "v is 0"; else cout << "v is not 0"; expression false true action1 action2
Selection • it is often the case that depending upon the value of an expression we want to perform a particular action • two major ways of accomplishing this • multiway if-statement • if-else statements “glued” together • switch statement
Multiway If-Statement • example int vclass; cout << "Enter the vehicle class: "; cin >> vclass; if (vclass == 1)cout << ”Passenger car”; else if (vclass == 2)cout << ”Bus”; else if (vclass == 3)cout << ”Truck”; elsecout << ch << ”Unknown vehicle class!”;
Switch Statement syntax switch (expression) { case constant: statements break; case constant: statements default:statements }
Switch Example 1 int vclass; cout << "Enter the vehicle class: "; cin >> vclass; switch (vclass){ case 1: cout << "Passenger car"; break; case 2: cout << "Bus"; break; default: cout << "Unknown vehicle class! "; break; // unnecessary but used for consistency }
Switch Example 2 cout << "Enter simple expression: "; int Left; int Right; char Operator; cin >> Left >> Operator >> Right; cout << Left << " " << Operator << " " << Right << " = "; switch (Operator) { case '+' : cout << Left + Right << endl; break; case '-' : cout << Left - Right << endl; break; case '*' : cout << Left * Right << endl; break; case '/' : cout << Left / Right << endl; break; default: cout << "Illegal operation" << endl; }
Arity and Conditional Operator • ternary operator – operator accepting three operands • conditional operator is used as an abbreviated form of branching boolean-expression ? true-expression : false-expression • if boolean-expression is true,then the value of whole expression is true-expression, or false-expression otherwise • conditional assignment - if conditional operator is used to assign value to variable • what branching construct is this assignment equivalent to? • example: inti = j>0 ? j : -j; • program that calculates the largest number ( of two) int main() { int n1, n2; cin >> n1 >> n2; int max = n1 > n2 ? n1 : n2; cout << ”maximum is ” << max << endl; } • arity(again) – number of operands an operator accepts? What arities have we studied?
Named Constants • there are problems with using literal constants • 9.8 does not give an idea as to what it means in the program • hard to modify if used in multiple places in program • named constant provides a name to a constant: const int windowCount = 5; const double taxRate = 9.8; • named constants are usually declared at the beginning of the program. capital letters are usually used to give the programmer a hint that this is a constant when he encounters it in the program • note to C programmers: #define is completely replaced by constin C++
Debugging and Tracing Programs • specially compiled executables leave information the original source file: names of variables and source lines • this allows • program tracing – suspending program execution at specific source line and executing program one source line at a time • variable watching – observing values stored in source program variables • breakpoint – line in the source program where execution has to be suspended