Download presentation
Presentation is loading. Please wait.
1
Conditionals, Loops, and Other Statements CS-2301 D-term 20091 Conditionals, Loops, and Other Kinds of Statements CS-2301 System Programming C-term 2009 (Slides include materials from The C Programming Language, 2 nd edition, by Kernighan and Ritchie and from C: How to Program, 5 th and 6 th editions, by Deitel and Deitel)
2
Conditionals, Loops, and Other Statements CS-2301 D-term 20092 Reading Assignment Chapter 3 of Kernighan and Ritchie Helpful to follow along in class Note on §3.8 :– we do not allow goto statements in this course There is rarely, if any, situation at WPI where a goto in C would be the right thing
3
Conditionals, Loops, and Other Statements CS-2301 D-term 20093 Review Expression – a sequence of operators and operands that return a value Assignment – expression with the side effect of changing the value of the left operand
4
Conditionals, Loops, and Other Statements CS-2301 D-term 20094 Definition – Side Effect The changing of the value of some data in the course of evaluating or executing something else Sometimes unrelated data! Examples:– –Explicit assignments x = y + 3; i++; --j; –printf() Writes to internal buffer; flushes buffer to screen on '\n' –scanf() – returns values from input Explicit – assigns data to arguments Implicit – keeps track of where it is in internal buffer
5
Conditionals, Loops, and Other Statements CS-2301 D-term 20095 Definition – Statement Instruction to “do” something Specifies order of execution & evaluation §A.9 – a statement in C may be any of:– labeled-statement expression-statement compound-statement selection-statement iteration-statement jump-statement
6
Conditionals, Loops, and Other Statements CS-2301 D-term 20096 Expression Statement expression optional ; Note: semicolon is terminator Exists primarily for its side effects E.g., x = y + 3; i++; --j; printf(“string”, arg1, arg2, arg3); The following is perfectly legal in C:– y + 3; Evaluates the expression, then throws the result away!
7
Conditionals, Loops, and Other Statements CS-2301 D-term 20097 Compound Statement A sequence of statements surrounded by {} Example:– { x = 0; i++; printf("The value of x is %d\n", x); } Reason:– so that we can group together statements in loops, if-else, etc.
8
Conditionals, Loops, and Other Statements CS-2301 D-term 20098 Compound Statement (continued) Compound statements may be nested {...; { x = 0; i++; } /* no semicolon needed here*/ printf("The value of x is %d\n", x);...; }
9
Conditionals, Loops, and Other Statements CS-2301 D-term 20099 Compound Statement (continued) Compound statements may include declarations inside { double angle; angle = atan2(y, x) * 360/(2*pi); printf(“Angle is %f degrees\n”, angle); } Declarations inside of {} are not known outside of {} Book says declarations must be at beginning of {} Later versions of C relax this rule Declaration must always precede first use of declared identifier Note: declaration-definition of angle allocates memory. This is relinquished at end of {}. atan2(y,x) calculates the arctangent of y x without zero-divide problems
10
Conditionals, Loops, and Other Statements CS-2301 D-term 200910 Questions?
11
Conditionals, Loops, and Other Statements CS-2301 D-term 200911 If-else Statements if ( expr ) statement 1 /*do this if expr is non-zero*/ else statement 2 /*do this if expr is zero*/ The else clause is optional!
12
Conditionals, Loops, and Other Statements CS-2301 D-term 200912 If-else Examples if (j > limit) return j; /* note semicolon*/ else j += stepValue; /* note semicolon*/... if (++k >= 4) k = 0; /* increment k mod 4*/
13
Conditionals, Loops, and Other Statements CS-2301 D-term 200913 If-else Examples (continued) if (n < maxInput) { scanf("string", &arg1, &arg2, …); n++; printf("string2", arg3, arg4, …); } else { /* note NO semicolon*/ printf("Summary\n", arg5, …); return n; }
14
Conditionals, Loops, and Other Statements CS-2301 D-term 200914 Concatenated If-else Statements if ( expr 1 ) statement 1 /*do this if expr 1 is non-zero*/ else if ( expr 2 ) statement 2 /*i.e., expr 1 == 0, expr 2 != 0*/ else if ( expr 3 ) statement 3 /expr 1 and expr 2 are zero, expr 3 != 0*/ else if ( expr 4 ) statement 4 /expr 1, expr 2, expr 3 all zero, expr 4 != 0*/ else statement 5 /*i.e., all expr are zero*/
15
Conditionals, Loops, and Other Statements CS-2301 D-term 200915 Concatenated If-else Statements Last else is always attached to last if If it should be attached to any other if, use {} to control the flow of execution.
16
Conditionals, Loops, and Other Statements CS-2301 D-term 200916 Switch Statement Somewhat like a concatenated if-else Occasionally easier to read Each arm is called a case Evaluate switch expression, select the appropriate case (if any) –default case is optional Difference from concatenated if-else Need break statement to exit switch after a case Otherwise, control falls through to next case See §3.4 and p. 59
17
Conditionals, Loops, and Other Statements CS-2301 D-term 200917 Switch Statement Example int month, daysInMonth, leapYear; … switch (month) { case 0: printf("January\n"); daysInMonth = 31; break; case 1: printf("February\n"); daysInMonth = leapYear ? 29 : 28; break; case 2: printf("March\n"); daysInMonth = 31; break; case 3: printf("April\n"); daysInMonth = 30; break; … }// switch
18
Conditionals, Loops, and Other Statements CS-2301 D-term 200918 Switch Statement Example int month, daysInMonth, leapYear; … switch (month) { case 0: printf("January\n"); daysInMonth = 31; break; case 1: printf("February\n"); daysInMonth = leapYear ? 29 : 28; break; case 2: printf("March\n"); daysInMonth = 31; break; case 3: printf("April\n"); daysInMonth = 30; break; … }// switch case values must be constants break statement needed to jump over subsequent cases default case is optional (not shown)
19
Conditionals, Loops, and Other Statements CS-2301 D-term 200919 Questions?
20
Conditionals, Loops, and Other Statements CS-2301 D-term 200920 Iterative Statement while loop for loop do-while loop
21
Conditionals, Loops, and Other Statements CS-2301 D-term 200921 while loops while ( expression ) statement Evaluate expression If true, execute statement and then repeat Repeat until expression becomes false statement may be executed zero or more times! Often a compound statement
22
Conditionals, Loops, and Other Statements CS-2301 D-term 200922 int sum = 0; int count = 0; int input; while (scanf("%d", &input) != EOF){ sum += input; count++; printf("Input value of %f recorded.\n", input);... } if (count > 0) printf("Average is %f\n", (double)sum/count); else printf("No inputs recorded\n"); while loop example Note initialization of sum and count What is this?
23
Conditionals, Loops, and Other Statements CS-2301 D-term 200923 while loop examples (continued) Study example on p. 59 (§3.4) A program to count digits, white space characters, and other characters. Includes a while loop with a switch statement inside
24
Conditionals, Loops, and Other Statements CS-2301 D-term 200924 do-while loop do statement while ( expression ); Similar to while loop, but guaranteed to execute statement at least once See §3.6 Note: semicolon is required here
25
Conditionals, Loops, and Other Statements CS-2301 D-term 200925 Breaking out of a Loop When it becomes necessary to terminate a loop prematurely –break; /*exits smallest containing switch or loop*/ When it becomes necessary to terminate the current iteration and start the next one –continue; /*terminates this iteration only*/ See p. 65, §3.7
26
Conditionals, Loops, and Other Statements CS-2301 D-term 200926 Questions?
27
Conditionals, Loops, and Other Statements CS-2301 D-term 200927 for loop A counting loop for (expr 1 ; expr 2 ; expr 3 ) statement Evaluate expr 1 to initialize Evaluate expr 2 to test If true, execute statement If not true, exit for loop Evaluate expr 3 to prepare for next iteration Repeat expr 2 to test Remember: zero is false, non-zero is true
28
Conditionals, Loops, and Other Statements CS-2301 D-term 200928 for loops and while loops The for loop for (expr 1 ; expr 2 ; expr 3 ) statement is exactly equivalent to the following expr 1 ; while (expr 2 ) { statement expr 3 ; } See p. 60
29
Conditionals, Loops, and Other Statements CS-2301 D-term 200929 The most common kind of for -loop int i; for (i = 0; i < limit; i++) {...; /* do something with ith entity */...; } Loop “body” is typically a compound statement
30
Conditionals, Loops, and Other Statements CS-2301 D-term 200930 The most common kind of for -loop int i; for (i = 0; i < limit; i++) {...; /* do something with ith entity */...; } It is traditional in C that for - loops start counting at zero and test that the counter is less than the upper limit
31
Conditionals, Loops, and Other Statements CS-2301 D-term 200931 The most common kind of for -loop int i; for (i = 0; i < limit; i++) {...; /* do something with ith entity */...; } This loop iterates limit times. –Iterations are numbered i = 0, 1, 2, …, limit -1 Reason:– arrays are indexed this way!
32
Conditionals, Loops, and Other Statements CS-2301 D-term 200932 Nested for -loops int i, j; for (i = 0; i < limit; i++) {...;/*prepare subgroup i*/ for (j=0; j < limit2; j++) {...; /* do something with item j of subgroup i*/...; }...; }
33
Conditionals, Loops, and Other Statements CS-2301 D-term 200933 An Extension in Modern C Compilers The following construct (not in book) is legal in C99:– for (int i = 0; i < limit; i++){ expression involving i;...; printf(“Iteration %d completed.\n”, i);...; } The loop counter i is declared in for loop Not visible outside of loop! Common practice Good programming style
34
Conditionals, Loops, and Other Statements CS-2301 D-term 200934 Notes on Loop Style for (int i = 0; i < limit; i++) {...;/*prepare for subgroup i*/ for (int j=0; j < limit2; j++) {...; /* do something with item j of subgroup i*/...; }/* end of loop j */...; } /* end of loop i */ Declare loop variables in for -statements – C99
35
Conditionals, Loops, and Other Statements CS-2301 D-term 200935 Notes on Loop Style for (int i = 0; i < limit; i++) {...;/*prepare for subgroup i*/ for (int j=0; j < limit2; j++) {...; /* do something with item j of subgroup i*/...; }/* end of loop j */...; } /* end of loop i */ Include a comment at end of each loop to show which loop it is
36
Conditionals, Loops, and Other Statements CS-2301 D-term 200936 Questions?
37
Conditionals, Loops, and Other Statements CS-2301 D-term 200937 An Example int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { }// for month
38
Conditionals, Loops, and Other Statements CS-2301 D-term 200938 An An Example (continued) int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { }// for month This variable is “global” to the loop. I.e., it is remembered from one iteration to the next.
39
Conditionals, Loops, and Other Statements CS-2301 D-term 200939 An Example (continued) int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { }// for month At beginning of each iteration, startingDay indicates the day of the week on which that particular month starts. It is the responsibility of the loop to update startingDay for the next month.
40
Conditionals, Loops, and Other Statements CS-2301 D-term 200940 Definition – Loop Invariant Something that is true at a certain point of each iteration of the loop Usually at the start E.g., a relationship of the variables Often expressed as a logical statement called an assertion Needs to be preserved from one iteration to the next Does not necessarily remain true within the loop, but only at the specific point each time through
41
Conditionals, Loops, and Other Statements CS-2301 D-term 200941 An Example (continued) int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { const int daysInMonth = …; /* set # of days */ int dayOfWeek = 0; printf(…); //month name printf(…); //days of week }// for month
42
Conditionals, Loops, and Other Statements CS-2301 D-term 200942 An Example (continued) int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { const int daysInMonth = …; /* set # of days */ int dayOfWeek; printf(…); //month name printf(…); //days of week for (dayOfWeek = 0; dayOfWeek<startingDay; dayOfWeek++) printf(/*blanks*/); }// for month
43
Conditionals, Loops, and Other Statements CS-2301 D-term 200943 An Example (continued) int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { const int daysInMonth = …; /* set # of days */ int dayOfWeek; printf(…); //month name printf(…); //days of week for (dayOfWeek = 0; dayOfWeek<startingDay; dayOfWeek++) printf(/*blanks*/); }// for month Note that dayOfWeek is global to this loop. It is remembered outside this inner loop.
44
Conditionals, Loops, and Other Statements CS-2301 D-term 200944 An Example (continued) int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { const int daysInMonth = …; /* set # of days */ int dayOfWeek; printf(…); //month name printf(…); //days of week for (dayOfWeek = 0; dayOfWeek<startingDay; dayOfWeek++) printf(/*blanks*/); }// for month What is the loop invariant associated with this loop?
45
Conditionals, Loops, and Other Statements CS-2301 D-term 200945 An Example (continued) int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { const int daysInMonth = …; /* set # of days */ int dayOfWeek; printf(…); //month name printf(…); //days of week for (dayOfWeek = 0; dayOfWeek<startingDay; dayOfWeek++) printf(/*blanks*/); for (int date = 1; date <= daysInMonth; date++){ }// for date }// for month
46
Conditionals, Loops, and Other Statements CS-2301 D-term 200946 An Example (continued) int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { const int daysInMonth = …; /* set # of days */ int dayOfWeek; printf(…); //month name printf(…); //days of week for (dayOfWeek = 0; dayOfWeek<startingDay; dayOfWeek++) printf(/*blanks*/); for (int date = 1; date <= daysInMonth; date++){ }// for date }// for month What should the loop invariant be for this loop? Why?
47
Conditionals, Loops, and Other Statements CS-2301 D-term 200947 An Example (continued) int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { const int daysInMonth = …; /* set # of days */ int dayOfWeek; printf(…); //month name printf(…); //days of week for (dayOfWeek = 0; dayOfWeek<startingDay; dayOfWeek++) printf(/*blanks*/); for (int date = 1; date <= daysInMonth; date++){ printf("…", date); if (++dayOfWeek>=7) { printf("\n"); dayOfWeek = 0; }; }// for date }// for month
48
Conditionals, Loops, and Other Statements CS-2301 D-term 200948 An Example (continued) int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { const int daysInMonth = …; /* set # of days */ int dayOfWeek; printf(…); //month name printf(…); //days of week for (dayOfWeek = 0; dayOfWeek<startingDay; dayOfWeek++) printf(/*blanks*/); for (int date = 1; date <= daysInMonth; date++){ printf(“…”, date); if (dayOfWeek++>=7) { printf(“\n”); dayOfWeek = 0; }; }// for date }// for month Is loop invariant preserved by this loop? Why?
49
Conditionals, Loops, and Other Statements CS-2301 D-term 200949 An Example (continued) int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { const int daysInMonth = …; /* set # of days */ int dayOfWeek; printf(…); //month name printf(…); //days of week for (dayOfWeek = 0; dayOfWeek<startingDay; dayOfWeek++) printf(/*blanks*/); for (int date = 1; date <= daysInMonth; date++){ printf(“…”, date); if (dayOfWeek++>=7) { printf(“\n”); dayOfWeek = 0; }; }// for date if (dayOfWeek != 0) printf(“\n”); }// for month What about the original loop invariant for this loop?
50
Conditionals, Loops, and Other Statements CS-2301 D-term 200950 An Example (concluded) int startingDay; /* init from user input*/ for (int month = 0; month < 12; month++) { const int daysInMonth = …; /* set # of days */ int dayOfWeek; printf(…); //month name printf(…); //days of week for (dayOfWeek = 0; dayOfWeek<startingDay; dayOfWeek++) printf(/*blanks*/); for (int date = 1; date <= daysInMonth; date++) { printf(“…”, date); if (++dayOfWeek >= 7){ printf(“\n”); dayOfWeek = 0; }; }// for date if (dayOfWeek !=0) printf(“\n”); startingDay = dayOfWeek; }// for month
51
Conditionals, Loops, and Other Statements CS-2301 D-term 200951 Questions?
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.