Większość ludzi uważa, że programowanie wymaga skomplikowanych algorytmów. W rzeczywistości nie jest to prawdą. Najczęściej sprowadza się to do podejmowania prostych decyzji. W C decyzje te zależą od jednej rzeczy: wyrażeń logicznych.
Widziałeś je już w instrukcjach if i pętlach while. To są światła drogowe twojego programu. Zielony – jedziemy, czerwony – stop.
Weźmy ten prosty przykład.
Program poprosi o podanie numeru. Sprawdza, czy liczba jest mniejsza od zera. Jeśli tak, program wyświetli komunikat. W przeciwnym razie? Cisza.
Część (b < 0) jest wyrażeniem boolowskim. C to ocenia. Prawda oznacza, że wykonywana jest następna linia. Fałsz oznacza pominięcie tej linii. Tylko.
Ale co się dzieje, gdy potrzebna jest bardziej subtelna logika?
Obsługa wartości zerowych i dodatnich
Pojedyncza kontrola powyżej pozostawia lukę. Co się stanie, jeśli użytkownik wprowadzi zero? Lub dodatnią liczbę całkowitą? Program je zignoruje.
Oto nieco bardziej złożona struktura.
Teraz masz logikę dla wartości ujemnych, zerowych i dodatnich. Sekcje „else if” i „else” obsługują pozostałe przypadki. To wciąż poziom podstawowy, ale obejmuje wszystkie opcje.
Trudne warunki i typowe błędy
Prawdziwa logika rzadko jest prosta. Czasami potrzebne są dwa warunki, aby były spełnione jednocześnie.
Rozważ tę linię:
Przeczytaj to jak tekst w języku angielskim. Jeśli x jest równe y ORAZ j jest większe niż k, ustaw z na 1. W przeciwnym razie ustaw q na 10.
Zwróć uwagę na operatorów.
C używa == do sprawdzenia równości. Używa pojedynczego znaku „=” do przypisywania wartości.
To klasyczna pułapka. Jeśli napiszesz „jeśli (x = y)”, nie sprawdzasz, czy są one równe. Przypisujesz y do x, a następnie sprawdzasz, czy wynik nie jest pusty. Twoja logika jest złamana. Do porównań zawsze używaj podwójnej równości.
Symbol „&&” reprezentuje operację logiczną AND. Obie części muszą być prawdziwe.
Pełny zestaw operatorów logicznych
Nie musisz ich zapamiętywać, ale powinieneś wiedzieć, jak wyglądają. Są wszędzie w kodzie C.
- Równość :
== - Nierówność :
!= - Mniej :
< - Więcej :
> - Mniejszy lub równy :
<= - Większy lub równy :
>= - I :
&& - LUB :
|| - NIE :
!
Dlaczego jest to ważne dla zwykłych użytkowników?
Logika zapętlania w C: konstrukcje while, do-while i for
Pętli while można używać równie łatwo, jak prostych instrukcji if. Spójrzmy na prosty przykład:
Ten kod powtarza te dwie linie, aż a będzie większe lub równe b. Struktura jest niezwykle prosta. C udostępnia również konstrukcję do-while, która gwarantuje, że blok kodu zostanie wykonany co najmniej raz przed przetestowaniem warunku. Oto fragment demonstrujący podstawową walidację danych wejściowych:
Jak pętla for upraszcza iterację
Pętla for jest zasadniczo skrótem od pętli while. Jeśli masz taki kod:
Możesz skompresować go do pojedynczego wyrażenia for :
Pętla while składa się z trzech oddzielnych części: inicjalizacji (x=1 ), testowania (x<10 ) i inkrementacji (x++ ). Pętla for pakuje je w jedną linię. Jednak nie jesteś ograniczony do używania prostych zmiennych. Spójrz na bardziej złożony scenariusz:
Możesz to przepisać za pomocą pętli for :
Wygląda na zagraconą. To mylące. Ale to działa. Operator przecinka umożliwia łączenie wielu wyrażeń w sekcjach inicjalizacji i inkrementacji pętli for. Nie można jednak wstawić przecinka w sekcji testu warunku.
Wielu programistów C lubi pakować logikę w jedną linię. Inni twierdzą, że psuje to czytelność. Nie ma jednego konsensusu. Musisz tylko zdecydować, czy ważniejsza jest dla Ciebie zwięzłość czy przejrzystość.
Niebezpieczeństwo użycia = zamiast == w wyrażeniach boolowskich
Podwójny znak równości == jest źródłem typowych błędów w języku C. Programiści często przez pomyłkę zapisują pojedynczy znak równości =. Kompilator akceptuje obie opcje, ale zachowanie jest radykalnie odmienne.
W C wyrażenia logiczne dają w wyniku liczby całkowite. Zero oznacza Fałsz. Każda niezerowa liczba całkowita jest prawdą. Oznacza to, że możesz legalnie pisać:
Ale co się stanie, jeśli napiszesz „jeśli (a=b)”?
To nie jest porównanie. To jest zadanie. Instrukcja if (a=b) przypisuje wartość b zmiennej a, a następnie testuje wynikową wartość a, aby sprawdzić, czy jest ona logicznie prawdziwa. Jeśli a stanie się zerem, warunek zostanie uznany za Fałsz. Jeśli przyjmie inną wartość, warunek uznawany jest za Prawdziwy.
Podczas tej akcji zmienia się wartość zmiennej a. Rzadko kiedy chcesz porównać wartości. Chociaż możliwość przypisania w ramach warunku może być przydatna w pewnych kontekstach, jest to pułapka dla nieuważnych. Zachowaj ostrożność podczas używania = i ==. Jedna literówka zmienia wszystko.



























