Podręcznik
Strona: | SEZAM - System Edukacyjnych Zasobów Akademickich i Multimedialnych |
Kurs: | 2. Podstawowe instrukcje i typy danych |
Książka: | Podręcznik |
Wydrukowane przez użytkownika: | Gość |
Data: | czwartek, 3 lipca 2025, 14:05 |
1. Typy danych
Program operuje na pewnych danych, które muszą być umieszczone w pamięci komputera. Poznaliście dane, których wartość może zostać zmieniona w trakcie pracy programu. Taki rodzaj danych nazywamy zmiennymi. Oprócz nich mogą być potrzebne dane, które nie powinny się zmieniać podczas wykonania programu - dane takie nazywamy stałymi.
static
. W przypadku zmiennych lokalnych, słowo static
sprawia, że zmienna zachowuje swój stan pomiędzy wywołaniami funkcji, w której jest zadeklarowana, mimo że jej zasięg pozostaje ograniczony do tej funkcji. Zmienne globalne zadeklarowane jako statyczne mają zasięg ograniczony do pliku, w którym są zadeklarowane, ale ich czas życia obejmuje cały czas trwania programu.new
i delete
. Zarządzanie pamięcią dla zmiennych dynamicznych wymaga uwagi w celu unikania wycieków pamięci. To programista jest odpowiedzialny za zwalnianie pamięci po jej użyciu.register
. Zmienne są przechowywane w rejestrze procesora zamiast w pamięci operacyjnej co może przyspieszyć dostęp do niej. Zmienne te mogą mieć charakter lokalny lub globalny.2. Wbudowane typy danych
W języku C++ zmienne są deklarowane poprzez podanie typu zmiennej oraz nazwy zmiennej.Pamięć operacyjna komputera, znana również jako RAM (ang. Random Access Memory), jest podzielona na komórki pamięci. Każda jest identyfikowana unikalnym adresem. Każda komórka pamięci przechowuje określoną ilość danych. Zazwyczaj jest to jeden bajt (8 bitów). Każdy bajt może przechowywać liczbę od 0 do 255.
Każdy z wbudowanych (podstawowych) typów ma przypisaną określającą go nazwę predefiniowaną.
Każda zmienna w języku C++ zanim zostanie użyta w aplikacji musi zostać zadeklarowana oraz zdefiniowana.
TYP_ZMIENNEJ NAZWA_ZMIENNEJ;
extern
. Informuje ono kompilator, że dana zmienna już gdzieś istnieje. Wywołanie mogłoby wyglądać w następujący sposób: extern TYP_ZMIENNEJ NAZWA_ZMIENNEJ;
- nazwa zmiennej może składać się z liter, cyfr i podkreślenia
_
, - nazwa zmiennej nie może zaczynać się od cyfry oraz zawierać spacji,
- nie można używać znaków specjalnych, które mają znaczenie dla kompilatora i są używane do różnych celów, takich jak operatory arytmetyczne (
+,-,*,/,%
), logiczne (==, !=, <,>,<=,>=,&,|,&&,||,!
), przypisania (=, +=, -=,-=,*=,%=
), znaki specjalne (;, :, ., , , (), {}, []
) czy też określenie struktur oraz składni, - nazwy zmiennych nie mogą zawierać znaków spoza standardowego zestawu znaków ASCI, a więc nie mogą też zawierać polskich znaków,
- rozróżniane są wielkości liter więc
mojaZmienna
,MojaZmienna
iMOJAZMIENNA
są traktowane jako różne nazwy,\ - w teorii nie ma ograniczeń co do długości nazwy zmiennej, ale zaleca się używanie sensownych i zrozumiałych nazw, które ułatwiają czytanie i zrozumienie kodu.
;
1. Jako wartości wpisane explicite wszędzie tam, gdzie są wykorzystywane (przykładowo w zapisie y = 2*x stałą jest liczba 2).
2. Jako wartości oznaczone nazwami i wcześniej zdefiniowane (przykładowo w zapisie y = A*x nazwa A może być stałą, o ile tylko wcześniej poinformowaliśmy o tym kompilator).
const
.
const double G = 9.807; // definicja stałej będącej liczbą rzeczywistą
const string AUTOR = "Mikołaj Srebrempisany"; // definicja stałej będącej napisem
2.1. Typ logiczny
W języku C++ typ logiczny jest reprezentowany przez typ danych bool.
Typ został wprowadzony w standardzie C++98. Typ wbudowany bool
może przyjmować jedną z dwóch wartości: true
lub false
. Typ ten jest wykorzystywany głównie do wyrażania warunków logicznych w instrukcjach sterujących.
Przykład deklarowania zmiennej logicznej:
bool zmienna_logiczna;
2.2. Typy znakowe
Typ znakowy char
w języku C++ służy do przechowywania pojedynczych znaków. Może być używany do reprezentowania znaków drukowalnych, cyfr, znaków specjalnych i innych znaków w kodzie ASCII lub innym kodowaniu znaków. Typ char
umożliwia wykonywanie różnych operacji na znakach oraz jest często wykorzystywany w łańcuchach znakowych i operacjach wejścia/wyjścia.
W kodzie ASCII (American Standard Code for Information Interchange), każdy znak jest reprezentowany przez odpowiadającą mu wartość numeryczną.
Na przykład, litera 'A' jest reprezentowana przez wartość 65. Zmienna typu char
zajmuje więc dokładnie jeden bajt w pamięci. Kod ASCII zawiera znaki drukowalne oraz znaki specjalne. System ASCII był pierwszym szeroko rozpowszechnionym standardem kodowania. Pojawił się w 1960 za sprawą American National Standards Institute (ANSI). Tablica znaków ASCII to tabela składająca się z 128 znaków (7-bitowy zapis). Poniżej przedstawiona jest tablica ASCI z wartościami kodowanego znaku oraz odpowiadającym wartością w systemie dziesiętnym.
Kod dziesiętny |
Znak |
Kod dziesiętny |
Znak |
Kod dziesiętny |
Znak |
Kod dziesiętny |
Znak |
0 |
NUL |
32 |
Space |
64 |
@ |
96 |
` |
1 |
SOH |
33 |
! |
65 |
A |
97 |
a |
2 |
STX |
34 |
„ |
66 |
B |
98 |
b |
3 |
ETX |
35 |
# |
67 |
C |
99 |
c |
4 |
EOT |
36 |
$ |
68 |
D |
100 |
d |
5 |
ENQ |
37 |
% |
69 |
E |
101 |
e |
6 |
ACK |
38 |
& |
70 |
F |
102 |
f |
7 |
BEL |
39 |
’ |
71 |
G |
103 |
g |
8 |
BS |
40 |
( |
72 |
H |
104 |
h |
9 |
TAB |
41 |
) |
73 |
I |
105 |
i |
10 |
LF |
42 |
* |
74 |
J |
106 |
j |
11 |
VT |
43 |
+ |
75 |
K |
107 |
k |
12 |
FF |
44 |
, |
76 |
L |
108 |
l |
13 |
CR |
45 |
– |
77 |
M |
109 |
m |
14 |
SO |
46 |
. |
78 |
N |
110 |
n |
15 |
SI |
47 |
/ |
79 |
O |
111 |
o |
16 |
DLE |
48 |
0 |
80 |
P |
112 |
p |
17 |
DC1 |
49 |
1 |
81 |
Q |
113 |
q |
18 |
DC2 |
50 |
2 |
82 |
R |
114 |
r |
19 |
DC3 |
51 |
3 |
83 |
S |
115 |
s |
20 |
DC4 |
52 |
4 |
84 |
T |
116 |
t |
21 |
NAK |
53 |
5 |
85 |
U |
117 |
u |
22 |
SYN |
54 |
6 |
86 |
V |
118 |
v |
23 |
ETB |
55 |
7 |
87 |
W |
119 |
w |
24 |
CAN |
56 |
8 |
88 |
X |
120 |
x |
25 |
EM |
57 |
9 |
89 |
Y |
121 |
y |
26 |
SUB |
58 |
: |
90 |
Z |
122 |
z |
27 |
ESC |
59 |
; |
91 |
[ |
123 |
{ |
28 |
FS |
60 |
< |
92 |
\ |
124 |
| |
29 |
GS |
61 |
= |
93 |
] |
125 |
} |
30 |
RS |
62 |
> |
94 |
^ |
126 |
~ |
31 |
US |
63 |
? |
95 |
_ |
127 |
DEL |
Przykład deklaracji zmiennej przechowującej pojedyncze znaki:
char znak;
Szybko po wprowadzeniu tablicy ASCII do kodowania znaków okazało się, że niemożliwe jest uwzględnienie wszyskich istniejących znaków. Niemożliwe jest kodowanie np. polskich znaków dialektycznych czy znaków języka chińskiego. W celu udoskonalenia tablica ASCII została rozszerzona do 256 znaków, a więc wprowadzono zapis 8 bitowy. W dlaszym ciągu nie było możliwe uwzględnienie wszystkich znaków specjalnych. Microsoft zaproponował osobne wersje tabel ze znakami dla różnych grup językowych zwane stronami kodowymi (ang. ANSI code page).
- ISO 8859-1 (Latin-1): Strona kodowa używana w wielu językach zachodnioeuropejskich, obejmująca znaki diakrytyczne takie jak é, ñ i ü,
- Windows-1252: Rozszerzenie ISO 8859-1, używane w systemach operacyjnych Windows, zawierające dodatkowe znaki takie jak znaki cudzysłowu typograficznego,
- UTF-8: Uniwersalna strona kodowa, która jest wstecznie kompatybilna z ASCII i może reprezentować każdy znak Unicode. UTF-8 jest powszechnie używana w Internecie.
2.3. Typy całkowite
Typ całkowity w języku C++ to kategoria typów danych przeznaczonych do przechowywania liczb całkowitych. W C++ dostępnych jest kilka różnych typów całkowitych, różniących się rozmiarem i zakresem wartości, które mogą przechowywać. Możemy wyróżnić następujące typy całkowite:
- Typ
int
to podstawowy typ całkowity w C++. We współczesnych systemach typ ten jest zazwyczaj 32-bitowy. Można przechowywać wartości w zakresie od -2,147,483,648 do 2,147,483,647.
int liczba_calkowita;
- Typ
short
jest mniejszym typem całkowitym. Przeważnie rozmiar jest 16-bitowy. Może przechowywać wartości w zakresie od -32,768 do 32,767.
short liczba_calkowita;
- Typ
long
jest większym typem całkowitym. Zazwyczaj jest 32-bitowy na 32-bitowych systemach, ale na 64-bitowych systemach może być 64-bitowy. Dla 32-bitowego systemu zakres wynosi od -2,147,483,648 do 2,147,483,647.
long liczba_calkowita;
- Typ
long long
jest jeszcze większym typem całkowitym. Jest zazwyczaj 64-bitowy, co oznacza, że może przechowywać wartości w zakresie od -9,223,372,036,854,775,808 do 9,223,372,036,854,775,807.
long long liczba_calkowita;
Zmienne ze znakiem i bez znaku różnią się sposobem zapisu w pamięci komputera. Zmienne ze znakiem używają metody dwójkowego uzupełnienia do reprezentowania liczb ujemnych, co pozwala na reprezentowanie zarówno liczb dodatnich, jak i ujemnych. Zmienne bez znaku przechowują tylko liczby dodatnie, co pozwala na większy zakres dodatnich wartości liczbowych dla tej samej liczby bitów.
W przykładzie poniżej przedsatwiono na przykładzie 4 bitowego zapisu różnice pomiędzy zmiennymi całkowitymi ze znakiem oraz bez znaku.
W C++ typy całkowite mogą być modyfikowane za pomocą specyfikatorów signed
i unsigned
, aby wyraźnie określić, czy mają przechowywać wartości ujemne i dodatnie, czy tylko dodatnie. Na przykład:
signed int
jest równoznaczny zint
.unsigned int
przechowuje tylko liczby dodatnie.
- Typ
unsigned int
przechowuje tylko liczby nieujemne. Dla 32-bitowego systemu zakres wynosi od 0 do 4,294,967,295.
unisgned int liczba_calkowita;
- Typ
unsigned short
przechowuje liczby nieujemne i zazwyczaj jest 16-bitowy. Zakres wynosi od 0 do 65,535.
unsigned short liczba_calkowita;
- Typ
unsigned long
zazwyczaj jest 32-bitowy, a zakres wynosi od 0 do 4,294,967,295.
unsigned long liczba_calkowita;
- Typ
unsigned long long
jest zazwyczaj 64-bitowy i może przechowywać wartości w zakresie od 0 do 18,446,744,073,709,551,615.
unsigned long long liczba_calkowita;
2.4. Typy zmiennoprzecinkowe
Typ zmiennoprzecinkowy w języku C++ służy do zapisywania liczb rzeczywistych. Liczby rzeczywiste odgrywają istotną rolę w obliczeniach naukowych, inżynierskich oraz w wielu aplikacjach, w których kluczowym aspektem jest dokładność. W tym przypadku dokładność zapewniana przez liczby całkowite nie jest wystarczająca. W języku C++ dostępne są trzy główne typy zmiennoprzecinkowe: float
, double
oraz long double
. Każdy z wymienionych typów zmiennych różni się precyzją i zakresem wartości, które może przechowywać.
Poza standardowym sposobem zapisu liczb tzn. 10, 200.46 możemy zapisywać liczby używając notacji naukowej. Notacja naukowa jest sposobem reprezentowania bardzo dużych lub bardzo małych liczb w zwięzły sposób. Jest szczególnie użyteczna w naukach ścisłych i inżynierii, gdzie liczby mogą mieć wiele cyfr znaczących i szeroki zakres wartości.
W notacji naukowej wartość liczby obliczamy zgodnie ze wzorem:
gdzie:
Przy pomocy wzoru możliwe jest wyznaczenie wartość liczby zmiennoprzecinkowej zapisanej w dowolnym systemie pozycyjnym, a nie tylko dziesiętnym. W przypadku dziesiętnego systemu .
Liczby wymierne i niewymierne wchodzą w skład zbioru liczb rzeczywistych, a ich reprezentacja za pomocą notacji naukowej (formy wykładniczej) stanowi oficjalną definicję liczb zmiennoprzecinkowych. W tym momencie warto zastanowić się w jaki sposób liczby zmiennoprzecinkowe są przechowywane w pamieci komputera. Oczywiście zapis jest binarny. W łatwy sposób można zapisać część całkowitą, ale w jaki sposób zapisać część dziesiętną? Najlepiej będzie zaprezentować to na przykładzie.
Kolejnym krokiem jest przedstawienie w postaci binarnej liczby 0.125. W tym celu należy wykonać działania przedsatwione w tabeli, które polegają na kolejnym mnożeniu liczb przez 2 oraz zapisie części całkowitej w postaci binarnej.
Liczba wejściowa (ułamkowa) | Wynik mnożenia przez 2 | Wartość całkowita wyniku |
---|---|---|
0.125 | 2*0.125 = 0.250 | 0 |
0.250 | 2*0.250 = 0.500 | 0 |
0.500 | 2*0.500 = 1.000 | 1 |
Proces mnożenia kończy się gdy część ułamkowa równa się 0.
Liczbę zmiennoprzecinkową możemy zapisać jako 101.001.
Należy zwrócić uwagę, że istnieją przypadki w których proces mnożenia może nigdy się nie kończyć. Mamy wtedy do czynienia z liczbami nieskończonymi. W przypadku liczby nieskończonej otrzymujemy pewną powtarzającą się sekwencję binarnych wartości. Mówimy wtedy, że wartość jest w okresie. Możemy to zaobserwować na przykładzie liczby 0.33.
Liczba wejściowa (ułamkowa) | Wynik mnożenia przez 2 | Wartość całkowita wyniku |
---|---|---|
0.33 | 2*0.33 = 0.66 | 0 |
0.66 | 2*0.66 = 1.32 | 1 |
0.32 | 2*0.32 = 0.64 | 0 |
0.64 | 2*0.64 = 1.28 | 1 |
0.28 | 2*0.28 = 0.56 | 0 |
0.56 | 2*0.56 = 1.12 | 1 |
0.12 | 2*0.12 = 0.24 | 0 |
0.24 | 2*0.24 = 0.48 | 0 |
0.48 | 2*0.48 = 0.96 | 0 |
0.96 | 2*0.96 = 1.92 | 1 |
0.92 | 2*0.92 = 1.84 | 1 |
Zbierając wszystkie części całkowite uzyskane w kolejnych krokach, otrzymujemy:
Reprezentacja binarna liczby jest nieskończona i okresowa. W praktyce, można ją przybliżyć do określonej liczby miejsc po przecinku, ale zawsze będzie to tylko przybliżenie. Na przykład:
W celu ujednolicenia sposobu zapisu liczb zmiennoprzecinkowych został wprowadzony standard IEEE754. Standard IEEE 754 to zestaw specyfikacji definiujących sposób reprezentacji oraz operacji na liczbach zmiennoprzecinkowych w komputerach. Opracowany przez Institute of Electrical and Electronics Engineers (IEEE), standard ten jest powszechnie używany we współczesnych systemach komputerowych i językach programowania, zapewniając jednolitą metodę manipulacji liczbami zmiennoprzecinkowymi, co umożliwia przenośność kodu między różnymi platformami.
Liczby zmiennoprzecinkowe w standardzie IEEE 754 są reprezentowane w postaci znormalizowanej za pomocą trzech głównych części:
- Znak (1 bit): Określa, czy liczba jest dodatnia (0) czy ujemna (1).
- Cecha (eksponenta): Przechowuje przesuniętą wartość wykładnika. Wartość ta jest zapisywana w postaci przesuniętej o wartość zwaną biasem.
- Mantysa (część ułamkowa): Przechowuje znaczące cyfry liczby.
W języku C++ możemy więc wyróżnić następujące typy liczb zmiennoprzecinkowych:
- Typ
float
to pojedyncza precyzja zmiennoprzecinkowa. Zwykle jest przechowywana na 32 bitach (4 bajty). Zakres liczb wynosi od 1.2E-38 do 3.4E+38, natomiast precyzja jest do 7 cyfr znaczących.
float zmienna_rzeczywista;
- Typ
double
to podwójna precyzja zmiennoprzecinkowa. Zwykle jest przechowywana na 64 bitach (8 bajtów). Zakres liczb wynosi od 2.2E-308 do 1.8E+308, natomiast precyzja jest do 15 cyfr znaczących.
double zmienna_rzeczywista;
- Typ
long double
może oferować jeszcze większą precyzję. Jego rozmiar zależy od implementacji, ale zazwyczaj jest przechowywany na co najmniej 80 bitach (10 bajtów) lub więcej.
long double zmienna_rzeczywista;
2.5. Typy void
Typ void
w języku C++ jest specjalnym typem danych, który reprezentuje "brak wartości". Może być używany w różnych kontekstach. Typ void*
może być używany jako wskaźnik ogólny, który może przechowywać adres dowolnego typu danych. Jednakże, wskaźnik ten nie zawiera informacji o typie danych, na który wskazuje. Zazwyczaj wymaga to rzutowania na odpowiedni typ przed użyciem. Do czego taki typ danych może służyć wrócimy przy omawianiu wskaźników w dalszej części podręcznika.
3. Typ napisowy
W języku C++ nie ma wbudowanego standardowego typu do przechowywania napisów (czyli zmiennych łańcuchowych). W praktyce często istnieje potrzeba operowania na tego typu danych. W języku C do operowania na łańcuchach znaków wykorzystywane były tablice. W języku C++ wykorzystywana jest w tym celu biblioteka string. Zmienna typu string
jest często używana do przechowywania i manipulowania tekstami, takimi jak nazwy, zdania, adresy email czy informacje pobrane ze strumieni wejścia. Aby korzystać ze zmiennych typu string
, należy dodać nagłówek <string>
do kodu źródłowego programu.
string
oferuje wiele przydatnych funkcji i metod do manipulacji tekstem, takich jak dodawanie, usuwanie, porównywanie, przeszukiwanie itp. Jest to potężne narzędzie przy tworzeniu aplikacji, które wymagają pracy z tekstem. string napis;
string
możliwe jest wykonywanie podstawowych operacje na łańcuch znaków. Do poszczególnych znaków odwołujemy się za pomocą indeksów. Analogicznie jak do tablicy znaków. Tablice zostaną omówione w dalszej części podręcznika. Dodatkowo po kropce umieszczonej za nazwą zmiennej mamy dostęp do szeregu operacji, które możemy wykonać. Możemy np. pobrać rozmiar zmiennej, a więc liczbę znaków. Do tego służy operacja size()
, która zwraca liczbę całkowitą będącą liczbą znaków. string
.
string
.4. Typ wyliczeniowy
Typ wyliczeniowy definiuje się za pomocą słowa kluczowego enum
. Składnia wygląda następująco:
enum DniTygodnia {
Poniedzialek,
Wtorek,
Sroda,
Czwartek,
Piatek,
Sobota,
Niedziela
};
Domyślnie wartości wyliczeniowe są reprezentowane jako kolejne liczby całkowite zaczynając od zera. Można jednak przypisać im konkretne wartości:
enum DniTygodnia {
Poniedzialek=1,
Wtorek,
Sroda,
Czwartek,
Piatek,
Sobota,
Niedziela
};
Poniedzialek
ma wartość 1, Wtorek
2, Sroda
3, itd. 5. Instrukcje czytaj i pisz
W języku C++, operacje wejścia/wyjścia (I/O) są kluczowym elementem programowania, pozwalającym na interakcję z użytkownikiem i systemem plików. Do obsługi operacji wejścia/wyjścia wykorzystywana jest biblioteka <iostream>. Do operacji wypisywania na ekranie oraz odczytywania danych od użytkownika wykorzystujemy strumienie 'cout' (wyjścia) oraz 'cin' (wejścia).
Przy pomocy strumienia 'cout' możemy wyświetlić na ekranie komunikat lub wartość zmiennej.
cout << "Przykladowy napis";
cout << "Inny przyklad" << endl;
W przedstawionym przykładzie poleceniem 'cout' wypisywany jest na ekranie przykładowy napis. Jest także możliwość kontynuowania strumieniowego wyświetlania danych na ekranie przez kolejne wykorzystanie '<<'. W przykładzie pokazano także w jaki sposób wymusić przejście do nowej linii za pomocą 'endl'. Możliwe jest także przejście do nowej linii za pomocą polecenia '\n' umieszczonego bezpośrednio w tekście:
cout << "Przykladowy napis \n";
Oprócz wypisywania na ekranie stałych napisów można także wyświetlać wartości zmiennych. W przypadku podania w strumieniu nazwy zmiennej, na ekranie zostanie wyświetlona jej wartość, a nie jej nazwa. Na przykładzie poniżej przedstawiono sposób wyświetlania wartości zmiennych na ekranie.
int x,y;
x = 1;
y = 4;
cout << "Wartosc x: " << x << endl;
cout << "Wartosc y: ";
cout << y << endl;
cout << "Wartosc sumy x+y: "; << x + y << endl;
string napis;
cout << "Podaj przykladowy napis." << x << endl;
cin >> napis;
int x,y;
cout >> "Podaj wartosc x." << x << endl;
cin >> x >> y;
Funkcja posiada dwa parametry:
- polecenie np. cin
- zmienna typu string.
string dane;
cout << "Podaj imie i nazwisko i wcisnij Enter\n ";
getline (cin, dane);
cout << " Witaj, " << dane << endl; // Wydrukuje się imie i nazwisko
6. Instrukcje warunkowe
W celu implementacji bardziej rozbudowanej aplikacji, oprócz wypisywania na ekranie oraz pobierania danych od użytkownika, konieczne jest podejmowanie różnych decyzji w aplikacji. Decyzje prowadzą do selektywnego wywoływania operacji w zależności od spełnienia lub nie określonego warunku.if (warunek)
instrukcja_1; // wykonywana, jeśli warunek jest spełniony
else
instrukcja_2; // wykonywana w przeciwnym przypadku
Poniżej przedstawiono prostą symulację działania instrukcji warunkowej, która umożliwia sprawdzenie działania operacji warunkowej dla wybranej wartości całkowitej. Po prawej stronie wyświetlane jest wyjście (wynik działania aplikacji).
x
i zobacz, jak działa warunek if
w C++ z animacją.
int x = ...; // Aktualna wartość: ... if (x > 0) { cout << "x jest większe od 0" << endl; } else { cout << "x nie jest większe od 0" << endl; }
if (warunek)
instrukcja_1 // wykonywana, jeśli warunek jest spełniony
if (a>0) cout << a;
else
cout << "zmieniamy znak";
cout << -a;
cout << a;
natomiast do instrukcji else należy cout << "zmieniamy znak";
. Instrukcja cout << -a;
nie należy do instrukcji else. Jest więc niezależna od warunku (a>0
) i wykona się zawsze.Jeżeli chcemy wywołać więcej instrukcji niż jedną należy zastosować instrukcję blokową albo instrukcję złożoną. Instrukcja oznacza wykorzystanie nawiasów klamrowych
{}
, pomiędzy którymi możemy umieścić wiele instrukcji. Instrukcja blokowa jest traktowana jak jedna instrukcja, więc możemy ją przypisać do instrukcji warunkowej if lub else. Możemy więc tworzyć instrukcje warunkowe typu:if (warunek)
{
...
...
}
if (warunek)
{
...
} else {
...
}
if (...)
...
else if (...)
...
else
...
if (...)
if (...)
...
else
...
if (...)
{
if (...)
...
} else
...