KWALIFIKACJA INF2 + INF3 - CZERWIEC 2012

PYTANIE NR 30.
Jakiego typu danych należy użyć w języku C do zadeklarowania zmiennej przechowującej wynik dzielenia dwóch liczb całkowitych z zachowaniem części ułamkowej?
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Wynik dzielenia z częścią ułamkową musi być przechowywany w typie zmiennoprzecinkowym.
Typ float pozwala zapisać wartości takie jak 2,5. Typy int, char i bool nie przechowują ułamków (int/char) albo służą do logiki (bool).

Pełne wyjaśnienie:

W języku C, jeśli oczekujesz, że iloraz dwóch liczb całkowitych będzie miał część ułamkową (np. 5/2 ma dać 2,5), to wynik trzeba przechowywać w typie zmiennoprzecinkowym. Z podanych odpowiedzi takim typem jest float.

Warto pamiętać o bardzo częstym "haczyku": samo zadeklarowanie zmiennej jako float nie zmienia sposobu wykonania dzielenia, jeśli oba operandy są typu całkowitego. Wyrażenie zbudowane z int/int jest obliczane jako dzielenie całkowite (z obcięciem części ułamkowej), a dopiero potem wynik może zostać przekonwertowany do float.

Dlatego, aby faktycznie zachować ułamek, zwykle wykonuje się rzutowanie co najmniej jednego operandu lub używa literału zmiennoprzecinkowego, np.:

float wynik = (float)a / b;
float wynik = a / 2.0;

Dlaczego pozostałe odpowiedzi są błędne?

  • int przechowuje wyłącznie liczby całkowite, więc nie jest właściwy do wyniku, w którym ma pozostać część ułamkowa.
  • char jest przeznaczony głównie do znaków (i ma mały zakres liczbowy), więc nie nadaje się do ogólnego przechowywania ilorazów z ułamkami.
  • bool przechowuje tylko wartości logiczne (prawda/fałsz), więc nie opisuje wartości liczbowych ilorazu.

Na egzaminie zwracaj uwagę na sformułowanie "z zachowaniem części ułamkowej" – ono jednoznacznie wskazuje na potrzebę typu zmiennoprzecinkowego.

Dodatkowe pytania

Dodatkowe pytania (FAQ):

Gdy dzielisz int przez int, C wykonuje dzielenie całkowite: część ułamkowa jest obcinana.

Przykład: 5/2 daje 2, a nie 2,5. Dopiero późniejsza konwersja do float nie "odzyska" ułamka, bo został utracony podczas obliczenia.

Musisz spowodować, aby dzielenie było zmiennoprzecinkowe: rzutować operand lub użyć literału z kropką.

Przykłady:

float w = (float)5/2;
float w = 5.0/2;

Wtedy część ułamkowa zostanie zachowana.

Bo jeśli a i b są typu int, to wyrażenie a/b jest liczone jako dzielenie całkowite (np. 5/2 = 2). Dopiero potem 2 jest zamieniane na 2.0 i trafia do float. Aby mieć 2.5, rzutuj operand przed dzieleniem.

Do wartości z częścią ułamkową służą typy zmiennoprzecinkowe, głównie float i double.

W praktyce często wybiera się double dla większej precyzji, ale jeśli w zadaniu wśród odpowiedzi jest tylko float, to on spełnia warunek "z ułamkiem".

Typ int wystarczy, gdy oczekujesz wyniku całkowitego, czyli gdy interesuje Cię tylko część całkowita ilorazu (dzielenie całkowite) albo masz pewność, że dzielenie jest "bez reszty".

Jeśli w treści jest mowa o ułamku, int będzie błędny.

Technicznie char jest typem liczbowym o małym zakresie, ale w C używa się go głównie do znaków i danych tekstowych. Nie jest właściwym wyborem do przechowywania ilorazu, szczególnie gdy wynik może mieć część ułamkową lub większy zakres wartości.

bool przechowuje tylko dwie wartości logiczne: prawda albo fałsz. Iloraz jest wartością liczbową, a nie logiczną.

Bool stosuje się raczej do warunków (np. czy wynik jest dodatni), ale nie do przechowywania samego wyniku dzielenia.

Najczęstszy błąd to przekonanie, że deklaracja float wynik automatycznie wymusi dzielenie zmiennoprzecinkowe. W C liczy się typ operandów w wyrażeniu.

Drugi błąd to brak rzutowania lub brak literału typu 5.0, co powoduje utratę części ułamkowej.

Szukaj sformułowań typu: "z zachowaniem części ułamkowej", "wynik może mieć miejsca po przecinku", "średnia", "procent", "proporcja".

Takie słowa wskazują, że int będzie niewystarczający, a potrzebny jest typ zmiennoprzecinkowy.

Rób krótkie testy w kodzie i porównuj wyniki:

int a=5,b=2;
float x=a/b;
float y=(float)a/b;

Zobaczysz różnicę między 2.0 a 2.5. Takie mikrozadania utrwalają, że rzutowanie musi być przed dzieleniem, aby zachować ułamek.

info

To pytanie poprawnie rozwiązuje 40% zdających egzamin. trudne

W praktyce zawodowej kluczowe jest to, że wynik dzielenia z częścią ułamkową musi być przechowywany w typie zmiennoprzecinkowym.Typ float pozwala zapisać wartości takie jak 2,5.

Źródła:

  • cppreference.com – C Operators: Arithmetic operators (operator /) https://en.cppreference.com/w/c/language/operator_arithmetic (dostęp: 2026-03-01)
  • cppreference.com – C Type conversion (conversions in expressions) https://en.cppreference.com/w/c/language/conversion (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja standardu ISO/IEC 9899 (sekcje o operatorach arytmetycznych i konwersjach)
  • cppreference.com: opisy operatora / oraz konwersji arytmetycznych w C
  • Podręcznik do C omawiający typy i rzutowanie (rozdziały: typy podstawowe, wyrażenia, konwersje)

Aktualizacja pytania: 03.04.2026



Aktualizacja pytania: 03.04.2026
📡 Brak połączenia internetowego