Grundlagen der C-Programmierung: Boolesche Logik und Kontrollfluss

6

Die meisten Leute denken, dass es beim Codieren um komplexe Algorithmen geht. Das ist es nicht. Es geht hauptsächlich darum, einfache Entscheidungen zu treffen. In C laufen diese Entscheidungen auf eines hinaus: Boolesche Ausdrücke.

Sie haben sie in if -Anweisungen und while -Schleifen gesehen. Sie sind die Ampeln Ihres Programms. Grün geht. Rot bleibt stehen.

Nehmen Sie dieses einfache Beispiel.

„c

int main() {
int b;
printf(“Geben Sie einen Wert ein:”);
scanf(“%d”, &b);
if (b < 0) printf("Der Wert ist negativ\n"); 0 zurückgeben; } „

Es wird nach einer Nummer gefragt. Es prüft, ob diese Zahl kleiner als Null ist. Wenn ja, spricht das Programm. Wenn nicht? Schweigen.

Der Teil „(b < 0)“ ist der boolesche Ausdruck. C wertet es aus. True bedeutet, dass die nächste Zeile ausgeführt wird. Falsch bedeutet, es zu überspringen. Einfach.

Aber was passiert, wenn Sie mehr Nuancen benötigen?

Umgang mit Null- und positiven Werten

Die obige Einzelprüfung hinterlässt eine Lücke. Was passiert, wenn der Benutzer Null eingibt? Oder eine positive ganze Zahl? Das Programm ignoriert sie.

Hier ist eine etwas komplexere Struktur.

„c

int main() {
int b;
printf(“Geben Sie einen Wert ein:”);
scanf(“%d”, &b);
wenn (b < 0) printf("Der Wert ist negativ\n"); sonst wenn (b == 0) printf("Der Wert ist Null\n"); sonst printf("Der Wert ist positiv\n"); 0 zurückgeben; } „

Jetzt haben Sie eine Logik für negative, Null- und positive Werte. Die Abschnitte „else if“ und „else“ erfassen die anderen Fälle. Es ist immer noch einfach, deckt aber alle Grundlagen ab.

Komplexe Bedingungen und häufige Fallstricke

Die Logik der realen Welt bleibt selten einfach. Manchmal müssen zwei Bedingungen gleichzeitig wahr sein.

Betrachten Sie diese Zeile:

„c
if ((x==y) && (j>k)) z=1; sonst q=10;

Lesen Sie es wie Englisch. Wenn x gleich y ist UND j größer als k ist, setzen Sie z auf 1. Andernfalls setzen Sie q auf 10.

Beachten Sie die Operatoren.

C verwendet „==“, um auf Gleichheit zu testen. Es verwendet ein einzelnes „=“, um einen Wert zuzuweisen.

Das ist eine klassische Falle. Wenn Sie „if (x = y)“ schreiben, prüfen Sie nicht, ob sie gleich sind. Sie weisen x y zu und prüfen dann, ob das Ergebnis ungleich Null ist. Deine Logik bricht zusammen. Verwenden Sie für Vergleiche immer doppelte Gleichheitszeichen.

Das Symbol „&&“ stellt eine boolesche UND-Verknüpfung dar. Beide Seiten müssen wahr sein.

Das komplette Boolesche Operator-Toolkit

Sie müssen sich diese nicht merken, aber Sie sollten wissen, wie sie aussehen. Sie erscheinen überall im C-Code.

  • Gleichheit : ==
  • Ungleichheit : !=
  • Kleiner als : <
  • Größer als : >
  • Kleiner oder gleich : <=
  • Größer als oder gleich : >=
  • UND : &&
  • ODER : ||
  • NICHT : !

Warum das für alltägliche Benutzer wichtig ist

Schleifenlogik in C: while, do-while und for-Strukturen

Sie können while -Schleifen genauso einfach verwenden wie einfache if -Anweisungen. Betrachten Sie ein einfaches Beispiel:

„c
while (a < b) { printf("%d\n", a); a = a + 1; } „

Dieser Code wiederholt diese beiden Zeilen, bis a größer oder gleich b ist. Der Aufbau ist unkompliziert. C bietet außerdem ein do-while -Konstrukt, das garantiert, dass der Codeblock mindestens einmal ausgeführt wird, bevor die Bedingung überprüft wird. Hier ist ein Ausschnitt, der eine grundlegende Eingabeprüfung zeigt:

„c

int main() {
int a;
printf("Geben Sie eine Zahl ein:");
scanf("%d", &a);
wenn (a) {
printf("Der Wert ist wahr\n");
}
0 zurückgeben;
}

Wie die for-Schleife die Iteration vereinfacht

Die for -Schleife ist im Wesentlichen eine Abkürzung für eine while -Schleife. Wenn Sie Code wie diesen haben:

„c
x = 1;
while (x < 10) { // bla bla bla x++; // dasselbe wie x = x + 1 } „

Sie können es in einer einzigen for -Anweisung komprimieren:

„c
für (x = 1; x < 10; x++) { // bla bla bla } „

Die while -Schleife besteht aus drei verschiedenen Teilen: Initialisierung (x=1 ), Test (x<10 ) und Inkrementierung (x++ ). Die for -Schleife packt diese in eine Zeile. Sie sind jedoch nicht auf einfache Variablen beschränkt. Schauen Sie sich dieses komplexere Szenario an:

„c
a = 1;
b = 6;
while (a < b) { a++; printf("%d\n", a); } „

Sie können dies mit einer for -Schleife umschreiben:

„c
for (a = 1, b = 6; a < b; a++, printf("%d\n", a)); „

Es sieht vollgestopft aus. Es ist verwirrend. Aber es funktioniert. Mit dem Kommaoperator können Sie mehrere Anweisungen in den Initialisierungs- und Inkrementierungsabschnitten einer for -Schleife verketten. Sie können im Testabschnitt jedoch kein Komma setzen.

Viele C-Programmierer lieben es, Logik in eine einzige Zeile zu packen. Andere argumentieren, dass es die Lesbarkeit zerstört. Es gibt keinen universellen Konsens. Sie müssen sich nur entscheiden, ob Ihnen die Kürze wichtiger ist als die Klarheit.

Die Gefahr von = vs == in booleschen Ausdrücken

Das doppelte Gleichheitszeichen == ist eine häufige Fehlerquelle in C. Entwickler geben häufig versehentlich ein einzelnes Gleichheitszeichen = ein. Der Compiler akzeptiert beides, aber das Verhalten unterscheidet sich drastisch.

In C werden boolesche Ausdrücke zu ganzen Zahlen ausgewertet. Null bedeutet Falsch. Jede Ganzzahl ungleich Null bedeutet True. Das bedeutet, dass Sie legal schreiben können:

„c
wenn (a) {
// wird ausgeführt, wenn a nicht 0 ist
}

Aber was passiert, wenn Sie „if (a=b)“ schreiben?

Dies ist kein Vergleich. Es ist eine Aufgabe. Die Anweisung „if (a=b)“ weist a den Wert von b zu und testet dann den resultierenden Wert von a auf seine boolesche Wahrheit. Wenn a Null wird, ist die Bedingung Falsch. Wenn daraus etwas anderes wird, ist es Wahr.

Ihre Variable a ändert während dieses Vorgangs den Wert. Dies ist selten das, was Sie wollen, wenn Sie Werte vergleichen möchten. Obwohl diese Funktion der bedingten Zuweisung in bestimmten Kontexten nützlich sein kann, ist sie eine Falle für Unvorsichtige. Seien Sie vorsichtig mit der Verwendung von = und ==. Ein Tippfehler ändert alles.