Wie kann man mithilfe einer Schleife nur gerade Zahlen ausgeben in C?

4 Antworten

for(int i = 2; i <= eingabe; i+= 2)

Wieso soll man gucken, ob die Zahl grade oder ungrade ist? ändert doch nichts an der Ausgabe (Ansonsten schau dir mal den Modulo Operator an)

Antoinn 
Fragesteller
 08.10.2018, 22:20

danke das hat mir sehr geholfen

0

Es gibt verschiedene Lösungsansätze.

#include <stdio.h>

int main() {
  int num;
  scanf("%d", &num);
  printf("Zahl %d\n", num);

  int i;
  for (i = 2; i <= num; i += 2)
    printf("%d ", i);

  /* oder */

  for (i = 2; i <= num; ++i)
    if (i % 2 == 0)
      printf("%d ", i);
    
  return 0;
}
Woher ich das weiß:Berufserfahrung

Neben der Möglichkeit von hairybear kann man natürlich auch einfach bis floor(n/2) im Einerstepping laufen und dann einfach den Basiswert mit 2 multiplizieren.

Oder einfach ein Single-Bit-Shift durchführen, oder ...

Der Kreativität sind keine Grenzen gesetzt.

Der Modulo Operator sollte dir helfen: % (Division mit Rest)

Antoinn 
Fragesteller
 08.10.2018, 22:18

Soweit war ich auch schon nur gab er was falsches aus
 int iA;

  int iB;

  printf("Eingabe iA: \t");

  scanf("%d",&iA);

    if((iA %2)==0)

    {

      for(iB=1;iB<iA;iB++);

      {

          printf("%d",iB);

      }

    }

    else(iA %2==1);

    {

      iA-1;

      for(iB=1;iB<iA;iB++)

      {

        printf("%d",iB);

      }

    }

  return 0;

0
AldoradoXYZ  08.10.2018, 22:21
@Antoinn

for(iB=1;iB<iA;iB++);

";" am Ende ist falsch. Außerdem inkrementierst Du nur um 1. Wie wäre es mit iB+=2?

  else(iA %2==1);

";" ist ebenfalls falsch.

for(iB=1;iB<iA;iB++)

Auch hier nur ein Inkrement um 1. Wie wäre es mit iB+=2

Die Schleifen müssen in "zweier-Schritten" voranschreiten, Du möchtest doch nur die geraden Zahlen.

1
Antoinn 
Fragesteller
 08.10.2018, 22:25
@AldoradoXYZ
int main()
{
    int iA;
    int iB;
    printf("Eingabe iA: \t");
    scanf("%d",&iA);
       // if((iA %2)==0)
        {
            for(iB=2;iB<iA;iB+=2)
            {
                    printf("%d",iB);
            }
        }

    return 0;
}

danke so müsste es richtig sein

0
AldoradoXYZ  08.10.2018, 22:27
@Antoinn

Kannst den ehemaligen Block "{}" für die auskommentierte Bedingung auch noch entfernen. Dann sieht es auch etwas sauberer aus.

Gruß

1