// AUFAGBE 5: Welchen Wert hat die Variable b nach Ablauf der dargestellten //Programmschleife? int a, b=0; for(a=1;a<8;a++) if(a>5) b=b+a*a; Der ausgegebene Wert beträgt 85. b=0+6*6 => b= 36 b=36+7*7 => b= 85 aber wird a nicht auch auf 8 erhöht? in den Bedingungen steht ja, dass a um 1 erhöht wird, solange es kleiner als 8 ist. wennn a=7 ist und um eins erhöht wird, dann ist a= 8 und müsste es dann nicht heißen: b=85+8*8 ? Irgendwo habe ich einen Denkfehler.
for(a=1;a<8;a++) heisst, die Schleife startet mit a=1 und läuft so lange durch, solange die Bedingung "a<8" (also a==7) erfüllt ist. a wird immer am Schleifenende erhöht. Danach erfolgt der Test auf a<8. Nach der Schleife ist a in der Tat 8, aber die Anweisungen innerhalb der Schleife werden nicht mehr ausgeführt, sobald a 8 wird.
:
Bearbeitet durch User
Joe F. schrieb: > Nach der Schleife ist a in der Tat 8, aber die Anweisungen innerhalb der > Schleife werden übersprungen, sobald a 8 wird. Vielen Dank Joe. Also "springt" das Programm aus der Schleife, wenn a=8 ist. Zum Verständnis: for(a=1;a<=8;a++) if(a>5) b=b+a*a; Hier wäre das Ergebnis b=85+8*8, weil 8 noch in der Schleife ist, richtig? MfG
Sven schrieb: > Joe F. schrieb: >> Nach der Schleife ist a in der Tat 8, aber die Anweisungen innerhalb der >> Schleife werden übersprungen, sobald a 8 wird. > > Vielen Dank Joe. > > Also "springt" das Programm aus der Schleife, wenn a=8 ist. > > Zum Verständnis: > > for(a=1;a<=8;a++) > if(a>5) > b=b+a*a; > > Hier wäre das Ergebnis b=85+8*8, weil 8 noch in der Schleife ist, > richtig? > > MfG genau. Man könnte die erst genannte Schleife sinngemäß auch so schreiben:
1 | a = 1; |
2 | |
3 | loop: |
4 | |
5 | if(a>5) |
6 | b=b+a*a; |
7 | |
8 | a++; |
9 | if (a<8) goto loop; |
10 | |
11 | (...) |
:
Bearbeitet durch User
Ich habe noch ein weiteres Programm, bei dem sich mir eine Ähnliche Frage stellt: AUFAGBE 2: Welche Ausgabe erzeugt das nebenstehende Programm in seiner letzten Zeile? Stellen Sie dazu eine Wertetabelle für i und n auf. // Wertetabelle: i | n #include <stdio.h> void main() { int n=0, i=0; for(i=0;i<30;i++) { if(i>20)break; n+=100; if(i<10)continue; n-=100; } printf("%i\n",n); } Die Ausgabe in der letzten Zeile ist 1000, aber wieso erhöht sich n? Müsste n sich nicht eigentlich vorerst im negativen Bereicht bewegen bei i=1 ? Weil 1<10 also n=n-100 oder nicht?
Solange i < 10 ist, werden immer 100 zu n addiert. Also wächst es bis auf 1000. Ab i = 10 werden zu n immer 100 addiert und gleich danach wieder 100 subtrahiert, also bleibt es bei 1000. Bei i > 20 wird die Schleife verlassen. Am Ende ist also n gleich 1000 und i gleich 21.
Was hindert dich eigentlich daran, das Programm mit ein paar printf zur Ausgabe der Variablen zu versehen und laufen zu lassen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.