SOCS
-
Upload
quincy-cameron -
Category
Documents
-
view
27 -
download
2
description
Transcript of SOCS
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>
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
*/...
}
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);...
}