2 TYPY, OPERATORY I WYRAŻENIA_____—
kiej zmiennej, jest poprawną wartością wyliczenia. Zmienne wyliczeniowe dają jednak szansę takiej kontroli, a więc są często lepsze niż #define. Co więcej, program uruchomieniowy (ang. debugger) czasem potrafi wypisywać wartości zmiennych wyliczeniowych w ich symbolicznej postaci.
Deklaracje
Wszystkie zmienne muszą być zadeklarowane przed użyciem, chociaż pewne deklara-J cje można podać niejawnie przez kontekst. W deklaracji określa się typ, a następnie wymienia jedną lub kilka zmiennych tego typu, np.
int lower, upper, step;
Zmienne można deklarować na wiele sposobów; powyższy przykład równie dobrze może wyglądać następująco: jł
int upper; int step;
W deklaracjach można także nadawać zmiennym wartości początkowe. Gdy po nazwie zmiennej występuje znak = i pewne wyrażenie, wówczas wyrażenie to pełni rolę inicjatora, jak w następujących przykładach: j.
Jeśli zmienna, o której mowa, nie jest automatyczna, to wartość początkową nad# się jej tylko raz - jak gdyby przed rozpoczęciem wykonywania programu; jej inicjale rem musi być wyrażenie stałe. Zmiennym automatycznym jawnie określone wartom początkowe nadaje się za każdym razem przy wywołaniu funkcji lub przy wejściu dl zawierającego je bloku; tutaj inicjatorem może być dowolne wyrażenie. Zmienny** zewnętrznym i statycznym przez domniemanie nadaje się wartość początkową zer
2.5 OPERATORY ARYTMETYCZNE ____I poweredjąy
Zmienne automatyczne bez jawnie określonej wartości początkowali (11)4 Wiłrtosci przypadkowe (tj. śmiecie).
Kwalifikator const (stały) można zastosować do deklaracji dowolnej zmiennej; mówi ont że wartość tej zmiennej nie będzie zmieniana. Użycie kwalifikatora const w deklaracji tablicy oznacza, że żaden z jej elementów nie ulegnie zmianie.
const double e = 2.71828182845905; const char msg[] = "Uwaga:
Deklarację const można również zastosować do tablicowych parametrów funkcji, by wskazać, że funkcja ma nie zmieniać takiej tablicy:
int strlen (const char[ ]);
Próba zmiany wartości zmiennej zadeklarowanej jako const kończy się w sposób zależny od implementacji.
Dwuargumentowymi operatorami arytmetycznymi są +, -, *, / oraz operator dzielenia modulo %. Dzielenie całkowite obcina część ułamkową wyniku. Wyrażenie
x % y
daje w wyniku resztę z dzielenia X przez y, jest zatem równe zero, gdy y jest podzielnikiem x. Na przykład rok jest przestępny, jeżeli jest podzielny przez 4 i nie dzieli się przez 100 - z wyjątkiem lat podzielnych przez 400 (są przestępne). A więc
if ((year % 4 == 0 && year % 100 != 0) 11 year % 400 == 0) printf(”%d jest rokiem przestępnym\n”, year); else
printf(”%d nie jest rokiem przestępnym^”, year);
Operatora % nie można stosować do danych typu float i double. Dla ujemnych argumentów operacji zarówno kierunek zaokrąglania wyniku po obcięciu części ułamkowej przez dzielenie całkowite /, jak i znak liczby, która jest wynikiem dzielenia modulo %, są zależne od maszyny. Akcje podejmowane po wystąpieniu nadmiaru lub niedomiaru także zależą od maszyny.
Dwuargumentowe operatory + i - mają ten sam priorytet. Jest on niższy niż priorytet operatorów *, / oraz %, który z kolei jest niższy niż priorytet jednoargumentowych operatorów + i -. Operatory arytmetyczne są lewostronnie łączne.
67