1 / 109

C Programming Language

C Programming Language. OUTLINE Repetition and Loop Statements Arrays Multi-Dimensional Arrays. Repetition and Loop Statements. Categories of Flow Controls. Relational, Equality, Logical Operators are provided to facilitate flow controls.

neylan
Télécharger la présentation

C Programming Language

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C Programming Language OUTLINE Repetition and Loop Statements Arrays Multi-Dimensional Arrays

  2. Repetition and Loop Statements

  3. Categories of Flow Controls • Relational, Equality, Logical Operators are provided to facilitate flow controls. • Sequential - Statements in a program are executed one after another. • Selection - A choice of alternative actions (if, if-else, and switch). • Repetition - Repeat certain actions (while, for, and do).

  4. Loops So far our programs are very limited - they can only run “straight through” the code. But many situations require programs to repeat actions. Repeating actions is called iteration The control structures that we use to perform iteration are called loops- we speak of programs “looping”.

  5. A “loop” is a repeated (“iterated”) sequence of statements. Like conditionals, loops let us control the flow of our program in powerful ways. Like functions, loops take code that has been generalized and execute it many times. Block of code within loop is known as the loop body

  6. We will study three types of loops: - whileloops - forloops - do…whileloops We will also look at nestedloops - what happens when you put one loop inside another

  7. Counter-controlled repetition • Definite repetition: know how many times loop will execute • Control variable used to count repetitions • Sentinel-controlled repetition • Indefinite repetition • Used when number of repetitions not known • Sentinel value indicates "end of data"

  8. Counter-controlled repetition requires • The name of a control variable (or loop counter). • The initial value of the control variable. • A condition that tests for the final value of the control variable (i.e. whether looping should continue). • An increment (or decrement) by which the control variable is modified each time through the loop.

  9. loop repetition condition • The while loop • The syntax is • while (condition) { • statements; • } • Its meaning is • (a)  evaluate the condition(b)  if its value is true (i.e., not zero) do the statements, and go back to (a) • The whileloop will repeatedly execute the statements in the loop body until the condition is false. • Something in the body of the while loop must change the condition, or the loop will never end! loop body Note indentation!

  10. Steps in using while loop 1. Initialize loop count (loop control variable) 2. Test loop repetition condition for termination 3. Update loop count

  11. Example - Add five integers: int i = 0; // initialize i int temp, sum = 0; // initialize sum while (i < 5) { // test if i < 5 scanf(“%d”, &temp); // read an integer sum = sum + temp; // add to sum i++; // increment i } Important to initialize the loop count before starting the loop, and to increment the count within the loop.

  12. Example - Accumulating a sum int sum, x, count; int number_inputs; /* Number of inputs */ sum = 0; printf("How many numbers? "); scanf("%d", &number_inputs); printf("Enter %d numbers: ", number_inputs); count = 1; while ( count <= number_inputs ) { scanf("%d", &x); sum = sum + x; count = count + 1; } Initialization Condition Update

  13. Example - Calculate pay count_emp = 0; /* no employees processed yet */ while (count_emp < num_emp) { /* test value of count_emp */ printf("Hours> "); scanf("%d", &hours); printf("Rate> "); scanf("%lf", &rate); pay = hours * rate; printf("Pay is $%6.2f\n", pay); count_emp = count_emp + 1; /* increment count_emp */ } printf("\nAll employees processed\n");

  14. Example - Computing a Factorial 7! = 1 * 2 * 3 * 4 * 5 * 6 * 7 We could write this without a loop (Yuck!). But easier to write it with a loop. int i = 1; int product = 1; while(i <= 7){ product = product * i; i++; } x = 1 * 2 * 3 * 4 * 5 * 6 * 7; printf ( "%d", x ) ;

  15. Example - Factorial Function Even better if we generalize the algorithm and make it in to a function. Can compute N! int fact(int number){ int i = 1; int product = 1; while(i <= number){ product = product * i; i++; } return product; } Local variables - re-initialized at each call

  16. Infinite Loop Using while • while (1) • statement; • next statement; • Stop the program in the operating system level, for example, Ctrl-C or Ctrl+Break in DOS. • There is a break statement for terminating the loop (discussed later). • Use carefully!

  17. The for Loop The syntax is for ( initialization ; condition; update ) { statements; } Note that the for loop statement, as well as having a condition, has an initialization and an update part also. Another construct for doing the same thing - iteration.

  18. If the initialization, condition and/or update parts are long, place each on a separate line for clarity. for ( initialization; condition; update ) { statements; } next_statement; • Execution Steps: • 1. initialization • 2. condition expression is evaluated. • - if true, • (a) statements are executed. • (b) update expression is executed. • (c) goto step (2) again. • - if false, next statement is executed.

  19. for loop versus while loop for and while loops can always be interchanged … but some cases are much better suited to for loops than while loops. i = 0; while (i < 10) { printf(“%d\n”, i); i++; } for(i = 0; i < 10; i++) { printf(“%d\n”, i); }

  20. Which Loop Should You Choose? They are interchangeable, so to some extent it is personal preference. Use the for loop if you know how many times you are going to do something. Think which construct will yield the simplest, clearest code.

  21. Example total_pay = 0.0; for (count_emp = 0; /* initialization */ count_emp < number_emp; /* loop repetition condition */ count_emp += 1) { /* update */ printf("Hours> "); scanf("%lf", &hours); printf("Rate > $"); scanf("%lf", &rate); pay = hours * rate; printf("Pay is $%6.2f\n\n", pay); total_pay = total_pay + pay; } printf("All employees processed\n"); printf("Total payroll is $%8.2f\n", total_pay);

  22. Example - Factorial int factorial(int n) { int i, /* local variables */ product; /* accumulator for product computation */ product = 1; for (i = n; i > 1; --i) { product = product * i; } return (product); } Note that we may decrement or increment the loop count - it depends on how we write the initialization and condition parts

  23. Increments and decrements other than one Not obliged to increment / decrement the loop count by 1. May use any value.

  24. Infinite Loop Using for • for (;;) { • statements; • } • Stop the program in the operating system level, for example, Ctrl-C or Ctrl+Break in DOS. • There is a break statement for terminating the loop (discussed later). • Use carefully!

  25. Example - Celsius / Fahrenheit table #define CBEGIN 10 #define CLIMIT -5 #define CSTEP 5 /* Variable declarations */ int celsius; double fahrenheit; /* Display the table heading */ printf(" Celsius Fahrenheit\n"); /* Display the table */ for (celsius = CBEGIN; celsius >= CLIMIT; celsius -= CSTEP) { fahrenheit = 1.8 * celsius + 32.0; printf("%6c%3d%8c%7.2f\n", ' ', celsius, ' ', fahrenheit); } Practice: C-to-F-table-part.c

  26. The Comma Operator and for • expr1 , expr2 • Lowest precedence of all operators. • Left-to-right associativity. • Value of expr2 taken as value of the whole expression. • Example, a = 0 , b = 1; • Example • for (i=1, factorial=1; i<=n; i++) • factorial *= i;

  27. Conditional Loops In some situations, you may not know the exact number of loop iterations required. It is still possible to write a loop in such circumstances. Steps: 1. Initialize loop control variable 2. As long as exit condition has not been met 3. Continue processing

  28. Loop Design Sentinel-controlled Loops Input a list of data values of any length, terminated by a special (sentinel) value. double variable; /* current input */ declarations; initial statements; scanf("%lf", &variable); while (variable is not equal to sentinel){ process; scanf("%lf", &variable); } final statements;

  29. Example - Average Inputs printf ( "Enter values to average, end with -1.0 \n") ; sum = 0.0 ; count = 0 ; scanf ( "%lf", &next ) ; while ( next != -1.0 ) { sum = sum + next ; count = count + 1; scanf ( "%lf", &next ) ; } if (count > 0) printf( "The average is %f. \n", sum / (double) count ); Loop terminates when a sentinel value (-1) is entered at keyboard Comments

  30. Endfile-controlled Loops Input from a file of data and do not know how many data items there are. Files have a special marker to indicate the end of data - end-of-file (eof) marker Condition to terminate loop can be controlled by using the eof marker - in C, the eof marker is denoted by the reserved word, EOF

  31. Example sum = 0; input_status = fscanf(inp, "%d", &score); while (input_status != EOF) { printf("%5d\n", score); sum += score; input_status = fscanf(inp, "%d", &score); }

  32. Nested Loops How would you print the following diagram? ***** ***** ***** Solution: repeat 3 times print a row of 5 *s repeat 5 times print * print newline It seems as if a loop within a loop is needed!

  33. When you put one loop inside another, then you have nested loops Nested loops can be much more confusing than single loops!

  34. #define ROWS 3 #define COLS 5 … row = 1; while ( row <= ROWS ) { /* print a row of COLS *s */ ... row = row + 1; }

  35. #define ROWS 3 #define COLS 5 row = 1; while ( row <= ROWS ) { /* print a row of 5 *s */ col = 1; while (col <= COLS) { printf("*"); col = col + 1; } printf( "\n" ); row = row + 1; } Inner loop - print one row Outer loop - print three rows

  36. #define ROWS 3 #define COLS 5 ... for ( row = 1; row <= ROWS ; row = row + 1 ) { for ( col = 1 ; col <= COLS ; col = col + 1 ) { printf(“*”); } printf( "\n" ); } outer loop - print 3 rows inner loop - print one row

  37. How would you print the following diagram? Solution: for every row ( row = 1, 2, 3, 4, 5 ) print row stars * ** *** **** ***** #define ROWS 5 ... int row, col ; for ( row = 1 ; row <= ROWS ; row = row + 1 ) { for ( col = 1 ; col <= row ; col = col + 1) { printf( “*” ) ; } printf( "\n" ); }

  38. Remember the function to print rows of asterisks between lines of output? Now we can write a generalized function: void print_banner( int lines, int numchar, char ch ) { int i, j ; for ( i = 0 ; i < lines ; i = i + 1 ) { for ( j = 0 ; j < numchar ; j = j + 1 ) printf ( "%c", ch); } print (“\n”); } }

  39. Exercise Study and execute the following program. #include <stdio.h> #define N 7 int main(void) { int cnt = 0, i, j, k; for (i = 0; i <= N; ++i) for (j = 0; j <= N; ++j) for (k = 0; k <= N; ++k) if (i + j + k == N) { ++cnt; printf("%3d%3d%3d\n", i, j, k); } printf("\nCount: %d\n", cnt); return (0); }

  40. do...while loop The do…while loop is like a while loop, but it does the condition test at the end of the loop  all statements in loop body are executed at least once This can be very useful for doing things like checking user input.

  41. Example Checking user input: do { printf(“Enter your age: “); scanf(“%d”, &age); } while (age < 0);

  42. Example • counter = 1; • do { • printf( "%d ", counter ); • } while (++counter <= 10); Example - sum the digits of a positive number   sum = 0; do { sum += n % 10; n /= 10; } while(n > 0); printf("The sum of the digits is = %d\n", sum);

  43. #include <stdio.h> void main(){ int n, sum; while ( (printf("Enter number = ") && scanf("%d",&n) && n) != 0 ) { sum = 0; do { sum += n % 10; n /= 10; } while(n > 0); printf("The sum of the digits is = %d\n", sum); } } Practice: sum-digit.c while condition true (1) true (1) false (n==0) true (n != 0)

  44. Controlling Repetition break and while Causes an exit from the innermost enclosing loop. • #include <stdio.h> • #include <math.h> • int main(void) • { • int x; • while (1) { • scanf("%d", &x); • If (x < 0) • break; • printf ("square root = %.2f\n", sqrt(x)); • } • printf ("Bye!\n"); • return (0); • }

  45. Controlling Repetition … break and for Causes an exit from the innermost enclosing loop. Will update be executed before leaving the for loop? • #include <stdio.h> • int main(void) • { • int i, x; • for (i=0; i<10; i++) { • printf("i = %d\t", i); • printf("x = ? "); • scanf("%d", &x); • if (x==0) • break; • } • printf("After the loop, i = %d\n", i); • printf ("Bye!\n"); • return (0); • } i = 0 x = ? 10 i = 1 x = ? 20 i = 2 x = ? 4 i = 3 x = ? 5 i = 4 x = ? 0 After the loop, i = 4 Bye!

  46. Controlling Repetition … continue Causes the current iteration of a loop to stop, and begins the next iteration. • #include <stdio.h> • #define MAX 5 • int main(void) • { • int data, sum=0, k; • for (k=0; k<MAX; k++) { • scanf ("%d", &data); • if (data <= 0) • continue; • sum += data; • } • printf ("Sum of positive values is %d\n.", sum); • return (0); • } 10 20 -1 90 -5 Sum of positive values is 120.

  47. How to debug and test programs • Debugger Program • Single-step execution (F8) • Add Watch-window (Alt+W W) • Breakpoints • Debugging without a debugger • Insert additional diagnostic calls to printf to trace the values of critical values #define DEBUG 0 if (DEBUG) printf ……

  48. Common Programming errors • Off-by-One Loop errors for (i =0; i<n; i++) sum+= i; for (i =0; i<=n; i++) sum+= i; Loop body is executed n times Loop body is executed n+1 times

  49. Common Programming errors … Syntax of the for statement for (initialization expression; loop repetition condition; update expression ) Do not put ; here Always use braces around the loop body, whether it contains one or many statements

More Related