Download presentation
Presentation is loading. Please wait.
Published byEverett Harrison Modified over 9 years ago
1
1 Control Structures and Data Files Turgay Korkmaz Office: SB 4.01.13 Phone: (210) 458-7346 Fax: (210) 458-4437 e-mail: korkmaz@cs.utsa.edu web: www.cs.utsa.edu/~korkmaz CS 2073 Computer Programming w/Eng. Applications Ch 3
2
2 Lecture++; NameAddrContent Lecture7
3
3 3.1 Algorithm Development So far, we considered very simple programs (read, compute, print) Top-down Design Start from the big picture Use a process called divide-and-conquer Keep dividing the problem until steps are detailed enough to convert to a program Refinement with Pseudo-code (English like statements) and Flowchart (diagram, graph)
4
4 Pseudo-code Notation and Flowchart Symbols
5
5 Structured Programming Sequence Selection Repetition yesno yes no Use simple control structures to organize the solution to a problem
6
6 Sequence
7
7 Selection
8
8 Repetition
9
9 Extras Evaluation of alternative solution A problem can be solved in many different ways Which is the best (e.g, faster, less memory req) Error condition Do not trust user! Check the data. A=b/c; Be clear about specifications Generation of Test Data Test each of the error conditions Program validation and verification Program walkthrough
10
10 3.2 Conditional Expressions Selection and repetition structures use conditions, so we will first discuss them A condition is an expression (e.g., x= a > b) that can be evaluated to be TRUE (any value > 0) or FALSE (value of 0) Conditional Expression is composed of expressions combined with relational and/or logical operators
11
11 Relational Operators == equality(x == 3) !=non equality (y != 0) <less than (x < y) >greater than (y > 10) <=less than equal to (x <= 0) >=greater than equal to (x >= y) !!! a==b vs. a=b !!!
12
12 Examples A < B fabs(denum) < 0.0001 D = b > c; if (D) A=b+c; Mixing with arithmetic op X+Y >= K/3 4 2 -0.01 ? 6 4 2 1 10 A B denum D b c X Y K
13
13 Logical Operators ! not !(x==0) && and (x>=0) && (x<=10) ||or (x>0) || (x<0) ABA && BA || B!A!B False True FalseTrueFalseTrue False TrueFalse TrueFalseTrue False
14
14 Examples A =5 A+B * 2 =A/2 A<B || C<B && A-2 < 10 A < B < C ???? A<B<C is not the same as (A<B) && (B<C) 4 2 6 ABCABC
15
15 Precedence for Arithmetic, Relational, and Logical Operators
16
16 Exercise Assume that following variables are declared a = 5.5b = 1.5 k = -3 Are the following true or false a < 10.0 + k a + b >= 6.5 k != a-b !(a == 3*b) a 5 fabs(k)>3 || k<b-a
17
17 Exercise: Logical Circuit y1 = x1 && x2; y2 = x3 || x4; y3 = !x5; z1 = y1 || y2; z2 = y2 && y3 Without using y1, y2, y3 z1 = x1 && x2 || (x3 || x4); z2 = (x3 || x4) && !x5; AND x1 x2 x3 x4 x5 y1 z2 z1 y3 y2 Write a program that reads x1, x2, x3, x4, x5 and computes/prints z1, z2 OR NOT OR AND
18
Exercise 18 abCabC x
19
19 Lecture++; NameAddrContent Lecture8
20
20 3.3 Selection Statements if if else switch
21
21 if statement if(Boolean expression) statement;/* single statement */ if(Boolean expression) { /* more than one statement */ statement1; … statement n; }
22
22 if statement - examples if (x > 0) k++; if(x > 0) { y = sqrt(x); k++; } if(x > 0) /* a common mistake */ y = sqrt(x); k++; NameAddrContent x9 y5 k4
23
23 if else statement if(Boolean expression) statement; else statement; if(Boolean expression) { statement block } else { statement block }
24
24 if else statement What does the following program do? Assume that x, y, temp are declared. if (x > y) temp = x; else temp = y; NameAddrContent x9 y5 temp? if (x > y){ temp = x; } else { temp = y; }
25
25 Exercise Write an if-else statement to find both the maximum and minimum of two numbers. Assume that x, y, min, max are declared. if (x > y) { max = x; min = y; } else { max = y; min = x; } NameAddrContent x9 y5 max? min? 95959595 38953895 38833883 66836683 66666666
26
26 if else statement if (x > y) temp = x; else temp = y; Split the following statement into two separate if statements if (x > y) temp = x; if (x <= y) temp = y;
27
Flow chart for previous slide 27 x > y temp=xtemp=y T if (x > y) temp = x; else temp = y; if (x > y) temp = x; if (x <= y) temp = y; x > y temp=x temp=y T x <= y T
28
28 nested if-else if(x > y) if(y < z) k++; else m++; else j++; x > y y < z k++ m++ j++ T T F F if(x > y) { if(y < z) { k++; } else { m++; } } else { j++; }
29
29 Exercise x > y y < z k++ m++ j++ T T F F int x=9, y=7, z=2, k=0, m=0, j=0; if(x > y) if(y < z) k++; else m++; else j++; What are the values of j, k and m?
30
30 Exercise: Find the value of a int a = 750; if (a>0) if (a >= 1000) a = 0; else if (a <500) a =a*2; else a =a*10; else a =a+3; a > 0 a >= 1000 a = 0 a =a+3 a < 500 a =a*2a =a*10 T T T
31
31 Exercise: Find the value of a int a = 750; if (a>0) { if (a >= 1000) { a = 0; } else { if (a <500) { a =a*2; } else { a =a*10; } } else { a =a*3; } a > 0 a >= 1000 a = 0 a =a+3 a < 500 a=a*2a =a*10 T T T
32
32 Indentation int a = 750; if (a>0) if (a >= 1000) a = 0; else if (a <500) a=a*2; else a=a*10; else a =a+3; int a = 750; if (a>0) if (a >= 1000) a = 0; else if (a <500) a=a*2; else a=a*10; else a = a+3; Not good Good
33
33 Indentation (cont’d) What is the output of the following programs int a = 5, b = 3; if (a>10) { a = 50; b = 20; } printf(" a = %d, b = %d\n",a, b); if (a>10) a = 50; b = 20; printf(" a = %d, b = %d\n",a, b); if (a>10) a = 50; b = 20; printf(" a = %d, b = %d\n",a, b); if (a>10) { a = 50; b = 20; } printf(" a = %d, b = %d\n",a, b); Not good Good
34
34 Exercise: Region in a plane Write a program that reads a point (x, y) from user and prints its region Region 1 Region 4 Region 2 Region 3 For example Enter x y: 3 -1 This point is in Region 4 Enter x y: -1 -5 This point is in region 3 Enter x y: 0 5 ???????
35
35 Lecture++; NameAddrContent Lecture9
36
36 Switch Statement switch(expression) { case constant: statement(s); break; case constant: statement(s); break; default: /* default is optional */ statement(s); }
37
37 Switch Statement Expression must be of type integer or character The keyword case must be followed by a constant break statement is required unless you want all subsequent statements to be executed. switch (op_code) { case ‘N’: printf(“Normal\n”); break; case ‘M’: printf(“Maintenance Needed\n”); break; default: printf(“Error\n”); break; }
38
38 Exercise Convert the switch statement into if statement. switch (op_code) { case ‘N’: printf(“Normal\n”); break; case ‘M’: printf(“Maintenance Needed\n”); break; default: printf(“Error\n”); break; } if (op_code == ‘N’) printf(“Normal\n”); else if (op_code == ‘M’) printf(“Maintenance Needed\n”); else printf(“Error\n”);
39
39 Exercise Convert the following nested if/else statements to a switch statement if (rank==1 || rank==2) printf("Lower division \n"); else { if (rank==3 || rank==4) printf("Upper division \n"); else { if (rank==5) printf("Graduate student \n"); else printf("Invalid rank \n"); } switch(rank) { case 1: case 2: printf("Lower division \n"); break; case 3: case 4: printf("Upper division \n"); break; case 5: printf("Graduate student \n"); break; default: printf("Invalid rank \n"); }
40
40 More selection examples
41
41 Write if-else statement score > 70 age > 18 Good job Excellent job age > 18 Very bad You pass You fail T T T Good luck next time Don’t worry
42
42 if (score > 70) { printf(“You Pass\n”); if (age > 18) { printf(“Good job \n”); } else { printf(“Excellent job\n”); } } else { printf(“You Fail\n”); if (age > 18) { printf(“ Very bad \n”); } else { printf(“ Don’t worry \n”); } printf(“ Good luck next time \n”); }
43
43 get b, c from user a = b + c a 6 T F F Print “RIGTH-LEFT”, a, b, c a= 10 - c * c c = a+b Print “FINAL”, a, b, c Print “LEFT-LEFT”, a, b, c b= a * -c c != b a*b<=12 Print “RIGTH”, a, b, c b= 5 + c * 2 T Print “LEFT-RIGTH”, a, b, c c= 5 + c * 2 F T Print “RIGHT”, a, b, c means printf(“RIGHT a=%lf b=%lf c=%lf \n”,a, b, c);
44
44 a=b+c; if (a 6) { printf("RIGHT a=%lf b=%lf c=%lf \n", a, b, c); b=5+c*2; if (a*b<=12) { } else { printf("RIGHT-LEFT a=%lf b=%lf c=%lf \n",a, b, c); a=10-c*c; } } else { if (c != b) { printf("LEFT-RIGHT a=%lf b=%lf c=%lf \n",a, b, c); c=5+c*2; } printf("LEFT-LEFT a=%lf b=%lf c=%lf \n",a, b, c); b=a*-c; } c=a+b; printf("Final a=%lf b=%lf c=%lf \n",a, b, c);
45
45 Exercise: which task takes more time Suppose we have two tasks A and B A takes Ah hours, Am minutes, and As seconds B takes Bh hours, Bm minutes, and Bs seconds User enters Ah Am As Bh Bm Bs Write if-else statements to print out which task takes more time?
46
46 Max, Min, Median Write a program that reads 3 numbers a, b and c from user and computes minimum, median and maximum of the numbers. Example: a = 2, b = 5, c = 3 minimum = 2, maximum = 5, median = 3 a = 2, b = 2, c = 3 minimum = 2, maximum = 3, median = 2
47
47 Another if-else flowchart if( A > 8) { A=b+c; if(A < 4) B=b*c; if(A > 8) B=b/c; } else { A=b-c; if(A < 5) B=b+c; else B=b%c; A=B; } A > 8 A < 4 A > 8 B=b*c B=b/c A=b-c A < 5 B=b+c B=b%c A=B A=b+c T T T T
48
48 Exercise: Assign Letter Grade Given a score and the following grading scale write a program to find the corresponding grade. 90-100A 80-89B 70-79C 60-69D 0-59F
49
49 Solution-1 if ((score >= 90) && (score <=100)) grade = 'A'; else if ((score >= 80) && (score <= 89)) grade = 'B'; else if ((score >= 70) && (score <= 79)) grade = 'C'; else if ((score >= 60) && (score <= 69)) grade = ‘D'; else if ((score >= 0) && (score <= 59)) grade = ‘F'; else printf("Invalide Score\n");
50
50 Solution-2 if ((score >= 0) && (score <= 100)) if (score >= 90) grade = 'A'; else if (score >= 80) grade = 'B'; else if (score >= 70) grade = 'C'; else if (score >= 60) grade = ‘D'; else grade = ‘F'; else printf("Invalide Score\n");
51
51 Triangle inequality Suppose we want to check if we can make a triangle using a, b, c a b c |a-b| <= c |a-c| <= b |b-c| <= a a+b >= c a+c >= b b+c >= a
52
52 Charge for money transfer Suppose you transfer $N and bank’s charge occurs as follows. Write a program that reads N and computes cost
53
53 Compute Queuing Delay Write C program that computes and prints out average delay in a queuing system, where the average delay is given as follows
54
54 #include int main(void) { /* Declare variables. If needed, you can declare more*/ double rho, mu, sigma, AvgDelay; printf("Enter rho(utilization), mu(service time) and " "sigma (standard deviation of service time) : "); scanf("%lf %lf %lf", &rho, &mu, &sigma); /* Compute and print the average delay using rho, mu, sigma */ if( rho > 0 && rho < 1) { AvgDelay = (rho / (1 - rho)) – rho*rho / (2 * (1-rho)) * (1-mu*mu*sigma*sigma); printf("AvgDelay = %lf \n", AvgDelay); } else if (rho >=1){ printf("AvgDelay is infinity \n"); } else printf("rho cannot be negative \n"); system("pause"); /* Exit program. */ return 0; }
55
55 Spell out a number in text using if-else and switch Write a program that reads a number between 1 and 999 from user and spells out it in English. For example: 453 Four hundred fifty three 37 Thirty seven 204 Two hundred four
56
56 Lecture++; NameAddrContent Lecture10
57
57 Lecture++; NameAddrContent Lecture11
58
MIDTERM 1 58
59
59 Lecture++; NameAddrContent Lecture12
60
60 Loop (Repetition) Structures
61
61 Problem: Conversion table degrees radians Degrees to Radians 0 0.000000 10 0.174533 20 0.349066 30 0.523599 … 340 5.934120 350 6.108653 360 6.283186 radians = degrees * PI / 180;
62
62 #include #define PI 3.141593 int main(void) { int degrees=0; double radians; printf("Degrees to Radians \n"); degrees = 0; radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians); degrees = 10; radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians); degrees = 20; radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians); … degrees = 360; radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians); } Sequential Solution degrees = ??? radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians); Not a good solution
63
63 Loop Solution degrees = ??? radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians); #include #define PI 3.141593 int main(void) { int degrees=0; double radians; printf("Degrees to Radians \n"); while (degrees <= 360) { radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians); degrees += 10; } } degrees+=10 means degrees= degrees+10
64
64 Loop (Repetition) Structures while statement do while statement for statement Two new statements used with loops break and continue
65
65 while statement while(expression) statement; while(expression) { statement; … }
66
66 Example #include #define PI 3.141593 int main(void) { int degrees=0; double radians; printf("Degrees to Radians \n"); while (degrees <= 360) { radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians); degrees += 10; } return 0; }
67
67 do while do statement; while(expression); do { statement1; statement2;... } while(expression); S note - the expression is tested after the statement(s) are executed, so statements are executed at least once.
68
68 Example #include #define PI 3.141593 int main(void) { int degrees=0; double radians; printf("Degrees to Radians \n"); do { radians = degrees*PI/180; printf("%6i %9.6f \n",degrees,radians); degrees += 10; } while (degrees <= 360); return 0; }
69
69 for statement for(initialization ; test ; increment or decrement ) statement; for(initialization ; test ; increment or decrement ) { statement; … }
70
70 Example #include #define PI 3.141593 int main(void) { int degrees; double radians; printf("Degrees to Radians \n"); for (degrees=0; degrees<=360; degrees+=10) { radians = degrees*PI/180; printf("%6i %9.6f \n", degrees, radians); } return 0; }
71
71 for statement initialize test Increment or decrement true statement(s)
72
72 Examples int sum =0, i; for( i=1 ; i < 7;i=i+2 ){ sum = sum+i; } int fact=1, n; for( n=5 ; n>1 ; n--){ fact = fact * n; } ? 0 5 1 i sum n fact 1 1 3 4 5 9 7 n--; means n=n-1; n++; means n=n+1;
73
73 Exercise Determine the number of times that each of the following for loops are executed. for (k=3; k<=10; k++) { statements; } for (k=3; k<=10; ++k) { statements; } for (count=-2; count<=5; count++) { statements; }
74
74 Example What will be the output of the following program, also show how values of variables change in the memory. int sum1, sum2, k; sum1 = 0; sum2 = 0; for( k = 1; k < 5; k++) { if( k % 2 == 0) sum1 =sum1 + k; else sum2 = sum2 + k; } printf(“sum1 is %d\n”, sum1); printf(“sum2 is %d\n”, sum2); 0 2 6 0 1 4 1 2 3 4 5 sum1 sum2 k sum1 is 6 sum2 is 4
75
75 For vs. while loop Convert the following for loop to while loop for( i=5; i<10; i++) { pritntf(“ i = %d \n”, i); } i=5; while(i<10){ pritntf(“ i = %d \n”, i); i++; }
76
76 break statement break; terminates loop execution continues with the first statement following the loop sum = 0; for (k=1; k<=5; k++) { scanf(“%lf”,&x); if (x > 10.0) break; sum +=x; } printf(“Sum = %f \n”,sum); sum = 0; k=1; while (k<=5) { scanf(“%lf”,&x); if (x > 10.0) break; sum +=x; k++; } printf(“Sum = %f \n”,sum);
77
77 continue statement continue; forces next iteration of the loop, skipping any remaining statements in the loop sum = 0; for (k=1; k<=5; k++) { scanf(“%lf”,&x); if (x > 10.0) continue; sum +=x; } printf(“Sum = %f \n”,sum); sum = 0; k=1; while (k<=5) { scanf(“%lf”,&x); if (x > 10.0) continue; sum +=x; k++; } printf(“Sum = %f \n”,sum); sum = 0; k=1; while (k<=5) { scanf(“%lf”,&x); if (x > 10.0){ k++; continue; } sum +=x; k++; } printf(“Sum = %f \n”,sum);
78
78 Example: what will be the output int main() { int a, b, c; a=5; while(a > 2) { for (b = a ; b < 2 * a ; b++ ) { c = a + b; if (c < 8) continue; if (c > 11) break; printf( “a = %d b = %d c = %d \n”, a, b, c); } /* end of for-loop */ a--; } /* end of while loop */ } a = 5 b = 5 c = 10 a = 5 b = 6 c = 11 a = 4 b = 4 c = 8 a = 4 b = 5 c = 9 a = 4 b = 6 c = 10 a = 4 b = 7 c = 11 a = 3 b = 5 c = 8
79
79 Example: A man walks Suppose a man (say, A) stands at (0, 0) and waits for user to give him the direction and distance to go. User may enter N E W S for north, east, west, south, and any value for distance. When user enters 0 as direction, stop and print out the location where the man stopped N E S W
80
80 float x=0, y=0; char direction; float distance; while (1) { printf("Please input the direction as N,S,E,W (0 to exit): "); scanf("%c", &direction); fflush(stdin); if (direction=='0'){ /*stop input, get out of the loop */ break; } if (direction!='N' && direction!='S' && direction!='E' && direction!='W') { printf("Invalid direction, re-enter \n"); continue; } printf("Please input the mile in %c direction: ", direction); scanf ("%f", &distance); fflush(stdin); if (direction == 'N'){/*in north, compute the y*/ y = y + distance; } else if (direction == 'E'){/*in east, compute the x*/ x = x + distance; } else if (direction == 'W'){/*in west, compute the x*/ x= x - distance; } else if (direction == 'S'){/*in south, compute the y*/ y = y- distance; } printf("\nCurrent position of A: (%4.2f, %4.2f)\n", x, y); /* output A's location */
81
81 Lecture++; NameAddrContent Lecture13
82
82 More loop examples
83
83 Exercise What is the output of the following program? for (i=1; i<=5; i++) { for (j=1; j<=4; j++){ printf(“*”); } printf(“\n”); } Output ****
84
84 Exercise What is the output of the following program? for (i=1; i<=5; i++) { for (j=1; j<=i; j++){ printf(“*”); } printf(“\n”); } Output * ** *** **** *****
85
What/how do you need to change in th following program? for (i=1; i<=5; i++) { for (j=1; j<=i; j++){ printf(“*”); } printf(“\n”); } 85 Example: nested loops to generate the following output i=1 * i=2 + + i=3 * * * i=4 + + + + i=5 * * * * * int i, j; for(i=1; i <= 5; i++){ printf("i=%d ", i); for(j=1; j <= i; j++) { if (i % 2 == 0) printf("+ "); else printf("* "); } printf("\n"); }
86
86 Exercise: Modify the following program to produce the output. for (i=A; i<=B; i++) { for (j=C; j<=D; j++) { printf(“*”); } printf(“\n”); } Output ***** **** *** ** *
87
87 Exercise Write a program using loop statements to produce the following output. Output * ** *** **** *****
88
88 Example Write a program that prints in two columns n even numbers starting from 2, and a running sum of those values. For example suppose user enters 5 for n, then the program should generate the following table: Enter n (the number of even numbers): 5 Value Sum 2 2 4 6 6 12 8 20 10 30
89
89 #include int main(void) { /* Declare variables. */ int n; int sum, i; printf("Enter n "); scanf("%d",&n); printf("Value \t Sum\n"); sum = 0; for(i=1; i <=n; i++){ sum = sum + 2*i; printf("%d \t %d\n", 2*i, sum); } return 0; }
90
90 Compute x y when y is integer Suppose we don’t have pow(x,y) and y is integer, write a loop to compute x y printf(“Enter x, y :”); scanf(“%d %d”, &x, &y); res=1; for(i=1; i<=y; i++){ res = res * x; }
91
91 Exercise: sum Write a program to compute the following Enter n total=0; for(i=1; i<=n; i++) total = total + i ; print total Enter n total=0; for(i=1; i<=n; i++) total = total + 2 * i ; print total
92
92 Exercise: sum Write a program to compute the following Enter x and m total=0; for(i=0; i<=m; i++) total = total + pow(x, i); print total Enter x and m total=0; sofarx=1; for(i=0; i<=m; i++) { total = total +sofarx; sofarx = sofarx * x; } print total
93
93 Exercise: ln 2 Write a program to compute the following Enter n ln2=0; for(i=1; i<=n; i++) if ( i % 2 == 0) ln2 = ln2 - 1.0 / i; else ln2 = ln2 + 1.0 / i; print total
94
94 Exercise: e x Write C program that reads the value of x and n from the keyboard and then approximately computes the value of e x using the following formula: Then compare your approximate result to the one returned by exp(x) in C library, and print out whether your approximation is higher or lower.
95
95 int i, n; double x, ex; double powx, fact; printf("Enter the value of x and n : "); scanf("%lf %d",&x, &n); /* Write a loop to compute e^x using the above formula */ ex=1.0; fact=1.0; powx=1.0; for(i=1; i<=n; i++){ powx = powx * x; fact = fact * i; ex = ex + powx / fact; } printf("Approx value of e^x is %lf when n=%d\n",ex, n); /* Check if ex is higher/lower than exp(x) in math lib.*/ if(ex < exp(x)) printf("ex est is lower than exp(x)=%lf\n",exp(x)); else if (ex > exp(x)) printf("ex est is higher than exp(x)=%lf\n",exp(x)); else printf("ex est is the same as exp(x)\n");
96
96 Exercise: sin x Compute sin x using printf(“Enter x n :”); scanf(“%lf %d”, &x, &n); total=0; powx=x; factx=1; for(i=0; i <= n; i++){ k= 2*n+1; if (i%2==0) total= total - powx/factx; else total= total + powx/factx; powx= powx * x * x; factx = factx * k * (k-1); } printf( “sin(%lf) is %lf\n”,x, total);
97
97 For vs. while loop : Convert the following for loop to while loop for( i=5; i<10; i++) { printf(“AAA %d \n”, i); if (i % 2==0) continue; pritntf(“BBB %d \n”, i); } i=5; while(i<10) { printf(“AAA %d \n”, i); if (i % 2==0) { i++; continue; } pritntf(“BBB %d \n”, i); i++; }
98
98 Skip Study Section 3.5 from the textbook
99
99 Lecture++; NameAddrContent Lecture14
100
100 3.6 Data Files So far, we used scanf and printf to enter data by hand and print data on the screen What if we have 1000 data points to enter? Can we still enter them by hand? What if the output has several lines and we want to store the output results or use them with other programs?
101
101 Read Access to Data Files
102
102 Read Access to Data Files #include File pointer must be defined in C program FILE *sf ; File pointer must be associated with a specific file using the fopen function If the program and data file are in the same directory sf = fopen(“sensor1.dat”, “r”); Else give the full path sf = fopen(“C:\turgay\H\Teaching\15b-FALL07-cs2073\prog\sensor1.dat”, “r”);
103
103 Input file - use fscanf instead of scanf #include FILE *sf; double t, motion; sf = fopen(“sensor1.dat”, “r”); while( ???? ){ fscanf( sf, “%lf %lf”, &t, &motion); } Read from Data Files t motion sf 2 4.4 3 3.5 4 6.3
104
104 Create New Data Files Write Access to Data Files #include File pointer must be defined in C program FILE *bf ; File pointer must be associated with a specific file using the fopen function If the program and data file are in the same directory bf = fopen(“balloon.dat”, “w”); Else give the full path bf = fopen(“C:\turgay\H\Teaching\15b-FALL07-cs2073\prog\balloon.dat”, “w”);
105
105 Output file - use fprintf instead of printf #include FILE *bf; double time=6.5, height=5.3; bf = fopen(“balloon.dat”, “w”); fprintf( bf, “t: %f h: %f\n”, time, height); Write to Data Files time height bf 6.5 5.3 7.1 8.3 3.7 t: 6.500000 h: 5.300000 t: 7.100000 h: 8.300000 t: 8.300000 h: 3.700000
106
106 At the end, Use fclose fclose(sf); fclose(bf);
107
107 Example Read 6 values from a file named my_data.txt and write their average into another file named avg-of-6.txt 6 5 4 2 3 4 5 my_data.txt program 4 avg-of-6.txt
108
108 Example: average grade Suppose we keep the id and three HW grades of 36 students in a file named grades.txt Write a program to compute average grade for each student and write each students avg into another file named avg-hw.txt 1 5 10 15 2 10 20 30 … 36 4 6 20 grades.txt program 1 10 2 20 … 36 10 avg-hw.txt
109
109 Lecture++; NameAddrContent Lecture15
110
110 Reading Data Files When to stop Counter controlled loop First line in file contains count Use for loop Trailer signal or Sentinel signal Data ends when a special data value is seen -999 Use while loop End of file controlled loop When file is created EOF is inserted Use while loop feof(fileptr) > 0 when EOF reached fscanf cannot read as many values as you wanted
111
111 Check what fopen, fscanf, fprintf return FILE *fp; fp=fopen(“data.txt”, “r”); if (fp==NULL){ printf(“Program cannot open the file\n”); return -1; } N=fscanf(fp, “%d %d %d”, &v1, &v2, &v3); /* N is the number of values read successfully */ while(fscanf(fp, “%d %d %d”, &v1, &v2, &v3) == 3) { /* process v1 v2 v3 */ } if (fp=fopen(“data.txt”, “r”)) == NULL){
112
112 Counter controlled loop Usually first line in file contains the count #include int main() { FILE *scorefile; int score, count, i, sum=0; if((scorefile = fopen("scores2.txt","r")) == NULL) ){ printf(“Program cannot open the file\n”); exit(-1); } fscanf(scorefile,"%d", &count); for (i=1; i<=count; i++) { fscanf(scorefile,"%d", &score); sum = sum + score; } printf(“Average score %lf \n",(double)sum/count); fclose(scorefile); return(0); } 6 56 78 93 24 85 63 scores2.txt
113
113 Trailer signal or Sentinel signal #include int main() { FILE *scorefile; int score, count=0, i, sum=0; if((scorefile = fopen("scores3.txt","r")) == NULL) ){ printf(“Program cannot open the file\n”); exit(-1); } fscanf(scorefile,"%d", &score); while(score >= 0) { count++; sum = sum + score; fscanf(scorefile,"%d", &score); } printf(“Average score %lf \n",(double)sum/count); fclose(scorefile); return(0); } 56 78 93 24 85 63 -999 scores3.txt
114
114 End of file controlled loop #include int main() { FILE *scorefile; int score, count=0, i, sum=0; if((scorefile = fopen("scores4.txt","r")) == NULL) ){ printf(“Program cannot open the file\n”); exit(-1); } while (fscanf(scorefile,"%d",&score) == 1) { count++; sum = sum + score; } printf(“Average score %lf \n",(double)sum/count); fclose(scorefile); return(0); } 56 78 93 24 85 63 scores4.txt while (feof(scorefile) <= 0) { fscanf(scorefile,"%d",&score); count++; sum = sum + score; }
115
115 Exercise In previous three programs, we found average. Suppose, we want to also know how many data points are greater than average. Change one of the previous programs to determine the number of data points that are greater than average.
116
116 Exercise Given a file of integers. Write a program that finds the minimum number in another file. Algorithm to find minimum in a file: open file set minimum to a large value while (there are items to read) read next number x from file if (x < min) min = x display the minimum close file File 56 78 93 24 85 63 Solution available on the next page
117
117 #include int main() { FILE *scorefile; int score; int min; scorefile = fopen("scores.txt","r"); if (scorefile == NULL) printf("Error opening input file\n"); else { min = 110; while (feof(scorefile) <= 0) { fscanf(scorefile,"%d",&score); if (score < min) min = score; } printf("Min = %d\n",min); fclose(scorefile); system("pause"); return(0); }
118
118 Exercise Given a file of integers. Write a program that searches for whether a number appears in the file or not. // algorithm to check for y in a file open file set found to false while (there are items to read and found is false) read next number x from file if (x equals y) set found to true Display found message to user Display not found message to user close file File 56 78 93 24 85 63 Solution available on the next page
119
119 #include int main() { FILE *scorefile; int score, num, found; printf("Please Enter a number\n"); scanf("%d", &num); scorefile = fopen("scores.txt","r"); if (scorefile == NULL) printf("Error opening input file\n"); else{ found = 0; while ((feof(scorefile) <= 0) && (found == 0)) { fscanf(scorefile,"%d",&score); if (score == num) found = 1; } if (found == 0) printf("%d does not appear in the file\n",num); else printf("%d appears in the file\n",num); } fclose(scorefile); system("pause"); return(0); }
120
120 Exercise Change the previous program to count how many times the given number appears in the file? Instead of fount =1; put fount++;
121
121 Read/Write Example Suppose we have a data file that contains worker ID, the number of days that a worker worked, and the number of hours the worker worked each day. We would like to find out how much to pay for each worker. To compute this, find the total number of hours for each worker and multiply it by 7 dollar/hour. For instance, your program should process the following input.txt and generate the corresponding output.txt as follows: Id numofD hour1 hour2 hour3 Id total-hourpayment 1 2 3 8 2 3 5 7 6 3 1 2 4 2 5 1 5 3 1 3 2 input.txt 1 1177 2 18126 3214 4642 5642 output.txt progra m
122
122 #include int main(void) { FILE *infp, *outfp; int ID, numofD, hour, i, total_hour; if ((infp = fopen("input.txt", "r"))==NULL){ printf("Input file cannot be opened\n"); return -1; } if ((outfp = fopen("output.txt", "w"))==NULL){ printf("Output file cannot be opened\n"); return -1; } while(fscanf(infp, "%d %d",&ID, &numofD)==2) { total_hour=0; for(i=1; i <= numofD; i++){ fscanf(infp,”%d”,&hour); total_hour +=hour; } fprintf(outfp, "%3d %3d %4d\n", ID, total_hour, total_hour*7); } fclose(infp); fclose(outfp); return 0; }
123
123 Read/write Example Suppose we have a data file that contains student ID and his/her homework grades for hw1, hw2, hw3, and hw4. We would like to find out min, max and average grade for each student and write this information into another file. For instance, your program should process the following input.txt and generate the corresponding output.txt as follows: 1 20 30 28 18 2 35 50 27 36 3 17 20 34 44 4 20 50 14 12 5 33 15 30 20 input.txt 1 18 30 24.00 2 27 50 37.00 3 17 44 28.75 4 12 50 24.00 5 15 33 24.50 output.txt prog Id hw1hw2hw3 hw4 Id min max avg
124
124 #include int main(void) { FILE *infp, *outfp; int i,ID, hw, max, min; double sum; if ((infp = fopen("input.txt", "r"))==NULL){ printf("Input file cannot be opened\n"); return -1; } if ((outfp = fopen("output.txt", "w"))==NULL){ printf("Output file cannot be opened\n"); return -1; } while(fscanf(infp, "%d %d",&ID, &hw)==2) { sum=max=min=hw; for(i=1; i <= 3; i++){ fscanf(infp,”%d”,&hw); sum = sum + hw; if (hw > max) max = hw; if (hw < min) min = hw; } fprintf(outfp, "%3d \t %3d \t %4d \t %3.2lf\n", ID, min, max, sum/4); } fclose(infp); fclose(outfp); return 0; }
125
Eliminate out of order records Suppose we have a data file that has 5 columns in each row, namely student ID, hw1, hw2, hw3, hw4. We are told that most rows in this file are sorted in an increasing order based on the ID field. Write a program to determine the students whose IDs are not in order and print the IDs and homework grades of such students into another file. 125 2 4 3 3 2 3 3 1 1 1 5 3 5 8 3 1 4 4 1 5 7 3 5 3 3 8 1 2 4 7 4 5 4 6 3 10 2 3 2 9 12 4 8 3 4 1 4 4 1 5 4 5 4 6 3 program
126
126 More example Study 3.7 and 3.8 from the textbook
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.