AJ
AJ
S
S
Jednostki
leksykalne C++
(służą do budowania instrukcji
języka)
1.identyfikatory,
2.słowa kluczowe,
3.stałe,
4.literały
łańcuchowe,
5.znaki
przestankowe
6.operatory.
AJ
AJ
S
S
IDENTYFIKATOR
Y
nazwy
Małe i wielkie litery, cyfry,
znak podkreślenia.
Uwagi:
•pierwszy znak musi być literą lub
podkreśleniem,
•standardowo kompilatory C++
biorą pod uwagę pierwsze 32
znaki
•rozróżniane są małe i duże litery
AJ
AJ
S
S
np.
nazwa, Andrzej,
funkcja, funkcja_X, X1, x1
różne identyfikatory:
ANDRZEJ, Andrzej,
AndrzeJ
AJ
AJ
S
S
SŁOWA
KLUCZOWE
Specjalne
identyfikatory
(niepodzielny
ciąg
znaków) zarezerwowane
dla ściśle określonych
celów
i
mogą
być
wykorzystywane
tylko
zgodnie
z
ich
przeznaczeniem.
AJ
AJ
S
S
asm
auto
break
case
cdeal
_cdeal
__cdeal
char
class
const
continue
_cs
__cs
default
delete
do
double
_ds
__ds
else
enum
_es
_export
__export
extern
far
_far
__far
_fastcall
__fastcall
float
for
friend
goto
huge
_huge
__huge
if
inline
int
interrrupt
_interrupt
__interrup
t
_loadds
__loadds
long
near
_near
__near
new
operator
pascal
_pascal
private
protected
public
register
return
_saveargs
__savearg
s
_seg
__seg
short
signed
sizeof
_ss
__ss
static
struct
switch
template
this
typedef
union
unsigned
virtual
void
volatile
while
AJ
AJ
S
S
STAŁE
ich
ich wartości
nie ulegają
nie ulegają
zmianie
zmianie
Stałe znakowe
(literały) – ciąg złożony
z jednego
‘x’ ‘R’
lub więcej znaków ujęty w pojedyncze
apostrofy
\n \t \b (tzn. sekwencje ucieczki)
cha
r
int
Stałe zmiennopozycyjne
– należą do podzbioru
liczb rzeczywistych
0.0 .26 2. -84.17 notacja dziesiętna z
kropką
1.18e12 -5.6789E-3 4e6 notacja
wykładnicza
Dokładność wymuszona -84.17f .89F
3.14165e-8L
float .
..
Stałe całkowite
– liczba
całkowita
87 037 0x12 0X7F
int
...
AJ
AJ
S
S
STAŁE -
deklaracje
stałych
#define identyfikator
ciąg_znaków
#define stala 9.81
#define nazwa ``Politechnika``
const typ_stałej
identyfikator=ciąg_znaków;
const float stala=9.81;
const char *nazwa=``Politechnika``;
AJ
AJ
S
S
LITERAŁY
ŁAŃCUCHOWE
Ciąg o długości zero lub więcej znaków
ujęty w podwójne apostrofy (cudzysłów)
zakończony znakiem o kodzie zero `\0`
``abcd`` - reprezentacja wewnętrzna to 5
znaków a b c d 0
AJ
AJ
S
S
ZNAKI
PRZESTANKOWE
[ ] ( ) { } , ; : ...
* = #
Nawiasy kwadratowe
[ ]
– do definiowania tablic lub
wskazywania ich elementów
np.
char str[20];
double tab[10][20][1];
Tab[1][5][4]=25;
Nawiasy okrągłe
( )
– m.in. do grupowania wyrażeń,
wskazywania wywołań funkcji i listy parametrów
np.
p=0.5*(a+b)*h;
funkcja();
AJ
AJ
S
S
Nawiasy klamrowe
{ }
– nawiasy logiczne
podobnie jak BEGIN END, wskazują tzw. instrukcję
złożoną.
np.
if (x!=y)
{
p=x;
q=x*y;
}
Przecinek
,
- służy m.in. do oddzielenia
argumentów wywołania funkcji
np.
funkcja(x,y,z);
funkcja1(a,b,cd,x1);
Średnik
;
- oznacza zakończenie instrukcji.
np.
a=c/y;
d=a*c;
AJ
AJ
S
S
ZNAKI
PRZESTANKOWE
cd
Dwukropek
:
- wskazuje, że poprzedzający go ciąg
znaków powinien zostać potraktowany jako etykieta.
np.
start:
y=x++;
z=y++;
Wielokropek
...
– znajduje zastosowanie przy
deklarowaniu funkcji o zmiennej liczbie parametrów.
np.
funkcja(int x, ...);
funkcja1(int y, char z, ...);
Znak gwiazdki
*
- mnożenie, do deklarowania
zmiennych wskaźnikowych.
np.
int *wl;
char **wznaki;
AJ
AJ
S
S
Znak równości
=
- do oddzielania deklaracji
zmiennej od części inicjującej tę zmienną.
np.
int tab[3]={1,2,3};
Znak
#
- oznacza dyrektywę preprocesora.
np.
#include <math.h>
AJ
AJ
S
S
OPERATORY
• OPERATORY ARYTMETYCZNE
(addytywne, multiplikatywne, in- i dekrementacji),
• OPERATORY LOGICZNE,
• OPERATORY BITOWE,
• OPERATORY RELACYJNE,
• OPERATORY PRZYPISANIA,
• OPERATOR WARUNKOWY,
(a++)+b)--;
(a++)+b)--;
c=(a, b+a, b*b)%(a>>4,
c=(a, b+a, b*b)%(a>>4,
b<<2);
b<<2);
++c*=(a!=0)?a:b++;
++c*=(a!=0)?a:b++;
AJ
AJ
S
S
•OPERATOR WYLICZENIOWY,
• OPERATORY WYBORU SKŁADOWYCH,
• OPERATORY POBRANIA ADRESU ZMIENNEJ
ORAZ DOSTĘPU DO ZMIENNEJ WSKAZYWANEJ,
• OPERATOR POBRANIA ROZMIARU,
• OPERATORY DOSTĘPU DO SKŁADOWYCH KLASY,
• OPERATORY DYNAMICZNEGO PRZYDZIAŁU PAMIĘCI,
• OPERATORY INDEKSOWANIA I WYWOŁANIA FUNKCJA,
• OPERATOR KONWERSJI.
OPERATORY
cd
AJ
AJ
S
S
OPERATORY ARYTMETYCZNE
OPERATOR ZNACZENIE
Operatory
addytywne
+
Dodawanie
-
Odejmowanie
Operatory
multiplikatywn
e
*
Mnożenie
/
Dzielenie
%
Reszta z
dzielenia
AJ
AJ
S
S
Np.
c=a
*
b;
d=a
/
b;
e=a
+
b;
f=a
-
b;
g=a
%
b; // (13%2
wynik 1)
AJ
AJ
S
S
OPERATORY ARYTMETYCZNE
cd
Operatory zwiększania
(inkrementacji) i zmniejszania
(dekrementacji)
Dekrement
acja
Inkrementa
cja
Przedrostk
owy
--
x
++
x
Przyrostko
wy
x
--
x
++
Operatory przedrostkowe najpierw
zwiększają (++) lub zmniejszają
(--) wartość zmiennej o 1 a
następnie następuje przypisanie.
AJ
AJ
S
S
Np.
int m=3, n=1,r;
r=(m
++
)+(
++
n); // zmienna r
=5
//dla
r=(
++
m)+(
++
n); // zmienna r
=6
AJ
AJ
S
S
OPERATORY RELACYJNE
OPERATO
R
ZNACZENIE
<
Mniejszy
<=
Mniejszy lub równy
>
Większy
>=
Większy lub równy
==
Równy
!=
Nierówny
AJ
AJ
S
S
Np.
int a,b,xx;
a=10;
b=3;
xx=a
>=
b; // xx zostanie przypisana
wartość 1 (prawda)
AJ
AJ
S
S
OPERATORY LOGICZNE
OPERATO
R
ZNACZENIE
!
Negacja
&&
Koniunkcja
||
Alternatywa
AJ
AJ
S
S
Np.
int a,b,c,d;
a=1;
b=0;
c=a
&&
b; // c zostanie przypisana
wartość 0
d=a
||
b; // d zostanie przypisana
wartość 1
AJ
AJ
S
S
OPERATORY BITOWE
OPERATO
R
ZNACZENIE
&
Bitowa koniunkcja
|
Bitowa alternatywa
^
Bitowa różnica
symetryczna
~
Bitowa negacja
<<
Przesunięcie w lewo
>>
Przesuniecie w prawo
Działają na uporządkowanym ciągu bitów, które
jak wiadomo przyjmują wartości 1 lub 0
Operator
Operator
y
y
przesunię
przesunię
cia
cia
AJ
AJ
S
S
OPERATORY PRZYPISANIA
OPERATOR
ZASTOSOWANI
E
ZNACZENIE
=
a=b
a=b
+=
a+=b
a=a+b
-=
a-=b
a=a-b
*=
a*=b
a=a*b
/=
a/=b
a=a/b
%=
a%=b
a=a%b
<<=
a<<=b
a=a<<b
>>=
a>>=b
a=a>>b
&=
a&=b
a=a&b
|=
a|=b
a=a|b
^=
a^=b
a=a^b
AJ
AJ
S
S
Np.
int a=5,b=10, c=2;
a+=b) // zmienna
a=15;
c*=b // zmienna
c=20;
AJ
AJ
S
S
OPERATORY WYLICZENIOWY
PRZECINKOWY
Operator
wyliczeniowy
(przecinkowy)
–
służy
do
utworzenia wyrażenia złożonego z
ciągu
wyrażeń
składowych
oddzielonych
przecinkami
(wyrażenia składowe oblicza się
od lewej do prawej). Wyrażenie
złożone
użyte
w
instrukcji
przypisania musi być ujęte w
nawiasy.
AJ
AJ
S
S
Np.
int a=1, b;
a+=10;
b=(a++,a+=10,a/2) //
zmienna b=11;
Np.
int n=10, i=2, k=4, wynik;
wynik=(n-=i, k+=2, i*=5, i++) //
zmienne n=8, k=6 i=10, wynik=11;
AJ
AJ
S
S
Typy danych w
C++
Typ danych
definiuje
zakres lub zbiór
dopuszczalnych wartości
dla stałej, zmiennej,
wyrażenia, funkcji oraz
zbiór dopuszczalnych
operacji wykonywanych na
tych wartościach. Określa
też format zapisu w
pamięci.
AJ
AJ
S
S
1.
Typy proste
(skalary)
-
arytmetyczne (całkowite i
rzeczywiste)
,
- wskaźnikowe,
- referencyjne.
Typy danych w
C++
2.
Typy
strukturalne
(złożone)
- tablice
,
- struktury,
- unie,
- klasy.
-
typ wyliczeniowy
,
-
typ void
,
AJ
AJ
S
S
Typy całkowite
(skończone , przeliczalne podzbiory zbioru liczb
całkowitych)
Słowa kluczowe określające typy całkowite
char
typ znakowy
int
typ całkowity
long
typ tzw.długich liczb
całkowitych
signed
liczby ze znakiem
short
typ tzw.krótkich
liczb całkowitych
unsigned
liczby bez znaku
AJ
AJ
S
S
Typy całkowite
(skończone , przeliczalne podzbiory zbioru liczb
całkowitych)
Typ
Rozmiar
w bitach
min
max
unsigned
char
8, jeden
znak
0
255
char,
signed
char
8, jeden
znak
-128
127
int, signed
int
16
-32768
32767
unsigned
int
16
0
65535
long
unsigned
int
32
0
4294967
295
long
signed int
32
-
2147483
648
2147483
647
AJ
AJ
S
S
char a, b=‘F’;
int x, y=2;
long k;
inicjowanie
składnia
typ całkowity identyfikator[=wartość zainicjowana
Deklaracje
i
inicjacja
zmiennych całkowitych
AJ
AJ
S
S
Typy rzeczywiste
(skończone , przeliczalne
podzbiory zbioru liczb
rzeczywistych)
Typ
Rozmi
ar w
bitach
min
max
Liczba
znaczący
ch cyfr
float
32
3.4E-38 3.4E38
6
double
64
1.7E-
308
1.7E30
8
15
long
double
80
3.4E-
4932
1.1E49
32
18
AJ
AJ
S
S
Typy rzeczywiste
(skończone , przeliczalne podzbiory zbioru liczb
rzeczywistych)
Pojęcie znaczących cyfr
Pojęcie znaczących cyfr
Liczbę rzeczywistą w pamięci komputera
Liczbę rzeczywistą w pamięci komputera
zapisuje się w postaci dwóch liczb (mantysa,
zapisuje się w postaci dwóch liczb (mantysa,
cecha)
cecha)
L=mantysa*10
L=mantysa*10
cecha
cecha
Dla
Dla float
float
liczba 1254986719873674.678
liczba 1254986719873674.678
zostanie zapisana w 0.125498 E16
zostanie zapisana w 0.125498 E16
A więc zostanie zaokrąglona do
A więc zostanie zaokrąglona do
wartości: 1254980000000000
wartości: 1254980000000000
AJ
AJ
S
S
float a, b=123.16e10;
double x, y=-145.67;
long double k;
inicjowanie
składnia
typ rzeczywisty identyfikator[=wartość
zainicjowana
Deklaracje i inicjacja zmiennych
rzeczywistych
AJ
AJ
S
S
Typy strukturalne
to uporządkowane,
wspólne zbiory
obiektów tego
samego lub różnego
typu.
2.
Typy
strukturalne
(złożone)
-
tablice
,
- struktury,
- unie,
- klasy.
Zmienne zdolne do przechowywania
więcej niż jednej wartości
jednocześnie nazwano zmiennymi
strukturalnymi (agregatami danych)
AJ
AJ
S
S
Typy tablicowe
Struktura danych zawierająca
uporządkowany zbiór obiektów tego
samego typu i odpowiada
matematycznemu pojęciu wektora,
macierzy itd.
Zasady tworzenia tablic:
- każdy element tablicy ma
przydzieloną swoją „skrzynkę” pamięci o
unikalnym numerze (indeksie) od
0 - n
,
- wszystkie elementy tablicy muszą być
tego samego typu,
- tablica ma jedną wspólną dla
wszystkich elementów nazwę,
AJ
AJ
S
S
Tablica jednowymiarowa -
wektor
1
2
3
4
5
6
7
23
4
25
1
67
8
5
34
0
1
2
3
4
5
6
Numer elementu
tablicy
Wartości
poszczególnych
elementów tablicy
Indeks elementu
tablicy
1
2
3
4
5
6
7
D
o
r
o
t
k
a
0
1
2
3
4
5
6
1
2
3
4
5
12.1 0.78
2.3
2.0
12.7
8
0
1
2
3
4
AJ
AJ
S
S
Indeks
elementu tablicy określa jak daleko,
licząc od początku tablicy jest
przesunięty dany element.
Zasady indeksowania elementów tablic
-elementy tablicy wskazujemy za pomocą
indeksów,
-indeksy numerujemy od 0,
-numer elementu tablicy nie odpowiada
jego indeksowi
C++
domyślnie
liczy
zaczynając
od 0
AJ
AJ
S
S
Deklaracja tablic
jednowymiarowych
float tablica1
[5];
Nazwa –
identyfikator
tablicy
Typ danych
każdego
elementu
tablicy
Rozmiar tablicy–
liczba elementów
tablicy
1
2
3
4
5
12.1 0.78
2.3
2.0
12.7
8
0
1
2
3
4
AJ
AJ
S
S
Dostęp, wprowadzanie i
wyprowadzanie elementów
tablicy jednowymiarowej
for (int i=0; i<10; i++)
{
cout<<„podaj kolejny element
tablicy”;
cin>>tab1[i];
}
Wprowadzenie
elementów
tablicy tab1
for (int i=0; i<10; i++)
{
cout<<„tab1[„<<i<<„]=”<<tab1[i
]<<endl;
}
Wyprowadzenie
elementów
tablicy tab1
tab1[2];
Dostęp do 3 elementu tablicy
tab1
AJ
AJ
S
S
0
23 34 45
5
4
0
4
0
6
34
4
45
1
34 45
0
56
8
8
2
34
6
7
0
0
8
3
23
4
25
1
67
8
5
4
0
1
2
3
4
5
Tablica dwuwymiarowa -
macierz
Indeks wiersza
tablicy
Wartości
poszczególnych
elementów tablicy
Indeks kolumny
tablicy
AJ
AJ
S
S
Deklaracja tablic
dwuwymiarowych
float tab2 [5]
[6];
Nazwa –
identyfikator
tablicy
Typ danych
każdego
elementu
tablicy
Ilość kolumn
tablicy
Ilość wierszy
tablicy
AJ
AJ
S
S
Dostęp, wprowadzanie i
wyprowadzanie elementów
tablicy dwuwymiarowej
for (int i=0; i<5; i++)
for (int j=0; j<6, j+
+)
cin>>tab2[i]
[j];
Wprowadzenie
elementów
tablicy tab2
for (int i=0; i<10; i++)
for (int j=0; j<6, j++)
cout<<tab2[i]
[j]<<endl;
Wyprowadzenie
elementów
tablicy tab2
tab2[0]
[0];
Dostęp do 1 elementu tablicy
tab2
o indeksie 00
AJ
AJ
S
S
Inicjowanie wartości
początkowych elementów
tablic
int
tab[4]={45,56,5,8};
lub
int tab[]={45,56,5,8};
int tabela[2][4]={
{45,56,5,8}
{4,6,78,6}
};
lub
int tabela[2]
[4]={45,56,5,8,4,6,78,6};
AJ
AJ
S
S
//
Wyprowadzenie liczb w odwrotnej kolejności
#include <iostream.h>
#define nmax 10
main()
{
int tab[nmax], n,i;
cout<<”podaj
liczbe
elementow
tablicy”<<endl;
cin>>n;
cout<<”Podaj liczby”<<endl;
for (i=0; i<n; i++)
cin>>tab[i];
cout<<”Liczby
w
odwrotnej
kolejnosci”<<endl;
for (i=n-1; i>=0; i--)
cout<<tab[i]<<endl;
return(0);
}
AJ
AJ
S
S
Świat jest trójwymiarowy albo
n-
wymiarowy
0
23 34 45
5
4
0
4
0
6
34
4
45
1
34 45
0
56
8
8
2
34
6
7
0
0
8
3
23
4
25
1
67
8
5
4
0
1
2
3
4
5
2
45
3
4
40
0
4
0
4
0
6
34
4
45
1
34 45
0
56
8
8
2
34
6
7
0
0
8
3
23
4
25
1
67
8
5
4
0
1
2
3
4
5
1
0
23 34 45
5
4
0
4
0
6
34
4
45
1
34 45
0
56
8
8
2
34
6
7
0
0
8
3
23
4
25
1
67
8
5
4
0
1
2
3
4
5
0
int lib[5][6][3]
[10];
int book[5]
[6][3];
AJ
AJ
S
S
Tablice znakowe
w C++ teksty (łańcuchy znaków)
przechowuje się w tablicach typu char
char tekst
[101];
char *tekst="Dowolny";
zadeklarowano wskaźnik
tekst
wskazujący na początek
podanego tekstu
Deklaracja tablicy na tekst
składający się z maksymalnie
100 znaków
char tekst [ ]
="Dowolny";
char tekst [8]="Dowolny";
Inicjowanie tablic znaków
char tekst [ ]
={'D','o','w','o','l','n','y','\0'};
AJ
AJ
S
S
Warto zapamiętać
Tablica składa się z elementów tego
samego typu,
Tablica dwuwymiarowa ma wiersze i
kolumny,
Tablica trójwymiarowa ma wiersze
(wysokość), kolumny (szerokość) i
stronice (głębokość),
Tablice deklarujemy jak zwykłe
zmienne proste (long tablica[3][5][4];),
Wymiary tablicy powinny być
zdefiniowane jako stałe,
Do elementu tablicy odwołujemy się
za pomocą współrzędnych (indeksów),
AJ
AJ
S
S
Warto zapamiętać
Można inicjować elementy tablicy
podczas deklaracji tej tablicy (int
t[2]={4,6};),
Przy wprowadzaniu (cin) i
wyprowadzaniu (cout) elementów tablic
wykorzystujemy tyle pętli „for” ile
wymiarów posiada dana tablica,
W C++ tablica znakowa jest
interpretowana jako łańcuch znaków,
czyli string,
Teoretycznie możemy tworzyć tablice
o dowolnie dużej ilości niezależnych
(ortogonalnych) wymiarów. Dla każdego
dodatkowego wymiaru musimy
zastosować kolejną współrzędną.
AJ
AJ
S
S
1.
Typy proste
(skalary)
-
arytmetyczne (całkowite i
rzeczywiste),
- wskaźnikowe,
- referencyjne.
Typy danych w
C++
2.
Typy
strukturalne
(złożone)
- tablice,
- struktury,
- unie,
- klasy.
-
typ wyliczeniowy
,
-
typ void
,
AJ
AJ
S
S
- typ
wyliczeniowy
Służy
do
zadeklarowania
grupy
stałych
całkowitych w zwarty sposób.
Stałe otrzymują domyślnie kolejne wartości
całkowite poczynając od 0.
Składnia
enum {stała1, stała2, stała3, ..., stałan};
wartość=
0
1 2
n
np. enum {ford, fiat, opel, mercedes};
enum {stała1=10, stała2, stała3, ...,
stałan};
Kolejne przyjmą wartości 11 12 itd.
AJ
AJ
S
S
- typ wyliczeniowy i
zmienne
Składnia (definicja nowego typu i jego zmiennych)
enum nowy_typ {stała1, stała2, ..., stałan} zm_1,
zm_2=stała2;
nazwa nowego typu lista stałych wyliczeniowych
zmienne
nowego typu z inicjacją
Np.
enum miesiac {styczen, luty, marzec, kwiecień, maj, czerwiec,
lipiec};
miesiac x=luty;
enum boolean {falsz, prawda} nie=fałsz, tak=prawda;
AJ
AJ
S
S
- typ void
Typ który posiada pusty zbiór wartości
Użyteczny szczególnie w zastosowaniu do
funkcji, które nie zwracają żadnej wartości.