Kurze Verständnisfrage Code

Gast #3995395
Lesenswert?
• ▲
▼
// 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.
#3995422
Lesenswert?
• ▲
▼
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.
Gast #3995438
Lesenswert?
• ▲
▼
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
#3995439
Lesenswert?
• ▲
▼
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
(...)
Gast #3995455
Lesenswert?
• ▲
▼
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren