Sudeshna Sarkar, IIT Kharagpur 1 Programming and Data Structure Sudeshna Sarkar Lecture 7
Sudeshna Sarkar, IIT Kharagpur 2 main () { int sum=0; int input, inner, outer; printf(“Input an integer : “); scanf (“%d”, &input) ; for (outer=1; outer <= input; outer++) for (inner=0; inner < outer; inner++) sum += inner; printf (“The result is %d\n”, sum) ; }
Sudeshna Sarkar, IIT Kharagpur 3 Some Loop Pitfalls while (sum <= NUM) ; sum = sum+2; for (i=0; i<=NUM; i++); sum = sum+i; for (i=1; i!=10; i=i+2) sum = sum+i; double x; for (x=0.0; x<10.0; x=x+0.2) printf(“%.18f”, x);
Sudeshna Sarkar, IIT Kharagpur 4 Doubles and floats What you expect: What you may get:
Sudeshna Sarkar, IIT Kharagpur 5 Use ints as loop counters int i; double x; for (i=0; i<50; i=i+1) { x = (double)i/5.0; printf (“%.18f”, x); }
Sudeshna Sarkar, IIT Kharagpur 6 Iteration Summary General Pattern : initialize test do stuff update go back to re-test, re-do stuff, re-update,... while and for are equally general in C use for when initialize/test/update are simple, especially when counting.
Sudeshna Sarkar, IIT Kharagpur 7 Event Driven Programming General Pattern : Program starts, sets itself up. Waits for some event or command to happen mouse click, key click, timer, menu selection etc. Program performs operation (“handles” the command) Program goes back to waiting.
Sudeshna Sarkar, IIT Kharagpur 8 Simple Command Interpreter Read in “commands” and execute them. Input - single characters a - execute command Add by calling Add() s - execute command Sub by calling Sub() q - quit Pseudocode for main loop: get next command if a, execute command Add() if b, execute command Sub() if q, signal quit
Sudeshna Sarkar, IIT Kharagpur 9 Command Interpreter Loop Control repeat until quit signal use variable “done” to indicate when done set done to false while not done body statements if quit command, set done to true
Sudeshna Sarkar, IIT Kharagpur 10 Command Interpreter program #define FALSE 0 #define TRUE 1 int main (void) { char command; int done = FALSE; while (!done) { printf (“Input command:”); scanf(“%c”,&command); switch (command) { case ‘A’: case ‘a’: Add(); break; case ‘S’: case ‘s’: Sub(); break; case ‘Q’: case ‘q’: done=TRUE; }
Sudeshna Sarkar, IIT Kharagpur 11 Exercise a Write a C program which accepts as input a single integer k, then writes a pattern consisting of a single 1 on the first line, two 2s on the 2nd line, three 3s on the 3rd line, until it writes k occurrences of k on the last line. For example, if the input is 4, the output should be:
Sudeshna Sarkar, IIT Kharagpur 12 Exercise b Write a C program which accepts as input a single integer k, then generates the following pattern of k lines: For example, if the input is 5, the output should be:
Sudeshna Sarkar, IIT Kharagpur 13 Test if a number is prime prime = 1; for (i=2; i<num; i++) { if (num%i == 0) prime=0; } if (prime == 1) printf (“%d” is a prime number\n”);
Sudeshna Sarkar, IIT Kharagpur 14 Test if a number is prime prime = 1; limit = sqrt ((double)num); for (i=2; i<limit; i++) { if (num%i == 0) { prime=0; break; } if (prime == 1) printf (“%d” is a prime number\n”);
Sudeshna Sarkar, IIT Kharagpur 15 Break and continue These two statements are used in loop control “break” exits the innermost current loop (for, while, do-while) and to exit from a switch Control will be transferred out of the loop “continue” starts the next iteration of the loop (for, while, do-while) used to bypass the remainder of the current pass through a loop
Sudeshna Sarkar, IIT Kharagpur 16 do { scanf (“%f”, &x); if (x<0) { printf(“Error, neg x”); break; }... /*process non-neg x */ } while (x<=100); for (count=0;count<n;count++) {... while ((c=getchar()) != ‘\n’) { if (c==‘*’) break;... }
Sudeshna Sarkar, IIT Kharagpur 17 do { scanf (“%f”, &x); if (x<0) { printf(“Neg value forx”); continue; }... /*process non-neg x */ } while (x<=100);
Sudeshna Sarkar, IIT Kharagpur 18 Ex: Write a loop that will calculate the sum of an AP series upto n terms Sum= a + (a+d) +(a+2d) (a+ (n-1)d) sum = a; for (i=1; i<n; i++) { sum = sum +a+ i*d; } printf (‘%d”, sum); sum = a; term = a; for (i=1; i<n; i++) { term = term + d; sum = sum + term; } printf (‘%d”, sum);
Sudeshna Sarkar, IIT Kharagpur 19 Exercise c Write a C program that takes as input a positive integer n, and prints all prime numbers between 2 and n.
Sudeshna Sarkar, IIT Kharagpur 20 Exercise d Write a C program that calculates the sum of the first n odd numbers: *n-1
Sudeshna Sarkar, IIT Kharagpur 21 The sine of x can be calculated approximately by summin the first n terms of the infinite series: sin x = x - x 3 /3! + x 5 /5! – x 7 /7! +... where x is expressed in radians ( radians = 180 degrees). Write a C program that will read in a value for x and will calculate its sine. (i) sum the first n terms (ii)continue adding successive terms till the value of the next term becomes smaller (in magnitude) than 10 -5
Sudeshna Sarkar, IIT Kharagpur 22 scanf (“%f”, &x); x = x*PI/180.0; sineval = x; term = x; for (i=1; i<n; i++) { term = (-1)*term*x*x/(2*i*(2*i+1)); sineval = sineval + term; }
Sudeshna Sarkar, IIT Kharagpur 23 scanf (“%f”, &x); x = x*PI/180.0; sineval = x; term = x; for (i=1; term< ; i++) { term = (-1)*term*x*x/(2*i*(2*i+1)); sineval = sineval + term; } printf (“The value of sine is %f to %d terms\n”,sineval, i);