Pętle
Xgrzyb90
Pętle w C
W języku programowania C istnieją zasadniczo 3 rodzaje pętli: for
, while
, do
-while
. 3 pętle różnią się zastosowaniem, ale w przeciwieństwie do innych języków programowania każda pętla jest w stanie (przy odrobinie pracy) wykonać to co może wykonać inna pęŧla (a nie jak for i while w pascal).
A więc zacznijmy omawiać poszczególne pętle:
1. pętla for
składnia:
for (inicjalizacja licznika; warunek działania; czynność po wykonaniu jednego obrotu pętli) { instrukcje }
(Jeżeli pętla wykonuje jedną instrukcję można pominąć klamry)
przykład:
// W kwesti przypomnienienia nie można stosować czegoś takiego jak for (int i=1; ...) To dozwolone jest tylko w C++ for (i = 0; i<max; ++i) printf ('Oks'); lub for (i = 1; i<max2; i += 2) printf ('s');
Pętla for najbardziej nadaje się w tedy gdy zazwyczaj wykonujemy określoną liczbę iteracji pętli.
Szczególne postacie pętli:
for (;;) printf ('A'); // nieskończona pętla odpowiednik (while(1)) for (; i<max;) //="//" odpowiednik="odpowiednik" while="while" (i<max)="(i<max)" </pre="</pre">
2. pętla while
składnia:
while (warunek) { instrukcje } (klamry dla jednej instrukcji można ominąć)
np,
while (blokada!=false) { printf ('Nie ma blokady dla licznika: %d', i); ++i; }
Pętla while najbardziej nadaje się do wykonywania nieznanej ilości iteracji.
Np. Pętla wiadomości w WinApi
Szczególne przypadki:
while (1) {printf ('s');} // nieskońćzona pętla
3. pętla do while
składnia:
do { instrukcje } while (warunek);
(klamry dla jednej instrukcji można ominąć)
np,
do { printf ('Nie ma blokady dla licznika: %d', i); ++i; } while (i<12); // Tu zaznaczam że do while zawsze wykona się przynajmniej 1 w przeciwieństwie do while
Pętla do while najbardziej nadaje się do wykonywania nieznanej ilości iteracji>=1.
Np. Pętla wiadomości w WinApi
Szczególne przypadki:
do {} while (1); {printf ('s');} // nieskońćzona pętla
Alternatywne i szczegółne metody (w większości przypadków niepolecane):
1) rekurencja
Przykład
int silnia (int liczba) { if (liczba==0 || liczba==1) return 1; else return liczba * silnia (liczba-1); } int NWD (int a, int b){} int quick_sort (int *tablica, int rozmiar) {}
UWAGA: wywoływanie kosztuje w pamięci i obliczeniowo. Pamięć na stosie jest ograniczona.
2) zabawy z if i goto (metody ulubione w assemblerze ale nie w c/c++)
przykład:
etykieta: if (i<12) goto etykieta;
Zaburza strukturę i zaciemnia ideę przewodnią programu.
Jeżeli chcesz stosować goto nagminnie do przejdź na asma.