Instrukcje sterujące - warunki i pętle
- Warunki:
- switch - lista wyboru
- Pętle:
- Skok
Warunek if
Przykład
#include <stdio.h> /* program sprawdza czy podana liczba jest parzysta */ int main() { int x; printf("Podaj liczbe calkowita: "); scanf("%d", &x); if( x % 2 == 0 ) { printf("Liczba %d jest parzysta\n", x); } return 0; }
Operator =
to operator przypisania wartości do zmiennej a operator ==
to operator sprawdzający, czy wartości są równe.
int x = 0; if ( x = 1 ) printf("Czy to jest błąd?")
#include <stdio.h> /* program sprawdza czy podana liczba jest dodatnia czy ujemna */ int main() { int liczba; printf("Podaj liczbe: "); scanf("%d",&liczba); if( liczba > 0 ) printf("Liczba %d jest wieksza od zera\n",liczba); else printf("Liczba %d jest mniejsza od zera\n",liczba); return 0; }
Zadanie - miejsca zerowe
Napisz program do wyznaczania miejsc zerowych równania kwadratowego y = ax2 + bx +c
.
Dane: trzy liczby rzeczywiste określające parabolę: a
, b
, c
Wynik: informacja o ilości miejsc zerowych (lub ich braku) oraz wartości miejsc zerowych x1, x2
Uwaga
Do obliczania pierwiastka kwadratowego wykorzystaj funkcję sqrt() z biblioteki math.h.
Kompilując program korzystający z funkcji matematycznych dla kompilatora GCC należy dodać opcję -lm
, np.:
cc pierwiastek.c -lm -o pierwiastek
Przykład:
1 2 3 Brak miejsc zerowych
1 -4 -4 Jedno miejsce zerowe 2.000000
1 0 -4 Dwa miejsca zerowe -2.000000 i 2.000000
Dodatkowe ćwiczenia
- Dodaj do programu z poprzednich zajęć zabezpieczenie przed wykonaniem operacji dzielenia przez zero.
- Dopisz do przedstawionego powyżej przykładu warunek sprawdzający czy:
- dana liczba jest liczbą parzystą,
- jest liczbą podzielną przez 3,
- ostatnią cyfrą podanej liczby jest 1.
- Do programu obliczającego pierwiastki równania kwadratowego dodaj instrukcje weryfikujące, czy rzeczywiście f(x1)=0 oraz f(x2)=0. Sprawdź czy program poprawnie wyznacza miejsca zerowe poniższych równań i jeśli występują niedokładności to popraw program tak aby je zniwelować:
y = x2 - 6.433 x + 0.009474
y = 0.2 x2 - 56 x + 1.
Pętla while
#include <stdio.h> /* program wyswietla sekwencje liczb calkowitych od 1 do podanej przez uzytkownika wartosci */ int main() { int liczba; int i = 0; printf("Podaj liczbe: "); scanf("%d",&liczba); while(i <= liczba) { printf("%d\n",i); i = i + 1; } return 0; }
Zadanie - Sumowanie liczb
Napisz program, który wczytuje kolejno liczby rzeczywiste aż do momentu gdy użytkownik poda wartość 0, po czym wyświetla sumę wczytanych liczb.
Dane: ciąg liczb rzeczywistych zakończonych wartością 0
Wynik: suma podanych liczb
Przykład:
1 2 3 0 suma 6.000000
5 3.1 -2.5 0 suma 5.600000
Zadanie - Statystyka
Rozbuduj program z poprzedniego zadania tak aby dla podanego ciągu liczb obok sumy wyświetlał także wartości:
- ilość liczb
- ilość liczb większych od 0
- wartość średnia
- wartość minimalna
- wartość maksymalna
Końcowa wartość 0 nie jest brana do obliczeń.
Dane: ciąg liczb rzeczywistych zakończonych wartością 0
Wynik: ilość podanych liczb, ilość liczb większych od 0, suma, średnia, wartość minimalna i maksymalna z podanych liczb
Przykład:
1 2 3 0 ilosc 3 dodatnie 3 suma 6.000000 srednia 2 min 1 max 3
5 3.1 -2.5 0 ilosc 3 dodatnie 2 suma 5.600000 srednia 1.866 min -2.500000 max 5.000000
Zadanie - Faktoryzacja
Problem: rozkład liczby całkowitej na czynniki pierwsze
Dane: liczba całkowita n
Wynik: ciąg liczb pierwszych większych od 1, których iloczyn wynosi n
Przykładowe wyniki
n=10 2 5
n=12 2 2 3
n=149 149
Zadanie - Zgadywanka
Napisz grę w której użytkownik próbuje odgadnąć pewną wylosowaną wartość całkowitą z zakresu od 1 do 100. W zależności o podanej przez użytkownika liczby całkowitej program:
- wyświetla komunikat „za duzo”, gdy podana wartość jest większa od szukanej
- wyświetla kominukat „za malo”, gry podana wartość jest za mała
- wyświetla komunkat „Brawo !” i kończy działanie gdy użytkownik odgadnie szukaną wartość
- wyświetla szukaną wartość i kończy działanie gdy użytkownik poda liczbę 0
Na koniec program wyświetla także komunikat o liczbie podjętych przez użytkownika prób.
Do losowania liczb całkowitych wykorzystaj funkcję rand()
z biblioteki stdlib.h
.
int rand(void);
Funkcja ta przy każdym uruchomieniu zwraca liczbę całkowitą pseudolosową z zakresu od 0 do wartości określonej przez RAND_MAX
. Generator liczb losowych można zainicjować za pomocą funkcji srand()
void srand(int seed);
Chcąc uzyskać za każdym razem inny ciąg liczb najwygodniej jest zainicjować generator wartością związaną z aktualnym czasem: funkcja time()
z biblioteki time.h
zwraca liczbę sekund, które upłynęły od dnia 1 stycznia 1970 roku godziny 0:00:00 czasu uniwersalnego.
Przykład użycia funkcji rand()
#include <stdlib.h> #include <stdio.h> #include <time.h> int main() { int i=0; srand(time(0)); while(i<10) { printf("%d\n",rand()); i = i +1; } }
Przykładowe wyniki zadania
2 za malo 50 za duzo 42 Brawo! Liczba podejsc 3
2 za malo 50 za duzo 0 Szukana liczba to 3 Liczba podejsc 2
Dodatkowe ćwiczenia
- napisz program, który dla podanych 3 liczb rzeczywistych
a
,b
, ic
wypisze sekwencję liczb oda
dob
z krokiemc
. Zabezpiecz program przed możliwością wprowadzenia takich danych wejściowych, które mogłyby spowodować nieskończone wykonywanie się programu (np. krokc=0
). - wyświetl tablicę znaków ASCII poczynając od znaku SPACE (32) do znaku DEL (127) wraz z odpowiednimi wartościami liczbowymi w systemie dziesiętnym, szesnastkowym i ósemkowym.
- Napisz program wyświetlający figury geometryczne w trybie tekstowym, wypełnione lub puste. Dla podanej wartości całkowitej program wysiwietla:
- kwadrat o zadanej długości boku
- trójkąt prostokątny równoramienny o zadanej długości przyprostokątnych
- okrąg o zadanym promieniu
- Napisz program, który dla podanej podstawy i wykładnika oblicza potęgę. Dla uproszczenia przyjmujemy, że wykładnik jest liczbą całkowitą.
- Napisz program wyświetlający wartość silni z podanej przez użytkownika liczby całkowitej.
- Napisz program wyświetlający tabliczkę mnożenia, której rozmiar ustalany jest przez użytkownika.