SOCS

49
1 SOCS Hoofdstuk 1 Programmeertaal C

description

SOCS. Hoofdstuk 1 Programmeertaal C. Kenmerken van C. Hogere programmeertaal Grote verzameling types, strenge type controle Zelf nieuwe types definiëren Klassieke controle-structuren functies Assembleertaal Operatoren met equivalent op machine-niveau Bewerkingen op adressen mogelijk. - PowerPoint PPT Presentation

Transcript of SOCS

1

SOCS

Hoofdstuk 1

Programmeertaal C

2

Kenmerken van C

Hogere programmeertaal Grote verzameling types, strenge type controle Zelf nieuwe types definiëren Klassieke controle-structuren functies

Assembleertaal Operatoren met equivalent op machine-niveau Bewerkingen op adressen mogelijk

3

Aanpak

Voorbeelden Steunen op kennis van Java Stijgende complexiteit

Doelstelling: Passieve kennis van C

4

Overzicht

Eenvoudig C Declaraties, main, operatoren, opdrachten, in- en uitvoer

Voorbeeld 1-1 if, while, samengestelde opdracht

Voorbeeld 1-5 Switch opdracht

Arrays Functies Records Dynamische gegevenstructuren

5

Main – Globale var Voorbeeld 1-1

int a, b, somk;

main() {a = getint();b = getint();somk = a * a + b * b;printint (somk);

}

6

Main – Globale var Voorbeeld 1-1

int a, b, somk;

main() {a = getint();b = getint();somk = a * a + b * b;printint (somk);

}

• globale variabelen

• Type int = integer

• declaratie vereist

7

Types

Standaard types int : voor gehele waarde

C voorziet verschillende groottes• short• int • long

Niet noodzakelijk verschillend Geen type voor logische waarde; logische

waarde wordt verwacht: 0 false != 0 true

8

Main – Globale var Voorbeeld 1-1

int a, b, somk;

main() {a = getint();b = getint();somk = a * a + b * b;printint (somk);

}

• Hoofdprogramma main

• In voorbeelden:

• geen parameters

• geen lokale variabelen

• opdrachten

9

Operatoren

Uitdrukkingen Rekenkundige operatoren

+ - * / % Relationele operatoren

> >= < <= == != Logische operatoren

&& tweede operand nt berekend indien eerste 0

|| tweede operand nt berekend indien eerste !=0

10

Operatoren

Uitdrukkingen Toekenningsoperator: i = 5 UITDRUKKING!

Met waarde: 5 Met neveneffect: waarde I is 5 Klassieke fout

• i = 5• i == 5

Samengestelde toekenningsoperatoren i *= j – 3 i = i * ( j – 3 ) += -= *= /= %=

11

Opdrachten

Opdracht Uitdrukking gevolgd door ;

Invoer en uitvoer C definieert geen opdrachten In C worden functies uit bibliotheken gebruikt

Wij gebruiken getint() printint ( <uitdrukking>)

12

Voorbeeld 1-1

int a, b, somk;

main() {a = getint();b = getint();somk = a * a + b * b;printint (somk);

}

13

If while Voorbeeld 1-5

int a, abs, i;

main() {i = 1;while (i <= 10) {

a = getint ();if ( a > 0 )

abs = a;else

abs = -a;printint (a, abs);i = i + 1;

}}

14

If while Voorbeeld 1-5

int a, abs, i;

main() {i = 1;while (i <= 10) {

a = getint ();if ( a > 0 )

abs = a;else

abs = -a;printint (a, abs);i = i + 1;

}}

if ( <voorwaarde>)

<opdracht>

else

<opdracht>

15

If while Voorbeeld 1-5

Samengestelde opdracht:{

<opdracht>

<opdracht>

} Geen afsluitende ;

16

If while Voorbeeld 1-5

int a, abs, i;

main() {i = 1;while (i <= 10) {

a = getint ();if ( a > 0 )

abs = a;else

abs = -a;printint (a, abs);i = i + 1;

}}

while (<uitdrukking>)

<opdracht>

17

Switch-opdracht

switch (i - 7){case 0:case 1:

a = 0;break;

case 2:a = 1;break;

default:a = 2;break;

}

18

Overzicht

Eenvoudig C Arrays

Klassiek gebruik Wijzers en arrays For opdracht Twee-dimensionale tabellen Arrays van wijzers

Functies Records Dynamische gegevenstructuren

19

Arrays klassiek Voorbeeld 1 -13

int som, i;int a[10];main() {/* inlezen van array a */

i = 0;while( i<10 ){

a[i] = getint();i = i + 1;

}/*berekenen van de som van de elementen */

som = 0;i = 0;while( i<10 ){

som = som + a[i];i = i + 1;

}printint (som);

}

20

Arrays klassiek Voorbeeld 1 -13

Declaratieint a[10]

geeft elementen met indices van

0 .. 9 Selectie van elementen

a[6]

a[0]

a[i+3]

21

For opdracht Voorbeeld 1 –13 V2

int som, i;int a[10];main() {/* inlezen van array a */

for( i =0; i<10; i++){a[i] = getint();

}/*berekenen van de som van de elementen */

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

som = som + a[i];printint (som);

}

22

For opdracht Voorbeeld 1 –13 V2

Increment- en decrement operatoreni++

++i Waarde van

uitdrukking i

Voorbeeldi = 1; i = 1;j = i++; j = ++i;printint (i, j); printint (i, j);

23

For opdracht Voorbeeld 1 –13 V2

For-opdrachtfor(uitdrukking1; uitdrukking2; uitdrukking3)

opdracht

uitdrukking1;while (uitdrukking2) {

opdracht;uitdrukking3;

}

24

Voorbeeld 1 -14

int r[10];int i, max;

main() {/* inlezen van array r wordt niet behandeld */

max = r[0];for (i = 1; i < 10; i++)

if (r[i] > max)max = r[i];

printint (max);}

25

Wijzers & arrays Voorbeeld 1 -15

int r[10];int *pr, max;

main() {/* inlezen van array r wordt niet behandeld */

max = r[0];for (pr = &r[1] ; pr < &r[10];

pr++)If (*pr > max)

max = *pr;printint (max);

}

26

Wijzers & arrays Voorbeeld 1 -15

Wijzer-variabelenint *p, *q;

Adresoperatorp = &i

q = &r[0]

Indirectie-operator*p

7p i

-3q r[0]

27

Twee-dimensionale tabellen Voorbeeld 1 -18

int t[20][20], i, j, n;main(){

/* inlezen van tabel*/.../* spiegelen om hoofddiagonaal*/for(i=0; i<n-1; i++)

for(j=i+1; j<n; j++){h = t[i][j];t[i][j] = t[j][i];t[j][i] = h;

}/*afdrukken resultaat*/...

}

28

Arrays met wijzers

Hoe interpreteren? int *t[5]

t is een array van …

wijzers naar int

t is een wijzer naar …

een array van int

int (*wa)[4]

29

Voorbeeld 1 -19

int *t[5];int i,j;

main(){...t[0] = &it[1] = &j;t[2] = t[1];

j = 5;printint( j, *t[1], *t[2]);/* de waarde 5 wordt 3 keer afgedrukt

*/...

}

30

Voorbeeld blz. 54

int (*wa)[4], *wi;int a[3], t[3][4];

wi = &a[0];

wa = t[0];

wi++;wa++;

31

Overzicht

Eenvoudig C Arrays Functies

Basisfaciliteiten Parameterbinding Recursie Procedures Arrays en parameters

Records Dynamische gegevenstructuren

32

int macht (int grondtal, int exponent

){ int r, i;

r = 1;for( i=1; i<= exponent;

i++)r = r * grondtal;

return(r)}

Basisfaciliteiten Voorbeeld 1 -25

parametersLokale variabelen

Resultaat van functie

33

Basisfaciliteiten Voorbeeld 1 -26

int a, b;

main(){a = getint(); b = getint();printint( a, macht(2, a) );printint( macht ( a-b, b*2)

);}

34

Parameterbinding Voorbeeld 1 -28

Waarde parametersint macht (int grondtal, int exponent){

int r;

r = 1;while (exponent-- > 0)

r = r * grondtal;return(r);

}

35

Recursie Voorbeeld 1 -29

int macht (int grondtal, int exponent){

if (exponent == 0)return (1);

elsereturn( grondtal *

macht(grondtal, exponent- 1))

}

36

Procedures Voorbeeld 1 -30

void kwadraat( int a, int b, int *som, int *verschil)

{int h1, h2;

h1 = a * a;h2 = b * b;*som = h1 + h2;*verschil = h1 - h2;

}

37

Procedures Voorbeeld 1 -30

main() {

int x, y, z, t;

x = getint(); y = getint();kwadraat( x-1, y+1, &z,

&t);printint( x, y, z, t);

}

38

Arrays en parameters Voorbeeld 1 -31

int somtabel( int t[20], int n){

int i, som;

som = 0;for( i=0; i<n; i++)

som += t[i];return(som);

}

39

Arrays en parameters Voorbeeld 1 -32

int somtabel( int *t, int n){

int i, som;

som = 0;for( i=0; i<n; i++){

som += *t;t++;

}return(som);

}

40

Arrays en parameters Voorbeeld 1 -33

int somtabel( int *t, int n){

int i, som;

som = 0;for( i=0; i<n; i++)

som += t[i];return(som);

}

41

Overzicht

Eenvoudig C Arrays Functies Records

Basiselementen Records en arrays Records en wijzers Records en functies

Dynamische gegevenstructuren

42

Basiselementen Voorbeeld 1 -54

struct Tswitch {int lokaal;int nr;int aan;

};

struct Tswitch s1, s2;

43

Basiselementen Voorbeeld 1 –54 & 55

struct Tswitch {int lokaal;int nr;int aan;

};struct Tswitch s1, s2;

s1.lokaal = getint();s1.nr = getint();s1.aan = 1;s2 = s1;

44

Type definities

typedef int LENGTE;

typedef struct Tswitch {int lokaal;int nr;int aan;

} T_SWITCH;

LENGTE ll, b;T_SWITCH s1, s2;

45

Records en arrays Voorbeeld 1 -56

struct student {int nummer;int vaknr;int punten;

};struct student jaar[25];

main(){ jaar[0].nummer = getint(); jaar[0].vaknr = 1; jaar[0].punten = 16; jaar[i] = jaar[0]; printint(jaar[i].nummer,jaar[i].punten);

...}

46

Records en wijzers Voorbeeld 1 -57

struct student {int nummer;int vaknr;int punten;

};struct student st, *wst;

main(){st.nummer = 13;wst = &stprintint( wst -> nummer)

} ipv (*wst).nummer

47

Record als waarde-parameter Voorbeeld 1 -58

struct Tswitch s1, s2;

void voeruit (struct Tswitch s) {struct Tswitch t;t = s;s.lokaal = 0;...

}main(){

...s2.lokaal = 1;voeruit(s2);printint(s2.lokaal); ...

}

48

Record als resultaat Voorbeeld 1 -59

struct Tswitch s1, s2;

void zetaan ( struct Tswitch *s) {s->aan = 1;

}

main() {...s1.aan = 0;zetaan (&s1);printint(s1.aan);...

}

49

Overzicht

Eenvoudig C Arrays Functies Records Dynamische gegevenstructuren