Kurze Verständnisfrage Code

Gast #3995395
// 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.
Gast
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
(...)
Gast
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.