lecture4- eng.pdf

Post on 06-Feb-2016

247 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ProgrammingDVA103, VT15

Lecture 4

Stefan Bygde

Content

●Functions repetition

●Arrays

●Macros

●Matrices

●Strings

2

Functioner - repetition

3

Funktion 1:

Funktion 2:

main():

call function 1

Call function 2

arguments

argumentsReturn value

Return value

Functions - repetition

● Function definition:

Return_type Name(Arguments)

{

statements..

return value/expression;

}

● Function call:

variable = Name(Values);

4

If the return type is not void

If the return type is not void

void if no return valuevoid if no return value

One value for eachargument.

One value for eachargument.

The call has to match the definition!

Arbitrary number of arguments. Each

argument is a variable declaration.

Arbitrary number of arguments. Each

argument is a variable declaration.

Arrays

● Very often a program needs to process multiple data

● So far we have proccessed all data incrementaly(example: sum all numbers between x and y).

● Some times all data has to be stored

● Example, what if we want to store 100 numbers and print them on the screen?int a1,a2,a3,a4,a5,..., a100;

scanf(”%d”,&a1);

scanf(”%d”,&a2);

...

● And then…printf(”%d”,a1);

printf(”%d”,a2);

printf(”%d”,a3);

…5

Arrays

● It would be better to store these 100 numbers usingonly one name.

● An array is a collection of variables that are stored as one name.

● The individual values are accessed via indecies.

● An array is declared as:

type name[size];

6

Arrays

● Exempel

float nr[10];

●Creates ten floats.

●To assign one value: nr[2] = 6.0;

●Used as normal variables: sum = nr[1] + nr[8];

7

nr[0] nr[1] nr[2] nr[3] nr[4] nr[5] nr[6] nr[7] nr[8] nr[9]

nr: 16.1 12.0 6.0 -25.1 -5.0 10.5 0 0 8.0 41.8

Arrays

●Mind the difference of usage and declaration:

●Declaration: int temperature[25];

Here 25 is the size of the array.

●Usage: x = temperature[6];

Here 6 is an index.

● Normal operations are not possible on arrays:

●Example: you assign an array to copy it:

double arr1[45];

double arr2[45];

arr2 = arr1;

8

Arrays -initialisation

● An array can be initialised while declared using {, , , ...} (but only when declared!)

int x[5] = {12,5,7,8,10};

● Omitted numbers are set to 0

int x[5] = {12,5};

● To initialise all elements to 0

int x[5] = {};

● Initialisation can determine size, then size can be omitted:

int x[] = {12,5,7};9

x[0] x[1] x[2] x[3] x[4]

x: 12 5 7 8 10

x[0] x[1] x[2] x[3] x[4]

x: 12 5 0 0 0

x[0] x[1] x[2] x[3] x[4]

x: 0 0 0 0 0

x[0] x[1] x[2]

x: 12 5 7

Arrays -index

● Accessing elements:

name[value/expression];

● As long as they are integers, any type of indexing canbe done:

x=nr[5]; x=nr[y]; x=nr[++y];

x=nr[nr[3]] x=nr[max-3+i]; x=nr[f(y)];

● If you use an index outside the array anything canhappen. The compiler does not check it.

float nr[5];

nr[8] = … <- error!

10

Arrays -index

● Arrays works especially well with loops!

int main(void) {

float sum=0, pressure[10];

int i;

printf(”Enter 10 numbers: ”);

for (i=0; i<10; i=i+1)

scanf(”%f”, &pressure[i]);

for (i=0; i<10; i=i+1)

sum = sum + pressure[i];

printf(”%f\n”, sum);

return 0;

}

11

What doesthe program

do?

The first element has index 0

The first element has index 0

Arrays -index

int main(void) {

float sum=0, pressure[50]={};

int i, antal;

printf(”How many (max 50)?”);

scanf(”%d”, &antal);

printf(”Enter numbers: ”);

for (i=0; i<antal; i=i+1)

scanf(”%f”, &pressure[i]);

for (i=0; i<antal; i=i+1)

sum = sum + pressure[i];

printf(”%f\n”, sum);

return 0;

}12

The programmershould make sure that the index never exceeds its

limit…

The programmershould make sure that the index never exceeds its

limit…

The preprocessor

● Before compiling, C uses a preprocessor. The preproccessor does textual operations before the code is compiled.

● Directives to the preprocessor begins with #

● #include for example, copies and pastes the given

file into your code before compiling.

● #define performs a search/replace on your codebefore compiling.

13

The preprocessor

● Example:

●#define SIZE 50

●#define PI 3.14159265

●Will replace all occurances of SIZE with 50 and all occurances of PI by 3.14159265

● #defines are usually referred to as macros.

●Why is this useful?

14

Arrays and macros

Example

#include <stdio.h>

#define MAX 50

int main(void) {

float sum=0, pressure[MAX]={};

int i, antal;

printf(”How many (max %d)?”,MAX);

scanf(”%d”, &antal);

for (i=0; i<antal; i=i+1)

scanf(”%f”, &pressure[i]);

....

return 0;

} 15

Arrays and macros

Example

#include <stdio.h>

#define MAX 50

int main(void) {

float sum=0, pressure[50]={};

int i, antal;

printf(”Antal tal (max %d)?”,50);

scanf(”%d”, &antal);

for (i=0; i<antal; i=i+1)

scanf(”%f”, &pressure[i]);

....

return 0;

} 16

Replace MAX with 50Replace MAX with 50

Inserts the file stdio.h at this positionInserts the file stdio.h at this position

If we want to changethe max size, we cando it on one placerather than two.

Macros

● Reasons for using macros:

●Better to have named constants than to use numbers. Better documentation.

●Parameters can be changed on one place.

●Macros are traditionally defined by CAPITALS (although not necessary)

17

Matrices

● It is possible to make 2-dimensional arrays

● A 2-dimensional array is called a matrix.

Can represent, for instance, a tic-tac-toe board:

char tttboard[3][3] = {{’X',' ',’O'},

{' ',’X',’O'},

{’O',' ',’X'}};

18

0 1 2

0 X O

1 X O

2 O X

tttboard[1][2]

Matrices

● Exactly the same mechanics as normal arrays.

● It is actually possible to do arrays of any dimension.

●More examples:

tttboard[0][0] = ’X’; // Put x in the top left

Char v = tttboard[1][2]; // Put ’O’ in v.

19

0 1 2

0 X O

1 X O

2 O X

tttboard[1][2]

Exercise

Write a program that fills a tic-tac-toe board as empty, and then fills it as follows:

● Do we use a loop? Several?

●For which indecies should we assign X?

20

0 1 2

0 X O O

1 O X O

2 O O X

Exercise

#include <stdio.h>

#define SIZE 3

int main(void)

{

char matrix[SIZE][SIZE];

int row, col;

for (row=0; row<SIZE; row++) {

for (col=0; col<SIZE; col++) {

if (row==col)

matrix[row][col]='X';

else

matrix[row][col]='O';

printf("%c ", matrix[row][col]);

}

printf("\n");

}

return 0;

}21

0 1 2

0 X O O

1 O X O

2 O O X

Strings

● In C, a string is an array of chars

● The end of a string is marked by null-termination’\0’ or 0 (null)

● Example

char name[10] = {’S’,’t’,’e’,’f’,’a’,’n’,’\0’};

22

name[0] name[1] name[2] name[3] name[4] name[5] name[6] name[7] name[8] name[9]

namn: S t e f a n \0 ? ? ?

Strings

● Simplified notation for strings:

char namn[10] = ”Stefan”;

char name[] = ”Stefan”;

char month[12][4] = {”Jan”,”Feb”,”Mar”,”Apr”,

”May”, ... ,”Dec”};

23

\0 is

automatically

put after.

\0 is

automatically

put after.

No size given, the length of the array willbe the length of the text PLUS one (to

accommodate for \0)

No size given, the length of the array willbe the length of the text PLUS one (to

accommodate for \0)

Three letters + \0Three letters + \0

Array of stringsArray of strings

Strings

● char text[10] = ”More C!”;

● The array has 10 elements.

● The length of the string is 7

● The string occupies 8 positions in the array.

● To print a text string:

printf(”%s”, text); //%s is the code for

strings

Equivalent to:

for(i=0; text[i]!=’\0’; i++)

printf(”%c”, text[i]); 24

text[0] text[1] text[2] text[3] text[4] text[5] text[6] text[7] text[8] text[9]

text: M o r e C ! \0 ? ?

Strings -example

#include <stdio.h>

#define FIRST_NAME_SIZE 20

#define LAST_NAME_SIZE 60

int main(void)

{

char first_name[FIRST_NAME_SIZE];

char last_name[LAST_NAME_SIZE];

printf(”First name: ”);

scanf(”%s”,first_name);

printf(”\nLast name: ”);

scanf(”%s”,last_name);

printf(”Hey there %s %s!”,first_name,last_name);

return 0;

}

25

No & for strings! (reasonlater)

No & for strings! (reasonlater)

Example

Compute the length of a string.

#include <stdio.h>

int main(void)

{

char text[]= ”Some random text”;

int pos= 0;

printf(”Strängen %s\n”,text);

printf(”The length is %d\n”,pos);

return 0;

}

26

for(pos=0; text[pos] != ’\0’; pos++)

;

String functions

● The library strings.h contains functions for manipulating text strings. (use #include)

● Examples:

●strcat() -Concatenate two strings.

●strcpy() -Copy a string.

●strcmp() -Compare two strings.

●strlen() -Compute the length of a string.

●Etc.. (consult the book or internet for more)

27

Example

Simpler way of computing length:

#include <stdio.h>

int main(void)

{

char text[]= ”Some random text”;

int length;

printf(”Strängen %s\n”,text);

printf(”The length is %d \n”,length);

return 0;

}

28

length = strlen(text);

#include <string.h>

Example

Or just:

#include <stdio.h>

#include <string.h>

int main(void)

{

char text[]= ”Some random text”;

printf(”The length is %d\n”,strlen(text));

return 0;

}

29

String functions

● You can not copy strings by assignment:

char s1[4];

char s2[] = ”Hi!”;

s1 = s2; // Will NOT do what you’d expect

● To copy an array, use strcpy()

char s1[4];

char s2[4] = ”Hi!”;

strcpy(s1,s2); // s1 = ”Hi!”

30

String functions

● You can not compare strings with ==:

char s1[] = ”Hi!”;

char s2[] = ”Hi!”;

if(s1 == s2) … // will evaluate to FALSE

● To compare two strings, use strcmp()

int s1[] = ”Hi!”;

int s2[] = ”Hi!”;

if(strcmp(s1,s2) == 0) // Will evaluate to TRUE

31

top related