Laboratorium nr 3 1/8 Język C Instrukcja laboratoryjna Temat: Instrukcje warunkowe, pętle. 3 Przygotował: mgr inż. Maciej Lasota 1) Instrukcje warunkowe. Instrukcje warunkowe pozwalają zdefiniować warianty wykonywania określonego bloku instrukcji programu. W języku C wyróżniamy kilka rodzajów instrukcji warunkowych: IF, IF-ELSE, IF-ELSE-IF, SWITCH (nazywana też instrukcją wyboru). Instrukcja warunkowa IF : if(warunek) Instrukcja warunkowa IF-ELSE : if(warunek) instrukcja1; else instrukcja2; void main() int a; printf("podaj liczbe a: "); scanf("%d",&a);
Laboratorium nr 3 2/8 if (a < 0) printf("liczba a jest liczba ujemna!\n"); exit(0); if ( a > 0) printf("liczba a jest liczba dodatnia!\n"); exit(0); printf("liczba a jest rowna 0 lub nie podales liczby\n"); Instrukcja warunkowa IF-ELSE-IF : if(warunek1) instrukcja1; else if(warunek2) instrukcja2; else if(warunek3) instrukcja3; char c; printf("podaj litere A,B lub C: "); c = getchar(); if (c == 'a') printf("a\n"); else if (c == 'b') printf("b\n");
Laboratorium nr 3 3/8 else if (c == 'c') printf("c\n"); else printf("podales zla litere\n"); return (0); Instrukcja wyboru SWITCH : switch(wyrażenie) case stala1: case stala2: default: char c; printf("podaj znak: "); switch(c = getchar()) case 'a': printf("a\n"); case 'b': printf("b\n");
Laboratorium nr 3 4/8 default: printf("blad\n"); return (0); 2) Instrukcje pętli. Instrukcje pętli umożliwiają powtarzanie określonego bloku instrukcji dowolną ilość razy lub do momentu wystąpienia (spełnienia) określonego warunku. Instrukcja pętli WHILE : while(warunek) Instrukcja pętli DO-WHILE : do while(warunek); Instrukcja pętli FOR : for (wyrażenie początkowe; warunek; inkrementacja)
Laboratorium nr 3 5/8 #include <unistd.h> int licznik=1; while(licznik <= 10) printf("licznik wynosi: %d\n",licznik); licznik++; sleep(2); licznik=1; //licznik=licznik+1 //sleep przyjmuje jako parametr //czas w sekundach while(1) printf("licznik wynosi: %d\n",licznik); if (licznik == 10) licznik++; sleep(2); //licznik=licznik+1 //sleep przyjmuje jako parametr //czas w sekundach return (0);
Laboratorium nr 3 6/8 #include <unistd.h> int licznik=1; int i; while(licznik <= 10) printf("licznik wynosi: %d\n",licznik); licznik++; sleep(2); //licznik=licznik+1 //sleep przyjmuje jako parametr //czas w sekundach for(i=1; i<=10; i++) printf("licznik wynosi: %d\n",i); sleep(2); return(0); //sleep przyjmuje jako parametr //czas w sekundach 3) Funkcje matematyczne. Standardowa biblioteka języka C, zawiera szereg gotowych funkcji służących do wykonywania obliczeń matematycznych. Plik nagłówkowy, w którym znajdują się deklaracje funkcji oraz makr matematycznych to <math.h>. Funkcje matematyczne dostępne w standardowej bibliotece języka C: sin(x); cos(x); tan(x); asin(x); acos(x); atan(x); atan2(x,y); sinh(x); cos(x); tanh(x); sinus x cosinus x tangens x arcus sinus x arcus cos x arcus tangens x arcus tangens x/y sinus hiperboliczny cosinus hiperboliczny tangens hiperboliczny
Laboratorium nr 3 7/8 exp(x); funkcja wykładnicza e^x log(x); logarytm naturalny log10(x); logarytm o podstawie 10 pow(x,y); sqrt(x); ceil(x); floor(x,y); fabs(x); podniesienie x^y pierwiastek z x, x>=0 najmniejsza liczba całkowita nie mniejsza niż x największa liczba całkowita nie większa niż x wartość bezwzględna z x Aby skompilować plik źródłowy, w którym wykorzystujemy funkcje matematyczne należy do kompilatora GCC dodać przełącznik - lm np. gcc -lm -o test test.c 4) Generator liczba pseudolosowych. Generator liczb pseudolosowych (Pseudo-Random Number Generator, lub PRNG) to program lub biblioteka, która na podstawie niewielkiej ilości informacji (ziarno, zarodek, ang. seed) generuje deterministycznie ciąg bitów, który pod pewnymi względami jest nieodróżnialny od ciągu uzyskanego z prawdziwie losowego źródła. Generatory liczb pseudolosowych nie generują ciągów prawdziwie losowych generator inicjowany ziarnem, które może przyjąć k różnych wartości, jest w stanie wyprodukować co najwyżej k różnych ciągów liczb. Przykłady bibliotek napisanych w C/C++ do generowania liczb pseudolosowych: Hasard (C) Boost (C++) GSL (C) http://haypo.hachoir.org/trac/wiki/hasard http://www.boost.org/ http://www.gnu.org/software/gsl/ Standardowa biblioteka języka C w pliku nagłówkowym <stdlib.h> posiada zadeklarowane dwie funkcje służące do generowania liczb pseudolosowych. srand(seed); rand(void);
Laboratorium nr 3 8/8 Funkcja srand() jako parametr przyjmuje seed, czyli tzw. ziarno/zarodek jest to zmienna liczba (unsigned int) na podstawie, której inicjowany jest generator liczb dla nowego ciągu liczb pseudolosowych. Funkcja rand() służy do losowania liczb pseudolosowych, zwraca ona liczbę całkowitą (int) z przedziału między 0 a stałą RAND_MAX. RAND_MAX jest to stała zadeklarowana w pliku nagłówkowym <stdlib.h> wynosi ona co najmniej 32767. #include <time.h> int i,c; /* Uruchamiamy generator liczb pseudolosowych jako parametr podajemy funkcje time(null) zwraca ona czas w sekundach liczony do 1970 roku */ srand(time(null)); for(i=0; i<=9; i++) c = (rand() % 25) + 65; //losowanie liczb //z przedzialu 65 90 // czyli kody ASCII A-Z printf("wylosowana liczba nr [%d]: %d odpowiada jej znak ASCII %c\n",i,c,c); return (0); Aby wygenerować liczbę z dowolnego przedziału wynik funkcji rand() poddajemy operacji modulo np. rand() % 10 - losuje liczby z przedziału od 0 do 9.