CHAPTER 5: Decision Making and Looping CSEB113 PRINCIPLES of PROGRAMMING by Badariah Solemon 1BS (Sept 2013)
Topics 1.Decision making using: – Simple if selection – Simple if…else selection and ?: conditional operator – Handling multiple conditions – Nested if…else selection – if…else if selection – switch selection 2.Looping: – Design: Counter-controlled vs Sentinel-controlled – Using while loop – Using do…while loop – Using for loop 3.Data validation in selection and repetition structures 4.Combinations of control structures 5.Using continue and break statements 2BS (Sept 2013)
DECISION MAKING Topic 1 BS (Sept 2013)3
Intro to Decision Making Identify IOFC for the following problem statement: Now, add the following three conditions/ constraints: 1.The value of height must be more than zero 2.The value of width must be more than zero 3.The value of length must be more than zero Because of those conditions, before the program calculates the swimming pool’s volume, we must make it DECIDE that all conditions have been met. We can get our programs to make decisions of this sort using Selection Structure BS (Sept 2013)4 A swimming pool is shaped like a big box. Write a program to find the volume of the swimming pool.
What is Selection Structure? Take actions depending on the outcome of a condition. A condition is a logical expression that is either True or False. General forms of selection structure (SYNTAX): BS (Sept 2013)5 if (condition) then-statement ; else else-statement ; if( condition ) then-statement ; ( condition )? then-statement : else-statement ; if (condition) then-statement ; else if (condition) elseif-statement ; … else else-statement ; switch ( ControlVariable ) { case constant 1 : statement ; break; case constant-n : statement ; break; default : statement ; }
SIMPLE if SELECTION Topic 1-1 BS (Sept 2013)6
if Selection Is used when a statement or a group of statements is to be executed when the logical expression of the condition is TRUE. Syntax: – The expression of the condition must be specified using Relational and Equality operators as follows: BS (Sept 2013)7 if ( condition ) single then-statement ; if ( condition ) single then-statement ; No semicolon at the end of the if statement. TypeOperatorMeaningExample expression Result if x=5 and y=4 Relational > x is greater than y x > y 5 > 4 is TRUE < x is less than y x < y 5 < 4 is FALSE >= x is greater than or equal to y x >= y 5 >= 4 is TRUE <= x is less than or equal to y x <= y 5 <= 4 is FALSE Equality == x is equal to y x == y 5 == 4 is FALSE != x is not equal to y x != y 5 != 4 is TRUE an expression that can return true or false
Example – Relational Operator 1 Case – Swimming Pool’s Volume: This algorithm is refined by making the program decide that the following condition is met: 1)The value of height must be more than zero BS (Sept 2013)8 Begin SET height=0.0, length=0.0, width=0.0, volume=0.0 INPUT height, length, width if height > 0 COMPUTE: volume = height * length * width End if OUTPUT volume End Begin SET height=0.0, length=0.0, width=0.0, volume=0.0 INPUT height, length, width if height > 0 COMPUTE: volume = height * length * width End if OUTPUT volume End INPUT height, length, width INPUT height, length, width COMPUTE volume = height * length * width COMPUTE volume = height * length * width OUTPUT volume Begin End IF height > 0? TF SET height=0.0, length=0.0, width=0.0, volume=0.0 SET height=0.0, length=0.0, width=0.0, volume=0.0
Example – Relational Operator 2 Based on the refined algorithm, the program is as follows: BS (Sept 2013)9
if with Compound Statements In the example that we have seen so far, there is only one statement to be executed after the if statement. To execute more than one statement after the condition is satisfied, we have to put curly braces { } around those statements. Syntax: Example: BS (Sept 2013)10 if (height > 0) { printf(“Calculating volume\n”); volume = height * length * width; } if (height > 0) { printf(“Calculating volume\n”); volume = height * length * width; } COMPUTE volume = height * length * width COMPUTE volume = height * length * width IF height > 0? TF OUTPUT message if ( condition ) { multiple then-statements; } if ( condition ) { multiple then-statements; }
Example – Equality Operator This example demonstrates the use of equality operators == and != Note that == is different that =. Why? BS (Sept 2013)11 INPUT status INPUT status OUTPUT “Mechanical” OUTPUT “Mechanical” IF status == ‘m’? TF OUTPUT “Civil” IF status == ‘p’? TF char status; printf(“Enter membership status (m or p):”); scanf(“%c”, &status); if (status == ‘m’) printf(“Mechanical\n”); //end-if if (status == ‘p’) printf(“Civil\n”); //end-if
Test Your Skill What is the output of this program? the If values entered are: a)789 and 12 b)44 and 44 c)3 and 9901 BS (Sept 2013)12
SIMPLE if…else SELECTION Topic 1-2 BS (Sept 2013)13
Simple if..else Is used when a statement or group of statements is to be executed when the logical expression of the condition is FALSE. Syntax: Example: BS (Sept 2013)14 if ( condition ) Single then-statement ; else Single else-statement ; if ( condition ) Single then-statement ; else Single else-statement ; if (height> 0) volume = height* length * width; else printf(“Invalid value!\n”); if (height> 0) volume = height* length * width; else printf(“Invalid value!\n”); COMPUTE volume = height * length * width COMPUTE volume = height * length * width OUTPUT error message OUTPUT error message IF height > 0? TF No semicolon at the end of the if and else.
if…else with Compound Statements put curly braces { } around a group of statements Syntax: Example: BS (Sept 2013)15 if ( condition ) { Multiple then-statements ; } else { Multiple else-statements ; } if ( condition ) { Multiple then-statements ; } else { Multiple else-statements ; } if (height > 0) { printf(“Calculating volume\n”); volumne = height * length * width; } else { printf(“Invalid value!\n”); volume = 0.0; } //end-if-else if (height > 0) { printf(“Calculating volume\n”); volumne = height * length * width; } else { printf(“Invalid value!\n”); volume = 0.0; } //end-if-else COMPUTE volume = height * length * width COMPUTE volume = height * length * width IF height > 0? TF OUTPUT message SET volume = 0.0 SET volume = 0.0 OUTPUT error message
Other Variations of Syntax of if…else 1 BS (Sept 2013)16 1.With one then-statement and multiple else- statements. Syntax: if ( condition ) Single then-statement; else { Multiple else-statements ; } if ( condition ) Single then-statement; else { Multiple else-statements ; } if (height > 0) volume = height * length * width; else { printf(“Invalid value!\n”); volume = 0.0; flag = ‘I’; } //end-if if (height > 0) volume = height * length * width; else { printf(“Invalid value!\n”); volume = 0.0; flag = ‘I’; } //end-if COMPUTE volume = height * length * width COMPUTE volume = height * length * width IF height > 0? TF SET volume = 0.0 SET volume = 0.0 OUTPUT error message OUTPUT error message SET flag = ‘I’ SET flag = ‘I’ Example:
Other Variations of Syntax of if…else 2 BS (Sept 2013)17 if ( condition ) { Multiple then-statements ; } else single else-statement ; if ( condition ) { Multiple then-statements ; } else single else-statement ; 2.With multiple then-statements and one else- statement. Syntax: if (height > 0) { volume = height * length * width; flag = ‘V’; } else printf(“Invalid value!\n”); //end-if-else if (height > 0) { volume = height * length * width; flag = ‘V’; } else printf(“Invalid value!\n”); //end-if-else Example: COMPUTE volume = height * length * width COMPUTE volume = height * length * width height > 0? TF OUTPUT error message SET flag = ‘V’ SET flag = ‘V’
Effect of Omitting { } This what might happens if the { } are omitted BS (Sept 2013)18 int score; printf(“Enter the score: ”); scanf(“%d”,&score); if (score >= 60) { printf(“You have done very well\n”); printf(“I’ll give you a present\n”); } else printf(“You have failed the course\n”); printf(“Sorry no present for you\n”); printf(“Go and study more”); int score; printf(“Enter the score: ”); scanf(“%d”,&score); if (score >= 60) { printf(“You have done very well\n”); printf(“I’ll give you a present\n”); } else printf(“You have failed the course\n”); printf(“Sorry no present for you\n”); printf(“Go and study more”); Enter the score: 75 You have done very well I’ll give you a present Sorry no present for you Go and study more
Test Your Skill What happens if we omit the { }? BS (Sept 2013)19 int score; printf(“Enter the score: ”); scanf(“%d”,&score); if (score >= 60) printf(“You have done very well\n”); printf(“I’ll give you a present\n”); else { printf(“You have failed the course\n”); printf(“Sorry no present for you\n”); printf(“Go and study more”); } int score; printf(“Enter the score: ”); scanf(“%d”,&score); if (score >= 60) printf(“You have done very well\n”); printf(“I’ll give you a present\n”); else { printf(“You have failed the course\n”); printf(“Sorry no present for you\n”); printf(“Go and study more”); }
Conditional Operator ( ? : ) Used to simplify an if…else statement. Syntax: The statement above is equivalent to: BS (Sept 2013)20 ( condition) ? Single then-statement : single else-statement; if (condition) single then-statement; else single else-statement; if (condition) single then-statement; else single else-statement;
Example 1 if…else statement: Conditional statement: BS (Sept 2013)21 if (total > 60) printf("Passed!!\n"); else printf("Failed!!\n"); if (total > 60) printf("Passed!!\n"); else printf("Failed!!\n"); printf("%s!!\n", total > 60? "Passed" : "Failed"); total > 60 ? printf("Passed\n") : printf(“Failed\n"); OUTPUT “Failed” IF total > 0? TF OUTPUT “Passed” OR
Example 2 BS (Sept 2013)22 #include void main(void) { char grade; int marks; printf("Enter marks"); scanf("%d\n", &marks); grade = (marks > 60)? 'P': 'F'; printf("\nGrade = %c\n", grade); } #include void main(void) { char grade; int marks; printf("Enter marks"); scanf("%d\n", &marks); grade = (marks > 60)? 'P': 'F'; printf("\nGrade = %c\n", grade); } (marks > 60)? printf("%c",'P'): printf("%c",'F');
HANDLING MULTIPLE CONDITIONS Topic 1-3 BS (Sept 2013)23
Multiple Conditions – Box’s Volume Case Re-call that in the Swimming Pool’s Volume Case problem, we have identified three conditions/ constraints: 1.The value of height must be more than zero 2.The value of width must be more than zero 3.The value of length must be more than zero So far, we have handled only the first condition in these statements : We can get our program to check multiple conditions in one logical expression, using logical operator &&. Example: BS (Sept 2013)24 if (height > 0) volume = height * length * width; if (height > 0) volume = height * length * width; if (height > 0 && length > 0 && width > 0) volume = height * length * width if (height > 0 && length > 0 && width > 0) volume = height * length * width
Logical Operators To connect two conditions: BS (Sept 2013)25 OperatorRead asEvaluationExample &&ANDAll the conditions must be true for the whole expression to be true. if (x == 10 && y == 9) The if condition is true only when value x is 10, AND value of y is 9. ||ORThe truth of one condition is enough to make the whole expression true if (x == 10 || y == 9) The if condition is true when either one of x OR y has the right value. !NOTReverse the meaning of a condition if (!(points > 90)) Means if points NOT bigger than 90
Results of a Logical Expression Each logical expression with multiple conditions has either True or False value, depending of the value of each condition in it. This table lists possible result of a logical expression. Symbols A and B indicate conditions. BS (Sept 2013)26 ABA && BA || B!A!B True False TrueFalse TrueFalseTrue FalseTrueFalseTrue False True
Example BS (Sept 2013)27 #include void main ( ) { int x=5, y=0; printf(“x=%d y=%d\n\n”, x,y); if (x>0 && y>=0) printf(“x greater than zero and ” “y greater than or equal to zero\n\n”); if (x==0 || y==0) printf(“x and y equal to zero\n\n”); if (!(x==y)) printf(“x is not equal to y\n”); } #include void main ( ) { int x=5, y=0; printf(“x=%d y=%d\n\n”, x,y); if (x>0 && y>=0) printf(“x greater than zero and ” “y greater than or equal to zero\n\n”); if (x==0 || y==0) printf(“x and y equal to zero\n\n”); if (!(x==y)) printf(“x is not equal to y\n”); } x=5 y=0 x greater than zero and y greater than or equal to zero x and y equal to zero X is not equal to y
Test Your Skill What is the output of this program? If input data are: – f 25 - m 25 - F 25 - M 25 – f 17 - m 17 - F 17 - M 17 BS (Sept 2013)28 #include void main ( ) { char gender; int age=0; float loan=0.0; printf(“Enter your gender (f/F or m/M) and age:”); scanf(“%c %d”, &gender, &age); if (gender == ‘f’ && age > 20) { car_loan = ; printf(“Your car loan is %.2f\n”, loan); printf(“Well done.\n”); } #include void main ( ) { char gender; int age=0; float loan=0.0; printf(“Enter your gender (f/F or m/M) and age:”); scanf(“%c %d”, &gender, &age); if (gender == ‘f’ && age > 20) { car_loan = ; printf(“Your car loan is %.2f\n”, loan); printf(“Well done.\n”); }
Evaluating Multiple Operators in a Logical Expression The C rules for evaluating logical expression with multiple mix of operators are parentheses rule, precedence rule and associativity rule. For a complete list, refer to Appendix C (Hanly &Koffman ) BS (Sept 2013)29 PrecedenceOperationAssociativity Highest (evaluated first) Lowest (evaluated last) [ ] ( ) ! = == != && || ? : LLLLLLRLLLLLLR
Example BS (Sept 2013)30 #include void main ( ) { int a=8, b=-3, c=0, x=0; if(a) printf(“a=%d, !a=%d\n”, a, !a); if(b) printf(“b=%d, !b=%d\n”, a, !a); if(c) printf(“Never gets printed\n”); else printf(“c=%d, !c=%d\n”, c, !c); if (a>b && B>c || a==b) printf(“Answer is TRUE\n”); else printf(“Answer is FALSE\n”); x = a>b || b>c && a==b; printf(“x=%d, !x=%d\n”, x, !x); } #include void main ( ) { int a=8, b=-3, c=0, x=0; if(a) printf(“a=%d, !a=%d\n”, a, !a); if(b) printf(“b=%d, !b=%d\n”, a, !a); if(c) printf(“Never gets printed\n”); else printf(“c=%d, !c=%d\n”, c, !c); if (a>b && B>c || a==b) printf(“Answer is TRUE\n”); else printf(“Answer is FALSE\n”); x = a>b || b>c && a==b; printf(“x=%d, !x=%d\n”, x, !x); } Single variable – returns True or False based on its value -0 : False - 1(non-zero): True Single variable – returns True or False based on its value -0 : False - 1(non-zero): True a=8 !a=0 b=-3 !a=0 c=0 !c=1 Answer is FALSE x=1 !x=0 logical expression – returns True or False and the result can be assigned to an integer variable logical expression – returns True or False and the result can be assigned to an integer variable
NESTED if…else SELECTION Topic 1-4 BS (Sept 2013)31
What is Nested if..else ? if and if…else contained in another if…else selection. However, as if…else statements become nested, programs become harder to understand. – To improve readability, indent each pair of if…else statement Example syntax (*numbers of ‘if’s and the numbers of ‘else’s are not necessarily equal) : BS (Sept 2013)32 if ( outer-condition ) { … //if outer is True, execute this block if ( inner1-condition ) { inner1 -then-statement ; } //if inner1 is True, execute this block else { inner1-else-statement n ; } //if inner1 is False, execute this block } else { … //if outer is False, execute this block if ( inner2-condition ) { inner 2-then-statement ; } //if inner2 is True, execute this block else { inner2-else-statement n ; } //if inner2 is False, execute this block } if ( outer-condition ) { … //if outer is True, execute this block if ( inner1-condition ) { inner1 -then-statement ; } //if inner1 is True, execute this block else { inner1-else-statement n ; } //if inner1 is False, execute this block } else { … //if outer is False, execute this block if ( inner2-condition ) { inner 2-then-statement ; } //if inner2 is True, execute this block else { inner2-else-statement n ; } //if inner2 is False, execute this block }
Example BS (Sept 2013)33 #include void main ( ) { int day=0, time=0; printf(“Enter day and time: ”); scanf(“%d %d”, &day, &time); if (day>0 && day<=6) { if (time<=900) printf(“\nSleep\n”); else { if (time <=1900) printf(“\nWork\n”); else printf(“\nRelax\n”); } else { if (time<=1100) printf(“\nSleep\n”); else printf(“\nHave fun\n”); } #include void main ( ) { int day=0, time=0; printf(“Enter day and time: ”); scanf(“%d %d”, &day, &time); if (day>0 && day<=6) { if (time<=900) printf(“\nSleep\n”); else { if (time <=1900) printf(“\nWork\n”); else printf(“\nRelax\n”); } else { if (time<=1100) printf(“\nSleep\n”); else printf(“\nHave fun\n”); } Enter day and time: Relax Draw a flowchart for this program
if…else if SELECTION Topic 1-5 BS (Sept 2013)34
What is if…else if selection? BS (Sept 2013)35 if (score >= 90) printf(“A\n”); else if (score >= 80) printf(“B\n”); else if (score >= 70) printf(“C\n”); else if (score >= 60) printf(“D\n”); else printf(“F\n”); // end-if-else-if if (score >= 90) printf(“A\n”); else if (score >= 80) printf(“B\n”); else if (score >= 70) printf(“C\n”); else if (score >= 60) printf(“D\n”); else printf(“F\n”); // end-if-else-if One type of nested selection structure If any one of the condition is already satisfied, the other conditions will be ignored completely. IF score>=90? TF OUTPUT “A” OUTPUT “A” IF score>=80? IF score>=60? IF score>=70? TF TF OUTPUT “F” OUTPUT “F” OUTPUT “C” OUTPUT “C” OUTPUT “B” OUTPUT “B” OUTPUT “D” OUTPUT “D” FT
Re-writing if…else if if..else if statements can be re-written to multiple single if statements. But this applies to condition that uses equality operator only. Example: BS (Sept 2013)36 … if (number == 1) printf(“One\n”); else if (number == 2) printf(“Two\n”); else if (number == 3) printf(“Three\n”); else printf(“Others\n”); Enter the score: 2 Two Enter the score: 2 Two … if (number == 1) printf(“One\n”); if (number == 2) printf(“Two\n”); if (number == 3) printf(“Three\n”); if (number 3) printf(“Others\n”);
Test Your Skill 1 1)What are the outputs of these programs segments? If value of score entered is 85 2)What’s the effect of re-writing the above if..else if statements to multiple if statements? BS (Sept 2013)37 if (score >= 90) printf(“A\n”); else if (score >= 80) printf(“B\n”); else if (score >= 70) printf(“C\n”); else if (score >= 60) printf(“D\n”); else printf(“F\n”); if (score >= 90) printf(“A\n”); else if (score >= 80) printf(“B\n”); else if (score >= 70) printf(“C\n”); else if (score >= 60) printf(“D\n”); else printf(“F\n”); if (score >= 90) printf(“A\n”); if (score >= 80) printf(“B\n”); if (score >= 70) printf(“C\n”); if (score >= 60) printf(“D\n”); if (score < 60) printf(“F\n”); if (score >= 90) printf(“A\n”); if (score >= 80) printf(“B\n”); if (score >= 70) printf(“C\n”); if (score >= 60) printf(“D\n”); if (score < 60) printf(“F\n”);
Test Your Skill 2 3)Write a program that prompts the users to enter the value of Ritcher scale number (n), and print its equivalent effect as a message to the users based on the following table: BS (Sept 2013)38
switch SELECTION Topic 1-6 BS (Sept 2013)39
switch Statement A switch statement is used to choose one choice from multiple cases and one default case. Syntax: BS (Sept 2013)40 switch ( ControlVariable ) { case constant 1 : statement ; break; case constant-n : statement ; break; default: statement; } switch ( ControlVariable ) { case constant 1 : statement ; break; case constant-n : statement ; break; default: statement; } The break statement is needed so that once a case has been executed, it will skip all the other cases and go outside the switch statement. The default clause is executed if the cases are not met.
Rules for switch Statement 1.The value for ‘case’ must be integer or character only. – Examples: 2.The value checked in each ‘case’ must be constant only and not values in range. BS (Sept 2013)41 switch (color) { case ‘R’ : colorstr = ‘r’; break; } switch (color) { case ‘R’ : colorstr = ‘r’; break; } switch (number) { case 1 : num += 2; break; } switch (number) { case 1 : num += 2; break; } The value for each case is followed by colon (:). if (number==1) num += 2; if (number==1) num += 2; if (color==‘R’) colorstr = ‘r’; if (color==‘R’) colorstr = ‘r’; case 1 : √ case >= 1 : X
Example #include void main() { int num; printf(“Enter number:"); scanf("%d", &num); switch (num) { case 1: printf("Bad (D)\n");break; case 2: printf("Good (C)\n");break; case 3: printf("Excellent (A)\n");break; default: printf(“False grade\n"); } #include void main() { int num; printf(“Enter number:"); scanf("%d", &num); switch (num) { case 1: printf("Bad (D)\n");break; case 2: printf("Good (C)\n");break; case 3: printf("Excellent (A)\n");break; default: printf(“False grade\n"); } BS (Sept 2013)42 Enter number: 3 Excellent (A) CASE 1? TF OUTPUT “Bad (D)” OUTPUT “Bad (D)” CASE 3? CASE 2? TF OUTPUT “False grade” OUTPUT “False grade” OUTPUT “Good (C)” OUTPUT “Good (C)” OUTPUT “Excellent (A)” OUTPUT “Excellent (A)” FT The logic of this switch selection is similar to if…else if
Omitting break Statement BS (Sept 2013)43 #include void main() { int majorCode; printf("Enter your majoring code: "); scanf("%d", &majorCode); switch(majorCode) { case 1 : case 3 : case 5 : printf(“\nScience Student\n”); break; case 2 : case 4 : printf(“\nArt Student\n”); } /* end_switch */ } #include void main() { int majorCode; printf("Enter your majoring code: "); scanf("%d", &majorCode); switch(majorCode) { case 1 : case 3 : case 5 : printf(“\nScience Student\n”); break; case 2 : case 4 : printf(“\nArt Student\n”); } /* end_switch */ } If the break statement is omitted, the execution will be carried out to the next alternatives until the next break statement is found. Enter your majoring code: 3 Science Student
Example Observe the equivalent logical expression. What can you conclude from these two program segments? BS (Sept 2013)44 char grade; printf(“Enter the grade you scored:”); scanf(“%c”,&grade); switch (grade) { case ‘a’: case ‘A’: printf(“Excellent!!\n”); printf(“You brilliant..\n”); break; case ‘b’: case ‘B’: printf(“Job well done!!\n”); printf(“You deserve it..\n”); break; default: printf(“undefined grade\n”); } char grade; printf(“Enter the grade you scored:”); scanf(“%c”,&grade); switch (grade) { case ‘a’: case ‘A’: printf(“Excellent!!\n”); printf(“You brilliant..\n”); break; case ‘b’: case ‘B’: printf(“Job well done!!\n”); printf(“You deserve it..\n”); break; default: printf(“undefined grade\n”); } if (grade == ‘a’ || grade == ‘A’) { printf(“Excellent!!\n”); printf(“You brilliant..\n”); } else if (grade == ‘b’ || grade == ‘B’) { printf(“Job well done!!\n”); printf(“You deserve it..\n”); } else printf(“undefined grade\n”); if (grade == ‘a’ || grade == ‘A’) { printf(“Excellent!!\n”); printf(“You brilliant..\n”); } else if (grade == ‘b’ || grade == ‘B’) { printf(“Job well done!!\n”); printf(“You deserve it..\n”); } else printf(“undefined grade\n”);
Test Your Skill 1.Using switch statement, write a program that reads a positive integer number between 1 to 5, and prints the word equivalent to it. For example, if the user enters 5, the program should print the word “Five” to the screen. BS (Sept 2013)45
LOOPING Topic 2 BS (Sept 2013)46
Intro to Looping BS (Sept 2013)47 Re-call the Swimming Pool’s Volume problem: Before this, we’ve learned to get our program to make decisions using Selection Structure. With the program, when a user key-in values of height, length, and width the computer will output the volume for one pool. However, to calculate the volume for 100 pools, the user would need to execute this program 100 times! So, the method by which it is possible to repeat processing without executing the program or writing the same statements over and over is called Looping or Iteration using Repetition Structure. A swimming pool is shaped like a big box. Write a program to find the volume of the swimming pool.
What is Repetition Structure? Used to repeat a block of statements a number of times (loop) until a certain condition is met without having to write the same statements multiple times. Two design of loops: BS (Sept 2013)48 To execute a number of instructions from the program for a finite, pre- determined number of time Loop depends of arithmetic or conditional expression. To execute a number of instructions from the program for a finite, pre- determined number of time Loop depends of arithmetic or conditional expression. Counter-controlled To execute a number of instructions from the program indifinitely until the user tells it to stop or a special condition is met Loop depends on a sentinel value. To execute a number of instructions from the program indifinitely until the user tells it to stop or a special condition is met Loop depends on a sentinel value. Sentinel-controlled
Types of Looping BS (Sept 2013)49 InitializationExpression while ( condition ){ LoopBody-statement(s) UpdateExpression } InitializationExpression while ( condition ){ LoopBody-statement(s) UpdateExpression } do { LoopBody-statement(s) UpdateExpression } while ( condition ); do { LoopBody-statement(s) UpdateExpression } while ( condition ); for ( InitializationExp ; Condition ; UpdateExp ){ LoopBody-statement(s) ; } for ( InitializationExp ; Condition ; UpdateExp ){ LoopBody-statement(s) ; } 1 1 while 2 2 do…while 3 3 for Exp = Expression NO semicolon (;)
COUNTER-CONTROLLED LOOP DESIGN Topic 2-1 BS (Sept 2013)50
The Concept BS (Sept 2013)51 To execute a number of instructions from the program for a finite, pre- determined number of time Loop depends of arithmetic or conditional expression. To execute a number of instructions from the program for a finite, pre- determined number of time Loop depends of arithmetic or conditional expression. Counter-controlled while do…while for Looping (Repetition Structure) Sentinel-controlled
while Statement Syntax: As long as the condition is met (returns true ), the statement inside the while loop will always get executed. When the condition is no longer met (returns false ), the program will continue on with the next instruction (the one after the while loop). BS (Sept 2013)52 InitializationExpression while ( condition ) { LoopBody statement(s) UpdateExpresssion } InitializationExpression while ( condition ) { LoopBody statement(s) UpdateExpresssion } an expression that can return true or false
1. Counter-controlled while Loop Used to execute a number of instructions from the program for a finite, pre-determined number of time Loop depends of arithmetic or conditional expression. BS (Sept 2013)53... int total = 1; while (total <= 3) { printf(“Total = %d\n”, total); total++; } x++;... int total = 1; while (total <= 3) { printf(“Total = %d\n”, total); total++; } x++;... total is the loop controlvariable In this case, this loop will keep on looping until the counter total variable is 5. Once value of total is 6, the loop will terminate WHILE total <= 3? TF SET total++ SET total=1 OUTPUT total x++ Total = 1 Total = 2 Total = 3
Example 1 BS (Sept 2013)54 #include main ( ) { printf(“Hello World\n”); } #include main ( ) { printf(“Hello World\n”); } #include main () { int num = 1; while(num < 6) { printf("Hello World\n"); num++; } #include main () { int num = 1; while(num < 6) { printf("Hello World\n"); num++; } Hello World WHILE num < 6? TF SET num++ SET num=1 OUTPUT “Hello World” End Begin
Example 2 You may allow the user to set the number of iteration as shown in example below : BS (Sept 2013)55 #include void main (void) { int counter=1, n=0; printf(“Number of iteration?: “); scanf(“%d”, &n); while(counter <= n) { printf("Hello World\n"); counter++; } // in this example the output varies depending on the value of n entered by the user #include void main (void) { int counter=1, n=0; printf(“Number of iteration?: “); scanf(“%d”, &n); while(counter <= n) { printf("Hello World\n"); counter++; } // in this example the output varies depending on the value of n entered by the user WHILE counter < n? TF SET counter++ SET counter=1, n=0 OUTPUT “Hello World” End Begin INPUT n
Test Your Skill 1)For the following code segment: – How many times will the while loop body be executed? – What will be the end values computed for the variables sum and count ? 2)Write a program that reads 3 integer numbers and prints the sum of the numbers. Repeat the reading and printing processes 10 times using while loop. BS (Sept 2013)56 sum =0; count = 2; while (count <= 5) { sum = sum + count; count = count + 3; } sum =0; count = 2; while (count <= 5) { sum = sum + count; count = count + 3; }
do…while LOOP Topic 2-2 BS (Sept 2013)57
2. Counter-controlled do…while Loop Syntax: the LoopBody-statement inside it will be executed once no matter what. Then only the condition will be checked to decide whether the loop should be executed again or just continue with the rest of the program. BS (Sept 2013)58 do { LoopBody-statement(s) UpdateExpression } while ( condition ); do { LoopBody-statement(s) UpdateExpression } while ( condition ); Semicolon here is a MUST NO semicolon
Example 1 BS (Sept 2013)59 #include main ( ) { printf(“Hello World\n”); } #include main ( ) { printf(“Hello World\n”); } #include main () { int num = 1; do { printf("Hello World\n"); num++; } while(num <=5); } #include main () { int num = 1; do { printf("Hello World\n"); num++; } while(num <=5); } End Begin WHILE num <= 5? TF SET num++ SET num=1 OUTPUT “Hello World” Hello World
Example 2 You may allow the user to set the number of iteration as shown in example below : BS (Sept 2013)60 #include void main (void) { int counter=1, n=0; printf(“Number of iteration?: “); scanf(“%d”, &n); do { printf("Hello World\n"); counter++; } while(counter <= n); } // in this example the output varies depending on the value of n entered by the user #include void main (void) { int counter=1, n=0; printf(“Number of iteration?: “); scanf(“%d”, &n); do { printf("Hello World\n"); counter++; } while(counter <= n); } // in this example the output varies depending on the value of n entered by the user INPUT n End Begin WHILE counter <= n? TF SET counter++ SET counter=1, num=1 OUTPUT “Hello World”
while Loop vs do..while Loop BS (Sept 2013)61 int total = 10; while (total < 10) { printf(“Total = %d\n”, total); total++; } printf(“Bye”); int total = 10; while (total < 10) { printf(“Total = %d\n”, total); total++; } printf(“Bye”); int total = 10; do { printf(“Total = %d\n”, total); total++; } while (total < 10); printf(“Bye”); int total = 10; do { printf(“Total = %d\n”, total); total++; } while (total < 10); printf(“Bye”); WHILE total < 10? TF SET total++ SET total=10 OUTPUT total OUTPUT “Bye” WHILE total < 10? TF SET total++ SET total=10 OUTPUT total OUTPUT “Bye” while loop do…while loop
Test Your Skill 1.For the following code fragment: – How many times will the do…while loop body be executed? – What will be the end values computed for the variables sum and count ? 2. Re-write the program that reads 3 integer numbers and prints the sum of the numbers, which keeps on repeating the reading and printing processes 10 times using do…while loop. BS (Sept 2013)62 sum =0; count = 2; do { sum = sum + count; count = count + 3; } while (count <= 5); sum =0; count = 2; do { sum = sum + count; count = count + 3; } while (count <= 5);
Syntax: InitializationExp : initialize the loop control variable Condition : determine whether the condition or test expression returns True or false UpdateExp : change value of the loop control variable at the end of each loop BS (Sept 2013)63 3. Counter-controlled for Loop for ( InitializationExp ; Condition ; UpdateExp ) single LoopBody-statement ; for ( InitializationExp ; Condition ; UpdateExp ) single LoopBody-statement ; MUST semicolons NO semicolon for ( InitializationExp ; Condition ; UpdateExp ) { LoopBody-statement(s) ; } for ( InitializationExp ; Condition ; UpdateExp ) { LoopBody-statement(s) ; }
Example 1 Example: BS (Sept 2013)64 int total; for (total = 1; total <= 3; total++) printf(“Total = %d\n”, total); int total; for (total = 1; total <= 3; total++) printf(“Total = %d\n”, total); Control variable FOR total <= 3? TF SET total++ SET total=1 OUTPUT total Total = 1 Total = 2 Total = 3
Example 2 You may allow the user to set the number of iteration as shown in example below : BS (Sept 2013)65 #include void main (void) { int counter=1, n=0; printf("Number of iteration?: "); scanf("%d", &n); for(counter=1; counter<=n; counter+++) printf("Hello World\n"); } // in this example the output varies depending on the value of n entered by the user #include void main (void) { int counter=1, n=0; printf("Number of iteration?: "); scanf("%d", &n); for(counter=1; counter<=n; counter+++) printf("Hello World\n"); } // in this example the output varies depending on the value of n entered by the user FOR counter <= n? TF SET counter++ SET counter=1, n=0 OUTPUT “Hello World” End Begin INPUT n
while Loop vs. for Loop 1 BS (Sept 2013)66 int total = 1; while (total <= 3) { printf(“Total = %d\n”, total); total++; } printf(“Bye”); int total = 1; while (total <= 3) { printf(“Total = %d\n”, total); total++; } printf(“Bye”); WHILE total <= 3? TF SET total++ SET total=1 OUTPUT value of total OUTPUT “Bye” int total; for(total=1; total<=3; total++) { printf(“Total = %d\n”, total); } printf(“Bye”); int total; for(total=1; total<=3; total++) { printf(“Total = %d\n”, total); } printf(“Bye”); FOR total <= 3? TF SET total++ SET total=1 OUTPUT value of total OUTPUT “Bye” Both produce same output and have similar order of execution! Because using a for loop is just another way of writing a while loop. Both produce same output and have similar order of execution! Because using a for loop is just another way of writing a while loop.
while Loops vs. for Loops 2 Although the two are similar in their order of execution, they are different as follows: BS (Sept 2013)67 Itemfor loopwhile loop Initialization expression Is one of the loop expressionsMust be given prior to the loop Condition (or test expression ) Is one of the loop expressions Update expressionIs one of the loop expressionsMust be in the loop body When number of iteration is known Is very convenientIs less convenient When number of iteration is unknown Is less convenientIs ver y convenient
Omitting for Loop Expressions It is also possible to omit one or more of the for loop expressions. HOW? Example: BS (Sept 2013)68 int num=1; for (;num<=5;num++) { printf("Hello World\n"); } int num=1; for (;num<=5;num++) { printf("Hello World\n"); } 1.Assign initial value to control variable 2.Place semicolon without the expression
SENTINEL-CONTROLLED LOOPS Topic 2-2 BS (Sept 2013)69
Sentinel-Controlled Loop Design Counter control loop is used when we know beforehand how many iteration that the loop should execute. There will be cases where we (as the programmer) do not know how many times the loop should be executed, because the decision is up to the users. In this case, to terminate the loop, we need to use ‘sentinel controlled loop’ method In order to exit from the loop, the user must enter a unique data value, called a sentinel value. The sentinel value must be a value that could not normally occur as data. BS (Sept 2013)70
The Concept BS (Sept 2013)71 while do…while for Looping (Repetition Structure) Counter-controlled To execute a number of instructions from the program indifinitely until the user tells it to stop or a special condition is met Loop depends on a sentinel value. To execute a number of instructions from the program indifinitely until the user tells it to stop or a special condition is met Loop depends on a sentinel value. Sentinel-controlled
1. Sentinel-Controlled while Loop The algorithm for sentinel-controlled while loop: Consider this problem: – Write a program that reads several integer numbers from the user and prints the sum of the numbers. The program stops reading numbers from the users when they enter ZERO. BS (Sept 2013)72 Read/assign a value to control variable While value of the control variable is not sentinel value { process the value read the next value } Read/assign a value to control variable While value of the control variable is not sentinel value { process the value read the next value } Value != sentinel value? TF Get a value Process value Get next value
The sentinel value in this case is ZERO #include void main(void) { int num, sum = 0; printf(“Enter a number [zero to end]: ”); scanf(“%d”,&num); while (num != 0) { sum += num; printf(“Enter a number [zero to end]: ”); scanf(“%d”,&num); } printf(“Sum = %d\n”, sum); } #include void main(void) { int num, sum = 0; printf(“Enter a number [zero to end]: ”); scanf(“%d”,&num); while (num != 0) { sum += num; printf(“Enter a number [zero to end]: ”); scanf(“%d”,&num); } printf(“Sum = %d\n”, sum); } Example 1 BS (Sept 2013)73 Sentinel value ZERO will terminate the loop Enter a number [zero to end]: 3 Enter a number [zero to end]: -6 Enter a number [zero to end]: 10 Enter a number [zero to end]: 0 Sum = 7 WHILE num != 0? TF INPUT num SET sum += num INPUT num OUTPUT sum
Example 2 BS (Sept 2013)74 #include main () { int sum=0, score=0, count=0; printf("Enter first score or (-99 to quit):"); scanf("%d", &score); while (score != -99) { count++; sum += score; printf("Enter next score or (-99 to quit):"); scanf("%d", &score); } printf("Sum of %d scores: %d", count, sum); } #include main () { int sum=0, score=0, count=0; printf("Enter first score or (-99 to quit):"); scanf("%d", &score); while (score != -99) { count++; sum += score; printf("Enter next score or (-99 to quit):"); scanf("%d", &score); } printf("Sum of %d scores: %d", count, sum); } Sentinel value -99 will terminate the loop WHILE score!= -99? TF INPUT score SET sum += score INPUT score OUTPUT count, sum SET count++ Enter first score (or -99 to quit): 80 Enter next score (or -99 to quit): 77 Enter next score (or -99 to quit): -99 Sum of 2 scores: 157
Test Your Skill 1.Write a program that calculates and prints the average of several real numbers. Assume the last value read is the sentinel 9.9. Use a while loop to accomplish the task. Sample input/ouput: 2. Write a program that computes and displays the sum of a collection of Celsius temperatures entered until a sentinel value of -275 is entered. BS (Sept 2013) Average: 8.6
2. Sentinel-controlled do/while Loop The algorithm for sentinel-controlled do…while loop: Example: BS (Sept 2013)76 Start do { process the value read a value to the control variable } While value of the control variable is not sentinel value Start do { process the value read a value to the control variable } While value of the control variable is not sentinel value int sum=0, score=0, count=0; do { count++; sum += score; printf("Enter score or (-99 to quit):"); scanf("%d", &score); } while (score != -99); printf("\nSum of %d scores: %d", count, sum); int sum=0, score=0, count=0; do { count++; sum += score; printf("Enter score or (-99 to quit):"); scanf("%d", &score); } while (score != -99); printf("\nSum of %d scores: %d", count, sum); Enter score (or -99 to quit): -99 Sum of 1 scores: 0
3. Sentinel-controlled for Loop Example: BS (Sept 2013)77 #include main () { int sum=0, score; printf("Enter first score (or -99 to quit):"); for ( scanf("%d", &score); score != -99; scanf("%d", &score)) { sum += score; printf("Enter next score (or -99 to quit):"); } printf("Sum of all scores: %d", sum); } #include main () { int sum=0, score; printf("Enter first score (or -99 to quit):"); for ( scanf("%d", &score); score != -99; scanf("%d", &score)) { sum += score; printf("Enter next score (or -99 to quit):"); } printf("Sum of all scores: %d", sum); }
Test Your Skill 1.Re-write the program that calculates and prints the average of several real numbers after the last value read is the sentinel 9.9 by using a do…while loop to accomplish the task. Sample input/output: 2. Re-write the program that computes and displays the sum of a collection of Celsius temperatures entered until a sentinel value of -275 is entered using a for loop. BS (Sept 2013) Average: 8.6
DATA VALIDATION Topic 3 BS (Sept 2013)79
Intro to Data Validation Good programmers would ensure that only valid data are entered and processed by their programs. Say for example we want to write a program that reads the score marks from the user, and print its equivalent grade. Say that the valid score marks range is between 0 to 100. So, if user keys in value other than 0 to 100, the program should do something such as the following: – Option 1: Tell the users that they have entered a wrong input and terminate the program. – Option 2: Tell the users that they have entered a wrong input and ask them to re-enter the input. BS (Sept 2013)80
Data Validation: if…else if Option 1: Tell the users that they have entered a wrong input and terminate the program. BS (Sept 2013)81 printf(“Enter the score: ”); scanf(“%d”,&score); if (score >= 90 && score <= 100) printf(“A\n”); else if (score >= 80 && score < 90) printf(“B\n”); else if (score >= 70 && score < 80) printf(“C\n”); else if (score >= 60 && score < 70) printf(“D\n”); else if (score >= 0 && score < 60 printf(“F\n”); else printf(“Error, input should only be between 0 – 100 \n”);
Data Validation: while Loop Option 2(1): Tell the users that they have entered a wrong input and ask them to re-enter the input using while loop. BS (Sept 2013)82 printf(“Enter score: ”); scanf(“%d”, &score); while (score 100) { printf(“Sorry, input must be between 0 – 100\n”); printf(“Re-enter the score: ”); scanf(“%d”,&score); } if (score >= 90 && score <= 100) printf(“A\n”); else if (score >= 80 && score < 90) printf(“B\n”); else if (score >= 70 && score < 80) printf(“C\n”); else if (score >= 60 && score < 70) printf(“D\n”); else printf(“F\n”); Sentinel-controlled while loop with multiple sentinel values in the range of 100
Data Validation: do..while Loop Option 2(2): Tell the users that they have entered a wrong input and ask them to re-enter the input using do…while loop. BS (Sept 2013)83 do{ printf(“Enter score: ”); scanf(“%d”,&score); if (score 100) printf(“Sorry, input must be between 0 – 100\n”); }while (score 100); if (score >= 90 && score <= 100) printf(“A\n”); else if (score >= 80 && score < 90) printf(“B\n”); else if (score >= 70 && score < 80) printf(“C\n”); else if (score >= 60 && score < 70) printf(“D\n”); else printf(“F\n”); Sentinel-controlled do…while loop with multiple sentinel values in the range of 100
Data Validation: for Loop Option 2(3): Tell the users that they have entered a wrong input and ask them to re-enter the input using for loop. BS (Sept 2013)84 printf("Enter the score:"); for ( scanf("%d", &score); score 100; scanf("%d", &score)) { printf(“Sorry, input must be between 0 – 100\n”); printf("Enter the score:"); } if (score >= 90 && score <= 100) printf(“A\n”); else if (score >= 80 && score < 90) printf(“B\n”); else if (score >= 70 && score < 80) printf(“C\n”); else if (score >= 60 && score < 70) printf(“D\n”); else printf(“F\n”); Sentinel-controlled for loop with multiple sentinel values in the range of 100
COMBINATIONS OF CONTROL STRUCTURES Topic 4 BS (Sept 2013)85
Possible Combinations Possible combinations are limitless. Four basic forms of combinations are as follows: 1.One or more selection structures inside a repetition structure. 2.One or more repetition structures inside a selection structure. 3.Nested selection structures – one or more selection structures inside a selection structure 4.Nested repetition structures – one or more repetition structures inside a repetition structure This course covers the first three forms only and we have seen examples of nested selection structures before. BS (Sept 2013)86
1. Selection Structures inside a Repetition Structure Example: a simple if..else inside a while loop BS (Sept 2013)87 WHILE x <= 3? TF SET x++ SET x=1 OUTPUT “Kids” OUTPUT “Bye” INPUT status IF status == 1? OUTPUT “Adults” TF
2. Repetition Structures inside a Selection Structure Example: a while loop inside a simple if..else BS (Sept 2013)88 IF status == 1? TF SET x++ SET x=1 OUTPUT “Kids” OUTPUT “Bye” Prompt and get status WHILE x <= 3? OUTPUT “Adults” TF SET x=1
Test Your Skill 1.Write C programs that calculate and display the average of 10 floating point numbers read from user by implementing while, do…while and for loops to accomplish the task. 2.Write programs that keep printing the multiples of the integers 2, namely 2, 4, 8, 16, 32, 64 and 128. Your loop should terminate at 128. Use while, do…while and for loops to implement this. Implement appropriate data validation in the programs BS (Sept 2013)89
continue AND break STATEMENTS Topic 5 BS (Sept 2013)90
The break statement The continue and break statements are used to modify the program flow when a selection structure or a repetition structure is used. The break statement can be used to forced exit of selection or terminate repetition structure. Example: BS (Sept 2013)91 for (num=1;num<=5;num++) { if (num==2) break; printf("Hello World\n"); } for (num=1;num<=5;num++) { if (num==2) break; printf("Hello World\n"); } When the value of num is equals to 2, the program will terminate from the for loop. OUTPUT?
The break statement You can use the break statement at any time. This can be very useful if you want to stop running a loop because a condition has been met other than the loop end condition. BS (Sept 2013)92 int i; i = 0; while ( i < 20 ) { i++; if ( i == 10) break; } int i; i = 0; while ( i < 20 ) { i++; if ( i == 10) break; } The while loop will run, as long i is smaller then twenty. But, the while loop must stop (break) if i equals to ten The while loop will run, as long i is smaller then twenty. But, the while loop must stop (break) if i equals to ten
The continue Statement Can be used to skip the rest of the loop body statements and continue with the next repetition of the loop (start from the top again - the loop variable must still be incremented). Example: BS (Sept 2013)93 for (num=1;num<=5;num++) { if (num==2) continue; /* end_if */ printf(“Number %d\n”,num); } /*end_for */ for (num=1;num<=5;num++) { if (num==2) continue; /* end_if */ printf(“Number %d\n”,num); } /*end_for */ When the value of num is equal to 2, the program will skip the printf statement and continue with the for loop. OUTPUT?
The continue Statement In a for loop, any modification to the control variable will be done before the condition is checked. In a while and do…while structures, the loop condition will be checked as soon as the continue statement is encountered to determine whether the loop will be continued. Example: BS (Sept 2013)94 int i=0; while ( i < 20 ) { i++; continue; printf("Nothing to see\n"); } int i=0; while ( i < 20 ) { i++; continue; printf("Nothing to see\n"); } In the example above, the printf function is never called because of the continue statement.
Summary 1 1.We can get our C programs to make decisions using Selection Structure including if, if…else, ?: conditional operator, if…else if and switch. 2.Also we can get our programs to repeat (loop) processing without writing the same statements over and over using Repetition Structure including while loop, do…while loop, for loop 3.All the while, do…while, and for loops can be implemented as counter-controlled loop or sentinel-controlled loop. – When number of iteration is known, use counter-controlled loop – When decision to proceed with iteration depends on a value or a range of values, use sentinel-controlled loop BS (Sept 2013)95
Summary 2 4.The expression of the condition in the selection and repetition structures must be specified using Relational operators (such as >, >=, <, <=) and Equality operators (==, !=) and several conditions may be combined using Logical operators (&&, ||, and !). 5.You may combine sequence, selection and repetition structures in a C program 6.You may use the continue and break statements to modify the program flow when a selection structure or a repetition structure is used. BS (Sept 2013)96