52
Lecture 5 Introduction to Programming in C Arne Kutzner Hanyang University / Seoul Korea

Lecture 5 Introduction to Programming in C Arne Kutzner Hanyang University / Seoul Korea

Embed Size (px)

Citation preview

Lecture 5

Introduction to Programming in C

Arne Kutzner

Hanyang University / Seoul Korea

Further loop structures:

for structures,do-while statements

Introduction to C L3.3

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

Introduction to C L3.4

for structure with compound

• Syntax:

for(initialization; loop_repetition_condition; update) { statement_1;

statement_2;…statement_n;

}

Introduction to C L3.5

for structure (cont.)

• Any for-loop may be represented as while-loop as follows:

for (stat1; expr2; stat3) { statement;

}

stat1;while (expr2) {

statement;stat3;

}

Introduction to C L3.6

Example while versus for

i = 0;while (i < N) { printf("*"); i = i + 1;}

initialization

update

loop repetition condition

for (i = 0; i < N; i = i + 1) printf("*");

initializationloop repetition

conditionupdate

statement

Introduction to C L3.7

Caution: common error

• The following loop does not sum up the values from 0 to n. (only up to n – 1)

for (i=0; i<n; i = i + 1) sum = sum + i;

Introduction to C L3.8

Caution (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 < 10; i = i + 1);

{

printf("i is %d", i);

}

Wrong

Introduction to C L3.9

do-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);

Introduction to C L3.10

while versus do-whiledo { printf("Enter a letter from A to Z>"); scanf("%c", &letter_choice);} while (letter_choice => 'A' && letter_choice <= 'Z');

printf("Enter a letter from A to Z>");scanf("%c", &letter_choice);

while (letter_choice => 'A' && letter_choice <= 'Z') { printf("Enter a letter from A to Z>"); scanf("%c", &letter_choice);};

Introduction to C L3.11

Caution (weird C)

The problem with while, do-while and the semicolon.int i=0; while (i<10);{ 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 i=0; do { printf("i is %d“, i); i = i + 1;} while (i<10);

Wrong

Correct

break, continue and goto

Introduction to C L3.13

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

Introduction to C L3.14

Flowchart continue statement(for while loop)

false

true

Statement(s)

NextStatement

Continue condition?

Statement(s)

continue;

Introduction to C L3.15

Flowchart break statement (for while loop)

false

true

Statement(s)

Next Statement

Continue condition?

Statement(s)

break;

Introduction to C L3.16

Example continue

• In the above program the sum of all odd numbers from 1 to 99 is calculated.

int sum = 0;int n = 1;while (n <= 100) { if ((n % 2) == 0) { n = n + 1; continue; } sum = sum + n; n = n + 1;}

Introduction to C L3.17

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

Introduction to C L3.18

The goto statement (cont.)

• Example:for (…)

for (…) { … if (disaster)

goto error; }

…error: error related code

switch Structures

Introduction to C L3.20

switch structure• Syntax

switch (expression) {case const-expr :

statements;break;

case const-expr :statements;break;

…default : statements;

}

Introduction to C L3.21

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

Introduction to C L3.22

switch structure / Flow diagram

case A case A actionstrue

false

break

case B case B actionstrue

false

break

case N case N actionstrue

false

break

default actions

Introduction to C L3.23

switch structure (Example)switch (class) {case 'B':case 'b': printf ("Battleship\n"); break;case 'C':case 'c': printf ("Cruiser\n"); break;case 'D':case 'd': printf ("Destroyer\n"); break;case 'F':case 'f': printf ("Frigate\n"); break;default: printf ("Unknown ship class%c\n", class);}

Conditional Operator, decrement and increment

Operators, Shortcut assignments

Introduction to C L3.25

Conditional Operator

• General form:(booleanExp) ? exp1 : exp2

• Example:if (x > 0)

y = 1 else

y = -1;is equivalent toy = (x > 0) ? 1 : -1;

Ternary operator

Introduction to C L3.26

Increment andDecrement Operators

x++; // Same as x = x + 1;

++x; // Same as x = x + 1;

x––; // Same as x = x - 1;

––x; // Same as x = x - 1;

suffix

prefix

suffix

prefix

Introduction to C L3.27

Increment andDecrement Operators, cont.

int i=10; int newNum = 10*(i++);

int newNum = 10*i; i = i + 1;

Equivalent to

int i=10; int newNum = 10*(++i);

i = i + 1; int newNum = 10*i;

Equivalent to

Introduction to C L3.28

Shortcut Assignment Operators

Operator Example Equivalent

+= i+=8 i = i+8

-= f-=8.0 f = f-8.0

*= i*=8 i = i*8

/= i/=8 i = i/8

%= i%=8 i = i%8

Functions

Introduction to C L3.30

Functions: Introduction

• Functions are program modules written to– avoid the repetition of identical code parts– solve “a bigger problem” by decomposing it into

“smaller problems”• Example:

A Function max that delivers the maximum of two values.

• Functions 1. take one or several arguments, 2. compute some statements and 3. return a single value

Introduction to C L3.31

Function Definition in C

• Syntax

data_type identifier (arg_1, arg_2,…) { local variable declarations

executable statements}

Function name(identifier)

Formal Arguments

Data type of the returned value

Introduction to C L3.32

Function Arguments / Local Variables

• Syntax of a single formal argument:data_type identifier

• Local variables are variables that are known inside a function only– Different functions may have local

variables with identical names

Introduction to C L3.33

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

Introduction to C L3.34

The return statement

• Functions return a single value using the return statement.Syntax:return expression ;

Introduction to C L3.35

Example: max function

int max (int i, int j) { int m;

if (i > j)m = i;

elsem = j;

return m;}

Local variable definition

Introduction to C L3.36

Function Calls

• 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);

actualarguments

Introduction to C L3.37

Example Function Call

pass ipass j

int max (int i, int j) { int m;

if (i > 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);}

Introduction to C L3.38

Example Function Call, cont.

The main method

a:

b:

x:

The max method

i:

j:

m:

pass 5

5

2

5

5

2

5

pass 2parameters

return value

• The values of a and b are copied to i and j .Graphically:

Introduction to C L3.39

Call by Value Semantic

• Because the arguments are copied in C we talk of a call by value semantic

Introduction to C L3.40

Function withoutReturned Value

• Syntaxvoid fname (arg1, arg2, …) { local variable declarations

executable statements}

• The keyword void indicates that the function does not return any value

Introduction to C L3.41

Iterative 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 <= x; i = i + 1) prod = prod * i; return prod;}

• Such a loop-based solution is called a “iterative programming”

Introduction to C L3.42

Recursion

• A function can call itself inside its body.Example factorial function:

int factorial(int x) { if (x > 1) return x * factorial(x - 1);

else return 1;}

• This programming technique is called Recursion

Recursive call of factorial

Introduction to C L3.43

Computing Factorial, cont.

Main function:factorial (4)

factorial (4) = 4*factorial(3)

factorial (3) = 3*factorial(2)

factorial (2) = 2*factorial(1)

factorial (1) = 1*factorial(0)

factorial (0) = 1

factorial(4) is called in the main

Step 5: factorial(0) returns 1

Step 1: factorial(4) calls factorial(3)

Step 2: factorial(3) calls factorial(2)

Step 3: factorial(2) calls factorial(1)

Step 4: factorial(1) calls factorial(0)

Step 6: factorial(1) returns 1 (1*1)

Step 7: factorial(2) returns 2 (2*1)

Step 8: factorial(3) returns 6 (3*2)

Step 9: factorial(4) returns 24 (4*6)

Introduction to C L3.44

Function 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

Introduction to C L3.45

Example: 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);{ …}

Introduction to C L3.46

Predefined 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 <stdio.h> for printf function.

Introduction to C L3.47

Some Mathematical Library Functions Defined in math.h

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

xe

Introduction to C L3.48

Some Mathematical Library Functions Defined in math.h

Function Purposedouble 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 yx

int abs(int x) returns the absolute value of x

Defined in stdlib.h

Introduction to C L3.49

Programming Technique:Top-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.

Introduction to C L3.50

Example Top-Down Design:Structure Chart for drawing a

Stick figure

D raw a c irc le

D raw in te rsec tio n lin es D raw a base line

D raw a tr ian g le D raw in te rsec tin g lin es

D raw a fig u re

** * * ** /\ / \ / \ ----- /\ / \ / \

** * * ** /\ / \ / \ ----- /\ / \ / \

Introduction to C L3.51

Program for drawing a stick figure#include <stdio.h>

/* 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();}

Introduction to C L3.52

Function 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();}