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 inta, b, somk; main() { a = getint(); b = getint(); somk = a * a + b * b; printint (somk); }
6 Main – Globale var Voorbeeld 1-1 inta, 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 inta, 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 ( )
12 Voorbeeld 1-1 inta, 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 ( ) else
15 If while Voorbeeld 1-5 Samengestelde 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 ( )
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 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 Declaratie int a[10] geeft elementen met indices van 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 operatoren i++ ++i Waarde van uitdrukking i Voorbeeld i = 1;i = 1; j = i++;j = ++i; printint (i, j);printint (i, j);
23 For opdracht Voorbeeld 1 –13 V2 For-opdracht for(uitdrukking1; uitdrukking2; uitdrukking3) opdracht uitdrukking1; while (uitdrukking2) { opdracht; uitdrukking3; }
24 Voorbeeld 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 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 Wijzer-variabelen int *p, *q; Adresoperator p = &i q = &r[0] Indirectie-operator *p 7 p i -3 q r[0]
27 Twee-dimensionale tabellen Voorbeeld 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 int *t[5]; int i,j; main(){... t[0] = &i t[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 parameters Lokale variabelen Resultaat van functie
33 Basisfaciliteiten Voorbeeld int a, b; main(){ a = getint(); b = getint(); printint( a, macht(2, a) ); printint( macht ( a-b, b*2) ); }
34 Parameterbinding Voorbeeld Waarde parameters int macht (int grondtal, int exponent){ int r; r = 1; while (exponent-- > 0) r = r * grondtal; return(r); }
35 Recursie Voorbeeld int macht (int grondtal, int exponent){ if (exponent == 0) return (1); else return( grondtal * macht(grondtal, exponent- 1)) }
36 Procedures Voorbeeld 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 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 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 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 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 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 typedefint LENGTE; typedef struct Tswitch { int lokaal; int nr; int aan; } T_SWITCH; LENGTE ll, b; T_SWITCH s1, s2;
45 Records en arrays Voorbeeld struct student { int nummer; intvaknr; 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 struct student { int nummer; intvaknr; int punten; }; struct student st, *wst; main(){ st.nummer = 13; wst = &st printint( wst -> nummer) } ipv(*wst).nummer
47 Record als waarde-parameter Voorbeeld 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 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