60
ROZDZIA L 9. INSTR UKCJE STER UJĄCE
Sinclude <stdio.h> int mainO {
int i;
for(i«l; i<-5; ++i){ printf("%d", i);
for( ; i>-l; i—){ printf("%d", i);
return 0;
Po analizie powyższego kodu, początkujący programista inoże stwierdzić, że pętla wypisze 123454321. Stanic się natomiast inaczej. Wynikiem działania powyższego programu będzie ciąg cyfr 12345654321. Pierwsza |>ętla wypisze cyfry “12345”, lecz po ostatnim swoim obiegu pętla for (tak jak zwykle) zinkrementuje zmienną i. Gdy druga pętla przystąpi do pracy, zacznie ona odliczać począwszy od liczby i=6, a nie 5. By spowodować wyświetlanie liczb o 1 do 5 i z powrotem wystarczy gdzieś między ostatnim obiegiem pierwszej pętli for a pierwszym obiegiem drugiej pętli for zmniejszyć w'artość zmiennej i o 1.
Niech podsumowaniem będzie jakiś działający fragment kodu. który może obliczać wartości kwadratów liczb od 1 do 10.
Sinclude <stdio.h>
int main O
int a;
for (a-l; a<-10; ++a) { printf ("y,d\n", a*a);
return 0;
W kodzie źródłowym spotyka się często inkrementację i++. Jest to zły zwyczaj, biorący się z wzorowania się na nazwie języka C++. Post-inkrementacja i++ powoduje, że tworzony jest obiekt tymczasowy, który jest zwracany jako wynik operacji (choć wynik ten nie jest nigdzie czytany). Jedno kopiowanie liczby do zmiennej tymczasowej nie jest drogie, ale wf pętli “for” takie kopiowanie odbywa się po każdym przebiegu pętli. Dodatkowo, w C++ podobną konstrukcję stosuje się do obiektów — kopiowanie obiektu może być już czasochłonną czynnością. Dlatego w pętli “for” należy stosować wyłącznie ++i.