Logische Operatoren Teil 3
Teil des Abschnitts Fundamentals der C-Journey von Coddy — Lektion 23 von 63.
Beim Prüfen mehrerer Bedingungen stoppt das Programm die Prüfung, sobald es das Endergebnis kennt. Dies wird als Kurzschlussauswertung (Short-Circuit Evaluation) bezeichnet.
Zum Beispiel:
int x = 0;
int y = 5;
int result = (x != 0) && (y / x > 2);Hier ist x gleich 0, daher wird y / x > 2 nicht ausgewertet. Wenn wir die Reihenfolge umkehren würden:
int result = (y / x > 2) && (x != 0);Dies wird zu einem Fehler führen, da y durch 0 geteilt wird, was in C nicht definiert ist. Es ist daher eine gute Praxis, Operationen gründlich zu durchdenken, damit Sie korrekten und effektiven, aber fehlerfreien Code erhalten.
Diese Technik wird verwendet, um die Auswertung logischer Ausdrücke zu optimieren. Zum Beispiel:
int a = 0;
int b = 2;
int c = 3;
int d = 5;
int result = (a > 0 && b < 2) || (c < -5 && d < 10);In diesem Beispiel werden b < 2 und d < 10 nicht ausgewertet, da sowohl a > 0 als auch c < -5 falsch sind.
Aufgabe
EinfachErstellen Sie ein Programm, um zu entscheiden, ob es ein guter Tag für die Energieerzeugung durch Solarmodule ist
Initialisieren Sie diese Variablen:
isSunnymit dem Wert 1 (true)windSpeedmit dem Wert 5.4temperaturemit dem Wert 23solarPanelOutputmit dem Wert 9isCloudymit dem Wert 0 (false)
Erstellen Sie einen logischen Ausdruck, der ALLE diese Bedingungen prüft:
- Es ist sonnig
- Die Windgeschwindigkeit ist geringer als 10
- Die Leistung der Solarmodule ist geringer als 15
- Die Temperatur liegt über 20 ODER es gibt keine Wolken
Geben Sie "Good day for solar energy" aus, wenn alle Bedingungen erfüllt sind, andernfalls geben Sie "Not ideal for solar energy" aus.
Spickzettel
Die Kurzschlussauswertung (Short-circuit evaluation) bricht die Überprüfung von Bedingungen ab, sobald das Endergebnis feststeht, was die Auswertung logischer Ausdrücke optimiert.
Bei && (UND) wird die zweite Bedingung nicht ausgewertet, wenn die erste Bedingung falsch ist:
int x = 0;
int result = (x != 0) && (y / x > 2); // y/x wird nicht ausgewertetBei || (ODER) wird die zweite Bedingung nicht ausgewertet, wenn die erste Bedingung wahr ist:
int result = (a > 0 && b < 2) || (c < -5 && d < 10);
// Wenn a > 0 falsch ist, wird b < 2 nicht ausgewertet
// Wenn der erste Teil wahr ist, wird der zweite Teil nicht ausgewertetDie Reihenfolge ist wichtig – platzieren Sie Bedingungen, die Fehler verursachen könnten (wie eine Division durch Null), nach den Sicherheitsprüfungen:
// Sicher: prüft zuerst x != 0
int result = (x != 0) && (y / x > 2);
// Unsicher: könnte durch Null dividieren
int result = (y / x > 2) && (x != 0);Probier es selbst
#include <stdio.h>
int main() {
// Variablen initialisieren
int isSunny = 1;
float windSpeed = 5.4;
int temperature = 23;
int solarPanelOutput = 9;
int isCloudy = 0;
// Logischen Ausdruck erstellen
int isGoodDay =
// Unten nichts ändern
if (isGoodDay) {
printf("Good day for solar energy\n");
} else {
printf("Not ideal for solar energy\n");
}
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Fundamentals
2Variablen
DatentypenIntegerFloat - DoubleZeichenBooleansKonstantenprintf GrundlagenBenennungsregeln für VariablenType Casting Teil 1Type Casting Teil 2Wiederholungs-Challenge3Operatoren
Arithmetische OperatorenModulo-OperatorInkrement/DekrementZuweisungsoperatorenRelationale OperatorenLogische Operatoren Teil 1Logische Operatoren Teil 2Logische Operatoren Teil 3Wiederholungs-Challenge