Basis van programmeren in C

unsigned int i;
for (i = 3; i >= 0; i--)
    printf("%u ", i);

unsigned int is 32 bits. Welke beschrijving van het gedrag bij het uitvoeren van de bovenstaande code is juist?

  1. AHet programma drukt 3 2 1 0 af en stopt
  2. BHet programma drukt 3 2 1 af en stopt
  3. CNa het afdrukken van 3 2 1 0 stopt het programma niet, maar gaat het door met het afdrukken van afnemende waarden vanaf 4294967295
Antwoord en toelichting tonen

Antwoord: C. Na het afdrukken van 3 2 1 0 stopt het programma niet, maar gaat het door met het afdrukken van afnemende waarden vanaf 4294967295

i is zonder teken en kan dus nooit negatief worden, en de voorwaarde i >= 0 is altijd waar. Als i-- wordt uitgevoerd terwijl i gelijk is aan 0, wordt i weer 2³² − 1 = 4294967295, en de lus stopt niet maar blijft 4294967294, 4294967293 enzovoort afdrukken. Om tot 0 af te tellen, gebruik je int of schrijf je de lus anders, zoals for (i = 4; i-- > 0; ). Met -Wextra geeft gcc een waarschuwing dat deze vergelijking altijd waar is.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. Een programma dat „char c = 200;” instelt en c met %d in printf afdrukt, gaf −56 na compileren en uitvoeren met gcc voor Linux op x86-64, en 200 met gcc voor Linux op Arm. Wat is de reden voor dit verschil?
  2. Wat is de uitvoer als de bovenstaande code, met b++ aan de rechterkant van && en ||, wordt uitgevoerd?
  3. Wat is de uitvoer als het bovenstaande switch-statement, met een case zonder break, wordt uitgevoerd?
  4. Wat is de uitvoer als het bovenstaande programma wordt uitgevoerd?
  5. Wat is de retourwaarde van de derde aanroep als de bovenstaande functie f drie keer achter elkaar wordt aangeroepen?