Wykład
Transkrypt
Wykład
J. Koszelew Temat 2 Wyra enia logiczne. Operatory przypisania. Instrukcja bloku. Instrukcja warunkowa. Instrukcja iteracji "while", "do while", "for". 1. Wyra enia logiczne W instrukcjach wyst puj cz sto wyra enia logiczne, które okre laj warunki wykonania fragmentów programu. Wyra enia logiczne s zbudowane przy pomocy operatorów arytmetycznych, relacyjnych i logicznych. W wyra eniach logicznych mog okr głe. Wyra enia logiczne maj warto od zera (prawdy). Warto te wyst pi 0 (fałszu) lub warto nawiasy ró n prawdy b dziemy umownie zaznacza przez 1. operatory relacyjne: == != < > <= >= równe ró ne mniejsze wi ksze mniejsze lub równe wi ksze lub równe Przykład 2.1 int a=3,b=4, jest; jest=a+1>b*(a+4); // jest=? jest=a!=b/2; // jest=? operatory logiczne: && koniunkcja (AND) || alternatywa (OR) ! negacja (NOT) 1 J. Koszelew tabelki operatorów logicznych: && 1 0 1 1 0 0 0 0 || 1 0 1 1 1 ! 1 0 0 1 Przykład 2.2 int a=3,b=4, jest; jest=a+1>b*(a+4) && b+1!=a; // jest=? jest=!(a!=b/2 || a>0); // jest=? 2. Operatory przypisania operatory przypisania = zwykłe przypisanie x = 2; += przypisanie sumy x+=2; // x = x + 2; −= przypisanie ró nicy x−=2; // x = x − 2; ∗= przypisanie iloczynu x∗=2; // x = x ∗ 2; /= przypisanie ilorazu x /=2; // x = x / 2; %= przypisanie reszty x%=2; // x = x % 2; operatory inkrementacji i dekrementacji zmienna++ inkrementacja zmiennej po wyliczeniu wyra enia ++zmienna inkrementacja zmiennej przed wyliczeniem wyra enia zmienna− −− dekrementacja zmiennej po wyliczeniu wyra enia − −zmienna dekrementacja zmiennej przed wyliczeniem wyra enia 2 J. Koszelew Przykład 2.3 int x,y=1; x=++y; // x=2, y=2 x=y++; // x=1,y=2 Priorytety poznanych operatorów Operator ! − ++ −− ∗ / % + − < <= > >= == != = ∗= /= −= Opis %= += negacja logiczna zmiana znaku (negacja) inkrementacja (zwi kszenie o 1) dekrementacja (zmiejszenie o 1) mno enie dzielenie operacja modulo (reszta z dzielenia) dodawanie odejmowanie mniejszy ni mniejszy lub równy wiekszy ni wiekszy lub równy równy nierówny (ró ny od) przypisanie przypisania arytmetyczne 3. Instrukcja bloku • Nawiasy klamrowe s u ywane do grupowania wielu deklaracji i instrukcji w jedn instrukcj zło on (jeden blok). • Je eli zmienne programu s deklarowane w zakresie instrukcji bloku (w nawiasach klamrowych), to „przesłaniaj ” one zmienne o tej samej nazwie zadeklarowane na zewn trz bloku. Do takich lokalnych zmiennych mo na si odwoływa wył cznie w zakresie bloku, w którym s zadeklarowane. 3 J. Koszelew Przykład 2.4 #include <stdio.h> int main( ) { int a = 10, b = 20 ; { int a = 30 ; // „przesłoni cie”’ poprzedniej definicji a printf( ”A = %d, B = %d \n” , a , b ); // Ekran: A=30, B=20 } printf( ”A = %d, B = %d \n” , a , b ); // Ekran: A=10, B=20 return 0; } 4. Instrukcja warunkowa a) wariant bez „else” if ( wyra enie ) instrukcja ; Je eli wyra enie ma warto ró n od zera, to wykona si instrukcja (blok instrukcji). Je eli wyra enie ma warto równ zero, to instrukcja (blok instrukcji) nie wykona si . 0 wyra enie ≠0 instrukcja 4 J. Koszelew Przykład 2.5 Program sprawdza czy podana przez u ytkownika liczba jest dodatnia, równa zero lub ujemna #include <stdio.h> int main( ) { int a; printf( ”Podaj liczbe dodatnia: ” ); scanf( ”%d” , &a ); if ( a > 0 ) printf(“Liczba jest rzeczywiscie dodatnia”) ; if ( a = = 0 ) printf( ”Podales zero !!! ” ); if ( a < 0 ) printf( ”Podales liczbe ujemna !!! ” ); return 0; } b) wariant z „else” if ( wyra enie ) instrukcja_1 ; else instrukcja_2; Je eli wyra enie ma warto (blok instrukcji). Je eli wyra enie ma warto instrukcji). ró n od zera, to wykona si instrukcja _1 równ zero, to wykona si instrukcja_2 (blok 0 wyra enie ≠0 instrukcja1 instrukcja2 5 J. Koszelew Przykład 2.6 Program sprawdza, czy podana przez u ytkownika liczba jest dodatnia #include <stdio.h> int main( ) { int a; printf( ”Podaj liczbe dodatnia: ” ); scanf( ”%d” , &a ); if ( a > 0 ) printf(“Liczba jest rzeczywiscie dodatnia”) ; else printf(“Ta liczba wcale nie jest dodatnia”) return 0; } c) Konstrukcja “else-if”: Przykład 2.7 if ( wyra enie_1 ) instrukcja_1; else if ( wyra enie_2 ) instrukcja_2; else if ( wyra enie_3 ) instrukcja_3; else instrukcja_4; Program sprawdza czy podana przez u ytkownika liczba jest dodatnia, równa zero lub ujemna #include <stdio.h> int main( ) { int a; printf( ”Podaj liczbe dodatnia: ” ); scanf( ”%d” , &a ); if ( a > 0 ) printf(“Liczba jest rzeczywiscie dodatnia”) ; else if ( a = = 0 ) printf( ”Podales zero !!! ” ); else printf( ”Podales liczbe ujemna !!! ” ); 6 J. Koszelew return 0; } Przykład 2.8 Program wykonuje mno enie lub dzielenie dwóch liczb. W przypadku dzielenia sprawdzany jest dzielnik (czy jest ró ny od zera). #include <stdio.h> int main( ) { float a, b, wynik; printf( "Podaj pierwsza liczbe: " ); scanf( "%f" , &a ); printf( "Podaj druga liczbe: " ); scanf( "%f" , &b ); int odp; printf („1 – mnozenie, 2- dzielenie: ” ); scanf( "%d" , &odp ); if( odp==1) { wynik=a*b; printf("%f * %f = %f\n”,a,b,wynik); } else if (odp==2) if (b!=0) { wynik=a/b; 7 J. Koszelew printf("%f / %f = %f\n”,a,b,wynik); } else printf („Blad !!! Dzielenie przez zero !!!”) return 0; } 5. P tla typu "while" while (wyra enie) instrukcja; Dopóki wyra enie ma warto 0 ró n od zera wykonuj instrukcj . wyra enie ≠0 instrukcja Przykład 2.9 Program wczytuj cy liczby a do chwili podania warto ci 0 i obliczaj cy sum wszystkich wprowadzonych liczb – wersja z p tl „while” #include <stdio.h> int main( ) { int x=1,suma=0; 8 J. Koszelew while (x!=0) { printf("Podaj liczbe:"); scanf(„%d”,&x); suma=suma+x; }; printf("Suma = %d",suma); return 0; } 6. P tla typu „do while” do instrukcja while (wyra enie); Wykonuj instrukcj dopóki wyra enie ma warto ró n od zera. instrukcja 0 wyra enie ≠0 9 J. Koszelew Przykład 2.10 Program wczytuj cy liczby a do chwili podania warto ci zero i obliczaj cy sum wszystkich wprowadzonych liczb – wersja z p tl „do - while” #include <stdio.h> int main( ) { int x,suma=0; do { printf("Podaj liczbe:"); scanf(„%d”,&x); suma=suma+x; } while (x!=0); printf("Suma = %d",suma); return 0; } 10 J. Koszelew 7. P tla typu „ for” for (ustawienia pocz tkowe; warunek kontynuacji; zmiana sterowania) instrukcja; ustawienia pocz tkowe warunek kontynuacji 0 ≠0 instrukcja zmiana sterowania Przykład 2.11 Program wczytuje liczby, a nast pnie sumuje podane liczby. Ilo u ytkownik liczb podaje #include <stdio.h> int main( ) { int x, k, suma=0; printf(”Podaj ilosc liczb:”); scanf(“%d”,&k); for (int i=1; i<=k; i++) { 11 J. Koszelew printf("Podaj liczbe nr %d : ",i); scanf(„%d”,&x); suma=suma+x; }; printf(”Suma = %d”,suma); return 0; } Przykład 2.12 Program, który „czeka” na klawisz z cyfr , a nast pnie drukuje t cyfr oraz liczb podanych znaków na ekranie – wersja z p tl „do while” #include <stdio.h> int main() { int ile=0; char znak; do { znak=getch(); ile++; }while (!(znak>='0' && znak<='9')); printf (”Podany znak : %c\n Uzyto %d znakow”,znak,ile); return 0; } 12 J. Koszelew Przykład 2.13 Program, który „czeka” na klawisz z cyfr , a nast pnie drukuje t cyfr oraz liczb podanych znaków na ekranie – wersja z p tl „while” #include <stdio.h> int main() { int ile=0; char znak=’a’; while (!(znak>='0' && znak<='9')) { znak=getch(); ile++; }; printf (”Podany znak : %c\nUzyto %d znakow”,znak,ile); return 0; } Przykład 2.14 Program, który „czeka” na klawisz z cyfr , a nast pnie drukuje t cyfr oraz liczb podanych znaków na ekranie – wersja z p tl „for” #include <stdio.h> int main() { int ile; char znak=’a’; for (ile=0;!(znak>='0' && znak<='9');ile++) znak=getch(); printf (”Podany znak : %c\nUzyto %d znakow”,znak,ile); return 0; } 13