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"); }