1 ELEMENTARZ
Program wygląda prawie tak samo jak poprzednio, przy czym teraz zmienne fahr i celsius są zadeklarowane jako float, a specyfikacje przekształceń wyniku mają bardziej naturalną postać. W poprzedniej wersji nie mogliśmy użyć wyrażenia 5/9, ponieważ dzielenie całkowite odrzuca część ułamkową wyniku. Kropka dziesiętna w stałej informuje o tym, że jest to liczba zmiennopozycyjna, toteż wynik dzielenia 5.0/9.0 nie zostanie zaokrąglony, wyraża bowiem proporcję między dwiema liczbami zmiennopozycyjnymi.
W przypadku, gdy oba argumenty operatora arytmetycznego są całkowite, wykonujel się operację całkowitą. Jeśli jednak jeden z nich jest całkowity, a drugi zmiennopozy-1 cyjny, to liczbę całkowitą przekształca się do typu zmiennopozycyjnego przed wyko-l naniem operacji. Gdyby w programie było wyrażenie fahr-32, to i tak liczba 32 byłaby automatycznie przekształcona na zmiennopozycyjną. Niemniej jednak zapisywanie stałych zmiennopozycyjnych z kropką dziesiętną nawet wtedy, gdy ich wartości są całkowite, podkreśla dla czytelnika ich zmiennopozycyjną naturę.
zachowują się naturalnie - typ int jest przekształcany do float przed wykonaniem I operacji. I
Specyfikacja przekształcenia %3.0f w funkcji printf rezerwuje dla liczby zmiennopo-l zycyjnej (tutaj fahr) co najmniej trzy znaki, przy czym należy ją wypisać bez części! ułamkowej i bez kropki dziesiętnej. Specyfikacja %6.1f opisuje format następnej liczj by (celsius): ma ona zająć co najmniej sześć znaków i zawierać jedną cyfrę po kropccl dziesiętnej. Wynikowe zestawienie wygląda więc tak: I
20 -6.7 I
40 4.4 I
• » #
Szerokość pola i precyzję wyniku można w specyfikacji przekształcenia liczby pormj nąć. Na przykład %6f przeznacza na liczbę co najmniej sześć znaków, %.2f wymuszaj dwa miejsca po kropce dziesiętnej, lecz nie określa sztywnego rozmiaru pola, a %f (*! prostu zleca wypisanie liczby w postaci zmiennopozycyjnej. J
W wyniku następujących specyfikacji przekształcenia argument zostanie wypisaifl jako:
%d liczba dziesiętna;
%6d liczba dziesiętna, zajmująca co najmniej 6 znaków;
%f liczba zmiennopozycyjna;
%6f liczba zmiennopozycyjna, zajmująca co najmniej 6 znaków;
%.2f liczba zmiennopozycyjna z 2 miejscami po kropce dziesiętnej;
%6.2f liczba zmiennopozycyjna z 2 miejscami po kropce, zajmująca co naj
mniej 6 znaków.
Funkcja printf rozpoznaje także specyfikacje: %o - powodującą wypisanie liczby w postaci ósemkowej, %x - liczby w postaci szesnastkowej, %c - jednego znaku, %s - ciągu znaków oraz %% jako żądanie wypisania znaku %.
Ćwiczenie 13. Zmień program przekształcania temperatur tak, aby wypisywał również nagłówek zestawienia.
Ćwiczenie 1.4. Napisz program wypisujący zestawienie temperatur w skali Celsjusza i ich odpowiedników w skali Fahrenheita.
Każdy program realizujący konkretne zadanie można napisać na wiele sposobów. Spróbujmy więc napisać inny wariant programu przekształcania temperatur.
#include <stdio.h>
/* zestawienie temperatur Fahrenheita-Celsjusza */ main()
int fahr;
for (fahr = 0; fahr <= 300; fahr = fahr + 20)
printf(”%3d %6.1f\n”, fahr, (5.0/9.0)*(fahr-32));
Ten program produkuje identyczne wyniki, ale w istotny sposób różni się od poprzedniego. Główną zmianą jest eliminacja większości zmiennych; pozostała tylko zmienna fahr, znów jako obiekt typu int. Dolna i górna granica oraz rozmiar kroku występują jedynie jako stałe w nowej instrukcji for, natomiast wyrażenie obliczające temperaturę w skali Celsjusza jest teraz trzecim argumentem wywołania funkcji printf, a nie osobną instrukcją przypisania.
3 - Język ANS1 C 33