1 / 49

SOCS

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.

Download Presentation

SOCS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 • Declaratie int 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 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 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. 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

  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] = &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. 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) }

  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 parameters int 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); else return( 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 = &st printint( 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

More Related