Lecture 3 Strings More control statements C functions.

36
Lecture 3 • Strings • More control statements • C functions
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    223
  • download

    4

Transcript of Lecture 3 Strings More control statements C functions.

Page 1: Lecture 3 Strings More control statements C functions.

Lecture 3

• Strings• More control statements

• C functions

Page 2: Lecture 3 Strings More control statements C functions.

Announcements

Page 3: Lecture 3 Strings More control statements C functions.

More control statements

K&R: ch. 3

Page 4: Lecture 3 Strings More control statements C functions.

More control statements

• for loops– Much like while loops but more general and sometimes more

convenient

• switch statements– Nice alternative to messy if-else sequences

• do-while loops– Slight variant on while loops

• goto statements– Typically to be avoided

• break and continue statements

Page 5: Lecture 3 Strings More control statements C functions.

Control statements, cont.

• These are all explained nicely with examples in ch. 3 of K&R

• Main points – These additional statements don't allow you to do anything that

you couldn't have done with while and if

– However, they do make it much cleaner and more concise to express certain logic. Often so much so that without them a solution may be too difficult to come up with.

Page 6: Lecture 3 Strings More control statements C functions.

For loops

• General syntax– for ( expr11; ; expr2expr2; ; expr3expr3 ){ ){ statement1; .}This is exactly equivalent to:expr1;while (expr2) { statement1; expr3;}

Page 7: Lecture 3 Strings More control statements C functions.

For loops, cont.

• Expr1– Called the initializer; evaluated once and only once before the

loop executes for the first time.

• Expr2– The termination condition; evaluated at the beginning of each

iteration of the loop. If it evaluates to false, loop ends.

• Expr3– Evaluted at the end of each iteration of the loop.

Page 8: Lecture 3 Strings More control statements C functions.

For loops, cont.

• Simple, most obvious, and most typical usage: for ( j = 0; j < n; j++ ) {…}

(write out the equivalent while statement!)• Infinite loop:

for (; ; ) { … } /* any part may be ommited */

• May also combine expressions:for (j=0, k=m; j < k; j++, k--){ … }

Page 9: Lecture 3 Strings More control statements C functions.

For loops, cont• Arithmetic expressions

– Initialization, loop-continuation, and increment can contain arithmetic expressions. If x equals 2 and y equals 10

for ( j = x; j <= 4 * x * y; j += y / x ) is equivalent to

for ( j = 2; j <= 80; j += 5 )• Notes about the for structure:

– "Increment" may be negative (decrement)– If the loop continuation condition is initially false

• The body of the for structure is not performed• Control proceeds with the next statement after the for structure

– Control variable

• Often printed or used inside for body, but not necessary

1. Initialize variables

2. for repetition structure

• Program Output

Page 10: Lecture 3 Strings More control statements C functions.

Switch statements

• General syntaxswitch( expr ){

case const-expr: statements

case const-expr: statements

.

.

default: statements

}

Page 11: Lecture 3 Strings More control statements C functions.

Switch, cont.

• Note that cases must be constant expression, not variables!

• If a case is matched, switch falls through to the next statement. A break must be used to avoid evaluating subsequent cases.

• Just a cleaner way of to write a bunch of if-else statements.

Page 12: Lecture 3 Strings More control statements C functions.

Switch flow-chart

true

false

.

.

.

case a case a action(s) break

case b case b action(s) break

false

false

case z case z action(s) break

true

true

default action(s)

Page 13: Lecture 3 Strings More control statements C functions.

do/while Repetition Structure

• The do/while repetition structure – Similar to the while structure

– Condition for repetition tested after the body of the loop is performed

• All actions are performed at least once

– Format:do {

statement;

} while ( condition );

 

Page 14: Lecture 3 Strings More control statements C functions.

1 /* Fig. 4.9: fig04_09.c

2 Using the do/while repetition structure */

3 #include <stdio.h>

4

5 int main()

6 {

7 int counter = 1;

8

9 do {

10 printf( "%d ", counter );

11 } while ( ++counter <= 10 );

12

13 return 0;

14 }

Do-while example

Page 15: Lecture 3 Strings More control statements C functions.

Do-while and goto

• No great advantages to using them.• If you're curious, very well explained in K&R 3.6

& 3.8.

Page 16: Lecture 3 Strings More control statements C functions.

C functions

Breaking a program into smaller, reusable pieces

Page 17: Lecture 3 Strings More control statements C functions.

Functions

• Functions– Enable you to break a program into smaller pieces

(modularization).

– Each function performs a specified task. It may receive input data and return output data.

– Main program is mainly a wiring together of function calls.

– All variables declared inside functions are local variables

• Known only in function defined

– Parameters

• Communicate information between functions

Page 18: Lecture 3 Strings More control statements C functions.

Functions, cont.

• Benefits of functions– Divide and conquer

• Manageable program development

– Software reusability

• Use existing functions as building blocks for new programs

• Abstraction - hide internal details (library functions)

– Avoid code repetition

Page 19: Lecture 3 Strings More control statements C functions.

Start with an example

• Imagine that many different times in a C program you have to find the maximum of two numbers: if ( a > b ){

bigger = a;

}

else{

bigger = b;

}

• While this may not seem like a lot of code, it can get very ugly and make the program difficult to follow. It would be much nicer to say something like: bigger = imax(a,b);

Page 20: Lecture 3 Strings More control statements C functions.

C functions, cont.

• The purpose of a C function is to allow the programmer to accomplish exactly this; that is, to move snippets of code outside of the main program and call them by an intuitive name. These functions can then be reused in any program where they are needed.

Page 21: Lecture 3 Strings More control statements C functions.

Example: Max function

int imax( int, int ) ; /* function "prototype" - listed before main*/ int main(int argc, char* argv[]){ int a, b, c; a = atoi(argv[1]); b = atoi(argv[2]); c = imax(a,b); printf("%s: %d, "The max value is: ", c);}/* our first non-main function */int imax( int val1, int val2 ){ if (val1 > val2){ return(val1); } else{ return(val2); } }

Page 22: Lecture 3 Strings More control statements C functions.

Dissecting the max function

• Our programming world will extend now, from main() { … } within a single file, to:

#include< … >

function prototypes …

main(…) { … }

func1(…) { …}

func2(…) { …}

.

all within a single file!

Page 23: Lecture 3 Strings More control statements C functions.

Components of a function

• Each function is composed of three parts:– Name

• Like variables it's up to you.• Should choose clear, intuitive name

– Return type• Data type that the function will return to user. • For imax function this is an int.

– Parameter list• List of datatypes that will be passed to the function.• For imax functions there are two: int and int.

– Author of function makes all of these decisions!

Page 24: Lecture 3 Strings More control statements C functions.

Components, cont.

• Each of the three mentioned on the previous slide parts goes in a specific place:

return-type function_name( param1, param2, …) { }

Where param1, etc. are composed of two parts:

param1_type param1_name

• Example:

int imax( int x, int y)

Return type: int

Name : imax

Parameter list: an integer x and an integer y

Page 25: Lecture 3 Strings More control statements C functions.

Body of a function

• After the function header comes the body, denoted by braces { … }

• The body is always organized as variable declarations and then executable statements.

• Finally, the function should always end with a return statement, specifying the variable that is to be passed back to the caller.– Example: return(x); /* end the function and hand back the value of the

variable x to the calling function */

Page 26: Lecture 3 Strings More control statements C functions.

Calling a function

• Function calls– The word"call" refers to the process of invoking functions. When

you call a function:

• Provide function name and arguments (data)

• Function performs operations or manipulations

• Function returns results– Function call analogy:

• Boss asks worker to complete task– Worker gets information, does task, returns result

– Information hiding: boss does not know details

Page 27: Lecture 3 Strings More control statements C functions.

Calling a function, cont.

• The formal process of calling a function is as follows:

return_value = func_name( arg1, arg2, …);

return_value: optional variable to store output

func_name : name of the function you wish to invoke.

arg1, … : Data that you are passing to the function.

Known as an argument list. Must match function parameter list in number

and type.

Page 28: Lecture 3 Strings More control statements C functions.

Example: calling a function

• Using our previous imax example: int maxval; /* declare an integer to

store the result */ int a = 8; b = 10; /* create some data */

maxval = imax(a,b); /* function call */

• Example says "call the function imax, passing to it the variables a and b, and store the result in the integer maxval."

Page 29: Lecture 3 Strings More control statements C functions.

More examples

• Write a function which takes no input and gives no output; it's only effect is to print an error message to the screen and abort.

• Write a function called power with the following interface:– double power(double x, int n)which evaluates x to the nth power.

• Write a function which returns the sum of an arbitrary-sized 1d array.

• Write a function that sorts an array• Write a function to find the max value of an array

Page 30: Lecture 3 Strings More control statements C functions.

Writing functions

• For each problem on the previous slide, we should first set up the function before writing any code:– What is the input type and number?

– What is the output (return val)?

– What is a good name for the function?

• Once this is done, we can address go ahead and write the details of the function.

Page 31: Lecture 3 Strings More control statements C functions.

Data visibility

• Extremely important!– Function can only "see" three types of variables:

• Those declared locally within the function

• Those passed into the function through it arg list

• "Global variables" defined outside of any function– We have not yet used global variables

– Any variables defined in other functions (even main) that are not passed into another function are NOT visible to that function, and it can not see or manipulate their values!

• This behavior is crucial to achieving code modularity.

Page 32: Lecture 3 Strings More control statements C functions.

Function nuances

• Just a few more things to know about functions:– Prototype

– Dummy argument names

– Void argument lists and return types

– Calling a function without accepting return value

– "pass by value" vs. "pass by reference"

• Each of these is described in the subsequent slides

Page 33: Lecture 3 Strings More control statements C functions.

Prototyping

• Though not always strictly necessary, I will require that we template all funtions.

• Templating means the following:– For each non-main function in your source file, you should include

function headers just before main().– A "header" is just the return_type, name, and param list of the function,

ie:• int imax(int a, int b)• Note that "dummy arguments" a and b are optional here• Int imax(int, int ) is ok

• Templating helps the compiler know what to expect when it encouters a function call for the first time.

Page 34: Lecture 3 Strings More control statements C functions.

Dummy arguments

• When we setup a function the param names are often referred to as "dummy arguments". For example, for imax:– int imax(int a, int b)

– The variables a and b are the dummy arguments.

– You can choose to name these anything regardless of the specific names passed to the function at calling time.

– Whatever you choose to name them, that will be their name inside the function.

Page 35: Lecture 3 Strings More control statements C functions.

Void arguments

• A function may have zero or one return values, and zero or more paramters. If you create a function with zero return values, you should use void:– void printerr( int errorcode );

• Likewise for zero parameters:– void printerr(void)

• Use void is optional, but it is a good practice since the compiler it will cause the compiler to do some extra checking.

Page 36: Lecture 3 Strings More control statements C functions.

Calling functions

• For a function that does not return void, you may still choose to discard the return argument by simply calling the function with no " = ":– imax(a,b) is legal, though not obviously useful.

– c = imax(a,b) is more typical and useful