WYKŁAD 2. OPERATORY I INSTRUKCJE 2_1. Operatory

Transkrypt

WYKŁAD 2. OPERATORY I INSTRUKCJE 2_1. Operatory
WYKŁAD 2. OPERATORY I INSTRUKCJE
2_1. Operatory przypisania
Instrukcje z operatorami przypisania
Instrukcje
z operatorem
złożonym
Równoważne
instrukcje
z operatorem
prostym
j+=delta;
j=j+delta;
j-=delta;
j=j-delta;
j*=delta:
j=j*delta:
j/=delta;
j=j/delta;
j%=delta;
j=j%delta;
Przykład:
int x=2; //x==2
x+=3;
//x==5
x-=2;
//x==3
x*=5;
//x==15
2_2. Operatory inkrementacji i dekrementacji
Operatory inkrementacji/dekrementacji
Operator
inkrementacji
Operator
dekrementacji
Postać
przedrostkowa
++Op
--Op
Postać
przyrostkowa
Op++
Op--
Różnica działania pomiędzy operatorem w postaci ++ Op a operatorem w
postaci Op++ ujawnia się w złożonych wyrażeniach:
Operator przedrostkowy ++ Op działa przed obliczeniem wartości wyrażenia.
Operator przyrostkowy Op++ działa po obliczeniu wartości wyrażenia.
Przykłady
int a=8,b=1,x;
x=(++a)+(++b);
//x==9+2==11, a==9, b==2
int a=8; b=1, x;
x=(a++)+(b++);
//x==8+1==9, a==9, b==2
int s=0, j=1;
s+=j++; //s==1,
s+=j++; //s==3,
s+=j++; //s==6,
s+=j++; //s==10,
j==2
j==3
j==4
j==5
2_3. Hierarchia operatorów
Operatory C++ w porządku malejącego priorytetu
Operatory
()
[]
->
::
Wiązanie
.
L → P
! ~ + -- ++ sizeof new delete
P → L
.*
L → P
->*
*
/
+
-
<<
%
L → P
L → P
L → P
>>
<
<=
==
!=
>
>=
L → P
L → P
&
L → P
^
L → P
|
L → P
&&
L → P
||
L → P
?:
P → L
=
,
*=
/=
%=
+=
-=
&=
^= |=
<<=
>>=
P → L
L → P
2_4. Funkcje i stałe matematyczne określone w <math.h>
Wywołanie
double x,y,a;
y=sin(x);
y=cos(x);
y=tan(x);
y=asin(x);
y=acos(x);
y=atan(x);
y=exp(x);
y=log(x);
y=log10(x);
y=pow(x,a);
y=sqrt(x);
y=ceil(x);
y=floor(x);
y=fabs(x);
y=fmod(x,a);
y=hypot(a,x);
y=modf(x,&a);
Obliczona wartość
Sinus kąta x (kąt w radianach)
Kosinus kąta x (kąt w radianach)
Tangens kata x (kąt w radianach)
Arkus sinus argumentu x (x w przedziale <-1,1>)
Arkus kosinus argumentu x (x w przedziale <-1,1>)
Arkus tangens argumentu x
ex
Logarytm naturalny liczby x
Logarytm dziesiętny liczby x
Liczba x do potęgi a
Pierwiastek kwadratowy nieujemnej liczby x
Zaokrąglenie x w górę
Zaokrąglenie x w dół
Wartość bezwzględna liczby x
Reszta z dzielenia x/a
Przeciwprostokątna trójkąta o bokach a, x
Część ułamkowa liczby x zostaje przypisana do y, część
całkowita x przekazana do argumentu a.
Stałe określone w zbiorze nagłówkowym <math.h>
Nazwa stałej
M_PI
M_PI_2
M_1_PI
M_SQRT2
M_SQRT_2
M_E
M_LOG2E
M_LOG10E
M_LN2
M_LN10
Wartość
3.1415926535897931200
1.57079632679489661923
0.3183098861837906738
1.41421356237309504880
0.70710678118654752440
2.71828182845904523536
1.44269504088896340736
0.434294481903251827651
0.69314718055945309417
2.30258509299404568402
Znaczenie
π
π/22
1/π
π
sqrt(2)
1/sqrt(2)
e
log2(e)
log10(e)
ln(2)
ln(10)
Przykład
Program obliczający pierwiastek kwadratowy metodą Newtona
#include<conio.h> //dla clrscr
#include<stdio.h> //dla printf,scanf
#include<math.h> //dla sqrt
int main() {
clrscr();
double x,p;
printf("Podaj x: ");
scanf("%lf",&x);
printf("\nKolejne aproksymacje:");
p=x/2.0;
// 0. przybliżenie
printf("\n\n%.9lf",p);
p=(x+p*p)/(2*p);
printf("\n%.9lf",p);
// 1. przybliżenie
p=(x+p*p)/(2*p);
printf("\n%.9lf",p);
// 2. przybliżenie
p=(x+p*p)/(2*p);
printf("\n%.9lf",p);
// 3. przybliżenie
p=(x+p*p)/(2*p);
printf("\n%.9lf",p);
// 4. przybliżenie
printf("\n\nFunkcja sqrt(%.1lf) zwraca:
%.9lf",x,sqrt(x));
getch();
return 0;
}
Po wprowadzeniu za x wartości 2, na ekranie pojawi się tekst:
Podaj x: 2
Kolejne aproksymacje:
1.000000000
1.500000000
1.416666667
1.414215686
1.414213562
Funkcja sqrt(2.0) zwraca: 1.414213562
2_5. Instrukcje warunkowe
Instrukcja if
if (wyr_relacyjne)
{
instrukcja_1;
instrukcja_2;
//--------instrukcja_n;
}
Graf działania instrukcji warunkowej if
0
wyrażenie
relacyjne
1
{
instrukcja 1
instrukcja 2
//-------instrukcja n
}
Instrukcja if-else
if (wyr_relacyjne)
{
instrukcja_1_1;
instrukcja_1_2;
//--------instrukcja_1_n;
}
else
{
instrukcja_2_1;
instrukcja_2_2;
//--------instrukcja_2_m;
}
Graf działania instrukcji warunkowej if–else
0
{
}
instrukcja 2–1
instrukcja 2–2
//------------instrukcja 2–m
wyrażenie
relacyjne
1
{
}
instrukcja 1–1
instrukcja 1–2
//------------instrukcja 1–n
2.6. Zagnieżdżone instrukcje warunkowe
Przykład
Obliczenie wieku osoby
#include <conio.h>
#include <stdio.h>
int main()
{
int r0,m0,d0,r1,m1,d1,wiek;
printf("Podaj rok, miesiac, dzien urodzenia: ");
scanf("%d%d%d",&r0,&m0,&d0);
printf
("Podaj dzisiejsza date: rok, miesiac, dzien: ");
scanf("%d%d%d",&r1,&m1,&d1);
wiek=r1-r0;
if(m0>m1) wiek--; //zagnieżdżone if-else
else if(m0==m1)
if(d0>d1) wiek--;
//else if (m0==m1 && d0>d1) wiek--;
printf("\nMasz %d lat.",wiek);
getch();
return 0;
}
2_7. Operatory logiczne w instrukcjach warunkowych
W języku C++ istnieją trzy operatory logiczne:
Koniunkcja
Alternatywa
Negacja
&&
||
!
Działanie operatorów logicznych
Operandy i ich
wartości
Wyrażenia logiczne i ich wartości
Op1
Op1 &&
Op2
Op2
Op1 ||
Op2
! Op1
fałsz
fałsz
fałsz
fałsz
prawda
fałsz
prawda
fałsz
prawda
prawda
prawda
fałsz
fałsz
prawda
fałsz
prawda
prawda
prawda
prawda
fałsz
Uwaga: W C++ wartość fałsz jest reprezentowana przez liczbę 0,
a wartość prawda jest reprezentowana przez liczbę 1.
Przykład
Sprawdzenie, czy wartość x jest w przedziale <P, K>
#include<conio.h>
#include<stdio.h>
int main()
{
const double P=-1.0, K=1.0;
double x;
printf("Podaj x: ");
scanf("%lf",&x);
if(x>=P && x<=K) //użycie operatora koniunkcji &&
printf
("Poziom x==%.3lf jest dopuszczalny.",x);
else printf("x==%.3lf jest poza zakresem!",x);
getch();
return 0;
}
2_8. Instrukcja wyboru switch
służy do wyboru jednej spośród kilku instrukcji (lub sekwencji instrukcji),
zależnie od wartości pewnego wyrażenia typu całkowitego, zwanego
wyrażeniem sterującym.
switch (wyrażenie_sterujące)
{
case stała_1:instrukcja;
- - - instrukcja;
break;
case stała_2:instrukcja;
- - - instrukcja;
break;
// - - - - - - - - - - - - case stała_n:instrukcja;
- - - instrukcja;
break;
default: instrukcja;
- - - instrukcja;
}
wyrażenie_sterujące ==
1
2
3
inna wartość
case 1: instrukcja;
--instrukcja;
break;
case 2: instrukcja;
--instrukcja;
break;
case 3: instrukcja;
--instrukcja;
break;
default: instrukcja;
--instrukcja;
Graf działania instrukcji wyboru
Przykład
//kalkul.cpp
//4-działaniowy kalkulator
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> //dla system()
int main()
{
double a,b,wynik;
char op;
int k=0;
printf("\nWybierz operacje (+, -, *, /): ");
scanf("%c",&op);
printf("\nPodaj pierwszy argument: ");
scanf("%lf",&a);
printf("\n\nPodaj drugi argument: ");
scanf("%lf",&b);
switch
{
case
case
case
case
(op)
'+':
'-':
'*':
'/':
wynik=a+b; break;
wynik=a-b; break;
wynik=a*b; break;
if (b!=0) wynik=a/b;
else k=1; break;
default: k=2;
}
system("CLS"); //czyszczenie ekranu
if (k==0)
printf("\n%.3lf%c%.3lf=%.3lf",a,op,b,wynik);
else if (k==1) printf("\nDzielenie przez zero!");
else printf("\nNie ma takiej operacji!");
getch();
return 0;
}