Chapter 5 Repetition and Loop Statements Instructor: Yuksel & Demirer Repetition in Programs • In most software, the statements in the program may need to repeat for many times. – e.g., calculate the value of n!. – If n = 10000, it’s not elegant to write the code as 1*2*3*…*10000. • Loop is a control structure that repeats a group of steps in a program. – Loop body stands for the repeated statements. • There are three C loop control statements: – while, for, and do-while. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-2 Flow Diagram of Loop Choice Process e.g., read the content in a file e.g., calculate the value of n! Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-3 Comparison of Loop Choices (1/2) Kind Counting loop When to Use C Structure We know how many loop while, for repetitions will be needed in advance. SentinelInput of a list of data ended while, for controlled loop by a special value EndfileInput of a list of data from controlled loop a data file Copyright ©2004 Pearson Addison-Wesley. All rights reserved. while, for 5-4 Comparison of Loop Choices (2/2) Kind When to Use C Structure Input validation Repeated interactive input do-while loop of a value until a desired value is entered. General Repeated processing of while, for conditional data until a desired loop condition is met. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-5 The while Statement in C • The syntax of while statement in C: while (loop repetition condition) statement • Loop repetition condition is the condition which controls the loop. • The statement is repeated as long as the loop repetition condition is true. • A loop is called an infinite loop if the loop repetition condition is always true. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-6 An Example of a while Loop Loop repetition condition Statement Loop control variable is the variable whose value controls loop repetition. In this example, count_emp is the loop control variable. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-7 Flowchart for a while Loop Loop repetition condition Statement Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-8 Compound Assignment Operators (1/2) • The loop body usually consists of statements of the form: variable = variable op expression. – e.g., count_emp = count_emp + 1; • C provides compound assignment operators which enable a more concise notation for this kind of statements. – “variable op = expression” is the same to “variable = variable op expression.” Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-9 Compound Assignment Operators (2/2) Simple Assignment Operators count_emp = count_emp + 1; time = time -1; Compound Assignment Operators count_emp += 1; product = product * item; total = total / number; n = n % (x+1); product *= item; Copyright ©2004 Pearson Addison-Wesley. All rights reserved. time -= 1; total /= number; n %= x+1; 5-10 The for Statement in C • The syntax of for statement in C: for (initialization expression; loop repetition condition; update expression) statement • The initialization expression set the initial value of the loop control variable. • The loop repetition condition test the value of the loop control variable. • The update expression update the loop control variable. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-11 An Example of the for Loop Initialization Expression Loop repetition condition Update Expression count_emp is set to 0 initially. count_emp should not exceed the value of number_emp. count_emp is increased by one after each iteration. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-12 Increment and Decrement Operators • The statements of increment and decrement are commonly used in the for loop. • The increment (i.e., ++) or decrement (i.e., --) operators are the frequently used operators which take only one operand. • The increment/decrement operators increase or decrease the value of the single operand. – e.g., for (int i = 0; i < 100; i++){ … } – The variable i increases one after each iteration. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-13 Comparison of Prefix and Postfix Increments The value of the expression (that uses the ++/-- operators) depends on the position of the operator. The value of j is increased Copyright ©2004 Pearson Addison-Wesley. All rights reserved. The value of j is not increased 5-14 Sentinel-Controlled Loops • Sometimes we may not know how many times the loop will repeat. • One way to do this is to choose a sentinel value as an end marker. – The loop exits when the sentinel value is read. • If the user wish to exit the loop, he or she has to input the sentinel value. – It is similar to the “logout” function in many applications. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-15 An Example of Sentinel-Controlled while Loops If the user wish to exit the loop, he or she has to input -99. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-16 An Example of Endfile-Controlled Loops • fscanf is a function used to read file. • EOF stands for the special value of end-file returned by fscanf. • This loop repeats until reading the end of the file. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-17 Nested Loops • Usually used to work with two dimensional arrays (later). • Nested loops consist of an outer loop with or more inner loops. • Each time the outer loop is repeated, the inner loops are reentered – Their loop control expressions are reevaluated – All required iterations are performed again. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-18 Nested Loops • Nested loops consist of an outer loop with one or more inner loops. • e.g., Outer loop for (i=1;i<=100;i++){ for(j=1;j<=50;j++){ … Inner loop } } • The above loop will run for 100*50 iterations. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-19 What is the Output? lcv1 = 0; sum = 0; while (lcv1 < 100) { lcv2 = 0; while (lcv2 < 100) { sum = sum + 1; lcv2++; } lcv1++; } printf(“Sum is %d\n”, sum); /* Output = */ Sum is 10000 Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-20 What is the Output? int a=0, b=0, sum=0; for(a=0; a<6; a+=2) for(b=0; b>4; b--) sum=sum+1; printf(“%d”,sum); /* Output = */ Sum is 0 Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-21 Do While statement • Both the for statement and the while statement evaluate the loop condition before the first execution of the loop body. • In most cases, this pre-test is desirable and prevents the loop from executing when there may be no data items to process • There are some situations, generally involving interactive input, when we know that a loop must execute at least one time. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-22 The do-while Statement in C • The syntax of do-while statement in C: do statement while (loop repetition condition); • The statement is first executed. • If the loop repetition condition is true, the statement is repeated. • Otherwise, the loop is exited. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-23 An Example of the do-while Loop /* Find even number input */ do{ printf(“Enter a value: ”); scanf(“%d”, &num); }while (num % 2 !=0) This loop will repeat if the user inputs odd number. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-24 Do-While Example do { printf("Enter a letter from A through E> "); scanf("%c", &letter_choice); }while (letter_choice < ’A’ || letter_choice > ’E’); Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-25 Flag Controlled Loops • Sometimes a loop repetition condition becomes so complex that placing the full expression in its usual spot is awkward. • In many cases, the condition may be simplified by using a flag. while (flag) { …. } • A flag is a type int variable used to represent whether or not a certain event has occurred. • A flag has one of two values: 1 (true) and 0 (false). Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-26 Endfile-controlled loops • Many library functions return helpful data as the value of the function. • For example, scanf returns the number of data items it actually obtained. num = scanf(“%d%d%d”, &n1, &n2, &n3); • A data file is always terminated by an endfile character (EOF) that can be detected by the scanf and fscanf functions. • You can write a program that processes a list of data of any length from a file without requiring a special sentinel value at the end of the data file. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-27 #include <stdio.h> int main(void) { FILE *inp; int sum = 0, score, input_status; inp = fopen("scores.dat", "r"); input_status = fscanf(inp, "%d", &score); while (input_status != EOF) { printf("%d ", score); sum += score; input_status = fscanf(inp, "%d", &score); } printf("\nSum of exam scores is %d\n", sum); fclose(inp); return 0; } /* Output */ 55 33 77 Sum of exam scores is 165 Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-28 What is the Output? int i, sum=0,status=0; status = scanf(“%d”,&i); while(status!=EOF) { /* Input = */ 2 4 6 ctl-d sum+=i; status = scanf(“%d”,&i); } /* Output = */ 12 printf(“%d\n”, sum); Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-29 In class work (1/2) • Write a program that prompts the user to input an integer n. • Draw a triangle with n levels by star symbols. For example, n = 3, * ** *** • After drawing the triangle, repeat the above process until the user input a negative integer. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-30 In class work #4 (2/2) • An usage scenario: Please input: 2 * ** Please input: 3 * ** *** Please input: -9 Thank you for using this program. Copyright ©2004 Pearson Addison-Wesley. All rights reserved. 5-31