Control Structures and Data Files - PowerPoint PPT Presentation

About This Presentation
Title:

Control Structures and Data Files

Description:

Control Structures and Data Files – PowerPoint PPT presentation

Number of Views:96
Avg rating:3.0/5.0
Slides: 124
Provided by: csU66
Learn more at: https://www.cs.utsa.edu
Category:

less

Transcript and Presenter's Notes

Title: Control Structures and Data Files


1
Control 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
2
Name Addr Content



Lecture 7



Lecture
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
Pseudo-code Notation and Flowchart Symbols
5
Structured Programming
Use simple control structures to organize the
solution to a problem
  • Sequence
  • Selection
  • Repetition

6
Sequence
7
Selection
8
Repetition
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. Ab/c
  • Be clear about specifications
  • Generation of Test Data
  • Test each of the error conditions
  • Program validation and verification
  • Program walkthrough

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 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

11
Relational 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 !!!

12
Examples
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

13
Logical 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
14
Examples
  • 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
15
Precedence for Arithmetic, Relational, and
Logical Operators
16
Exercise
  • 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

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

OR
OR
AND
NOT
Write a program that reads x1, x2, x3, x4, x5 and
computes/prints z1, z2
18
Exercise
a b C
x
19
Name Addr Content



Lecture 8



Lecture
20
3.3 Selection Statements
  • if
  • if else
  • switch

21
if statement
  • if(Boolean expression)
  • statement / single statement /
  • if(Boolean expression)
  • / more than one statement /
  • statement1
  • statement n

22
if 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
23
if else statement
  • if(Boolean expression)
  • statement
  • else
  • statement
  • if(Boolean expression)
  • statement block
  • else
  • statement block

24
if 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
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 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
26
if 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
27
Flow 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
28
nested 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
29
Exercise
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?
30
Exercise 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
31
Exercise 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
32
Indentation
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
33
Indentation (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
34
Exercise 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
35
Name Addr Content



Lecture 9



Lecture
36
Switch Statement
switch(expression) case constant statement(s
) break case constant statement(s) brea
k default / default is optional
/ statement(s)
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
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
Exercise
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")
40
More selection examples
41
Write 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)

43
Print RIGHT, a, b, c means printf(RIGHT
alf blf clf \n,a, b, c)
44
abc 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)
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
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
Another 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
48
Exercise 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

49
Solution-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")

50
Solution-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")
51
Triangle 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
52
Charge for money transfer
  • Suppose you transfer N and banks charge occurs
    as follows.
  • Write a program that reads N and computes cost

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
include 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
55
Spell 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

56
Name Addr Content



Lecture 10



Lecture
57
Name Addr Content



Lecture 11



Lecture
58
MIDTERM 1
59
Name Addr Content



Lecture 12



Lecture
60
Loop (Repetition) Structures
61
Problem 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
62
Sequential 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
63
Loop 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
64
Loop (Repetition) Structures
  • while statement
  • do while statement
  • for statement
  • Two new statements used with loops
  • break and continue

65
while statement
  • while(expression)
  • statement
  • while(expression)
  • statement
  • statement

66
Example
  • 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

67
do 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.

68
Example
  • 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

69
for statement
  • for(initialization test increment or
    decrement )
  • statement
  • for(initialization test increment or
    decrement )
  • statement
  • statement

70
Example
  • 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

71
for statement
initialize
test
Increment or decrement
true
statement(s)
statement(s)
72
Examples
  • 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
73
Exercise
  • 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

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 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
75
For 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

76
break 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)
77
continue 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)
78
Example 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
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

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 /
81
Name Addr Content



Lecture 13



Lecture
82
More loop examples
83
Exercise
  • What is the output of the following program?
  • for (i1 ilt5 i)
  • for (j1 jlt4 j)
  • printf()
  • printf(\n)

Output
84
Exercise
  • What is the output of the following program?
  • for (i1 ilt5 i)
  • for (j1 jlti j)
  • printf()
  • printf(\n)

Output
85
Example nested loops to generate the following
output
  • i1
  • i2
  • i3
  • i4
  • i5

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)

86
Exercise Modify the following program to produce
the output.
  • for (iA iltB i)
  • for (jC jltD j)
  • printf()
  • printf(\n)

Output
87
Exercise
  • Write a program using loop statements to produce
    the following output.

Output
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
include 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
90
Compute 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
91
Exercise 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
92
Exercise 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
93
Exercise 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
94
Exercise 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.

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 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")
96
Exercise sin x
  • Compute sin x using

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)
97
For 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
98
Skip
  • Study Section 3.5 from the textbook

99
Name Addr Content



Lecture 14



Lecture
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
Read Access to Data Files
102
Read 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)

103
Read 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
104
Create 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)

105
Write 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
106
At the end, Use fclosefclose(sf) fclose(bf)
107
Example
  • Read 6 values from a file named my_data.txt and
    write their average into another file named
    avg-of-6.txt

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

109
Name Addr Content



Lecture 15



Lecture
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) gt 0 when EOF reached
  • fscanf cannot read as many values as you wanted

111
Check 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)
112
Counter 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
113
Trailer 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
114
End 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

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
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 lt min)
  • min x
  • display the minimum
  • close file

File 56 78 93 24 85 63
Solution available on the next page
117
include 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)
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
include 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)
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
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-hour payment

122
include 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
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

Id hw1 hw2 hw3 hw4 Id min
max avg
124
include 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
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.

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
More example
  • Study 3.7 and 3.8 from the textbook
Write a Comment
User Comments (0)
About PowerShow.com