© Harry Broeders.
Deze pagina is bestemd voor studenten van de Haagse Hogeschool - Academie voor Technology, Innovation & Society Delft.
!(a < b II c < d)
moet
natuurlijk zijn !(a < b || c < d)
. a || b
is natuurlijk gewoon juist. Waarschijnlijk bedoelde de auteurs: a
| | b
/* geen extra spatie toegestaan
*/
. expr1 ll
expr2
dit moet natuurlijk zijn expr1 || expr2
. Even
verderop staat nogmaals ll
waar ||
wordt
bedoeld. Ook op p122 wordt deze fout nogmaals gemaakt. 9. Dit is wel een heel gemene opgave (4_19_9.c):
#include <stdio.h>
int main(void) {
int i = 7, j = 7;
if (i = 1)
if (j = 2)
printf("%d\n", i = i + j);
else
printf("%d\n", i = i - j);
printf("%d\n", i);
getchar();
return 0;
}
De uitvoer is:
Als je deze uitvoer niet meteen kunt verklaren dan heb ik de volgende twee tips voor je:
if
statements staat een
=
in plaats van de ==
die je zou verwachten. else
behoort niet bij de
if
waar hij onder uitgelijnd is. Stap voor stap verklaring:
i
en
j
. Beide worden geïnitialiseerd met de waarde
7
. if
statement staat i =
1
. Let op! i
wordt 1
. De expressie
i = 1
zorgt er voor dat de variabele i
de waarde
1
krijgt en de expressie heeft zelf ook de waarde
1
. In C is de waarde 0
gelijk aan false (onwaar)
en alle andere waarden zijn gelijk aan true (waar). De waarde
1
is dus true (waar) en de instructie in het eerste
if
statement wordt uitgevoerd. Dit is het tweede
if
statement. if
statement staat j =
2
. Let op! j
wordt 2. De expressie j =
2
zorgt er voor dat de variabele j
de waarde
2
krijgt en de expressie heeft zelf ook de waarde
2
. In C is de waarde 0
gelijk aan false (onwaar)
en alle andere waarden zijn gelijk aan true (waar). De waarde
2
is dus true (waar) en de instructie in het tweede
if
statement wordt uitgevoerd. Dit is het eerste
printf
statement: printf("%d\n", i = i + j);
%d
wordt ingevuld is het resultaat van
de expressie i = i + j
. De
waarden van i
en j
zijn voordat deze expressie
wordt uitgevoerd 1
en 2
. Het resultaat van
1
+ 2
is 3
en deze waarde wordt in
de variabele i
opgeslagen. De expressie i = i + j
zorgt er dus voor dat de variabele i
de waarde 3
krijgt en de expressie heeft zelf ook de waarde 3
. Deze waarde
wordt dus bij de %d
ingevuld. De printf
functie zal de waarde 3
op het scherm afdrukken. De
\n
zorgt ervoor dat de uitvoer daarna op het begin van de volgende regel
verder gaat. else
behoort bij de tweede if
(ondanks dat
het inspringen anders suggereert). Omdat het statement in de tweede
if
is uitgevoerd wordt het statement in de else
niet uitgevoerd. printf
statement uitgevoerd:
printf("%d\n",
i);
%d
wordt ingevuld is het resultaat van
de expressie i
. De waarden van
i
is 3
. Deze waarde wordt dus bij de
%d
ingevuld. De printf
functie zal de waarde 3
op
het scherm afdrukken. De \n
zorgt ervoor dat de uitvoer daarna
op het begin van de volgende regel verder gaat. getchar()
wordt het window pas
gesloten nadat op de enter toets is gedrukt. 33. De opgave is niet correct. Dit kun je meteen zien als je de eerste 3 termen van de gegeven formule bij elkaar opteld: e = 1 + 1 + 1/1! = 3. Elke Elektrotechniekstudent weet dat e < 3 is. De juiste formule is:
Bron: http://nl.wikipedia.org/wiki/E_(wiskunde)
Het volgende programma berekent een benadering voor e door een
bepaald aantal termen van deze reeks op te tellen. Het aantal termen kan door
de gebruiker van het programma worden opgegeven. 4_19_33.c:
#include <stdio.h>
/* © 2013 Harry Broeders */
/* benader e met de volgende formule e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + ... */
/* in deze formule betekent 4!: 4 faculteit. Dat werkt niet in C. */
/* aantal termen is een variabele die moet worden ingelezen */
int main(void) {
double termNoemer, e;
int aantalTermen, termNummer;
do {
printf("Geef het aantal termen: ");
scanf("%d", &aantalTermen);
} while (aantalTermen <= 0);
termNoemer = 1;
e = 1;
for (termNummer = 1; termNummer < aantalTermen; termNummer = termNummer + 1) {
termNoemer = termNoemer * termNummer;
e = e + 1 / termNoemer;
}
printf("e benaderd met %d termen = %.13f\n", aantalTermen, e);
fflush(stdin);
getchar();
return 0;
}
De uitvoer van dit programma is:
Als je wilt lezen hoe ik een programma dat lijkt op het bovenstaande programma stap voor stap heb ontwikkeld dan kun je dat lezen op: cos_stap_voor_stap.htm.