Letzte Verständnisfrag

Gast #3995498
Lesenswert?
• ▲
▼
Welche Ausgabe erzeugt das nebenstehende Programm in seiner
letzten Zeile? Stellen Sie dazu eine Wertetabelle für i und n auf.
      // Wertetabelle: i | n
1
#include <stdio.h>
2
void main()
3
      {
4
      int n=0, i=0;
5
      for(i=0;i<30;i++)
6
      {
7
        if(i>20)break;
8
        n+=100;
9
        if(i<10)continue;
10
        n-=100;
11
     }
12
         printf("%i\n",n);
13
      }
Die Ausgabe in der letzten Zeile ist 1000, bei i=20 und i=21

ich habe eine Wertetabelle erstellt, kann mir aber nicht erklären, wie 
die Werte zustande kommen:
1
    // i      n
2
    //----------------
3
    // 0    0
4
    // 0    100
5
    // 1    200
6
    // 2    300
7
    // 3    400
8
    // .    .
9
    // .    .
10
    // 9    1000
11
    // 10    1100
12
    //----------------
13
    // 1000
14
    // 10    1000
15
    // 11    1100
16
    // 11    1000
17
    // 12    1100
18
    // 12    1000
19
    // .    .
20
    // .    .
21
    // 19    1100
22
    // 19    1000
23
    // 20    1100
24
    // 20    1000
25
    // 21         1000
wieso erhöht sich n, wenn ? Bei i= 9 wird das Maximum erreicht, dann 
greift ja die break funktion ein
Gast #3995662
Lesenswert?
• ▲
▼
Hallo,

ich würde vorschlagen du benutzt einen Debugger um das Programm zu 
verstehen. Da kannst du dir jede Variable zu jedem Schritt anschauen.

Außerdem bitte den Code nächstes mal in code Tags setzen, dann ist das 
etwas leichter lesbar.

Ich weiß nicht so recht zu welchem Zeitpunkt die Wertetabelle angegeben 
werden soll.

i=0 und n=0
1
     
2
for(i=0;i<30;i++)
3
{
4
  if(i>20)break;           // (1)
5
  n+=100;                  // (2)
6
  if(i<10)continue;        // (3)
7
  n-=100;                  // (4)
8
}

Wenn du mit i = 0 und n = 0 startest
(1) wirkungslos, da i nicht größer 20
(2) n wird um 100 erhöht (n=100)
(3) wird aus geführt -> die nächste Runde geht los, Aufgrund von 
continue wird der Rest, hier (4) ignoriert
i++ wird ausgeführt

i = 1 und n = 100
(1) wirkungslos, da i nicht größer 20
(2) n wird um 100 erhöht (n=200)
(3) wird aus geführt -> die nächste Runde geht los, Aufgrund von 
continue wird der Rest, hier (4) ignoriert
i++ wird ausgeführt

usw. usw.

bis
i = 10 und n = 1000
(1) wirkungslos, da i nicht größer 20
(2) n wird um 100 erhöht (n=1100)
(3) wird nicht mehr ausgeführt d.h. kein continue
(4) n wird um 100 erniedrigt (n = 1000)
i++ wird ausgeführt


somit bleibt n auf 1000 ( immer 100 drauf und 100 weg)

usw usw.

i = 20 und n = 1000
wie oben

i = 21
(1) ist erfüllt -> for-Schleife wird abgebrochen
n wird nicht mehr verändert

somit ist am Ende der Schleife i = 21 und n = 1000
Gast #3995666
Lesenswert?
• ▲
▼
Sven schrieb:
> wieso erhöht sich n, wenn ? Bei i= 9 wird das Maximum erreicht, dann
> greift ja die break funktion ein

die break funktion "greift" erst bei i = 21.

die continue funktion wird ab i = 10 nicht mehr ausgeführt
i = 9 also kleiner 10 also sehr wohl noch ....
#3995670
Lesenswert?
• ▲
▼
Das gleiche Programm mit ein paar printf-Befehlen, wo man in der Ausgabe 
alles genau sehen kann, auch das Maximum n=1100:
1
#include <stdio.h>
2
void main()
3
{
4
    int n = 0, i = 0;
5
    printf("\n* Tabelle: i und n\n");
6
    printf("Werte vor und nach continue.\n\n");
7
    for (i = 0; i < 30; i++)
8
    {
9
        if (i > 20) break;
10
        n += 100;
11
        printf("vorher: i=%3i, n=%5i ", i, n);
12
        if (i < 10) goto cont; // continue;
13
        n -= 100;
14
cont:   printf("--- nachher: i=%3i, n=%5i\n", i, n);
15
    }
16
    printf("\n* Ende: i=%3i, n=%5i\n", i, n);
17
}

@Joe
Du bist heute einfach zu schnell für mich ;)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.