5 ify

background image

Instrukcja warunkowa if, operatory

Najprostsza instrukcja warunkowa if ma postać:

if(wyrazenie)instrukcja

Powoduje ona obliczenie wartości wyrażenia i jeśli jest ono prawdziwe (true), czyli jego wartość jest

różna od 0 wykonywana jest instrukcja, jeśli wartość wyrażenia wynosi 0 instrukcja nie jest

wykonywana.

Pełna postać instrukcji if zawiera również słowo kluczowe else, po której następuje instrukcja

wykonywana, gdy wartość wyrażenia jest false.

if(wyrazenie)instrukcja1 else instrukcja2

Schemat blokowy instrukcji warunkowej przedstawia się następująco:

Wyrażenie można utworzyć przy pomocy operatorów arytmetycznych (*, /, +, -, %), operatorów

relacji (<, <=, >, >=, ==, !=), operatorów logicznych (!, &&, ||) oraz nawiasów.

Poniżej przedstawiona została tabela operatorów według malejących priorytetów:

Lp

operator

Łączność

znaczenie

1

(), []

lewostronna

2

-, ~, (typ), !, &, *, ++, --

prawostronna

3

*, /, %

lewostronna

4

+, -

lewostronna

5

<<, >>

lewostronna

bit. przesunięcie w lewo, prawo/ int,

char

6

<, <=, >, >=

lewostronna

7

==, !=

lewostronna

8

&

lewostronna

bitowa koniunkcja/ int, char

9

^

lewostronna

bit. różnica symetryczna/ int, char

10

|

lewostronna

bitowa alternatywa/ int, char

11

&&

lewostronna

AND

12

||

lewostronna

OR

13

?:

prawostronna

wyrażenie warunkowe

14

=

prawostronna

podstawienie

15

,

lewostronna

TRUE

FALSE

wyrażenie

instrukcja1

instrukcja2

background image

Znaczenie operatorów::

[ ]

- odwołania do elementów tablicy

~

- uzupełnienie jedynkowe – zamienia każdy bit na przeciwny (1 -> 0; 0 -> 1)

*

- wskaźnik do obiektu /operator jednoargumentowy)

++

- inkrementacja, czyli zwiększenie o 1( np. i++ oznacza i+1) /int

--

- dekrementacja czyli zmniejszenie o 1( np. i-- oznacza i-1) /int

==

- operator przyrównania (np. a==0 sprawdza, czy a jest równe 0)

!=

- operator relacji różny od (np. a!=0 sprawdza, czy a jest różne od 0)

,

- operator przecinkowy – oddziela wyrażenia, które są interpretowane od lewej do prawej

strony

?:

- w1?w2:w3 – odpowiada instrukcji warunkowej: if(w1) w2 else w3

Przykład:

Oto schemat blokowego i programu, który wczytuje dwie liczby całkowite i sprawdza, która z nich jest

większa:

START

czytaj a,b

a>b

STOP

TAK

NIE

pisz a

pisz b
lub równe

background image

int main(int argc, char *argv[])
{
//max(a,b)
int a, b;
printf("\n\n\ta=");
scanf("%d",&a);
printf("\n\n\tb=");
scanf("%d",&b);
if(a>b)
printf("a jest wieksze\n");
else
printf("b jest wieksze lub rowna a\n\n\n");
}

Poniżej przedstawiony jest fragment programu, w którym wyróżniony został przypadek, gdy

wprowadzone liczby są równe. Należy zastosować dwie instrukcje warunkowe:

.

.

.

if(a>b)
printf("\n\ta jest wieksze\n\n");
else
if(a==b)
printf("\n\ta i b sa rowne\n\n");
else

printf("\n\tb jest wieksze \n\n\n");

}

W kolejnym przykładzie wczytywane są trzy liczby całkowite, a zadaniem jest znalezienie największej

z nich.

background image

int main(int argc, char *argv[])
{
//max(a,b,c)
int a, b,c;
printf("\n\n\ta=");
scanf("%d",&a);
printf("\n\n\tb=");
scanf("%d",&b);
printf("\n\n\tc=");
scanf("%d",&c);
if(a>b)
if(a>c)
printf("\n\ta jest wieksze\n\n");
else
printf("\n\tc jest wieksze\n\n");
else
if(b>c)
printf("\n\tb jest wieksze\n\n");
else
printf("\n\tc jest wieksze \n\n\n");
}

START

czytaj a,b,c

a>b

STOP

a>c

b>c

TAK

TAK

TAK

NIE

NIE

NIE

pisz
a

pisz c

pisz b

pisz c

background image

W następnym przykładzie obliczane są pierwiastki równania liniowego: bx+c=0.

int main(int argc, char *argv[])
{
//rownanie liniowe bx+c=0
double b,c,x;
printf("\n\n\tb=");
scanf("%lf",&b);
printf("\n\n\tc=");
scanf("%lf",&c);
if(b==0)
if(c==0)
printf("\n\ttozsamosc\n\n");
else
printf("\n\tsprzecznosc\n\n");
else
{
x=-c/b;
printf("\n\tx=%10.5lf \n\n\n",x);
}
}

START

czytaj b,c

b=0

pisz x

STOP

c=0

TAK

TAK

NIE

NIE

pisz
tożsamość

pisz
sprzeczność

x=-c/b

background image

Kolejny program oblicza pierwiastki równania kwadratowego: ax

2

+bx+c=0.

START

czytaj a,b,c

TAK

NIE

b=0

pisz
x

STOP

c=0

TAK

NIE

pisz
tożsamoś
ć

pisz
sprzeczność

x=-c/b

a=0

d=b*b-4*a*c
x1=(-b-sqrt(d))/(2*a)
x2=(-b+sqrt(d))/(2*a)

pisz x1,x2

NIE

TAK

background image

int main()
{
//rownanie kwadratowe
double a, b,c,x1,x2,delta;
printf("\n\n\ta=");
scanf("%lf",&a);
printf("\n\n\tb=");
scanf("%lf",&b);
printf("\n\n\tc=");
scanf("%lf",&c);
if (a==0)
if(b==0)
if(c==0)
printf("\n\ttozsamosc\n\n");
else
printf("\n\tsprzecznosc\n\n");
else
{
x1=-c/b;
printf("\n\tx=%10.5lf \n\n\n",x1);
}
else
{
delta=b*b-4*a*c;
if(delta>=0)
{
x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);
printf("\n\tx1=%10.5lf x2=%10.5lf\n\n" ,x1,x2);
}
else
printf("\n\tnie ma pierw. rzeczywistych\n\n");
}
}

Przykład: Wyrażenia relacyjne, logiczne /fragmenty płaszczyzny/

Jednym z możliwych zastosowań instrukcji warunkowej jest sprawdzanie, czy zadany punkt

płaszczyzny mieści się określonym obszarze ograniczonym przez wykresy funkcji. Przykładowy

program wczytuje dwie liczby rzeczywiste, będące współrzędnymi x i y punktu na płaszczyźnie

i sprawdza, czy ten punkt należy do obszaru oznaczonego na poniższym rysunku kolorem żółtym.

Obszar jest ograniczony przez wykresy trzech funkcji:

y = 10x

y = x

3

+ 3

y = -x

2

+ 6

background image

Należy sprawdzić, czy zadany punkt leży pod wykresem funkcji kwadratowej: y = -x

2

+ 6,

nad

wykresem funkcji y = x

3

+ 3

oraz pod wykresem liniowej funkcji: y = 10x, czyli, czy współrzędne

punktu x i y spełniają następujące nierówności:

y < 10 * x

y < -x *x + 6

y > x * x * x + 3

Oto program realizujący to zadanie:

int main()
{
double x,y;
scanf("%lf %lf",&x, &y);
if (y<10*x &&y<-x*x+6 && y>x*x*x+3)
printf ("punkt leży w wyznaczonym obszarze\n");
else
printf ("punkt nie leży w wyznaczonym obszarze\n");

}

y=x

3

+3

y=-x

2

+6

y=10x


Wyszukiwarka

Podobne podstrony:
ify
Wishe i ify, Ćwiczenia

więcej podobnych podstron