Ich brauche ein C-Programm, das die geradenZahlen von 1-100 auf dem Bildschirm ausgibt?

2 Antworten

Dein erster Versuch sieht fast richtig aus (zumindest das, was man lesen kann), der einzige Fehler liegt darin, dass du die Variable "i" in der Schleife immer hochzählen willst und nicht nur dann, wenn es keine gerade Zahl ist.


spaghetticode  26.10.2015, 13:18

Jap, sehe ich auch so. Den else-Zweig streichen und durch die einfache Anweisung "i++" ersetzen, ansonsten sieht das, was man erkennen kann, gut aus.

Alternativ könntest du i mit Null initialisieren und in der Schleife mit i = i + 2 direkt im Zweierschritt erhöhen, dann entfällt die Modulo-Prüfung ganz.

Könnte aber je nach Aufgabenstellung am Thema der Aufgabe vorbeigehen.

0
Wega94 
Fragesteller
 26.10.2015, 13:21
#include <stdio.h>
int main(void)
{
int i=1;
while (i<=100){
if(i%2=0) printf("%d\n", i);
else i++;
}
}
0
Wega94 
Fragesteller
 26.10.2015, 13:22
@Wega94

also so ist der vorläufige code

0
spaghetticode  26.10.2015, 13:34
@Wega94

Die Sache mit dem else-Zweig wurde ja schon angesprochen. Korrigier das schonmal. Dann: Du verwendest in deiner if-Abfrage keinen Vergleich, sondern eine Zuweisung (= vs ==, lies das in deinen Materialien nochmal nach). Das dürfte so, wie es da steht, theoretisch gar nicht kompilieren, weil "i%2" kein sogenannter lvalue ist, dem man etwas zuweisen kann. Aber auch, wenn da nur "i = 2" stünde, wäre das Programm nicht korrekt, denn der Wert von "i = 2" wäre 2, das würde zu true ausgewertet und es würde immer eine 2 ausgegeben, außerdem hättest du eine Endlosschleife.

Langer Rede, kurzer Sinn: ersetze den else-Zweig durch das einfache Statement "i++" und lies nochmal nach, was der Unterschied zwischen "=" und "==" ist.

1
ceevee  26.10.2015, 13:37
@Wega94

Gehen wir deinen Programmablauf mal durch:

i ist 1 -> 1 ist nicht durch 2 teilbar -> i wird um 1 erhöht -> nächstes i ist 2

i ist 2 -> 2 ist durch 2 teilbar -> gib i aus -> nächstes i ist 2

i ist 2 -> 2 ist durch 2 teilbar -> gib i aus -> nächstes i ist 2

i ist 2 -> 2 ist durch 2 teilbar -> gib i aus -> nächstes i ist 2

... und so weiter, das gibt eine Endlosschleife. Ich werde dir den fertigen Code nicht geben, deine Hausaufgaben musst du schon alleine machen. ;)

1
Wega94 
Fragesteller
 26.10.2015, 13:45

Danke Leute ich glaube ich habs geschafft, zumindest wird mir das richtige angezeigt.

0
Lass dir die Aufgabenstellung noch mal durch den Kopf gehen!

Das ganze kannst du viel cleverer lösen:

int i = 2;

while (i <= 100) {
printf("%d\n", i);

i += 2;
}

Dafür benötigst du also weder if, noch Division oder Modulo.

Viel Spaß damit! :)


TeeTier  26.10.2015, 16:03

Und so geht es sogar, völlig ohne Variablen und Schleifen:

puts("2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100");
1