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 te wyst pi nawiasy okr głe. Wyra enia logiczne maj warto 0 (fałszu) lub warto ró n od zera (prawdy). Warto 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
tabelki operatorów logicznych:
&&
1
0
||
1
!
1
1
0
1
1
1
0
0
0
0
0
1
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
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
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
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 ró n od zera, to wykona si instrukcja _1
(blok instrukcji).
Je eli wyra enie ma warto równ zero, to wykona si instrukcja_2 (blok instrukcji).
0
wyra enie
≠0
instrukcja2
instrukcja1
5
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”:
if ( wyra enie_1 ) instrukcja_1;
else
if ( wyra enie_2 ) instrukcja_2;
else if ( wyra enie_3 )
instrukcja_3;
else instrukcja_4;
Przykład 2.7
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
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
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 ró n od zera wykonuj instrukcj .
0
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
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
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
7. P tla typu „ for”
for (ustawienia pocz tkowe; warunek kontynuacji; zmiana sterowania) instrukcja;
ustawieni a pocz tkowe
warunek 0
konty
nuacji
≠0
instru k
c j a
zmiana
sterow ania
Przykład 2.11
Program wczytuje liczby, a nast pnie sumuje podane liczby. Ilo liczb podaje u ytkownik
#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
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
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