Lp operator Łączność znaczenie

Transkrypt

Lp operator Łączność znaczenie
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:
TRUE
FALSE
wyrażenie
instrukcja1
instrukcja2
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ść
1
2
3
4
5
(), []
-, ~, (typ), !, &, *, ++, -*, /, %
+, <<, >>
lewostronna
prawostronna
lewostronna
lewostronna
lewostronna
6
7
8
9
10
11
12
13
14
15
<, <=, >, >=
==, !=
&
^
|
&&
||
?:
=
,
lewostronna
lewostronna
lewostronna
lewostronna
lewostronna
lewostronna
lewostronna
prawostronna
prawostronna
lewostronna
znaczenie
bit. przesunięcie w lewo, prawo/ int,
char
bitowa koniunkcja/ int, char
bit. różnica symetryczna/ int, char
bitowa alternatywa/ int, char
AND
OR
wyrażenie warunkowe
podstawienie
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
TAK
a,b
NIE
a>b
pisz
pisz b
lub równe
a
STOP
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.
START
czytaj
a,b,c
NIE
TAK
a>b
TAK
NIE
TAK
a>c
pisz
a
NIE
b>c
pisz c
pisz b
STOP
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");
}
pisz c
W następnym przykładzie obliczane są pierwiastki równania liniowego: bx+c=0.
START
czytaj b,c
TAK
NIE
b=0
NIE
TAK
x=-c/b
c=0
pisz
tożsamość
pisz
sprzeczność
pisz x
STOP
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);
}
}
Kolejny program oblicza pierwiastki równania kwadratowego: ax2+bx+c=0.
START
czytaj
TAK
TAK
b=0
a,b,c
a=0
NIE
NIE
d=b*b-4*a*c
x1=(-b-sqrt(d))/(2*a)
x2=(-b+sqrt(d))/(2*a)
x=-c/b
TAK
c=0
NIE
pisz x1,x2
pisz
tożsamoś
ć
pisz
sprzeczność
STOP
pisz
x
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 = x3 + 3
y = -x2 + 6
Należy sprawdzić, czy zadany punkt leży pod wykresem funkcji kwadratowej: y = -x2 + 6, nad
wykresem funkcji y = x3 + 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
y=10x
y=x3+3
y=-x2+6
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");
}