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 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

J. Koszelew

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

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 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

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”:

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

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 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

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;

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

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