KWALIFIKACJA INF2 + INF3 - CZERWIEC 2014

PYTANIE NR 18.
Programista napisał fragment kodu, który wyszukuje element tablicy. Pętla nie działa poprawnie. Jaki błąd popełnił programista?
Ilustracja przedstawia fragment kodu programistycznego w języku C.
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Średnik na końcu instrukcji for (...); tworzy puste ciało pętli.
Pętla wykona iteracje, ale nie wykona żadnej operacji "w środku", a kolejne linie (if i printf) nie należą do pętli mimo wcięcia i uruchomią się dopiero po jej zakończeniu.

Pełne wyjaśnienie:

W C/C++ średnik kończy instrukcję. Konstrukcja for(inicjalizacja; warunek; aktualizacja) instrukcja wymaga, aby po nawiasie zamykającym znalazło się ciało pętli (jedna instrukcja lub blok w klamrach).

Gdy programista zapisze for (int i=0; i < 10; i++);, to znak ";" staje się samodzielną, pustą instrukcją. Oznacza to, że pętla wykona się tyle razy, ile wynika z warunku, ale w każdej iteracji wykona "nic" (brak operacji w ciele pętli). Wcięte niżej linie wyglądają, jakby były częścią pętli, jednak składnia języka tego nie potwierdza: instrukcje po średniku są już poza pętlą i wykonają się dopiero po jej zakończeniu.

Dlatego poprawna diagnoza błędu wskazuje właśnie na średnik w linii z pętlą. Pozostałe propozycje nie trafiają w sedno: zamiana printf na scanf dotyczyłaby wprowadzania danych, a nie naprawy działania pętli; stwierdzenie o "zmiennej liczba zamiast zmiennej" jest nieprecyzyjne i nie opisuje rzeczywistej przyczyny braku iteracyjnego sprawdzania tablicy; brak klamer może być problemem przy wielu instrukcjach w ciele pętli, ale tutaj główną przeszkodą jest to, że ciało pętli zostało już zakończone pustą instrukcją.

Praktyczna wskazówka egzaminacyjna: jeśli widzisz for(...); lub while(...);, najpierw sprawdź, czy nie jest to niezamierzona pusta pętla oraz czy kolejna linia rzeczywiście należy do pętli (wcięcie nie ma znaczenia dla kompilatora).

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Średnik po for(...); oznacza, że ciałem pętli jest pusta instrukcja (tzw. empty statement). Pętla wykona iteracje (zmieniając licznik), ale nie wykona żadnych działań w środku. Instrukcje zapisane poniżej nie należą do pętli.
Najczęstszy powód to przypadkowy średnik po nagłówku pętli: for(...);. Warunek może być poprawny, więc iteracje zachodzą, ale ciało pętli jest puste. Efekt: program wygląda jakby pętla działała, ale nie wykonuje sprawdzania tablicy ani innych operacji.
Szukaj wzorca for(...); lub while(...);, gdzie zaraz po nawiasie jest średnik. Wtedy wszystko, co jest w kolejnych liniach (nawet wcięte), jest poza pętlą. To podchwytliwe, bo formatowanie nie wpływa na składnię.
Nie. W C/C++ o przynależności instrukcji do pętli decyduje składnia (średniki, klamry), a nie wcięcia. Wcięcie poprawia czytelność, ale kompilator je ignoruje. Dlatego linia wyglądać może na część pętli, a w rzeczywistości być poza nią.
Typowy zapis to for (...) { ... }, gdzie w klamrach umieszcza się instrukcje wykonywane w każdej iteracji, np. sprawdzenie if i ewentualne wypisanie wyniku. Kluczowe jest, aby po for(...) nie było przypadkowego średnika.
Nie zawsze. Bez klamer ciało pętli stanowi tylko jedna następna instrukcja. Problem pojawia się, gdy ktoś myśli, że kilka kolejnych linii jest "w pętli". Klamry są dobrą praktyką, ale w tym typie zadania głównym błędem bywa średnik po for.
printf służy do wypisywania, a scanf do wczytywania danych. Zamiana funkcji może zmienić sposób wejścia/wyjścia, ale nie naprawi faktu, że pętla ma puste ciało przez średnik. To inny typ błędu niż błąd w konstrukcji pętli.
Instrukcje if i printf zapisane po pustej pętli nie wykonują się w każdej iteracji. Zostaną wykonane dopiero po zakończeniu pętli (raz), bo nie należą do jej ciała. To powoduje, że tablica nie jest przeszukiwana tak, jak zamierzał autor.
Może, zależnie od reszty kodu. Jeśli licznik pętli jest zadeklarowany w nagłówku for, a potem użyty poza pętlą, to może wyjść poza swój zakres widoczności. Niezależnie od tego, sam średnik powoduje błąd logiczny działania programu.
Najczęściej są to zadania z analizy krótkiego fragmentu kodu: wyszukiwanie w tablicy, zliczanie elementów, iteracja po indeksach. Trik polega na tym, że kod jest "ładnie" wcięty, ale jeden średnik zmienia znaczenie. Warto zawsze skanować nagłówki pętli.
info

Statystycznie 43% uczniów zna prawidłową odpowiedź. trudne

Źródła:

  • cppreference.com: "for" loop (C) — https://en.cppreference.com/w/c/language/for (dostęp: 2026-02-27)
  • cppreference.com: "Statements" / empty statement (C) — https://en.cppreference.com/w/c/language/statements (dostęp: 2026-02-27)
  • cppreference.com: "for" statement (C++) — https://en.cppreference.com/w/cpp/language/for (dostęp: 2026-02-27)

Materiały:

  • Dokumentacja cppreference dotycząca instrukcji for i pustej instrukcji
  • Podręcznik do podstaw C/C++ (rozdział: instrukcje sterujące i pętle)
  • Ćwiczenia: wyszukiwanie w tablicy, debugowanie krokowe w IDE (watch, breakpoints)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego