Przejdź do treści głównej
INF.04Pytanie #297 z 856prawo-autorskie-licencje-i-rodo

W prezentowanym kodzie popełniono błąd logiczny, który polega na tym, że

Opcje odpowiedzi:
A
w warunku powinna być sprawdzona wartość zmiennej a
B
warunek powinien być zastąpiony pętlą while
C
w warunku jest przypisanie zamiast porównania
Prawidłowa
D
warunek nie ma sensu, środowisko uruchomieniowe samo sprawdzi argument dzielenia
Reklama

Wyjaśnienie i uzasadnienie dydaktyczne

Poprawna odpowiedź: C

Uzasadnienie i szersze wyjaśnienie:

W wielu językach z rodziny C (C++, C#, Java) bardzo częstym błędem jest pomylenie operatora porównania (==) z operatorem przypisania (=).

  • W kodzie if (b = 0) użyto operatora przypisania (=). Oznacza to, że do zmiennej b zostanie przypisana wartość 0, a całe wyrażenie (b = 0) zwróci tę przypisaną wartość, czyli 0. W kontekście logicznym, wartość 0 jest interpretowana jako false, więc warunek if nigdy się nie spełni, a program zawsze przejdzie do gałęzi else, co przy b równym 0 spowoduje błąd dzielenia przez zero.

  • Aby poprawnie sprawdzić, czy zmienna b jest równa 0, należało użyć operatora porównania (==), czyli zapisać warunek jako if (b == 0).

Błąd polega więc na tym, że w warunku jest przypisanie zamiast porównania.

Dlaczego pozostałe odpowiedzi są nieprawidłowe?

  • A: Sprawdzana powinna być wartość dzielnika (b), a nie dzielnej (a).
  • B: Problem dotyczy jednorazowego sprawdzenia warunku, więc pętla while jest tu nieodpowiednia.
  • D: Chociaż środowisko uruchomieniowe zgłosi błąd (wyjątek) przy próbie dzielenia przez zero, dobra praktyka programistyczna wymaga, aby programista sam zabezpieczył się przed taką sytuacją za pomocą warunku, aby uniknąć awaryjnego zakończenia programu.

Chcesz poćwiczyć całą kwalifikację INF.04?

Egzamin próbny na czas, nauka działami, losowe pytanie albo przegląd całej bazy — wszystko w przeglądarce i bez zakładania konta.

Rozwiąż w Quizie

Pojęcia z tego pytania

Cały słownik INF04
Reklama

Podobne pytania z działu „Prawo autorskie licencje i rodo”

Ten sam obszar materiału z kwalifikacji INF.04. W całej bazie znajdziesz 31 pytań z tego działu.