490 likes | 608 Views
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.
E N D
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
Aanpak • Voorbeelden • Steunen op kennis van Java • Stijgende complexiteit • Doelstelling: • Passieve kennis van C
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
Main – Globale var Voorbeeld 1-1 int a, b, somk; main() { a = getint(); b = getint(); somk = a * a + b * b; printint (somk); }
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
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
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
Operatoren • Uitdrukkingen • Rekenkundige operatoren + - * / % • Relationele operatoren > >= < <= == != • Logische operatoren && tweede operand nt berekend indien eerste 0 || tweede operand nt berekend indien eerste !=0
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 ) • += -= *= /= %=
Opdrachten • Opdracht • Uitdrukking gevolgd door ; • Invoer en uitvoer • C definieert geen opdrachten • In C worden functies uit bibliotheken gebruikt • Wij gebruiken • getint() • printint ( <uitdrukking>)
Voorbeeld 1-1 int a, b, somk; main() { a = getint(); b = getint(); somk = a * a + b * b; printint (somk); }
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 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>
If while Voorbeeld 1-5 • Samengestelde opdracht: { <opdracht> … <opdracht> } • Geen afsluitende ;
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>
Switch-opdracht switch (i - 7){ case 0: case 1: a = 0; break; case 2: a = 1; break; default: a = 2; break; }
Overzicht • Eenvoudig C • Arrays • Klassiek gebruik • Wijzers en arrays • For opdracht • Twee-dimensionale tabellen • Arrays van wijzers • Functies • Records • Dynamische gegevenstructuren
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); }
Arrays klassiek Voorbeeld 1 -13 • Declaratie int a[10] geeft elementen met indices van 0 .. 9 • Selectie van elementen a[6] a[0] a[i+3]
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); }
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);
For opdracht Voorbeeld 1 –13 V2 • For-opdracht for(uitdrukking1; uitdrukking2; uitdrukking3) opdracht uitdrukking1; while (uitdrukking2) { opdracht; uitdrukking3; }
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); }
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); }
i 7 p r[0] -3 q Wijzers & arrays Voorbeeld 1 -15 • Wijzer-variabelen int *p, *q; • Adresoperator p = &i q = &r[0] • Indirectie-operator *p
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*/ ... }
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]
Voorbeeld 1 -19 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 */ ... }
Voorbeeld blz. 54 int (*wa)[4], *wi; int a[3], t[3][4]; wi = &a[0]; wa = t[0]; wi++; wa++;
Overzicht • Eenvoudig C • Arrays • Functies • Basisfaciliteiten • Parameterbinding • Recursie • Procedures • Arrays en parameters • Records • Dynamische gegevenstructuren
parameters Lokale variabelen Resultaat van functie Basisfaciliteiten Voorbeeld 1 -25 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 -26 int a, b; main(){ a = getint(); b = getint(); printint( a, macht(2, a) ); printint( macht ( a-b, b*2) ); }
Parameterbinding Voorbeeld 1 -28 • Waarde parameters int macht (int grondtal, int exponent){ int r; r = 1; while (exponent-- > 0) r = r * grondtal; return(r); }
Recursie Voorbeeld 1 -29 int macht (int grondtal, int exponent){ if (exponent == 0) return (1); else return( grondtal * macht(grondtal, exponent-1)) }
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; }
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); }
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); }
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); }
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); }
Overzicht • Eenvoudig C • Arrays • Functies • Records • Basiselementen • Records en arrays • Records en wijzers • Records en functies • Dynamische gegevenstructuren
Basiselementen Voorbeeld 1 -54 struct Tswitch { int lokaal; int nr; int aan; }; struct Tswitch s1, s2;
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;
Type definities typedef int LENGTE; typedef struct Tswitch { int lokaal; int nr; int aan; } T_SWITCH; LENGTE ll, b; T_SWITCH s1, s2;
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); ... }
Records en wijzers Voorbeeld 1 -57 struct student { int nummer; int vaknr; int punten; }; struct student st, *wst; main(){ st.nummer = 13; wst = &st printint( wst -> nummer) } ipv (*wst).nummer
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); ... }
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); ... }
Overzicht • Eenvoudig C • Arrays • Functies • Records • Dynamische gegevenstructuren