Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałFelicyta Skomra Został zmieniony 10 lat temu
1
Informatyka I Wykład 5 OPERATORY Priorytety i kolejność obliczeń
Operator podstawiania Operatory arytmetyczne Relacje i operatory logiczne Jerzy Kotowski
2
Jerzy Kotowski
3
PRIORYTETY I KOLEJNOŚĆ OBLICZEŃ
Operatory wymienione w jednym wierszu mają ten sam priorytet. Wiersze tabeli ustawione według malejącego priorytetu. Operator jest lewostronnie (prawostronnie) łączny, jeżeli w wyrażeniu zawierającym co najmniej dwa takie ope-ratory na tym samym poziomie struktury nawiasowej najpierw jest wykonywany operator lewy (prawy). W języku C nie określa się kolejności obliczania argu-mentów operatora ani kolejności wyznaczania argu-mentów funkcji. Przykłady: x=f()+g(); printf("%d %d\n",++n,power(2,n)); Jerzy Kotowski
4
PRIORYTETY I KOLEJNOŚĆ OBLICZEŃ c.d.
Efekty uboczne (slide effects): przy okazji obliczania wyrażenia pewna zmienna otrzymuje nową war-tość. Przykład: a[i] = i++; - wynik zależy od architektury komputera. Wniosek: pisanie programów zależnych od archi-tektury komputera należy do złej praktyki programo-wania w każdym języku. Nawiasy mają najwyższy priorytet, w związku z tym wymuszają kolejność wykonywania operacji. Jerzy Kotowski
5
OPERATOR PODSTAWIANIA
Operator dwuargumentowy. Priorytet = 2. Lewy argument musi być lvalue. Lvalue jest wyrażeniem, z którym wiąże się adres w pamięci komputera - to znaczy, że jak się chce coś pod-stawić, to trzeba wiedzieć gdzie. Przykładem lvalue jest nazwa zmiennej, bo wartość każdej zmiennej jest gdzieś zapamiętywana w pamięci. Wartością działania (operatora) jest podstawiana wartość. W języku C można napisać: x = y = z = 2; x = 2 + y = z + 3; BŁĄD!!! x = 2 + (y = z + 3); OK Jerzy Kotowski
6
OPERATORY ARYTMETYCZNE
Operatory jednoargumentowe (priorytet 14): + oraz - Przykłady: x = -y; x = +y; Operatory dwuargumentowe: * / % (priorytet 13) (priorytet 12) Wnioski: a + b*c º a + (b*c) PRIORYTET a / b / c º (a / b) / c ŁĄCZNOŚĆ 7 / 3 * 6 Þ 12 Arytmetyka!!! Operator dzielenia modulo: 17 % 3 Þ 2 Oba operandy muszą być typu całkowitego. Pytanie: jakie wartości ma wyrażenie x%2 i kiedy? Jerzy Kotowski
7
OPERATORY LOGICZNE Zmienne logiczne
Język C nie ma zmiennych logicznych. Konwencja: (ZERO) º FAŁSZ ¹0 (różne od zera) º PRAWDA Przykłady: if(x) - jeżeli x jest różne od zera if(x%2) - jeżeli x jest nieparzyste ! - jednoargumentowy operator logicznej negacji if(!x) - jeżeli x jest równe zero x = !5; - do x podstawimy 0 (zero) x = !!7; - do x podstawimy 1 (jeden) Jerzy Kotowski
8
OPERATORY LOGICZNE Relacje
Operatory relacji mniejszy: < mniejszy równy: <= większy: > większy równy: >= Operatory dwuargumentowe. Priorytet = 10. Operatory przyrównania równy: == różny: != Operatory dwuargumentowe. Priorytet = 9. Jerzy Kotowski
9
Relacje i operatory przyrównania Seria (przykładów)
Wszystkie obiekty w przykładach są typu int x = 2 < 3; x = 1 bo 2 jest mniejsze od 3. x = 2 == 3; x = 0 bo zdanie “2 jest równe 3” jest fałszywe. x = 2 = 3; Błąd kompilacji bo w wyrażeniu “2 = 3“ lewy argument nie jest lvalue. if(x == 2) printf(“Ala ma kota.”); Historyjkę o Ali i jej kocie zobaczymy jeżeli zmienna x ma wartość 2. Jerzy Kotowski
10
Relacje i operatory przyrównania Druga seria (przykładów)
Wszystkie obiekty w przykładach są dalej typu int y = 2; Szarzyzna ligowa. x == 2; Ostrzeżenie kompilatora. Obliczamy wartość wyrażenia “x == 2“ i ją natychmiast odrzucamy. if(x = 2) printf(“Ala ma kota.”); Historyjkę o Ali i jej kocie zawsze zobaczymy bo w konstrukcji if jest teraz operator podstawiania. Efektem tej konstrukcji jest podstawienie x = 2 i zwrócenie podstawianej wartości (czyli prawdy). Jerzy Kotowski
11
OPERATORY LOGICZNE Spójniki logiczne
Koniunkcja logiczna, iloczyn logiczny: && Operator dwuargumentowy. Priorytet = 5. Definicja: a && b º 1 iff a oraz b jest prawdą. Alternatywa logiczna, suma logiczna: || Operator dwuargumentowy. Priorytet = 4. Definicja: a || b º 0 iff a oraz b jest fałszem. Są to jedyne operatory, dla których ANSI określa kolejność wyznaczania operandów: wpierw LEWY!! Język C wykorzystuje tautologie: 0 && x º 0 1 || x º 1 Jerzy Kotowski
12
Znowu przykłady z = f(x) && g(y);
Jeżeli f(x) zwróci 0 to g nie zostanie wywołana. if(x && a/x < 5)… Nigdy nie podzielimy przez zero. if(2 < x < 5) printf(“Ala ma kota”); Zobaczymy historyjkę o Ali i jej kocie niezależnie od wartości x bo 2 < x < 5 º (2 < x) < 5 º 1 if(2 < x && x < 5) printf(“Ala ma kota”); Tak będzie lepiej. Nawiasy nie są potrzebne!! x = !(a<3 && b>=5); Prawa de Morgana mogą się przydać. x = a>=3 || b<5; Jerzy Kotowski
13
SERIA KOŃCZĄCA (zwalająca z nóg)
y = 2; z = 3; x = 2 + y == 1 + z; Jaka będzie wartość zmiennej x? 2 + y == 1 + z º (2 + y) == (1 + z) º 4 == 4 º 1 int x,y; x = y % 4 == 0 && y % 100 !=0 || y % 400 == 0; Jest to definicja roku przestępnego: Rok y jest przestępny jeżeli dzieli się przez 4 i nie dzieli się przez chyba, że dzieli się przez 400. x= alfa && beta || gamma; x = !(y % 4) && (y % 100) || !(y % 400); Jerzy Kotowski
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.