C nie tylko wykonuje kod liniowo. Podejmuje decyzje. Każda decyzja podejmowana przez program C opiera się na wyrażeniu boolowskim. Niezależnie od tego, czy użyjesz instrukcji „if”, czy pętli „while”, logika sprowadza się do jednego pytania: czy ten warunek jest prawdziwy, czy fałszywy?
Spójrzmy na podstawowy przykład.
W tym miejscu program prosi o wprowadzenie danych. Przechowuje tę liczbę w zmiennej „b”. Następnie sprawdza stan. Wyrażenie logiczne, o którym mowa, to (b < 0). C to oblicza. Jeśli wynik jest prawdziwy, program wypisuje „Wartość jest ujemna”. Jeśli jest fałszywe, program nic nie robi. Ona milczy.
Zasada jest prosta. Jeśli wyrażenie ma wartość True, C wykonuje pojedynczą linię bezpośrednio po if. Lub jeśli użyjesz nawiasów klamrowych {}, wykona cały blok wewnątrz. Jeśli wyrażenie ma wartość False, C całkowicie pomija tę linię lub blok.
Ale programy rzadko dotyczą tylko jednego wyniku. Często trzeba także obsługiwać liczby zerowe lub dodatnie.
W tej strukturze zastosowano operatory „else if” i „else” w celu uwzględnienia pozostałych przypadków. Następnie sprawdza zero. Jeśli to się nie powiedzie, zakłada się, że wartość jest dodatnia.
Czasami decyzje stają się skomplikowane. Może być konieczne sprawdzenie wielu warunków jednocześnie.
To stwierdzenie brzmi jak język naturalny. Jeśli x jest równe y ORAZ j jest większe niż k, wówczas ustaw z na 1. W przeciwnym razie ustaw q na 10. Tego typu stwierdzeń będziesz używać przez całą swoją karierę w C. Większość rozwiązań będzie prosta. Czasami mogą się skomplikować.
Zwróć szczególną uwagę na składnię. Częstym błędem początkujących jest pomylenie przypisania z porównaniem.
C używa == do testowania równości.
C używa = do przypisywania wartości zmiennej.
Mieszanie ich prowadzi do błędów, które są trudne do znalezienia. Jeden ustala wartość. Drugi sprawdza stan. Nie są one wymienne.
C opiera się również na określonych operatorach dla operacji logicznych. Symbol && reprezentuje operację logiczną AND. Zapewnia, że obie strony warunku muszą być prawdziwe.
Oto krótkie omówienie wszystkich operatorów logicznych w C:
- == : równość
- != : nierówność
- < : mniej niż
- > : więcej niż
- <= : mniejszy lub równy
- >= : większy lub równy
Logika pętli w C: while, do-while i for
Korzystanie z pętli while jest proste. Odzwierciedla prostotę standardowej instrukcji if. Rozważ ten fragment kodu:
while (a < b) { printf("%d\n", a); za = za + 1; }
Struktura ta powtarza wykonanie dwóch linii wewnątrz nawiasów klamrowych. Zatrzymuje się tylko wtedy, gdy a staje się większe lub równe b. Logika jest liniowa. Sprawdź stan. Wykonaj treść pętli. Powtarzać.
C oferuje również konstrukcję do-while. W przeciwieństwie do standardowej pętli while sprawdza ona warunek po pierwszym wykonaniu. Dzięki temu mamy pewność, że blok kodu zostanie wykonany przynajmniej raz.
Uwaga: W powyższym przykładzie zastosowano instrukcję if wewnątrz funkcji. Prawdziwa pętla „do-while” otaczałaby treść pętli i sprawdzała warunek na końcu.
Pętla for jako skrót
Pętla for jest zasadniczo skróconą wersją instrukcji while. Łączy inicjalizację, sprawdzanie i inkrementację w jednej linii.
Spójrz na tę standardową pętlę while:
x=1;
podczas gdy (x<10) {
bla bla bla
x++; // x++ jest identyczne z x=x+1
}
Możesz przepisać to jako pętlę for:
for(x=1; x<10; x++) { bla bla bla }
Składniki są oczywiste. x=1 wykonuje inicjalizację. x<10 przeprowadza kontrolę. x++ zwiększa wartość. Pętla for po prostu je kompresuje. Nie jesteś ograniczony do prostych zmiennych. W tych sekcjach możesz umieścić złożoną logikę.
Rozważmy ten przykład:
a=1;
b=6;
podczas gdy (a < b) {
a++;
printf("%d\n",a);
}
Zamienia się w:
for (a=1,b=6; a < b; a++,printf("%d\n",a));
To działa. To także mylące. Operator przecinka umożliwia użycie wielu operatorów w sekcjach inicjalizacji i inkrementacji. To nie działa w dziale recenzji. Wielu programistów C uwielbia tę zwartość. Inni uważają, że jest nieczytelny. Dzielą kod na części. Obydwa podejścia są słuszne. Wybierz w oparciu o to, kto będzie obsługiwał kod w przyszłości.
Niebezpieczeństwa związane z używaniem = zamiast == w C
Operator == przyprawia o ból głowy. Programiści często błędnie wstawiają pojedyncze = do wyrażeń boolowskich. Kompilator akceptuje obie opcje. Zachowanie jest bardzo zróżnicowane.
W C wyrażenia logiczne dają w wyniku liczby całkowite. Zero oznacza fałsz. Każda niezerowa liczba całkowita oznacza Prawda. Oznacza to, że w kontekście logicznym może istnieć dowolna liczba całkowita.
Rozważ ten poprawny kod C:
if (a) { printf("Niezerowe"); }
Jeśli a ma wartość różną od 0, blok jest wykonywany.
Teraz spójrz na if (a=b). To nie porównuje wartości. Przypisuje b do zmiennej a, a następnie sprawdza nową wartość a. Jeśli b wynosi 0, warunek jest fałszywy. Jeśli b jest równe czemukolwiek innemu, warunek jest prawdziwy. Zmienna a została zmodyfikowana. Są szanse, że to nie jest to, co planowałeś. Prawdopodobnie miałeś na myśli == dla porównania.
Ta funkcja nie jest bezużyteczna. Ma ważne przypadki użycia. Ale to jest pułapka. Zachowaj ostrożność podczas używania = i ==. Jeden znak zmienia logikę z porównania na przypisanie.



































