Title: Lecture 5 Introduction to Programming in C
1Lecture 5Introduction to Programming in C
- Arne Kutzner
- Hanyang University / Seoul Korea
2Further loop structures for structures,do-while
statements
3for structure
- Syntax
- For-loops have three loop control statements
- Initialization of the loop control variable.
- Test of the loop repetition condition
- Update of the loop variable
for(initialization loop_repetition_condition
update) statement
4for structure with compound
for(initialization loop_repetition_condition
update) statement_1 statement_2 statement
_n
5for structure (cont.)
- Any for-loop may be represented as while-loop as
follows
stat1while (expr2) statement stat3
for (stat1 expr2 stat3) statement
6Example while versus for
loop repetition condition
initialization
- i 0
- while (i lt N)
- printf("")
- i i 1
update
loop repetitioncondition
updatestatement
initialization
for (i 0 i lt N i i 1)
printf("")
7Caution common error
- The following loop does not sum up the values
from 0 to n. (only up to n 1)
for (i0 iltn i i 1) sum sum i
8Caution (weird C)
- Adding a semicolon at the end of the for clause
before the loop body is a common mistake - int i
- for (i 0 i lt 10 i i 1)
-
- printf("i is d", i)
Wrong
9do-while Statement
- Syntax
- The for and while statements both evaluate the
loop repetition condition before the execution of
the loop body - The do-while loop checks the repetition condition
at the end of the loop body
do statement_1 statement_2 statement_n
while (loop_repetition_condition)
10while versus do-while
do printf("Enter a letter from A to Zgt")
scanf("c", letter_choice) while
(letter_choice gt 'A' letter_choice lt 'Z')
printf("Enter a letter from A to
Zgt") scanf("c", letter_choice) while
(letter_choice gt 'A' letter_choice lt 'Z')
printf("Enter a letter from A to Zgt")
scanf("c", letter_choice)
11Caution (weird C)
- The problem with while, do-while and the
semicolon. - int i0
- while (ilt10)
-
- printf("i is d", i)
- i i 1
-
- In the case of the do loop, the following
semicolon is needed to end the loop. - int i0
- do
- printf("i is d, i)
- i i 1
- while (ilt10)
Wrong
Correct
12break, continue and goto
13break and continue Statements
- A break statement causes the innermost enclosing
loop to be exited immediately. - continue causes the next iteration of the
enclosing for, while, or do-while loop to begin. - When continue statement is used in while and
do-while loops, then this means that the
condition part is executed immediately in the
for loop, control passes to loop variable update
step.
14Flowchart continue statement(for while loop)
false
Continue
condition?
true
Statement(s)
continue
Statement(s)
Next
Statement
15Flowchart break statement (for while loop)
false
Continue
condition?
true
Statement(s)
break
Statement(s)
Next
Statement
16Example continue
int sum 0 int n 1 while (n lt 100) if
((n 2) 0) n n 1
continue sum sum n n n
1
- In the above program the sum of all odd numbers
from 1 to 99 is calculated.
17The goto statement
- General Syntax goto label label
- The goto statement is only for very special
situations and almost never used.
If the program flow reaches the goto statement it
continues at the position marked with label
18The goto statement (cont.)
- Examplefor () for () if
(disaster) goto error error error
related code
19switch Structures
20switch structure
- Syntax switch (expression) case const-expr
statements break case const-expr
statements break default
statements
21switch structure
- To select one of several alternatives.
- Selection is based on the value of an expression.
- Expression can be a single value.
- The type of expression can be either int or char,
but not double.
22switch structure / Flow diagram
true
case B
case B actions
break
false
true
case N
case N actions
break
false
default actions
23switch structure (Example)
switch (class) case 'B'case 'b' printf
("Battleship\n") breakcase 'C'case
'c' printf ("Cruiser\n") breakcase
'D'case 'd' printf ("Destroyer\n")
breakcase 'F'case 'f' printf ("Frigate\n")
breakdefault printf ("Unknown ship
classc\n", class)
24Conditional Operator, decrement and increment
Operators, Shortcut assignments
25Conditional Operator
- General form(booleanExp) ? exp1 exp2
- Exampleif (x gt 0) y 1 else y -1is
equivalent toy (x gt 0) ? 1 -1
Ternary operator
26Increment andDecrement Operators
27Increment andDecrement Operators, cont.
int i10
Equivalent to
int newNum 10i
int newNum 10(i)
i i 1
int i10
Equivalent to
i i 1
int newNum 10(i)
int newNum 10i
28Shortcut Assignment Operators
Operator Example Equivalent i8 i
i8 - f-8.0 f f-8.0 i8 i i8 / i/8 i
i/8 i8 i i8
29Functions
30Functions Introduction
- Functions are program modules written to
- avoid the repetition of identical code parts
- solve a bigger problem by decomposing it into
smaller problems - ExampleA Function max that delivers the maximum
of two values. - Functions
- take one or several arguments,
- compute some statements and
- return a single value
31Function Definition in C
Data type of the returned value
Function name(identifier)
Formal Arguments
data_type identifier (arg_1, arg_2,) local
variable declarations executable statements
32Function Arguments / Local Variables
- Syntax of a single formal argumentdata_type
identifier - Local variables are variables that are known
inside a function only - Different functions may have local variables with
identical names
33Scope of Local Variables
- Scope of a variable The part of the program
where a variable can be referenced. - The scope of a local variable starts from its
declaration and continues to the end of the
function that contains the variable.
34The return statement
- Functions return a single value using the return
statement.Syntaxreturn expression
35Example max function
- int max (int i, int j) int m if (i gt
j) m i else m j return m
Local variable definition
36Function Calls
actualarguments
- Syntax function_name(arg1, arg2, )
- Actual arguments may be constants, variables, or
expressions. - Example of function callmax(a, b)
- Example of function call plus assignmentx
max(a, b)
37Example Function Call
pass i
pass j
int max (int i, int j) int m if (i gt
j) m i else m j return m
void main() int a, b, x a 5 b 2
x max (a, b) printf("d", x)
38Example Function Call, cont.
- The values of a and b are copied to i and j
.Graphically
pass 5
The main method
The max method
a
i
5
5
pass 2
parameters
2
2
b
j
5
5
m
x
return value
39Call by Value Semantic
- Because the arguments are copied in C we talk of
a call by value semantic
40Function withoutReturned Value
- Syntaxvoid fname (arg1, arg2, ) local
variable declarations - executable statements
- The keyword void indicates that the function does
not return any value
41Iterative Programming
- The factorial function can be programmed by a for
loop as follows - int factorial(int x) int prod, i prod
1 for (i 1 i lt x i i 1) prod
prod i return prod - Such a loop-based solution is called a iterative
programming
42Recursion
- A function can call itself inside its
body.Example factorial functionint
factorial(int x) if (x gt 1) return x
factorial(x - 1) - else return 1
- This programming technique is called Recursion
Recursive call of factorial
43Computing Factorial, cont.
Step 9 factorial(4) returns 24 (46)
Main functionfactorial (4)
factorial(4) is called in the main
factorial (4) 4factorial(3)
Step 8 factorial(3) returns 6 (32)
Step 1 factorial(4) calls factorial(3)
factorial (3) 3factorial(2)
Step 7 factorial(2) returns 2 (21)
Step 2 factorial(3) calls factorial(2)
factorial (2) 2factorial(1)
Step 6 factorial(1) returns 1 (11)
Step 3 factorial(2) calls factorial(1)
factorial (1) 1factorial(0)
Step 5 factorial(0) returns 1
Step 4 factorial(1) calls factorial(0)
factorial (0) 1
44Function Declarations
- Function declaration formatreturn-value-type
function-name (arguments'-type) - return-value-type data type of the
result(default int) - void indicates that the function returns nothing
- function-name any valid identifier
- Arguments' type comma separated list of
arguments' type
45Example Function declaration and definition in a
program
A function named example that takes 2 arguments
of type double and returns no data, would look
like
double example(double, int) int main()
double example (double a, int b)
46Predefined Library Functions
- Functions that are implemented as a part of C
toolkit.Example printf - If a library function is used, then the
corresponding header file should be included at
the top of the program using an appropriate
preprocessor directive.Example include
ltstdio.hgt for printf function.
47Some Mathematical Library Functions Defined in
math.h
Function Purpose
double ceil(double x) returns the smallest integer greater than x
double exp(double x) returns
double fabs(double x) returns the absolute value of x
double floor(double x) returns the largest integer less than x
double log(double x) returns the natural logarithm of x
double log10(double x) returns the base 10 logarithm of x
double sqrt(double x) returns the square root of x
48Some Mathematical Library Functions Defined in
math.h
Function Purpose
double sin(double x) returns the sine of x
double cos(double x) returns the cosine of x
double tan(double x) returns the tangent of x
double pow(double x, double y) returns
Defined in stdlib.h
int abs(int x) returns the absolute value of x
49Programming TechniqueTop-Down Design
- A problem-solving method in which a given problem
is first broken into its major subproblems. - Then the subproblems are solved to get some
solution for the original problem - Subproblems are typically solved by use of
functions.
50Example Top-Down DesignStructure Chart for
drawing a Stick figure
/\ / \ / \ -----
/\ / \ / \
51Program for drawing a stick figure
include ltstdio.hgt / function declarations
(prototypes) / void draw_circle(void) void
draw_intersect(void) void draw_base(void) void
draw_triangle(void) int main() / draw a
circle / draw_circle() / draw a
triangle / draw_triangle() / draw
intersection lines / draw_intersect()
52Function Definitions used for Drawing a Stick
Figure
/ Draw a circle / void draw_circle(void)
printf(" \n") printf(" \n")
printf(" \n")
/ Draw a intersection lines / void
draw_intersect(void) printf(" /\\\n")
printf(" / \\\n") printf("/ \\\n")
/ Draw a base line / void draw_base(void)
printf ("------\n")
/ Draw a triangle / void draw_triangle(void)
draw_intersect() draw_base()