W każdym języku programowania instrukcje sterujące ustalają kolejność wykonywania obliczeń. Z większością konstrukcji sterujących spotkaliśmy się już przy omawianiu przykładów. Tu uzupełnimy ich zestaw, a także bardziej szczegółowo opiszemy te, o których już była mowa.
Wyrażenie, takie jak x = 0 czy i++ lub printf(...), staje się instrukcją, jeśli jest zakon czone średnikiem, np.
x = 0;
i++;
W języku C średnik jest ogranicznikiem instrukcji, a nie separatorem, jak w językacł podobnych do Pascala.
Nawiasy klamrowe { i } są używane do grupowania deklaracji i instrukcji w jediu instrukcję złożoną, czyli blok, by całość stała się składniowo równoważna jednej inf trukcji. Jednym z oczywistych przykładów są nawiasy klamrowe otaczające treść funk cji; innym - nawiasy klamrowe zawierające kilka instrukcji po if, else, while lub fc (Zmienne można deklarować wewnątrz dowolnego bloku - omówimy to w rozdz. Po nawiasie klamrowym zamykającym blok nie może występować średnik.
Instrukcję if-else stosuje się przy podejmowaniu decyzji. Formalna postać tej instnil cji jest następująca:
3.2 INSTRUKCJA IF-ELSE
if (wyrażenie) instrukcjal else
instrukcja2
przy czym część else można pominąć. Najpierw oblicza się wyrażenie. Jeśli jest prawdziwe (tzn. jego wartość jest różna od zera), to zostanie wykonana instrukcjal. Jeśli zaś jest fałszywe (tzn. wartość wyrażenia jest równa zero) oraz jeśli istnieje część else, to zostanie wykonana instrukcjal.
Instrukcja if po prostu sprawdza numeryczną wartość wyrażenia, pewne warunki można więc uprościć. Najczęściej pisze się
‘rf (wyrażenie)
zamiast
if (wyrażenie != 0)
Czasami jest to naturalne i zrozumiałe, a czasami bywa tajemnicze.
Część else instrukcji if-else nie jest obowiązkowa, toteż może wystąpić pewna dwuznaczność, gdy w ciągu zagnieżdżonych instrukcji if jedna z części else zostanie pominięta. Rozwiązano to w ten sposób, że każda z części else jest przyporządkowana najbliższej z poprzednich instrukcji if nie zawierającej części else. Na przykład w konstrukcji
if (n > 0) if (a > b) z = a; else z = b;
część else jest związana z wewnętrzną instrukcją if, jak to podkreśliliśmy przez wcięcie. Jeśli nie oto chodzi, należy użyć nawiasów klamrowych wymuszających prawidłowe przyporządkowanie:
if (n > 0) { if (a > b) z = a;
}
else
z = b;
85