C-Tutorials.de Logo

zum Inhaltsverzeichnis

C Tutorial: Die Zählschleife (for) und verknüpfte Bedingungen


Die Zählschleife: for

Das Prinzip dieser dritten und letzten Schleife ist ganz einfach. Man gibt ihr einen Startwert, sagt bis wohin die zählen soll und gibt dann noch vor in welchen Schritten sie zählen soll (meistens ist das +1). Jedes Mal, wenn der Wert, bis dem sie zählen soll nicht erreicht ist, wird der Code in der Schleife ausgeführt. Syntax:

for(i=0;i<10;i++) //in diesem Fall wird die Schleife 10 Mal ausgeführt
    {
    //Code, der bei jedem Schleifendurchgang wiederholt wird
  }

Bedeutung des Codes: 'for(Startwert;Bedingung;Inkrement/Dekrement)'. Der Startwert gibt vor, wo die Schleife anfängt zu zählen, die Bedingung muss wahr sein, das die Schleife nochmal ausgeführt wird und das Inkrement beschreibt, wie die Variable verändert werden soll. Im Normalfall, wie schon gesagt, wird der Wert um 1 erhöht. Es ist üblich die sog. Laufzeitvariable einer for-Schleife mit 'i' zu bezeichnen. Gibt es verschachtelte for-Schleifen, oder darf der Wert einer Variablen nicht überschrieben werden, geht man einfach im Alphabet weiter:

for(i=0;i<5;i++)
  {
    for(j=0;j<10;j++)
      {
        for(k=0;k<15;k++)
          {
            //BlaBla
          }
      }
  }

Aufgabe 1:

Schreibe ein Programm mithilfe einer for-Schleife, dass die Zahlen 1-20 ausgibt. Lösung:

#include <stdio.h>

int main ()
{
int i;

  for(i=1;i<=20;i++) //von 1 bis kleiner oder gleich 20 zählen
  {
    printf("%i ",i); //immer den Wert der Laufzeitvariable ausgeben
  }

  getch();
}

Aufgabe 2:

Erweitere Aufgabe 1 so, dass durch eine Usereingabe bestimmt wird, welche Zahlen ausgegeben werden sollen (von...bis). Lösung:

#include <stdio.h>

int main ()
{
int i;
int start;
int ende;

  printf("Gib die erste Zahl ein: ");
  scanf("%i",&start); //von
  printf("Gib die letzte Zahl ein: ");
  scanf("%i",&ende); //bis
  printf("\n");

  for(i=start;i<=ende;i++) //von und hier als Startwert bzw. in der Bedingung verwenden
  {
    printf("%i ",i);
  }

getch();
}

Aufgabe 3:

Erweitere Aufgabe 2 so, dass die ausgegeben Zahlen zusätzlich noch zusammengezählt werden und am Schluss ausgegeben werden. Lösung:

#include <stdio.h>

int main ()
{
int i;
int start;
int ende;
int summe = 0;

  printf("Gib die erste Zahl ein: ");
  scanf("%i",&start);
  printf("Gib die letzte Zahl ein: ");
  scanf("%i",&ende);
  printf("\n");

  for(i=start;i<=ende;i++)
  {
    printf("%i ",i);
    summe += i; //Nach den Wert der Laufzeitvariable zur Summe hinzuzählen
  }

  printf("\n\nSumme aller Zahlen: %i",summe);

  getch();
}

Bedingungserweiterung:

Mit den Bedingungen in ifs, whiles, do-whiles und fors kennst du dich ja jetzt schon aus. Jetzt kommt aber noch etwas hinzu, denn das überprüfen einer einzigen Variablen kann hin und wieder nicht ausreichen oder es ist umständlich(er) noch eine zweite zu überprüfen. Grundsätzlich gibt es da 3 neue „Vokaleln“ zu lernen, die du vielleicht aus der Digitaltechnik kennst: '&&' (logisches UND), '||' (logisches ODER) und '!' (NICHT oder Inverter).
Hier ein Code um den Vorteil von UND zu verdeutlichen:

if(var1 == 3)
  {
    if(var2 == 3)
      {
        //Mach was wen beide Bedingungen wahr sind.
      }
  }

Dieser Code überprüft ob var1 == 3 UND var2 == 3 ist. Trifft das zu, wird der Code ausgeführt. Das logische UND erleichtert uns die Arbeit und wir können ein if weglassen und schreiben die zweite Bedingung in das selbe if:

if(var1 == 3 && var2 == 3)
  {
    //Wenn var1 == 3 UND var2 == 3 dann führe aus
  }

Jetzt ODER:

if(var == 1)
  {
    //Wenn var == 1 dann führe XYZ aus
  }

if(var == 3)
  {
    //Wenn var == 3 dann führe auch XYZ aus
  }

Hier wird in beiden ifs der selbe Code ausgeführt. Eben wenn var den Wert 1 ODER 3 hat. ODER macht die Sache wieder einfacher und kürzer:

if(var == 1 || var == 3)
  {
    //Wenn var == 1 ODER var == 3 dann führe aus
  }

Achja, es macht nur Sinn die selbe Variable auf 2 verschiedene Werte zu überprüfen, wenn ein ODER mit von der Partie ist.

NICHT:
Das '!' ist ganz einfach, es dreht einfach wahr und falsch um. Wenn die Bedingung wahr ist und invertiert wird, dann ist sie falsch. Ist sie falsch und wird invertiert, dann ist sie wahr. Im Prinzip kennst du das schon vom Vergleichsoperator '!=' NICHTGLEICH. Hier wird das '!' nur an einer anderen Stelle verwendet:

if(!(var == 1 || var == 3))
  {
    //Wenn var != 1 UND var != 3 dann führe aus
  }

Das heißt der Code wird nur dann ausgeführt, wenn var nicht 1 und nicht 3 ist. Das was es zu invertieren gibt, wird der Übersichtlichkeit halber eingeklammert und vor diese Klammern wird das '!' gechrieben. Grundsätzlich kannst du einklammern soviel du willst, die Klammern haben die selbe Bedeutung wie in Mathe: Das was in Klammern steht wird zuerst ausgerechnet. Hier noch ein kleines größes Beispiel zur Verwirrung =) :

if((EnemyCount <= 20 && randy == 1) || (LastEnemySpawn < (shoot - (PlayersPoints + 41)))
{
}

zum Inhaltsverzeichnis