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

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