Zdefiniowano zmienną float zm1; w C++. Jak poprawnie przypisać do niej wartość?
A.
zm1[2] = 3.5;
B.
zm1 = "3.5";
C.
zm1 == 3.5;
D.
zm1 = 3.5;
Instrukcja zm1 = 3.5; jest poprawnym przypisaniem wartości do zmiennej typu float. W C++ operator = oznacza przypisanie, czyli zapisanie nowej wartości w istniejącej zmiennej. Skoro wcześniej zadeklarowano float zm1;, to kompilator wie, że zm1 ma przechowywać liczbę zmiennoprzecinkową, np. temperaturę, cenę, wynik pomiaru albo średnią ocen. W praktyce można więc napisać na przykład: float temperatura; temperatura = 21.5; i później używać tej wartości w obliczeniach. Warto tylko pamiętać o drobnym szczególe: literał 3.5 w C++ domyślnie ma typ double, a przy przypisaniu do float zostanie przekonwertowany. To jest dozwolone, ale w bardziej starannym kodzie często zapisuje się 3.5f, żeby od razu wskazać typ float. Moim zdaniem to dobry nawyk, szczególnie gdy pracuje się z grafiką, mikrokontrolerami albo obliczeniami, gdzie typy danych mają znaczenie dla pamięci i wydajności. Średnik na końcu też jest ważny, bo kończy instrukcję.
W tym pytaniu chodzi o zwykłe przypisanie wartości do pojedynczej zmiennej typu float, więc trzeba odróżnić kilka podobnie wyglądających zapisów. Zapis z nawiasami kwadratowymi, taki jak zm1[2] = 3.5;, sugeruje dostęp do elementu tablicy. To miałoby sens, gdyby zm1 było tablicą, na przykład float zm1[5];. Jednak przy deklaracji float zm1; powstaje tylko jedna zmienna skalarna, a nie kolekcja elementów. Próba indeksowania takiej zmiennej jest błędem składniowym lub semantycznym, zależnie od kontekstu, bo float nie obsługuje operatora indeksowania w taki sposób. Zapis zm1 = '3.5' w sensie tekstowym, czyli wartość w cudzysłowie, też nie pasuje do typu float. Liczba zmiennoprzecinkowa powinna być zapisana jako wartość liczbowa, a nie jako napis. Tekst można co prawda później konwertować na liczbę, np. przy wczytywaniu danych od użytkownika, ale samo przypisanie napisu do float nie jest poprawną drogą. Bardzo częsty błąd początkujących to mylenie operatora = z operatorem ==. Pojedynczy znak = zapisuje wartość do zmiennej, natomiast == sprawdza, czy dwie wartości są równe. Instrukcja zm1 == 3.5; nie ustawi zmiennej, tylko wykona porównanie, którego wynik i tak zostanie od razu wyrzucony, jeżeli go nigdzie nie zapiszemy. Z mojego doświadczenia wynika, że to jedna z tych pomyłek, które potem długo psują programy, bo kod wygląda prawie dobrze, ale robi zupełnie co innego.