© Harry Broeders.
Deze pagina was bestemd voor studenten van de THRijswijk groepen Pm en Pv. Op deze pagina vind je het in de lessen SOPX1E1T1/P1 gebruikte studiemateriaal. Het belangrijkste studiemateriaal, het boek "De taal C van PSD tot C-programma" heb je als het goed is al in je bezit.
int wissel(int,
int);
void wissel(int,
int);
int wissel(int a,
int b)
void wissel(int a,
int b)
return(a,b);
b
terug. Zie
http://crasseux.com/books/ctutorial/The-comma-operator.html
voor verdere uitleg.
m
.
Je kunt dan heel goed het verschil zien tussen call by value (m
)
en call by reference parameters (funk
, funo
en
fung
).
#include <stdio.h>
int main() {
int macht, a;
int (*pnf)(int);
int twee(int), drie(int);
pnf = &twee;
printf("Voer een geheel getal in: ");
scanf("%d", &a);
macht = (*pnf)(a);
printf("De tweede macht van %d is %d\n", a, macht);
pnf = &drie;
macht = (*pnf)(a);
printf("De derde macht van %d is %d\n", a, macht);
getchar(); getchar();
return 0;
}
int twee(int c) {
return c*c;
}
int drie(int d) {
return d*d*d;
}
De in het rood aangegeven karakters zijn in het boek dus weggelaten. Dit mag omdat in C geldt: De naam van een functie mag gebuikt worden als een pointer naar (de eerste instructie van) de functie en vice-versa. Deze regel is vergelijkbaar met de regel: De naam van een array mag gebuikt worden als een pointer naar (het eerste element van) de array en vice-versa.
tabel
heeft de eerste parameter
(p) wel een naam en de andere 3 niet. Dat is niet erg consequent. Zoals je
weet mogen de namen van de formele parameters in het prototype van
de functie weggelaten worden. Het is echter niet erg consequent om er drie
wel en één niet weg te laten.
tabel
kan gebruikt worden om verschillende (andere)
functies in tabelvorm af te drukken. In het voorbeeld wordt de functie
tabel
alleen gebruikt om een tabel met derde machten af te drukken.
Het zou didactisch beter zijn om te laten zien dat de functie
tabel
ook andere functies in tabelvorm kan afdrukken (bijvoorbeeld
kwadraten). De eerste printf
in tabel
is dus duidelijk
verkeerd want tabel
kan ook gebruikt worden om andere functies
in tabelvorm af te drukken.
printf
in tabel
moet "netjes" inspringen.
\t
in de tweede
printf
is niet handig omdat de TAB instellingen bij verschillende
systemen anders kan zijn. Het is beter om een veldbreedte op te geven b.v.
%10d
.
Deze problemen zijn in het volgende programma verholpen:
#include <stdio.h>
int main() {
void tabel(int (*)(int), int, int, int);
int twee(int), drie(int);
printf("\nDe derde macht in een tabel van 1 t/m 10\n");
tabel(&drie, 1, 10, 1);
printf("\nDe tweede macht in een tabel van 11 t/m 20\n");
tabel(&twee, 11, 20, 1);
getchar();
return 0;
}
void tabel(int (*p)(int), int van, int totEnMet, int stap) {
int x;
for (x=van; x<=totEnMet; x+=stap) {
printf("%10d %10d\n", x, (*p)(x));
}
}
int twee(int c) {
return c*c;
}
int drie(int d) {
return d*d*d;
}
De in het rood aangegeven karakters kunnen ook worden weggelaten.
abcFormule
waarmee de wortels van
een kwadratische functie
y=ax2+bx+c kunnen worden berekend met behulp
van de
abc
formule. De functie heeft 3 invoerwaarden: a
, b
en c
en ook 3 uitvoerwaarden:
Schrijf ook een main
functie om de functie
abcFormule
te testen. De uitwerking kun
je hier vinden.
if (strcmp(blabla,
NULL)==0)
if (strcmp(blabla,
"")==0)
Zie hier!