2017-02-06 3 views
-4

Ich bin mir nicht sicher, warum dieser Code "h = 13" und nicht "h = 2" druckt. Hat jemand eine Idee?Wie wird der Code gedruckt? Übung in C

#include <stdio.h> 

int main() { 
int j,h=1; 
for(j=0;j<50;j++) { 
     if(j%6==1) continue; 
     h++; 
     if(j==7 || j==14 || j==21) 
       break; 
} 
printf("h=%d",h); 
return 0; 
} 
+3

es selbst ausprobieren. Wenn Sie keinen Compiler haben, verwenden Sie einen Online-Compiler. –

+1

Verwenden Sie Breakpoints, um Zeile für Zeile zu gehen. –

+0

Hinweis: Was bedeutet der Ausdruck 'j% 6', wenn' j' 7 ist? – lurker

Antwort

3
  1. Wenn j = 0 weder von der if-Anweisung einen Wert von 1 zurückzukehren, und somit h erhöht wird.
  2. Wenn j = 1 in (j % 6 == 1), 1% 6 ergibt einen Rest von 1. Die Aussage j % 6 ist wahr und so wird h nicht inkrementiert. (Das '%' ist ein Restoperator)
  3. Wenn j = 2 bis j = 6 keine der If-Anweisungen einen Wert von 1 zurückgibt, und somit h wird erhöht.
  4. Wenn j = 7 in (j % 6 == 1), 7% 6 wird einen Rest von 1 geben. Die Aussage j % 6 ist wahr und so wird h nicht inkrementiert.
  5. Wenn j = 8 zu j = 12 keiner der if-Anweisungen einen Wert von 1 zurückgibt, und damit h wird erhöht.
  6. Wenn j = 13 in (j % 6 == 1), 13% 6 wird einen Rest von 1 geben. Die Aussage j % 6 ist wahr und so wird h nicht inkrementiert.
  7. Für j = 14 die Anweisung j == 14 iswahr und damit die Break-Anweisung ausgeführt wird.

h wird inkrementiert werden: j = 0, = j 2-j = 6, j = 8-j = 12, j = 14 der insgesamt 12-mal ist.

Summe von 12 + 1 (h = 1) = 13