Title: Control Structures and Data Files
1Control Structures and Data Files
CS 2073 Computer Programming w/Eng. Applications
Ch 3
Turgay Korkmaz Office SB 4.01.13 Phone (210)
458-7346 Fax (210) 458-4437 e-mail
korkmaz_at_cs.utsa.edu web www.cs.utsa.edu/korkmaz
2Name Addr Content
Lecture 7
Lecture
33.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)
4Pseudo-code Notation and Flowchart Symbols
5Structured Programming
Use simple control structures to organize the
solution to a problem
- Sequence
- Selection
- Repetition
6Sequence
7Selection
8Repetition
9Extras
- 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. Ab/c
- Be clear about specifications
- Generation of Test Data
- Test each of the error conditions
- Program validation and verification
- Program walkthrough
103.2 Conditional Expressions
- Selection and repetition structures use
conditions, so we will first discuss them - A condition is an expression (e.g., x a gt b)
that can be evaluated to be - TRUE (any value gt 0) or
- FALSE (value of 0)
- Conditional Expression is composed of expressions
combined with relational and/or logical operators
11Relational Operators
- equality (x 3)
- ! non equality (y ! 0)
- lt less than (x lt y)
- gt greater than (y gt 10)
- lt less than equal to (x lt 0)
- gt greater than equal to (x gt y)
- !!! ab vs. ab !!!
12Examples
4
2
-0.01
?
6
4
2
1
10
A B denum D b c X Y K
- A lt B
- fabs(denum) lt 0.0001
- D b gt c
- if (D)
- Abc
- Mixing with arithmetic op
- XY gt K/3
13Logical Operators
- ! not !(x0)
- and (xgt0) (xlt10)
- or (xgt0) (xlt0)
A B A B A B !A !B
False False False False True True
False True False True True False
True False False True False True
True True True True False False
14Examples
- AltB Cgt5
- AB 2 lt 5 4gtA/2
- AltB CltB A-2 lt 10
- A lt B lt C ????
- AltBltC is not the same as
- (AltB) (BltC)
4
2
6
A B C
15Precedence for Arithmetic, Relational, and
Logical Operators
16Exercise
- Assume that following variables are declared
- a 5.5 b 1.5 k -3
- Are the following true or false
- a lt 10.0 k
- a b gt 6.5
- k ! a-b
- !(a 3b)
- alt10 agt5
- fabs(k)gt3 kltb-a
17Exercise 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
OR
OR
AND
NOT
Write a program that reads x1, x2, x3, x4, x5 and
computes/prints z1, z2
18Exercise
a b C
x
19Name Addr Content
Lecture 8
Lecture
203.3 Selection Statements
21if statement
- if(Boolean expression)
- statement / single statement /
- if(Boolean expression)
- / more than one statement /
- statement1
-
- statement n
-
22if statement - examples
if (x gt 0) k if(x gt 0) y
sqrt(x) k if(x gt 0) / a common mistake
/ y sqrt(x) k
Name Addr Content
x 9
y 5
k 4
23if else statement
- if(Boolean expression)
- statement
- else
- statement
- if(Boolean expression)
- statement block
- else
- statement block
-
24if else statement
- What does the following program do?
- Assume that x, y, temp are declared.
- if (x gt y)
- temp x
- else
- temp y
Name Addr Content
x 9
y 5
temp ?
if (x gt y) temp x else temp
y
25Exercise
- 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 gt y)
- max x
- min y
- else
- max y
- min x
-
Name Addr Content
x
y
max ?
min ?
9 5 9 5
3 8 9 5
3 8 8 3
6 6 8 3
6 6 6 6
26if else statement
Split the following statement into two separate
if statements
- if (x gt y)
- temp x
- else
- temp y
if (x gt y) temp x if (x lt y) temp y
27Flow chart for previous slide
if (x gt y) temp x if (x lt y) temp y
if (x gt y) temp x else temp y
x gt y
T
tempx
x gt y
T
x lt y
T
tempx
tempy
tempy
28nested if-else
if(x gt y) if(y lt z) k else m else j
if(x gt y) if(y lt z) k else
m else j
x gt y
T
F
T
y lt z
j
F
k
m
29Exercise
int x9, y7, z2, k0, m0, j0 if(x gt y) if(y
lt z) k else m else j What are the
values of j, k and m?
30Exercise Find the value of a
int a 750 if (agt0) if (a gt 1000)
a 0 else if (a lt500) a
a2 else a a10 else
a a3
31Exercise Find the value of a
int a 750 if (agt0) if (a gt 1000)
a 0 else if (a lt500)
a a2 else a
a10 else a a3
32Indentation
int a 750 if (agt0) if (a gt 1000)
a 0 else if (a lt500)
aa2 else aa10 else
a a3
int a 750 if (agt0) if (a gt 1000) a
0 else if (a lt500) aa2 else aa10 else a
a3
Good
Not good
33Indentation (contd)
- What is the output of the following programs
- int a 5, b 3
if (agt10) a 50 b 20 printf(" a
d, b d\n",a, b)
if (agt10) a 50 b 20 printf(" a
d, b d\n",a, b)
Not good
if (agt10) a 50 b 20 printf(" a d,
b d\n",a, b)
if (agt10) a 50 b 20 printf(" a
d, b d\n",a, b)
Good
34Exercise Region in a plane
- Write a program that reads a point
- (x, y) from user and prints its region
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 ???????
Region 1
Region 2
Region 4
Region 3
35Name Addr Content
Lecture 9
Lecture
36Switch Statement
switch(expression) case constant statement(s
) break case constant statement(s) brea
k default / default is optional
/ statement(s)
37Switch 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
-
38Exercise
- 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)
39Exercise
Convert the following nested if/else statements
to a switch statement if (rank1 rank2)
printf("Lower division \n") else if
(rank3 rank4) printf("Upper division
\n") else if (rank5)
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")
40More selection examples
41Write if-else statement
score gt 70
T
You pass
You fail
age gt 18
T
age gt 18
T
Good job
Excellent job
Very bad
Dont worry
Good luck next time
42- if (score gt 70)
- printf(You Pass\n)
- if (age gt 18)
- printf(Good job \n)
- else
- printf(Excellent job\n)
-
- else
- printf(You Fail\n)
- if (age gt 18)
- printf( Very bad \n)
- else
- printf( Dont worry \n)
-
- printf( Good luck next time \n)
43Print RIGHT, a, b, c means printf(RIGHT
alf blf clf \n,a, b, c)
44abc if (alt10 b-cgt6)
printf("RIGHT alf blf clf \n", a, b,
c) b5c2 if (ablt12)
else printf("RIGHT-LEFT alf blf
clf \n",a, b, c) a10-cc
else if (c ! b)
printf("LEFT-RIGHT alf blf clf \n",a, b,
c) c5c2
printf("LEFT-LEFT alf blf clf \n",a, b,
c) ba-c cab printf("Final alf
blf clf \n",a, b, c)
45Exercise 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?
46Max, 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
47Another if-else ? flowchart
if( A gt 8) Abc if(A lt 4)
Bbc if(A gt 8) Bb/c else
Ab-c if(A lt 5) Bbc else
Bbc AB
48Exercise Assign Letter Grade
- Given a score and the following grading scale
write a program to find the corresponding grade. - 90-100 A
- 80-89 B
- 70-79 C
- 60-69 D
- 0-59 F
49Solution-1
- if ((score gt 90) (score lt100))
- grade 'A'
- else if ((score gt 80) (score lt 89))
- grade 'B'
- else if ((score gt 70) (score lt 79))
- grade 'C'
- else if ((score gt 60) (score lt 69))
- grade D'
- else if ((score gt 0) (score lt 59))
- grade F'
- else
- printf("Invalide Score\n")
50Solution-2
if ((score gt 0) (score lt 100)) if (score
gt 90) grade 'A' else if (score gt 80)
grade 'B' else if (score gt 70)
grade 'C' else if (score gt 60) grade
D' else grade F' else
printf("Invalide Score\n")
51Triangle inequality
- Suppose we want to check if we can make a
triangle using a, b, c
a-b lt c a-c lt b b-c lt a ab gt c
ac gt b bc gt a
c
a
b
52Charge for money transfer
- Suppose you transfer N and banks charge occurs
as follows. - Write a program that reads N and computes cost
53Compute Queuing Delay
- Write C program that computes and prints out
average delay in a queuing system, where the
average delay is given as follows
54include ltstdio.hgt 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
gt 0 rho lt 1) AvgDelay (rho /
(1 - rho)) rhorho / (2
(1-rho))
(1-mumusigmasigma)
printf("AvgDelay lf \n", AvgDelay)
else if (rho gt1) printf("AvgDelay
is infinity \n") else
printf("rho cannot be negative \n")
system("pause") / Exit program. /
return 0
55Spell out a number in textusing 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
56Name Addr Content
Lecture 10
Lecture
57Name Addr Content
Lecture 11
Lecture
58MIDTERM 1
59Name Addr Content
Lecture 12
Lecture
60Loop (Repetition) Structures
61Problem Conversion tabledegrees ? 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
62Sequential Solution
- include ltstdio.hgt
- define PI 3.141593
- int main(void)
-
- int degrees0
- double radians
- printf("Degrees to Radians \n")
-
- degrees 0
- radians degreesPI/180
- printf("6i 9.6f \n", degrees, radians)
- degrees 10
- radians degreesPI/180
- printf("6i 9.6f \n", degrees, radians)
- degrees 20
degrees ??? radians degreesPI/180
printf("6i 9.6f \n", degrees, radians)
Not a good solution
63Loop Solution
- include ltstdio.hgt
- define PI 3.141593
- int main(void)
-
- int degrees0
- double radians
- printf("Degrees to Radians \n")
-
- while (degrees lt 360)
- radians degreesPI/180
- printf("6i 9.6f \n", degrees, radians)
- degrees 10
-
-
degrees ??? radians degreesPI/180
printf("6i 9.6f \n", degrees, radians)
degrees10 means degrees degrees10
64Loop (Repetition) Structures
- while statement
- do while statement
- for statement
- Two new statements used with loops
- break and continue
65while statement
- while(expression)
- statement
- while(expression)
- statement
- statement
-
-
66Example
- include ltstdio.hgt
- define PI 3.141593
- int main(void)
-
- int degrees0
- double radians
- printf("Degrees to Radians \n")
- while (degrees lt 360)
-
- radians degreesPI/180
- printf("6i 9.6f \n", degrees, radians)
- degrees 10
-
- return 0
67do while
- do
- statement
- while(expression)
- do
- statement1
- statement2
- ...
- while(expression)
- note - the expression is tested after the
statement(s) are executed, so statements are
executed at least once.
68Example
- include ltstdio.hgt
- define PI 3.141593
- int main(void)
-
- int degrees0
- double radians
- printf("Degrees to Radians \n")
- do
-
- radians degreesPI/180
- printf("6i 9.6f \n",degrees,radians)
- degrees 10
- while (degrees lt 360)
- return 0
69for statement
- for(initialization test increment or
decrement ) - statement
- for(initialization test increment or
decrement ) -
- statement
- statement
-
-
70Example
- include ltstdio.hgt
- define PI 3.141593
- int main(void)
-
- int degrees
- double radians
- printf("Degrees to Radians \n")
- for (degrees0 degreeslt360 degrees10)
-
- radians degreesPI/180
- printf("6i 9.6f \n", degrees, radians)
-
- return 0
-
71for statement
initialize
test
Increment or decrement
true
statement(s)
statement(s)
72Examples
- int sum 0, i
- for( i1 i lt 7ii2 )
- sum sumi
-
- int fact1, n
- for( n5 ngt1 n--)
- fact fact n
-
?
0
5
1
3
i sum n fact
1
5
7
1
4
9
n-- means nn-1 n means nn1
73Exercise
- Determine the number of times that each of the
following for loops are executed. - for (k3 klt10 k)
- statements
-
- for (k3 klt10 k)
- statements
-
- for (count-2 countlt5 count)
- statements
-
-
74Example
- 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 lt 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
75For vs. while loop
- Convert the following for loop to while loop
- for( i5 ilt10 i)
- pritntf( i d \n, i)
-
- i5
- while(ilt10)
- pritntf( i d \n, i)
- i
-
76break statement
- break
- terminates loop
- execution continues with the first statement
following the loop - sum 0
- for (k1 klt5 k)
- scanf(lf,x)
- if (x gt 10.0)
- break
- sum x
-
- printf(Sum f \n,sum)
-
sum 0 k1 while (klt5) scanf(lf,x)
if (x gt 10.0) break sum x
k printf(Sum f \n,sum)
77continue statement
- continue
- forces next iteration of the loop, skipping any
remaining statements in the loop - sum 0
- for (k1 klt5 k)
- scanf(lf,x)
- if (x gt 10.0)
- continue
- sum x
-
- printf(Sum f \n,sum)
sum 0 k1 while (klt5) scanf(lf,x)
if (x gt 10.0) k continue
sum x k printf(Sum f
\n,sum)
sum 0 k1 while (klt5) scanf(lf,x)
if (x gt 10.0) continue sum x
k printf(Sum f \n,sum)
78Example what will be the output
- int main()
-
- int a, b, c
- a5
- while(a gt 2)
- for (b a b lt 2 a b )
- c a b
- if (c lt 8) continue
- if (c gt 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
79Example 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
80 float x0, y0 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 /
81Name Addr Content
Lecture 13
Lecture
82More loop examples
83Exercise
- What is the output of the following program?
- for (i1 ilt5 i)
- for (j1 jlt4 j)
- printf()
-
- printf(\n)
Output
84Exercise
- What is the output of the following program?
- for (i1 ilt5 i)
- for (j1 jlti j)
- printf()
-
- printf(\n)
Output
85Example nested loops to generate the following
output
int i, j for(i1 i lt 5 i) printf("id
", i) for(j1 j lt i j) if (i 2
0) printf(" ") else
printf(" ") printf("\n")
- What/how do you need to change in th following
program? - for (i1 ilt5 i)
- for (j1 jlti j)
- printf()
-
- printf(\n)
86Exercise Modify the following program to produce
the output.
- for (iA iltB i)
- for (jC jltD j)
- printf()
-
- printf(\n)
-
Output
87Exercise
- Write a program using loop statements to produce
the following output.
Output
88Example
- 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
89include ltstdio.hgt int main(void) /
Declare variables. / int n int sum, i
printf("Enter n ")
scanf("d",n) printf("Value \t Sum\n")
sum 0 for(i1 i ltn i) sum sum
2i printf("d \t d\n", 2i, sum)
return 0
90Compute xy when y is integer
- Suppose we dont have pow(x,y) and y is integer,
write a loop to compute xy
printf(Enter x, y ) scanf(d d, x,
y) res1 for(i1 ilty i) res res
x
91Exercise sum
- Write a program to compute the following
Enter n total0 for(i1 iltn i) total
total 2 i print total
Enter n total0 for(i1 iltn i) total
total i print total
92Exercise sum
- Write a program to compute the following
Enter x and m total0 sofarx1 for(i0 iltm
i) total total sofarx sofarx
sofarx x print total
Enter x and m total0 for(i0 iltm i)
total total pow(x, i) print total
93Exercise ln 2
- Write a program to compute the following
Enter n ln20 for(i1 iltn i) if ( i 2
0) ln2 ln2 - 1.0 / i else ln2
ln2 1.0 / i print total
94Exercise ex
- Write C program that reads the value of x and n
from the keyboard and then approximately computes
the value of ex 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.
95int 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 ex using the above formula / ex1.0
fact1.0 powx1.0 for(i1 iltn i)
powx powx x fact fact i ex
ex powx / fact printf("Approx value of ex
is lf when nd\n",ex, n) / Check if ex is
higher/lower than exp(x) in math lib./ if(ex lt
exp(x)) printf("ex est is lower than
exp(x)lf\n",exp(x)) else if (ex gt 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")
96Exercise sin x
printf(Enter x n ) scanf(lf d, x,
n) total0 powxx factx1 for(i0 i lt n
i) k 2n1 if (i20) 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)
97For vs. while loop Convert the following for
loop to while loop
- for( i5 ilt10 i)
- printf(AAA d \n, i)
- if (i 20) continue
- pritntf(BBB d \n, i)
-
i5 while(ilt10) printf(AAA d \n, i)
if (i 20) i continue
pritntf(BBB d \n, i) i
98Skip
- Study Section 3.5 from the textbook
99Name Addr Content
Lecture 14
Lecture
1003.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?
101Read Access to Data Files
102Read Access to Data Files
- include ltstdio.hgt
- 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-c
s2073\prog\sensor1.dat, r)
103Read from Data Files
- Input file - use fscanf instead of scanf
- include ltstdio.hgt
- FILE sf
- double t, motion
- sf fopen(sensor1.dat, r)
- while( ???? )
- fscanf( sf , lf lf , t, motion)
t motion sf
2 4.4
3 3.5
4 6.3
104Create New Data Files Write Access to Data Files
- include ltstdio.hgt
- 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-cs
2073\prog\balloon.dat, w)
105Write to Data Files
- Output file - use fprintf instead of printf
- include ltstdio.hgt
- FILE bf
- double time6.5, height5.3
- bf fopen(balloon.dat, w)
- fprintf( bf , t f h f\n, time,
height)
time height bf
7.1 8.3
8.3 3.7
6.5 5.3
t 6.500000 h 5.300000
t 7.100000 h 8.300000
t 8.300000 h 3.700000
106At the end, Use fclosefclose(sf) fclose(bf)
107Example
- Read 6 values from a file named my_data.txt and
write their average into another file named
avg-of-6.txt
108Example 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
109Name Addr Content
Lecture 15
Lecture
110Reading 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) gt 0 when EOF reached
- fscanf cannot read as many values as you wanted
111Check what fopen, fscanf, fprintf return
- FILE fp
- fpfopen(data.txt, r)
- if (fpNULL)
- printf(Program cannot open the file\n)
- return -1
-
- Nfscanf(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 (fpfopen(data.txt, r)) NULL)
112Counter controlled loopUsually first line in
file contains the count
- include ltstdio.hgt
- int main()
-
- FILE scorefile
- int score, count, i, sum0
- if((scorefile fopen("scores2.txt","r"))
NULL) ) - printf(Program cannot open the file\n)
- exit(-1)
-
- fscanf(scorefile,"d", count)
- for (i1 iltcount 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
113Trailer signal or Sentinel signal
include ltstdio.hgt int main() FILE
scorefile int score, count0, i, sum0
if((scorefile fopen("scores3.txt","r"))
NULL) ) printf(Program cannot open the
file\n) exit(-1) fscanf(scorefile,"d
", score) while(score gt 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
114End of file controlled loop
- include ltstdio.hgt
- int main()
-
- FILE scorefile
- int score, count0, i, sum0
- 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) lt 0)
- fscanf(scorefile,"d",score)
- count
- sum sum score
115Exercise
- 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.
116Exercise
- 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 lt min)
- min x
- display the minimum
- close file
-
File 56 78 93 24 85 63
Solution available on the next page
117include ltstdio.hgt 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) lt 0) fscanf(scorefile,"d",
score) if (score lt min) min
score printf("Min d\n",min)
fclose(scorefile) system("pause")
return(0)
118Exercise
- 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
119include ltstdio.hgt 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) lt 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)
120Exercise
- Change the previous program to count how many
times the given number appears in the file?
Instead of fount 1 put fount
121Read/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-hour payment
122include ltstdio.hgt 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_hour0 for(i1 i lt numofD i)
fscanf(infp,d,hour) total_hour hour
fprintf(outfp, "3d 3d 4d\n",
ID, total_hour, total_hour7)
fclose(infp) fclose(outfp) return 0
123Read/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
Id hw1 hw2 hw3 hw4 Id min
max avg
124include ltstdio.hgt 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) summaxminhw
for(i1 i lt 3 i) fscanf(infp,d,hw
) sum sum hw if (hw gt max)
max hw if (hw lt 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
125Eliminate 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.
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
126More example
- Study 3.7 and 3.8 from the textbook