Uitkomst statement?

Status
Niet open voor verdere reacties.

Chargeotto

Gebruiker
Lid geworden
22 aug 2007
Berichten
147
Als huiswerkvragen heb ik een aantal statements waarbij je moet voorspellen wat de waardes i, j en k zijn na afloop.
Nu heb ik ze allemaal gedaan en waren allemaal goed, behalve 1.

De beginsituatie is namelijk als volgt: i=2, j=3, k=4
En het statement is: i = k---j ;


Nu was mijn logica als volgt: (deze gaat dus ergens fout)
--j wordt als eerste gedaan..... dus j=2
Vervolgs k - 2 => dus i = 4-2 = 2

Als antwoorden kom ik dan uit op:
i=2
k=4
j=2

Alleen dit is dus niet goed.... Iemand een idee waar ik fout ga?
 
Helemaal aan het begin ga je fout (een daarom krijg je waarschijnlijk ook deze opgave, als instinker).

-- postfix heeft een hogere prioriteit dan -- prefix, ook al wordt ie pas later uitgevoerd:
zie ook de goede uitleg (met voorbeelden) hier (in het bijzonder punt 4)
 
owja, daar ging ik dus de fout in :D
ik had in me hoofd zitten dat prefix eerst moest en daarna postfix....
maar het is andersom dus .
 
Nog even een ietswat soortgelijk probleem....

In mijn ogen zou er uit beide printf's hetzelfde uit moeten komen.
Alleen via #define berekent komt er 35 uit?
Naar mijn idee komt er uit die berekening 39?


Code:
#define fun(x)  6 * x * x + 4 * x + 7
main() 
{ 
    int p;
    int q; 
    p=4;
    q=2;
    
    printf("%d", fun(p-q)); 

    printf("\n %d",( 6 * 2 * 2 + 4 * 2 + 7));
    system("pause");
}
 
Welkom bij het gevaar van macros :)

Een define wordt door de pre-processor verwerkt, dus nog voor het compileren begint. En een define is eigenlijk een soort replace.
Wat je pre-processor ervan maakt is dit (x is p-q, dus overal waar x stond in de define wordt die vervangen door p-q):
Code:
//fun(p-q)
6 * p-q * p-q + 4 * p-q + 7
En wanneer je compiler dit verwerkt krijg je dan:
Code:
(6 * p) - (q * p) - q + (4 * p) - q + 7

Wat je kan doen om dit te vermijden is ofwel, je aanroep van haakjes laten gebruik maken:
Code:
fun((p-q))
Ofwel (beter), je define hierop voorzien maken dmv haakjes:
Code:
#define fun(x)   6 * (x) * (x) + 4 * (x) + 7

Hoewel dat laatste op het eerste zicht er misschien een beetje stom uitziet, is het de beste methode om ervoor te zorgen dat je define altijd doet wat je bedoeld had.
Het is een goede gewoonte om variablen in een define/macro altijd met haakjes te omgeven.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan