Lecture 5 Introduction to Programming in C Arne Kutzner Hanyang University / Seoul Korea.
-
Upload
cassandra-willis -
Category
Documents
-
view
227 -
download
2
Transcript of Lecture 5 Introduction to Programming in C Arne Kutzner Hanyang University / Seoul Korea.
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
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
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);}
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
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();}