Instrukcja while, for i operatory
Pętla while, czyli "dopóki"
while(Warunek_logiczny){ // ciało pętli czyli // instrukcje; }
Zasada działania:
- obliczenie
Warunek_logiczny, - jeśli fałsz, przejście poza pętlę (za końcowy nawias klamrowy),
- jeśli prawda, wejście do wnętrza pętli i wykonanie wszystkich instrukcji,
- skok na początek pętli, czyli do punktu 1.
Zadania
-
Napisz program, który wczyta liczbę całkowitą (dodatnią)
n, a następnie wypisze wszystkie liczby całkowite odndo1włącznie. -
Zmodyfikuj program ze wcześniejszego zadania tak, aby zamiast wypisywać liczby, sumował je i na końcu wypisał ostateczny wynik.
-
Napisz program, który dla wczytanej liczby naturalnej wypisze jej silnię. Zastanów się, jaką wartością zainicjować zmienną przechowującą iloczyn.
-
Napisz program, który wczytuje liczbę naturalną
ni wypisuje jej zapis binarny, ale w odwrotnej kolejności. Na przykład:./a.out 10 0101
-
Napisz program, który wczytuje liczbę naturalną
ni wypisuje na ekran (standardowe wyjście) wszystkie dodatnie dzielniki liczbyn. -
Napisz program, który wczytuje liczbę naturalną
ni wypisuje komunikat mówiący, czy liczba jest pierwsza, czy nie. -
Napisz program, który wczytuje liczbę naturalną
ni wypisuje wszystkie liczby pierwsze z zakresu odndo2. -
Napisz program, który wczyta liczbę naturalną
ni wypisze jej rozkład na czynniki pierwsze. Na przykład:./a.out 24 2 2 2 3
Kilka nowych operatorów
Często instrukcja przypisania służy do ustalenia wartości zmiennej na podstawie dotychczasowej jej wartości: x = x+zwiekszenie,
licznik=licznik/2. W takich przypadkach można skrócić zapis za pomocą następujących
operatorów:
+=, np.x += zwiekszenie,-=,*=,/=, np.licznik /= 2.
W szczególności, jeśli zwiększamy lub zmniejszamy zmienną o 1,
możemy użyć operatorów ++ i --:
x++— operator postinkrementacji: wartością wyrażenia jest wartość zmiennej przed zwiększeniem,++x— operator preinkrementacji: wartością wyrażenia jest wartość zmiennej po zwiększeniu,x--— operator postdekrementacji — analogicznie dox++,--x— operator predekrementacji — jak wyżej.
Przykład — sprawdź, jaki wynik da uruchomienie programu:
#include <stdio.h> int main(){ int x = 10; printf("%d\n", ++x); printf("%d\n", x); x = 10; printf("%d\n", x++); printf("%d\n", x); return 0; }
Pętla for
Pętla for ma postać:
for( instrukcja_inicjujaca; warunek; instrukcja_przejscia ){ // ciało pętli czyli // instrukcje; }
Zasada działania:
- wykonuje się
instrukcja_inicjująca, - sprawdzany jest
warunek, - jeśli fałsz, przejście poza pętlę,
- jeśli prawda, wykonanie instrukcji wewnątrz pętli,
- wykonanie
instrukcja_przejścia, - przejście do punktu 2.
Pętlę for można zasymulować pętlą while następująco:
instrukcja_inicjujaca; while(warunek){ // ciało pętli czyli // instrukcje instrukcja_przejscia; }
Zwróć uwagę, że w nawiasach okrągłych pętli for
występują dokładnie dwa znaki ;.
Elementy w nawiasach (instrukcja_inicjująca, warunek i instrukcja_przejścia) można pominąć.
Jeśli pominiemy warunek, za każdym razem
podejmowana jest decyzja o wejściu do wnętrza pętli
— czyli tak, jakby wstawić tam warunek zawsze prawdziwy.
Uzyskamy w ten sposób wieczną pętlę.
Zadania
-
Wybierz 3 zadania z zadań dotyczących pętli
whilei rozwiąż je używając pętlifor. -
Napisz program, który wypisze na ekranie tabliczkę mnożenia o wymiarach 5 x 5:
./a.out 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25
-
Zmodyfikuj poprzedni program tak, aby pytał użytkownika o rozmiar tabliczki mnożenia.
Modyfikatory wejścia/wyjścia — uzupełnienie
Aby ustalić rozmiar pola do wypisywania wartości liczbowych, można użyć rozszerzonej składni modyfikatorów wejścia/wyjścia:
%5d— spowoduje wypisanie liczby w polu o rozmiarze 5 znaków. Ewentualne wolne miejsca zostaną uzupełnione spacjami z lewej strony.%07d— miejsca z lewej strony zamiast spacji, będą uzupełnione zerami.%.3f— wypisanie liczby zmiennoprzecinkowej z 3 miejscami po przecinku.%5.1f— wypisanie liczby zmiennoprzecinkowej na polu 5-znakowym, 1 miejsce po przecinku.