Programming Language ? C Tutorial Introduction - PowerPoint PPT Presentation

1 / 162
About This Presentation
Title:

Programming Language ? C Tutorial Introduction

Description:

IDE (Integrated Development Environment) Main Parts of C Programs ... Create some typo errors for Hello.c, and redo the compiling/linking process. ... – PowerPoint PPT presentation

Number of Views:152
Avg rating:3.0/5.0
Slides: 163
Provided by: taiwe
Category:

less

Transcript and Presenter's Notes

Title: Programming Language ? C Tutorial Introduction


1
Programming Language ? CTutorial Introduction
  • ??????

2
Content
  • Background
  • Getting Started
  • IDE (Integrated Development Environment)
  • Main Parts of C Programs
  • Variables and Arithmetic Expressions
  • The for statement
  • Symbolic Constants
  • Character Input and Output
  • Arrays
  • Functions
  • Character Arrays
  • External Variables and Scope

3
Programming Language ? CTutorial Introduction
  • Background

4
Textbooks
  1. C How to Program, 5th Edition, by Harvey M.
    Deitel , Paul J. Deitel.
  2. The C programming Language, 2nd Editon, by Brian
    W. Kernighan and Dennis M. Ritchie, Prentice-Hall
    in 1988.

5
Grading
  1. Programming 50
  2. Midterm 25
  3. Final 25

6
The C Language
  • Currently, the most commonly-used language for
    embedded systems
  • High-level assembly
  • Very portable
  • compilers exist for virtually every processor
  • Easy-to-understand compilation
  • Produces efficient code
  • Fairly concise

7
C History
The Development of the C Language
  • Developed between 1969 and 1973 along with Unix
  • Due mostly to Dennis Ritchie
  • Designed for systems programming
  • Operating systems
  • Utility programs
  • Compilers
  • Filters
  • Evolved from B, which evolved from BCPL

8
Computer Architecture
9
Programming Language ? CTutorial Introduction
  • Getting Started

10
Setting Program Development Environment
11
Setting Program Development Environment
12
Setting Program Development Environment
13
Setting Program Development Environment
14
Setting Program Development Environment
15
Setting Program Development Environment
SystemRoot\system32\cmd.exe /K
"F\VS6\VC98\Bin\VCVARS32.BAT"
16
Setting Program Development Environment
17
Our First C Program ? Hello World
18
Our First C Program ? Hello World
include ltstdio.hgt main() printf("hello,
world\n")
19
Our First C Program ? Hello World
include information about standard library
include ltstdio.hgt main() printf("hello,
world\n")
define a function called main that received no
argument values
20
Our First C Program ? Hello World
include ltstdio.hgt main() printf("hello,
world\n")
define a function called main that received no
argument values
21
Our First C Program ? Hello World
include ltstdio.hgt main() printf("hello,
world\n")
statements of main are enclosed in braces
22
Our First C Program ? Hello World
include ltstdio.hgt main() printf("hello,
world\n")
main calls library function printf
23
Our First C Program ? Hello World
24
Compiling and Linking
25
Compiling and Linking
26
Compiling and Linking
27
Compiling and Linking
28
Compiling and Linking
29
Compiling and Linking
30
Execution
31
Execution
32
Exercises
  1. Create some typo errors for Hello.c, and redo the
    compiling/linking process. Watch and understand
    the screen output reported by cl.
  2. Add more printf statements in Hello.c and redo
    the compiling/linking/execution process.

33
Programming Language ? CTutorial Introduction
  • IDE

34
Visual C 6.0
35
Visual C 6.0
36
Visual C 6.0
37
Win32 Console Application
38
Win32 Console Application
39
Win32 Console Application
40
Hello_IDE
41
Hello_IDE
42
Hello_IDE
43
Hello_IDE
44
Hello_IDE
45
Hello_IDE
46
Hello.c
47
Building Application
48
Building Application
49
Execution
50
Execution
51
Files Generated by IDE
52
Programming Language ? CTutorial Introduction
  • Main Parts of C Programs

53
Main Parts
  • Headers/Comments/Expressions

include ltstdio.hgt / Our first C Program
/ main() printf("hello, world\n")
54
Example Identify the three parts in the following
program
55
Remark
C also uses // to comment a single line.
56
The Syntax of C Language
57
Programming Language ? CTutorial Introduction
  • Variables and Arithmetic Expressions

58
ExampleFahrenheit-Celsius table
59
ExampleFahrenheit-Celsius Table
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() int fahr, celsius int lower, upper,
step lower 0 / lower limit of temperature
scale / upper 300 / upper limit / step
20 / step size / fahr lower while (fahr
lt upper) celsius 5 (fahr-32) /
9 printf("d\td\n", fahr, celsius) fahr fahr
step
60
ExampleFahrenheit-Celsius Table
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() int fahr, celsius int lower, upper,
step lower 0 / lower limit of temperature
scale / upper 300 / upper limit / step
20 / step size / fahr lower while (fahr
lt upper) celsius 5 (fahr-32) /
9 printf("d\td\n", fahr, celsius) fahr fahr
step
61
Statements
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() int fahr, celsius int lower, upper,
step lower 0 / lower limit of temperature
scale / upper 300 / upper limit / step
20 / step size / fahr lower while (fahr
lt upper) celsius 5 (fahr-32) /
9 printf("d\td\n", fahr, celsius) fahr fahr
step
Individual statements are terminated by
semicolons.
62
Variable Declarations
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() int fahr, celsius int lower, upper,
step lower 0 / lower limit of temperature
scale / upper 300 / upper limit / step
20 / step size / fahr lower while (fahr
lt upper) celsius 5 (fahr-32) /
9 printf("d\td\n", fahr, celsius) fahr fahr
step
  • In C, all variables must be declared before they
    are used.
  • Usually declared at the beginning of the function
    before any executable statements.
  • A declaration announces the properties of
    variables it consists of a name and a list of
    variables.

63
Variable Declarations
  • The integer data type.
  • What is its range?

include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() int fahr, celsius int lower, upper,
step lower 0 / lower limit of temperature
scale / upper 300 / upper limit / step
20 / step size / fahr lower while (fahr
lt upper) celsius 5 (fahr-32) /
9 printf("d\td\n", fahr, celsius) fahr fahr
step
64
Integer
int fahr, celsius int lower, upper, step
  • The range of integer depends on machine
  • 16-bit machine
  • ?32768 ? 32767
  • 32-bit machine
  • ?2147483646 ? 2147483647

65
Integer
int fahr, celsius int lower, upper, step
  • The range of integer depends on machine

INT_MIN ? INT_MAX
66
Integer
int fahr, celsius int lower, upper, step
  • The range of integer depends on machine

INT_MIN ? INT_MAX
67
Float
float fahr, celsius float lower, upper, step
  • A float number is typically a 32-bit quantity,
    with at least six significant digits and
    magnitude generally between about 10-38 and 1038

FLT_MIN ? FLT_MAX
68
Fundamental Types
Type Size
char 1 byte
short 2 bytes
int 4 bytes
long 4 bytes
float 4 bytes
double 8 bytes
Machine Dependent
69
Fundamental Types in Microsoft C
Type Size
char 1 byte
short 2 bytes
int 4 bytes
long 4 bytes
float 4 bytes
double 8 bytes
Type Size
char 1 byte
short 2 bytes
int 4 bytes
long 4 bytes
float 4 bytes
double 8 bytes
70
Assignment Statements
Assign a value computed from an expression to a
variable.
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() int fahr, celsius int lower, upper,
step lower 0 / lower limit of temperature
scale / upper 300 / upper limit / step
20 / step size / fahr lower while (fahr
lt upper) celsius 5 (fahr-32) /
9 printf("d\td\n", fahr, celsius) fahr fahr
step
71
While Loop
while( cond_expression )statement
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() int fahr, celsius int lower, upper,
step lower 0 / lower limit of temperature
scale / upper 300 / upper limit / step
20 / step size / fahr lower while (fahr
lt upper) celsius 5 (fahr-32) /
9 printf("d\td\n", fahr, celsius) fahr fahr
step
The body of a while loop is repeatedly executed
as long as the condition expression is tested
true.
72
Arithmetical Operations
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() int fahr, celsius int lower, upper,
step lower 0 / lower limit of temperature
scale / upper 300 / upper limit / step
20 / step size / fahr lower while (fahr
lt upper) celsius 5 (fahr-32) /
9 printf("d\td\n", fahr, celsius) fahr fahr
step
Can it be celsius 5/9(fahr-32)? Why?
73
printf ? General-Purpose Output Formatting
Function
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() int fahr, celsius int lower, upper,
step lower 0 / lower limit of temperature
scale / upper 300 / upper limit / step
20 / step size / fahr lower while (fahr
lt upper) celsius 5 (fahr-32) /
9 printf("d\td\n", fahr, celsius) fahr fahr
step
74
printf ? General-Purpose Output Formatting
Function
format string
printf("d\td\n", fahr, celsius)
75
printf ? General-Purpose Output Formatting
Function
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() int fahr, celsius int lower, upper,
step lower 0 / lower limit of temperature
scale / upper 300 / upper limit / step
20 / step size / fahr lower while (fahr
lt upper) celsius 5 (fahr-32) /
9 printf("d\td\n", fahr, celsius) fahr fahr
step
Left aligned
76
printf ? General-Purpose Output Formatting
Function
Synopsis include ltstdio.hgtint printf(const
char format, ...) Description printf writes
to the standard output stream using putchar,
under control of the string pointed to by format
that specifies how subsequent arguments are
converted for output. If there are insufficient
arguments for the format, the behavior is
undefined. If the format is exhausted while
arguments remain, the excess arguments are
evaluated but are otherwise ignored. printf
returns number of characters transmitted, or a
negative value if an output or encoding error
occurred.
77
printf ? General-Purpose Output Formatting
Function
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() int fahr, celsius int lower, upper,
step lower 0 / lower limit of temperature
scale / upper 300 / upper limit / step
20 / step size / fahr lower while (fahr
lt upper) celsius 5 (fahr-32) /
9 printf("3d 6d\n", fahr, celsius) fahr
fahr step
Right aligned
78
ExampleFahrenheit-Celsius Table (Float)
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() float fahr, celsius float lower,
upper, step lower 0 / lower limit of
temperature scale / upper 300 / upper limit
/ step 20 / step size / fahr
lower while (fahr lt upper) celsius
(5.0/9.0) (fahr-32.0) printf("3.0f 6.1f\n",
fahr, celsius) fahr fahr step
79
ExampleFahrenheit-Celsius Table (Float)
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() float fahr, celsius float lower,
upper, step lower 0 / lower limit of
temperature scale / upper 300 / upper limit
/ step 20 / step size / fahr
lower while (fahr lt upper) celsius
(5.0/9.0) (fahr-32.0) printf("3.0f 6.1f\n",
fahr, celsius) fahr fahr step
80
More on printf
81
Statements
  • Simple Statements
  • lower 0
  • upper 300
  • step 20
  • fahr lower
  • Null Statement
  • // a null statement
  • Compound Statements
  • celsius (5.0/9.0) (fahr-32.0)
  • printf("3.0f 6.1f\n", fahr, celsius)
  • fahr fahr step

4 simple statements
1 compound statement
82
While Statements
while( cond_expression ) statement
a simple statement a null statement a compound
statements
The statement can be
83
Program Indentation
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() float fahr, celsius float lower,
upper, step lower 0 / lower limit of
temperature scale / upper 300 / upper limit
/ step 20 / step size / fahr
lower while (fahr lt upper) celsius
(5.0/9.0) (fahr-32.0) printf("3.0f 6.1f\n",
fahr, celsius) fahr fahr step
84
Program Indentation
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() float fahr, celsius float lower,
upper, step lower 0 / lower limit of
temperature scale / upper 300 / upper limit
/ step 20 / step size / fahr
lower while (fahr lt upper) celsius
(5.0/9.0) (fahr-32.0) printf("3.0f 6.1f\n",
fahr, celsius) fahr fahr step
Statement
Statement
Statement
Statement
Statement
Statement
Statement
85
Program Indentation
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() float fahr, celsius float lower,
upper, step lower 0 / lower limit of
temperature scale / upper 300 / upper limit
/ step 20 / step size / fahr
lower while (fahr lt upper) celsius
(5.0/9.0) (fahr-32.0) printf("3.0f 6.1f\n",
fahr, celsius) fahr fahr step
Statement
Statement
Statement
Statement
Statement
Statement
Statement
Statement
Statement
86
Program Indentation
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() float fahr, celsius float lower,
upper, step lower 0 / lower limit of
temperature scale / upper 300 / upper limit
/ step 20 / step size / fahr
lower while (fahr lt upper) celsius
(5.0/9.0) (fahr-32.0) printf("3.0f 6.1f\n",
fahr, celsius) fahr fahr step
Statement
Statement
Statement
Statement
Statement
Statement
87
Programming Language ? CTutorial Introduction
  • The for Statement

88
ExampleFahrenheit-Celsius Table
include ltstdio.hgt / print Fahrenheit-Celsius
table for fahr 0, 20, ..., 300
/ main() float fahr, celsius float lower,
upper, step lower 0 / lower limit of
temperature scale / upper 300 / upper limit
/ step 20 / step size / fahr
lower while (fahr lt upper) celsius
(5.0/9.0) (fahr-32.0) printf("3.0f 6.1f\n",
fahr, celsius) fahr fahr step
There are many ways to do the same task.
89
ExampleFahrenheit-Celsius Table
include ltstdio.hgt / print Fahrenheit-Celsius
table / main() int fahr for (fahr 0 fahr
lt 300 fahr fahr 20) printf("3d 6.1f\n",
fahr, (5.0/9.0)(fahr-32))
90
The for Statement
include ltstdio.hgt / print Fahrenheit-Celsius
table / main() int fahr for (fahr 0 fahr
lt 300 fahr fahr 20) printf("3d 6.1f\n",
fahr, (5.0/9.0)(fahr-32))
for ( init-exp cond-exp loop-exp ) statement
91
for vs. while
  • The choice between while and for is arbitrary,
    based on which seems clearer.
  • The for is usually appropriate for loops in which
    the initialization and increment are single
    statements and logically related.

92
Exercises
  1. Modify the temperature conversion program to
    print the table in reverse order, that is, from
    300 degrees to 0.

93
Exercises
  1. Using only the techniques you learned, write a
    program that calculates the squares and cubes of
    the number from 0 to 10 and used tabs to print
    the following table of values.

94
Programming Language ? CTutorial Introduction
  • Symbolic Constants

95
define ? Text Substitution
define name replacement list
Example
define PI 3.1415926
96
ExampleFahrenheit-Celsius Table
include ltstdio.hgt define LOWER 0 / lower
limit of table / define UPPER 300 / upper
limit / define STEP 20 / step size / /
print Fahrenheit-Celsius table / main() int
fahr for (fahr LOWER fahr lt UPPER fahr
fahr STEP) printf("3d 6.1f\n", fahr,
(5.0/9.0)(fahr-32))
97
Programming Language ? CTutorial Introduction
  • Character
  • Input and Output

98
getchar() putchar()
define EOF (-1)
Synopsis include ltstdio.hgt int
getchar(void) Description getchar reads a
single character from the standard input
stream. If the stream is at end-of-file or a read
error occurs, getchar returns EOF.
Synopsis include ltstdio.hgt int putchar(int
c) Description putchar writes the character c
to the standard output stream. putchar returns
the character written. If a write error occurs,
putchar returns EOF.
99
Example Typewriter (Version 1)
! not equal
include ltstdio.hgt / copy input to output 1st
version / main() int c c
getchar() while (c ! EOF)
putchar(c) c getchar()
100
Example Typewriter (Version 2)
The return value of an assignment statement is
value of the variable after the assignment.
include ltstdio.hgt / copy input to output 2st
version / main() int c c
getchar() while ((c getchar()) !
EOF) putchar(c)
simple statement
101
Example Typewriter (Version 2)
The return value of an assignment statement is
value of the variable after the assignment.
include ltstdio.hgt / copy input to output 2st
version / main() int c c
getchar() while ((c getchar()) ! EOF)
putchar(c)
102
Example Character Counting (Version 1)
increment
include ltstdio.hgt / count characters in input
1st version / main() long nc nc
0 while (getchar() ! EOF) nc printf("ld\
n", nc)
simple statement
103
Example Character Counting (Version 1)
increment
include ltstdio.hgt / count characters in input
1st version / main() long nc nc
0 while (getchar() ! EOF) nc printf("ld\n"
, nc)
104
Example Character Counting (Version 2)
include ltstdio.hgt / count characters in input
2nd version / main() double nc for
(nc 0 getchar() ! EOF nc)
printf(".0f\n", nc)
null statement
105
Example Character Counting (Version 2)
include ltstdio.hgt / count characters in input
2nd version / main() double nc for
(nc 0 getchar() ! EOF nc)
printf(".0f\n", nc)
106
Example Line Counting
equals to
include ltstdio.hgt / count lines in input
/ main() int c, nl nl 0 while
((c getchar()) ! EOF) if (c '\n')
nl printf("d\n", nl)
if ( expression ) statement if ( expression )
statement else statement
simple statement
107
Example Line Counting
include ltstdio.hgt / count lines in input
/ main() int c, nl nl 0 while
((c getchar()) ! EOF) if (c '\n')
nl printf("d\n", nl)
simple statement
108
Example Line Counting
include ltstdio.hgt / count lines in input
/ main() int c, nl nl 0 while
((c getchar()) ! EOF) if (c '\n')
nl printf("d\n", nl)
Can we move to here?
simple statement
109
Example Word Counting
OIIIIOIIOIOOOIIIIO OIIIII
110
Example Word Counting
include ltstdio.hgt define IN 1 / inside a
word / define OUT 0 / outside a word / /
count lines, words, and characters in input
/ main() int c, nl, nw, nc, state
state OUT nl nw nc 0 while ((c
getchar()) ! EOF) nc if (c '\n')
nl if (c ' ' c '\n' c '\t')
state OUT else if (state OUT) state
IN nw printf("d d
d\n", nl, nw, nc)
111
Exercises
  1. Write a program to print a histogram of the
    frequencies of different characters in its input.

112
Programming Language ? CTutorial Introduction
  • Arrays

113
Arrays
score
Array is a data structure that stores contiguous
data elements of the same type.
address
distance
Examples
int score50 char address50 double
distance50
114
Arrays
Examples
int score50 char address50 double
distance50
score
address
distance
115
Arrays
Examples
int score50 char address50 double
distance50
score
address
distance
116
Arrays
Examples
int score50 char address50 double
distance50
score
address
distance
117
Example Digit Counting
logical and operator
logical or operator
include ltstdio.hgt / count digits, white space,
others / main() int c, i, nwhite,
nother int ndigit10 nwhite nother
0 for (i 0 i lt 10 i) ndigiti
0 while ((c getchar()) ! EOF) if (c gt
'0' c lt '9') ndigitc-'0' else if (c
' ' c '\n' c '\t') nwhite else
nother printf("digits ") for (i 0 i lt
10 i) printf(" d", ndigiti) printf(",
white space d, other d\n", nwhite,
nother)
118
Example Digit Counting
include ltstdio.hgt / count digits, white space,
others / main() int c, i, nwhite,
nother int ndigit10 nwhite nother
0 for (i 0 i lt 10 i) ndigiti
0 while ((c getchar()) ! EOF) if (c gt
'0' c lt '9') ndigitc-'0' else if (c
' ' c '\n' c '\t') nwhite else
nother printf("digits ") for (i 0 i lt
10 i) printf(" d", ndigiti) printf(",
white space d, other d\n", nwhite,
nother)
119
Example Digit Counting
include ltstdio.hgt / count digits, white space,
others / main() int c, i, nwhite,
nother int ndigit10 nwhite nother
0 for (i 0 i lt 10 i) ndigiti
0 while ((c getchar()) ! EOF) if (c gt
'0' c lt '9') ndigitc-'0' else if (c
' ' c '\n' c '\t') nwhite else
nother printf("digits ") for (i 0 i lt
10 i) printf(" d", ndigiti) printf(",
white space d, other d\n", nwhite,
nother)
120
Example Digit Counting
include ltstdio.hgt / count digits, white space,
others / main() int c, i, nwhite,
nother int ndigit10 nwhite nother
0 for (i 0 i lt 10 i) ndigiti
0 while ((c getchar()) ! EOF) if (c gt
'0' c lt '9') ndigitc-'0' else if (c
' ' c '\n' c '\t') nwhite else
nother printf("digits ") for (i 0 i lt
10 i) printf(" d", ndigiti) printf(",
white space d, other d\n", nwhite,
nother)
121
if Statement
The dangling else problem
if (condition1) statement1 else if (condition2)
statement2 else if (condition3)
statement3 ... else statementn
122
Exercises
  1. Write a program that prints its input one word
    per line.
  2. Write a program that prints only a single white
    character between words.

123
Exercises
  1. Write a program to print a histogram of the
    frequencies of different characters in its input.

124
Programming Language ? CTutorial Introduction
  • Functions

125
Functions we have used
  • printf
  • getchar
  • putchar

126
Functions
  • A way to encapsulate some computation.
  • Similar to a subroutine or function in Fortran,
    or a procedure or function in Pascal.
  • A properly designed function allow us to
  • know what is done, but
  • ignore how a job is done

127
Function Definition
return-type function-name(parameter declarations,
if any) declarations statements
128
Function Definition
If absent, return type is considered int.
return-type function-name(parameter declarations,
if any) declarations statements
Called formal parameters
129
Example Power
include ltstdio.hgt int power(int m, int n) /
test power function / main() int i
for (i 0 i lt 10 i) printf("d d
d\n", i, power(2,i), power(-3,i)) return
0 / power raise base to n-th power n gt 0
/ int power(int base, int n) int i, p
p 1 for (i 1 i lt n i) p p
base return p
? forward reference
130
Example Power
include ltstdio.hgt int power(int m, int n) /
test power function / main() int i
for (i 0 i lt 10 i) printf("d d
d\n", i, power(2,i), power(-3,i)) return
0 / power raise base to n-th power n gt 0
/ int power(int base, int n) int i, p
p 1 for (i 1 i lt n i) p p
base return p
131
Example Power (Version 2)
/ power raise base to n-th power n gt 0
version 2 / int power(int base, int n)
int i, p for (p 1 n lt 0 --n) p p
base return p
/ power raise base to n-th power n gt 0
/ int power(int base, int n) int i, p
p 1 for (i 1 i lt n i) p p
base return p
132
Example Power (Version 2)
/ power raise base to n-th power n gt 0
version 2 / int power(int base, int n)
int i, p for (p 1 n lt 0 --n) p p
base return p
. . . . . . . . . . main() int n, val
n 5 val power(2, n)
printf("vald nd d\n", val, n) . . . . . .
. . . .
n?
133
Call by Value
  • In C, all function arguments are passed by
    value.
  • the called function is given the values of its
    arguments in temporary variables rather than the
    originals.
  • Modifying the values of formal parameters doesnt
    effect the value of originals
  • How about if a function has arrays as its
    parameters?

134
Programming Language ? CTutorial Introduction
  • Character Arrays

135
Strings in C
  • Null-terminated string ? In C, a string is stored
    as an array of characters containing the
    characters in the string and terminated with a
    '\0' to mark the end.

str
Example
char str"hello\n"
136
Strings in C
137
Example Print the Longest Line
while (there's another line) if (it's longer
than the previous longest) (save it)
(save its length) print longest line
138
Example Print the Longest Line
Implement a getline() function which returns the
length of the line read.
while (there's another line) if (it's longer
than the previous longest) (save it)
(save its length) print longest line
Implement a copy() function to save string.
139
Example Print the Longest Line
logical and operator
/ getline read a line into s, return length
/ int getline(char s,int lim) int c,
i for (i0 i lt lim-1 (cgetchar())!EOF
c!'\n' i) si c if (c '\n')
si c i si
'\0' return i
140
Example Print the Longest Line
logical and operator
Simplification
/ getline read a line into s, return length
/ int getline(char s,int lim) int c,
i for (i0 i lt lim-1 (cgetchar())!EOF
c!'\n' i) si c if (c '\n')
si c i si
'\0' return i
si c
si c
141
Example Print the Longest Line
logical and operator
/ getline read a line into s, return length
/ / simplified version / int getline(char
s,int lim) int c, i for (i0 i lt
lim-1 (cgetchar())!EOF c!'\n')
si c if (c '\n') si c
si '\0' return i
142
Example Print the Longest Line
/ copy copy 'from' into 'to' assume to is big
enough / void copy(char to, char from)
int i i 0 while ((toi fromi)
! '\0') i
143
Example Print the Longest Line
include ltstdio.hgt define MAXLINE 1000 /
maximum input line length / int getline(char
line, int maxline) void copy(char to, char
from) / print the longest input line
/ main() int len / current line
length / int max / maximum length
seen so far / char lineMAXLINE / current
input line / char longestMAXLINE / longest
line saved here / max 0 while ((len
getline(line, MAXLINE)) gt 0) if (len gt max)
max len copy(longest, line) if
(max gt 0) / there was a line / printf("s",
longest) return 0 . . . . . . . . . . . .
144
Example Print the Longest Line
145
Example Print the Longest Line
146
Example Print the Longest Line
147
Exercises
  1. Write a function getlinestr() by modifying
    getline() described above so that the string read
    doesnt include '\n'.
  2. Write a function reverse(char s) that reverses
    the character string s.
  3. Write a function int strlen(char s) that
    returns the number of characters in string s.
  4. Write a program to demonstrate that the about
    three functions you wrote are correct.

148
Exercises
  1. Write a function int atoi(char s) that converts
    a signed decimal numeric string, assumed the
    syntax is correct, to an integer, and write a
    program to verify the correctness of your
    program.
  2. Write a program that reads two integers from the
    standard input stream and output their minimum
    and maximum to the standard output stream. You
    cant use library function scanf() to read data.
  3. (Take home) Write a function void itoa(int n,
    char s) that converts a signed integer to a
    signed decimal numeric string, and write a
    program to verify the correctness of your program.

149
Programming Language ? CTutorial Introduction
  • External Variables and Scope

150
Local (Private) Variables
include ltstdio.hgt define MAXLINE 1000 /
maximum input line length / int getline(char
line, int maxline) void copy(char to, char
from) / print the longest input line
/ main() int len / current
line length / int max / maximum
length seen so far / char lineMAXLINE
/ current input line / char
longestMAXLINE / longest line saved here /
max 0 while ((len getline(line,
MAXLINE)) gt 0) if (len gt max)
max len copy(longest, line)
if (max gt 0) / there was a line
/ printf("s", longest) return 0
/ getline read a line into s, return length
/ / simplified version / int getline(char
s,int lim) int c, i for (i0 i lt
lim-1 (cgetchar())!EOF c!'\n')
si c if (c '\n') si c
si '\0' return i / copy copy
'from' into 'to' assume to is big enough / void
copy(char to, char from) int i i
0 while ((toi fromi) ! '\0') i
151
Local (Private) Variables
include ltstdio.hgt define MAXLINE 1000 /
maximum input line length / int getline(char
line, int maxline) void copy(char to, char
from) / print the longest input line
/ main() int len / current
line length / int max / maximum
length seen so far / char lineMAXLINE
/ current input line / char
longestMAXLINE / longest line saved here /
max 0 while ((len getline(line,
MAXLINE)) gt 0) if (len gt max)
max len copy(longest, line)
if (max gt 0) / there was a line
/ printf("s", longest) return 0
/ getline read a line into s, return length
/ / simplified version / int getline(char
s,int lim) int c, i for (i0 i lt
lim-1 (cgetchar())!EOF c!'\n')
si c if (c '\n') si c
si '\0' return i / copy copy
'from' into 'to' assume to is big enough / void
copy(char to, char from) int i i
0 while ((toi fromi) ! '\0') i
  • Each local variable comes into existence only
    when the function is called, and disappears when
    the function is exited.
  • Hence, also known as automatic variables.

152
Global (Extern) Variables
  • Global variables that are defined external to all
    functions can be accessed by name by any
    function.
  • Furthermore, they remain in existence permanently.

153
Example Print the Longest Line
include ltstdio.hgt define MAXLINE 1000 /
maximum input line size / int max
/ maximum length seen so far / char
lineMAXLINE / current input line / char
longestMAXLINE / longest line saved here
/ int getline(void) void copy(void) / print
longest input line specialized version
/ main() . . . . . . . . . . . . /
getline specialized version / int
getline(void) . . . . . . . . . . . .
/ copy specialized version / void
copy(void) . . . . . . . . . . . .
defined external to all functions
154
Example Print the Longest Line
include ltstdio.hgt define MAXLINE 1000 /
maximum input line size / int max
/ maximum length seen so far / char
lineMAXLINE / current input line / char
longestMAXLINE / longest line saved here
/ int getline(void) void copy(void) / print
longest input line specialized version
/ main() . . . . . . . . . . . . /
getline specialized version / int
getline(void) . . . . . . . . . . . .
/ copy specialized version / void
copy(void) . . . . . . . . . . . .
defined external to all functions
/ print longest input line specialized version
/ main() int len extern int max
extern char longest max 0 while
((len getline()) gt 0) if (len gt max)
max len copy()
if (max gt 0) / there was a line /
printf("s", longest) return 0
155
Example Print the Longest Line
include ltstdio.hgt define MAXLINE 1000 /
maximum input line size / int max
/ maximum length seen so far / char
lineMAXLINE / current input line / char
longestMAXLINE / longest line saved here
/ int getline(void) void copy(void) / print
longest input line specialized version
/ main() . . . . . . . . . . . . /
getline specialized version / int
getline(void) . . . . . . . . . . . .
/ copy specialized version / void
copy(void) . . . . . . . . . . . .
defined external to all functions
/ getline specialized version / int
getline(void) int c, i extern char
line for (i 0 i lt MAXLINE - 1
(cgetchar()) ! EOF c ! '\n' i)
linei c if (c '\n')
linei c i linei
'\0' return i
156
Example Print the Longest Line
include ltstdio.hgt define MAXLINE 1000 /
maximum input line size / int max
/ maximum length seen so far / char
lineMAXLINE / current input line / char
longestMAXLINE / longest line saved here
/ int getline(void) void copy(void) / print
longest input line specialized version
/ main() . . . . . . . . . . . . /
getline specialized version / int
getline(void) . . . . . . . . . . . .
/ copy specialized version / void
copy(void) . . . . . . . . . . . .
defined external to all functions
/ copy specialized version / void
copy(void) int i extern char line,
longest i 0 while ((longesti
linei) ! '\0') i
157
Example Print the Longest Line
The declarations for referencing external
variables are redundant if they are defined in
the header part of the same file .
/ print longest input line specialized version
/ main() int len extern int max
extern char longest max 0 while
((len getline()) gt 0) if (len gt max)
max len copy()
if (max gt 0) / there was a line /
printf("s", longest) return 0
include ltstdio.hgt define MAXLINE 1000 /
maximum input line size / int max
/ maximum length seen so far / char
lineMAXLINE / current input line / char
longestMAXLINE / longest line saved here
/ int getline(void) void copy(void) / print
longest input line specialized version
/ main() . . . . . . . . . . . . /
getline specialized version / int
getline(void) . . . . . . . . . . . .
/ copy specialized version / void
copy(void) . . . . . . . . . . . .
defined external to all functions
/ getline specialized version / int
getline(void) int c, i extern char
line for (i 0 i lt MAXLINE - 1
(cgetchar()) ! EOF c ! '\n' i)
linei c if (c '\n')
linei c i linei
'\0' return i
/ copy specialized version / void
copy(void) int i extern char line,
longest i 0 while ((longesti
linei) ! '\0') i
158
Example Print the Longest Line (Multiple Source
Files) ? I
/ main.c / include ltstdio.hgt define MAXLINE
1000 / maximum input line size / int max
/ maximum length seen so far
/ char lineMAXLINE / current input line
/ char longestMAXLINE / longest line saved
here / int getline(void) void copy(void) /
print longest input line specialized version
/ main() . . . . . . . . . . . .
/ functions.c / / getline specialized
version / int getline(void) . . . . . . .
. . . . . / copy specialized version
/ void copy(void) . . . . . . . . . . . .

159
Example Print the Longest Line (Multiple Source
Files) ? I
/ print longest input line specialized version
/ main() int len extern int max
extern char longest max 0 while
((len getline()) gt 0) if (len gt max)
max len copy()
if (max gt 0) / there was a line /
printf("s", longest) return 0
/ main.c / include ltstdio.hgt define MAXLINE
1000 / maximum input line size / int max
/ maximum length seen so far
/ char lineMAXLINE / current input line
/ char longestMAXLINE / longest line saved
here / int getline(void) void copy(void) /
print longest input line specialized version
/ main() . . . . . . . . . . . .
/ getline specialized version / int
getline(void) int c, i extern char
line for (i 0 i lt MAXLINE - 1
(cgetchar()) ! EOF c ! '\n' i)
linei c if (c '\n')
linei c i linei
'\0' return i
Must be kept.
/ functions.c / / getline specialized
version / int getline(void) . . . . . . .
. . . . . / copy specialized version
/ void copy(void) . . . . . . . . . . . .

/ copy specialized version / void
copy(void) int i extern char line,
longest i 0 while ((longesti
linei) ! '\0') i
Must be kept.
160
Example Print the Longest Line (Multiple Source
Files) ? II
/ main.c / include ltstdio.hgt define MAXLINE
1000 / maximum input line size / int max
/ maximum length seen so far
/ char lineMAXLINE / current input line
/ char longestMAXLINE / longest line saved
here / int getline(void) void copy(void) /
print longest input line specialized version
/ main() . . . . . . . . . . . .
/ externdef.h / define MAXLINE 1000 /
maximum input line size / extern int max
/ maximum length seen so far / extern char
line / current input line / extern char
longest / longest line saved here /
/ functions.c / include ltstdio.hgt include
"externdef.h" / getline specialized version
/ int getline(void) . . . . . . . . . . .
. / copy specialized version / void
copy(void) . . . . . . . . . . . .
161
Example Print the Longest Line (Multiple Source
Files) ? II
/ main.c / include ltstdio.hgt define MAXLINE
1000 / maximum input line size / int max
/ maximum length seen so far
/ char lineMAXLINE / current input line
/ char longestMAXLINE / longest line saved
here / int getline(void) void copy(void) /
print longest input line specialized version
/ main() . . . . . . . . . . . .
/ externdef.h / define MAXLINE 1000 /
maximum input line size / extern int max
/ maximum length seen so far / extern char
line / current input line / extern char
longest / longest line saved here /
/ getline specialized version / int
getline(void) int c, i extern char
line for (i 0 i lt MAXLINE - 1
(cgetchar()) ! EOF c ! '\n' i)
linei c if (c '\n')
linei c i linei
'\0' return i
/ functions.c / include ltstdio.hgt include
"externdef.h" / getline specialized version
/ int getline(void) . . . . . . . . . . .
. / copy specialized version / void
copy(void) . . . . . . . . . . . .
/ copy specialized version / void
copy(void) int i extern char line,
longest i 0 while ((longesti
linei) ! '\0') i
162
Exercise
  1. (Take home) Write a program to remove all
    comments from a C program. Don't forget to handle
    quoted strings and character constants properly.
    C comments don't nest.
Write a Comment
User Comments (0)
About PowerShow.com