Conditional Statements For computer to make decisions, must be able to test CONDITIONS IF it is raining THEN I will not go outside IF Count is not zero.

Slides:



Advertisements
Similar presentations
1 Conditional Statement. 2 Conditional Statements Allow different sets of instructions to be executed depending on truth or falsity of a logical condition.
Advertisements

C++ Programming: From Problem Analysis to Program Design, Third Edition Chapter 4: Control Structures I (Selection)
true (any other value but zero) false (zero) expression Statement 2
ECE122 L7: Conditional Statements February 20, 2007 ECE 122 Engineering Problem Solving with Java Lecture 7 Conditional Statements.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Java Software Solutions Foundations of Program Design Sixth Edition by Lewis.
Control Structures Control structures control the flow of program execution. 3 types of control structures: sequence, selection.
Chapter 4 Making Decisions
C++ for Engineers and Scientists Third Edition
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Control Statements.
Boolean Expressions and If Flow of Control / Conditional Statements The if Statement Logical Operators The else Clause Block statements Nested if statements.
Performing Computations C provides operators that can be applied to calculate expressions: example: tax is 8.5% of the total sale expression: tax =
Instructor: Alexander Stoytchev CprE 185: Intro to Problem Solving (using C)
CONTROL STATEMENTS IF-ELSE, SWITCH- CASE Introduction to Computer Science I - COMP 1005, 1405 Instructor : Behnam Hajian
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 4: Control Structures I (Selection)
C++ Programming: From Problem Analysis to Program Design, Third Edition Chapter 4: Control Structures I (Selection)
1 Chapter 4: Selection Structures. In this chapter, you will learn about: – Selection criteria – The if-else statement – Nested if statements – The switch.
Control Structures – Selection Chapter 4 2 Chapter Topics  Control Structures  Relational Operators  Logical (Boolean) Operators  Logical Expressions.
Liang, Introduction to Programming with C++, Second Edition, (c) 2010 Pearson Education, Inc. All rights reserved Chapter 3 Selections.
Chapter 4: Control Structures I (Selection). Objectives In this chapter, you will: – Learn about control structures – Examine relational and logical operators.
CMSC 104, Version 8/061L11Relational&LogicalOps.ppt Relational and Logical Operators Topics Relational Operators and Expressions The if Statement The if-else.
1 Conditions Logical Expressions Selection Control Structures Chapter 5.
Programming in Java (COP 2250) Lecture 11 Chengyong Yang Fall, 2005.
1 Lecture 5: Selection Structures. Outline 2  Control Structures  Conditions  Relational Operators  Logical Operators  if statements  Two-Alternatives.
Chapter 3 Selections Liang, Introduction to Java Programming, Seventh Edition, (c) 2009 Pearson Education, Inc. All rights reserved
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 4: Control Structures I (Selection)
Instructor: Alexander Stoytchev CprE 185: Intro to Problem Solving (using C)
A First Book of ANSI C Fourth Edition Chapter 4 Selection.
Lecture 3 – Selection. Outline Recall selection control structure Types of selection One-way selection Two-way selection Multi-selection Compound statement.
Selection Relational Expressions A condition or logical expression is an expression that can only take the values true or false. A.
Week 3 - Wednesday.  What did we talk about last time?  Other C features  sizeof, const  ASCII table  printf() format strings  Bitwise operations.
Liang, Introduction to C++ Programming, (c) 2007 Pearson Education, Inc. All rights reserved X1 Chapter 3 Control Statements.
Programming 1 DCT 1033 Control Structures I (Selection) if selection statement If..else double selection statement Switch multiple selection statement.
CCSA 221 Programming in C CHAPTER 6 MAKING DECISIONS 1.
Selection-making Decisions Selection allows you to choose between two or more possible program flow --- it lets you make decisions in your program. Examples.
Quiz 3 is due Friday September 18 th Lab 6 is going to be lab practical hursSept_10/exampleLabFinal/
Flow of Control Chapter 3. Outline Branching Statements Java Loop Statements Programming with Loops The Type boolean.
Chapter 5: Control Structures I (Selection). Objectives In this chapter you will: Learn about control structures Examine relational and logical operators.
Chapter 4: Control Structures I (Selection). Objectives In this chapter, you will: – Learn about control structures – Examine relational and logical operators.
Control statements Mostafa Abdallah
Gator Engineering Copyright © 2008 W. W. Norton & Company. All rights reserved. 1 Chapter 3 Formatted Input/Output.
Chapter 7 Conditional Statements. 7.1 Conditional Expressions Conditions - compare the values of variables, constants and literals using one or more relational.
CMPSC 16 Problem Solving with Computers I Spring 2014 Instructor: Tevfik Bultan Lecture 4: Introduction to C: Control Flow.
CMSC 104, Version 9/011 Relational and Logical Operators Topics Relational Operators and Expressions The if Statement The if-else Statement Nesting of.
Programming Language C++ Lecture 3. Control Structures  C++ provides control structures that serve to specify what has to be done to perform our program.
Instructor: Alexander Stoytchev CprE 185: Intro to Problem Solving (using C)
CC213 Programming Applications Week #2 2 Control Structures Control structures –control the flow of execution in a program or function. Three basic control.
Instructor: Alexander Stoytchev CprE 185: Intro to Problem Solving (using C)
Chapter 7 Conditional Statements. 7.1 Conditional Expressions Condition – any expression that evaluates to true/false value Relational operators are BINARY.
Computer Science: A Structured Programming Approach Using C1 Objectives ❏ To understand how decisions are made in a computer ❏ To understand the logical.
OPERATORS IN C CHAPTER 3. Expressions can be built up from literals, variables and operators. The operators define how the variables and literals in the.
C++ for Engineers and Scientists Second Edition Chapter 4 Selection Structures.
Decision making If.. else statement.
Chapter 3 Selection Statements
Chapter 3 Control Statements
Selections Java.
Decisions Chapter 4.
Selection—Making Decisions
Chapter 3 Control Statements Lecturer: Mrs Rohani Hassan
Control Structures – Selection
Relational and Logical Operators
Relational and Logical Operators
Comparing Data & the ‘switch’ Statement
Relational and Logical Operators
Comparing Data & the ‘switch’ Statement
CprE 185: Intro to Problem Solving (using C)
Relational and Logical Operators
Lecture 9: Implementing Complex Logic
Presentation transcript:

Conditional Statements For computer to make decisions, must be able to test CONDITIONS IF it is raining THEN I will not go outside IF Count is not zero THEN the Average is Sum divided by Count Conditions specified using logical data

Outline II. Program Basics G. Expressions 3. Binary operators relational operators == != = logical operators && || ! 7. Logical data H. Statements 3. If 4. If-Else matching else 5. Switch default break

Logical Data in C no explicit logical type int and char values can be treated as logical values two possible logical values 0 or ‘\0’ - false anything else - true specific operators produce logical values

Logical Expressions Relational operators: –operators to compare two values –syntax: expr1 relop expr2 –expressions must be of same type (any) Logical operators: –operators to logically combine logical values –produce complex combinations of conditions –operators apply to logical values

Relational Operators

Relational Examples A: 4 B: 3 C: 2.5 A < B 0 (false) ‘A’ < ‘B’ 1 (true) When chars compared, ASCII codes compared ‘A’ != ‘a’ 1 (true) Note, expressions must be of same type But, implicit conversions will be done B > C 1 (true), B converted to float

Combined Expressions Complex combinations of operations can be used: 4 < < 5 1 (true) Why isn’t expression evaluated as (4 < 3) + 2? Relational operators have lower precedence than arithmetic operators, higher than assignment Have left-associativity Operator Precedence > = <= 10 = != 9

Complex Example 10 % 4 * <= / * <= / <= / <= <= <= <= 5 1 (true)

Logical Operators Simple (relational) logical expressions true or false depending on values compared Compound logical expressions built out of logical combinations of simple expressions Examples: “I am standing in a lecture hall AND the moon is made of green cheese” is false, but “I am standing in a lecture hall OR the moon is made of green cheese” is true

Logical Expression Syntax: LogExpr1 LogicalOp LogExpr2 (&& ||) LogicalOp LogExpr (!) (2 < 3) && (17 != 29) /* && - AND */ 1 && 1 /* true AND true */ 1 /* true */

AND (&&) and OR (||) AND (&&) of two logical expressions: resulting compound expression true when both expressions true OR (||) of two logical expressions: expression true when either expression true Truth table: E1 E2 E1 && E2 E1 || E2 1 (true) 1 (true) 1 (true) 0 (false) 0 (false) 1 (true) 0 (false) 1 (true) 0 (false) 0 (false)

Logical Examples month is 2, year is 1999 (month == 2) && ((year % 4) == 0) 1 (true) && ((year % 4) == 0) 1 && ( 3 == 0) 1 && 0 (false) 0 (false) day is 6 (day == 0) || (day == 6) 0 (false) || (day == 6) 0 || 1 (true) 1 (true)

Short-Circuit Aspect && and || are short-circuit operators - if the first operand determines the value, the second operand is not evaluated first operand of && is 0, result is 0 without evaluating second operand first operand of || is 1, result is 1 without evaluating second operand second operand evaluated when needed

Negation Arithmetic negation: - ( 4 * A * C ) Operator minus (-) negates numeric value Logical negation Logical operator (!) negates logical value E ! E 1 (true) 0 (false) 0 (false) 1 (true) Example: ! (3 > 4) ! 0 (false) 1 (true)

Complex Expressions Expressions can be built using arithmetic, relational and logical operators !((-5 >= -6.2) || (7 != 3) && (6 == (3 + 3))) operator precedence, associativity + - (unary) ! & * 15 right (typename) 14 right * / % 13 left + - (binary) 12 left = 10 left == != 9 left && 5 left || 4 left assignments 2 right

Example !((-5 >= -6.2) || (7 != 3) && (6 == (3 + 3))) !( 1 (true) || (7 != 3) && (6 == (3 + 3))) !( 1 || 1 (true) && (6 == (3 + 3))) !( 1 || 1 && (6 == 6 )) !( 1 || 1 && 1 (true) ) !( 1 || 1 (true) ) ! 1 (true) 0 (false)

Decision Making Problem: input two numbers and store the largest in Big Num1: 17 Num2: 53 Big: 53 Algorithm 1. Input Num1 and Num2 2. Store largest of Num1 and Num2 in Big 2.1 Store Num1 in Big 2.2 IF Num2 > Num1 THEN store Num2 in Big

IF Statement Syntax: if ( LogicalExpr ) Statement Program context: statement1; if (LogicalExpr) statement2; statement3; Order of execution: LogicalExpr 1 (true) 0 (false) statement1 statement2 statement3 statement3

Flow of Execution

Flow Chart for our Problem

Code for Solution int findMax(int Num1, int Num2) { int Big; Big = Num1; if (Num2 > Num1) Big = Num2; return Big; }

Trace of Solution Trace of findMax(17,53): Num1 Num2 Big statement ? Big = Num1; 17 if (Num2 > Num1) Big = Num2; 53 return Big;

Trace of Solution Trace of findMax(9,6): Num1 Num2 Big statement 9 6 ? Big = Num1; 9 if (Num2 > Num1) return Big;

Executing > 1 Statement in an If What if you want to execute > 1 stmt in If?

> 1 Stmt in an If Does this work? Statement1; If (LogicalExpr) Statement2; Statement3; P Statement4; Statement5; No, the indenting is irrelevant, section P is: If (LogicalExpr) Statement2; Statement3; Statement4;

> 1 Stmt in an If (A solution) Solution - use a compound statement: Statement1; If (LogicalExpr) { Statement2; Statement3; Statement4; } Statement5;

Statement in If Any statement reasonable as the single statement in if –expression statement assignment statement function call (printf, scanf, etc.) –compound statement –if statement

Two-Way Selection Sometimes desirable for statement to be executed when Logical Expression false

Two-Way Selection with If Possible to use combinations of if: Statement1; if (LogicalExpr) Statement2; if (!(LogicalExpr)) Statement3; Statement4; But not efficient

If-Else Statement Syntax: if ( LogicalExpr ) StatementA else StatementB

FindMax with If-Else int findMax(int Num1, int Num2) { int Big; Big = Num1; /* 1 assign + */ if (Num2 > Num1) Big = Num2; /* 1 test + */ return Big; /* maybe 1 assign */ } /* test plus 1 or 2 assigns */ int findMax(int Num1, int Num2) { int Big; if (Num2 > Num1) /* 1 test + */ Big = Num2; /* 1 assign or */ else Big = Num1; /* 1 assign */ return Big; } /* test plus 1 assign */

Using If-Else for Robustness float calcAverage(float sum, int count) { if (count == 0) return 0.0; else return sum / count; } Note return statement for each condition

Compound Statements and If-Else if ((year % 4) == 0) { printf(“Leap year\n”); numDays = 366; } else { printf(“Not a leap year\n”); numDays = 365; }

Programming Tip: Compound Stmt Does not hurt to always use compound statements for if, if-else statements if (LogicalExpr) { /* statement or statements */ } if (LogicalExpr) { /* statement(s) */ } else { /* statement(s) */ } Easy to add statements later

Programming Tip: Indenting Use indenting to make code more clear –indent statements in function definition to clearly identify body of function –indent statement(s) executed for if by fixed amount (2,3 chars) every time –for ifs within an if indent further –indent else statements(s) similarly –may want to make {,} match (on separate lines)

Programming Tip: Conditions Code most likely conditions first Code positive conditions where possible Code parts of solution executed most often first

Multiway Selection Multiway if more than 2 alternatives Example: Student Score Message 0-55 Failing Unsatisfactory Satisfactory If-Else has two alternatives, to do multiway, string together If-Else statements

Multiway Flow Chart

Multiway with If-Else if (score <= 55) printf(“Failing\n”); else if (score <= 65) printf(“Unsatisfactory\n”); else printf(“Satisfactory\n”);

Indenting If-Else Combinations Multiway if-else statements sometimes indented: if (score <= 55) printf(“Failing\n”); else if (score <= 65) printf(“Unsatisfactory\n”); else printf(“Satisfactory\n”); Rule for else: else matches most recent if

Conditions Checked in Reverse

Ordering Conditions if (score > 65) printf(“Satisfactory\n”); else if (score > 55) printf(“Unsatisfactory\n”); else printf(“Failing\n”); But must check conditions in correct order if (score > 55) printf(“Unsatisfactory\n”); else if (score > 65) printf(“Satisfactory\n”); else printf(“Failing\n”); Score of 70 would produce “Unsatisfactory”

Multiway with If Statements Possible but inefficient: if (score <= 55) printf(“Failing\n”); if ((score > 55) && (score <= 65)) printf(“Unsatisfactory\n”); if (score > 65) printf(“Satisfactory\n”);

Program Robustness Example assumes score in interval [0,100] but doesn’t check Add test: if ((score >= 0) && (score <= 100)) /* print message */ else printf(“Bad score: %d\n”,score);

Completed Code if ((score >= 0) && (score <= 100)) { if (score <= 55) printf(“Failing\n”); else if (score <= 65) printf(“Unsatisfactory\n”); else printf(“Satisfactory\n”); } else printf(“Bad score: %d\n”,score);

Nesting Example if (A > 0) if ((A % 2) == 0) S1 = S1 + A; else S2 = S2 + A; else if (A == 0) printf(“A zero\n”); else NS = NS + A; printf(“All done.\n”);

Matching Else Example

Matching Single Else Easy to make mistake if (X < 0) if (Y < 0) PosCount++; else NegCount++; Despite indenting, else matches wrong if PosCount updated when X = 0

Matching Single Else Solutions if (X < 0) if (Y < 0) PosCount++; else ; /* empty */ else NegCount++; if (X < 0) { if (Y < 0) PosCount++; } /* compound stmt */ else NegCount++; if (X >= 0) NegCount++; else if (Y < 0) PosCount++;

Choosing Conditions

Another Multiway Method Consider another grading problem: Score Grade 9-10 A 7-8 B 5-6 C 0-4 F if ((score == 9) || (score == 10)) grade = ‘A’; else if ((score == 7) || (score == 8)) grade = ‘B’; else if ((score == 5) || (score == 6)) grade = ‘C’; else grade = ‘F’;

Switch Statement More readable approach: switch statement switch (score) { case 9: case 10: grade = ‘A’; break; case 7: case 8: grade = ‘B’; break; case 5: case 6: grade = ‘C’; break; case 0: case 1: case 2: case3: case 4: grade = ‘F’; }

Switch Format switch ( Expression ) { case const1-1 : case const1-2 :... statement... case const2-1 : case const2-2 :... statement... default:... statement... }

Switch Rules Expression must be integral type (no float) Case labels must be constant values No two case labels with same value Two case labels can be associated with same set of statements Default label is not required At most one default label

Switch Rules Evaluating –determine value of expression –look for corresponding label –if no corresponding label look for default –if no corresponding label or default, do nothing –execute all statements from label to } ALL statements from label to } ???

Executing Switch Example switch (score) { case 9: case 10: grade = ‘A’; case 7: case 8: grade = ‘B’; case 5: case 6: grade = ‘C’; } score is 9: grade = ‘A’ grade = ‘B’ grade = ‘C’ score is 7: grade = ‘B’ grade = ‘C’ score is 5: grade = ‘C’ not quite what we want

The break Statement break used to indicate a set of statements is finished (and no more should be executed) syntax: break; break says to stop executing and go to the next } (skipping any statements in between) add after each set of cases

default case The default case can be used to deal with robustness issues (score is 10) switch (score) { case 9: case 10: grade = ‘A’; break; case 7: case 8: grade = ‘B’; break; case 5: case 6: grade = ‘C’; break; case 0: case 1: case 2: case3: case 4: grade = ‘F’; break; default: printf(“Bad score %d\n”,score); }

Other Expression Types Any integral type can be used as expression Cases must match char married; switch (married) { case ‘S’: case ‘s’: printf(“single”); break; case ‘D’: case ‘d’: printf(“divorced”); break; case ‘M’: case ‘m’: printf(“married”); }

When Not to Use Switch Example: Case 0 <= X <= 100 switch (x) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: … case 100: … } Better to use nested ifs