Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Algorytmy i podstawy informatyki

Słowa kluczowe: Operatory logiczne w języku C Operatory porównania w języku C

Które wyrażenie logiczne w języku C sprawdza, czy zmienna zm1 należy do przedziału domkniętego <10, 50>?

A.
(zm1 > 10) && (zm1 < 50)
B.
(zm1 > 10) || (zm1 < 50)
C.
(zm1 >= 10) || (zm1 <= 50)
D.
(zm1 >= 10) && (zm1 <= 50)
Wyrażenie (zm1 >= 10) && (zm1 <= 50) poprawnie sprawdza, czy zmienna zm1 należy do przedziału domkniętego od 10 do 50. Przedział domknięty oznacza, że wartości graniczne też są dozwolone, czyli 10 i 50 mają przejść warunek. Dlatego używamy operatorów >= oraz <=, a nie samych > i <. Druga ważna sprawa to operator logiczny &&, czyli koniunkcja: oba warunki muszą być spełnione jednocześnie. Zmienna ma być większa lub równa 10 oraz mniejsza lub równa 50. W języku C taki zapis jest standardowym i czytelnym sposobem walidacji zakresu, np. przy sprawdzaniu wieku użytkownika, liczby punktów, temperatury albo wartości wpisanej z klawiatury. Moim zdaniem warto zawsze dawać nawiasy wokół prostych porównań, mimo że priorytety operatorów w C są określone. Kod jest wtedy bardziej czytelny i mniej podatny na głupie pomyłki. W praktyce taki warunek można użyć np. w instrukcji if: if ((zm1 >= 10) && (zm1 <= 50)) { ... }. W C wynik porównania ma wartość logiczną: fałsz to 0, a prawda to wartość różna od zera, choć we współczesnym kodzie często spotyka się też typ bool z nagłówka stdbool.h.
W tym pytaniu najłatwiej pomylić dwa różne problemy: sprawdzanie zakresu oraz sprawdzanie, czy spełniony jest przynajmniej jeden z warunków. Operator || oznacza alternatywę logiczną, czyli wystarczy, że prawdziwa będzie jedna strona wyrażenia. Dla warunku typu (zm1 >= 10) || (zm1 <= 50) otrzymujemy wyrażenie, które w praktyce jest prawdziwe dla prawie każdej liczby. Przykładowo 5 spełnia część zm1 <= 50, a 100 spełnia część zm1 >= 10. To nie jest test przynależności do przedziału, tylko bardzo szeroka kontrola, która nie odrzuca wartości spoza zakresu. Z mojego doświadczenia to częsty błąd, bo ktoś czyta to po ludzku jako „większe od 10 lub mniejsze od 50”, ale w programowaniu zakres wymaga jednoczesnego spełnienia obu ograniczeń. Druga pułapka dotyczy granic przedziału. Zapis (zm1 > 10) && (zm1 < 50) sprawdza przedział otwarty, czyli wartości 10 i 50 zostaną odrzucone. A tutaj chodzi o przedział domknięty, więc granice mają być akceptowane. Podobny problem występuje przy użyciu || ze znakami > i <: wyrażenie robi się jeszcze mniej precyzyjne, bo nie tylko nie pilnuje obu granic naraz, ale dodatkowo wyklucza poprawne rozumienie wartości brzegowych. W C trzeba bardzo świadomie dobierać operatory relacyjne i logiczne. Dobra praktyka jest prosta: dla zakresu „od A do B włącznie” zapisujemy (x >= A) && (x <= B). To jest czytelne, przewidywalne i zgodne z typowym stylem pisania warunków w kodzie produkcyjnym.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.