Instrukcje języka C++

Transkrypt

Instrukcje języka C++
INSTRUKCJE W JĘZYKU C++
1. Instrukcje warunkowe
1.1. Instrukcja if
Instrukcja if umożliwia sprawdzenie spełnienia warunku (na przykład, czy dwie zmienne
są równe) i przejście do wykonania innej części kodu.
Składnia instrukcji if jest następująca:
a) prosta:
if(wyrażenie)instrukcja;
b) złożona:
if(wyrażenie)instrukcja; else instrukcja;
Przykład 1. Wartość bezwzględna liczby (if).
#include <iostream> //przyłaczenie biblioteki
using namespace std; //deklaracja przestrzeni nazw std
int main()
{
float x, modul;
cout<<"Podaj wartość x, x = ";
cin>>x;
if(x>=0)modul=x;else modul=-x;
cout<<"|"<<x<<"| = "<<modul;
cout<<"\n\n";
system("PAUSE");
return 0;
}
1.2. Operator warunkowy (trójelementowy)
Operator warunkowy (?:) jest w języku C++ jedynym operatorem trójelementowym, tj.
operatorem korzystającym z trzech wyrażeń.
Składnia operatora warunkowego jest następująca:
(wyrażenie1)?(wyrażenie2):(wyrażenie3);
Tę linię odczytuje się jako: „jeśli wyrażenie1 jest prawdziwe, zwróć wartość
wyrażenia2; w przeciwnym razie zwróć wartość wyrażenia3”. Zwracana wartość jest
zwykle przypisywana zmiennej.
Przykład 2. Wartość bezwzględna liczby (operator warunkowy).
#include <iostream> //przyłaczenie biblioteki
using namespace std; //deklaracja przestrzeni nazw std
int main()
{
float x, modul;
cout<<"Podaj wartość x, x = ";
cin>>x;
(x>=0)? (modul=x):(modul=-x);
cout<<"|"<<x<<"| = "<<modul;
cout<<"\n\n";
system("PAUSE");
return 0;
}
2. Pętle
Powtarzanie operacji wykonywanych na tych samych danych realizuje się przez
stosowanie rekurencji i iteracji. Iteracja oznacza ciągłe powtarzanie tych samych
czynności. Podstawową metodą wykorzystywaną przy iteracji jest realizacja pętli.
2.1
Instrukcja goto
Pęta składa się z etykiety, zestawu wykonywanych instrukcji i skoku.
W C++ etykieta jest zakończoną dwukropkiem nazwą (:). Etykieta jest umieszczona po lewej
stronie instrukcji języka C++, zaś skok odbywa się w wyniku wykonania instrukcji goto
(idź do) z nazwą etykiety.
goto etykieta;
Przykład 1. Pętla z użyciem słowa kluczowego goto.
#include <iostream> //przyłączenie biblioteki
using namespace std; //deklaracja przestrzeni nazw std
int main()
{
int S=0;
int i=1;
loop:
S=S+i;
cout<<"S = "<<S<<"\t";
cout<<"i = "<<i<<"\n";
i++;
if(i!=11) goto loop;
cout<<"\n\n";
system("PAUSE");
return 0;
}
Nie zaleca się stosowanie instrukcji goto?
Programiści unikają instrukcji goto. Instrukcja goto umożliwia wykonanie skoku do
dowolnego miejsca w kodzie źródłowym, do przodu lub do tyłu. Nierozważne użycie tej
instrukcji sprawia że kod źródłowy jest zagmatwany, nieestetyczny i trudny do
przeanalizowania, kod taki nazywany „kodem spaghetti”.
2.2. Pętle while
Pętla while (dopóki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo,
jak długo warunek w pętli jest prawdziwy.
Składnia instrukcji while jest następująca:
while (warunek) instrukcja;
warunek jest wyrażeniem języka C++, zaś instrukcja jest dowolną instrukcją lub blokiem
instrukcji C++. Gdy wartością wyrażenia warunek jest true (prawda), wykonywana jest
instrukcja, po czym następuje powrót do początku pętli i ponowne sprawdzenie warunku.
Czynność ta powtarza się, dopóki warunek zwraca wartość true. Gdy wyrażenie warunek
ma wartość false, działanie pętli while kończy się i program przechodzi do instrukcji
następujących po pętli.
Przykład 1. Suma n – początkowych liczb naturalnych dodatnich.
#include <iostream> //przyłaczenie biblioteki
using namespace std; //deklaracja przestrzeni nazw std
int main()
{
int n;
cout<<"Podaj n = ";
cin>>n;
int S;
int i=1;
while(i<=n)
{
S=S+i;
i++;
}
cout<<"Dla n = "<<n<<"\n";
cout<<"S = "<<S<<"\t";
cout<<"\n\n";
system("PAUSE");
return 0;
}
Continue (kontynuuj) – Powoduje pominięcie pozostałych instrukcji pętli while lub for
i powrót do początku pętli.
continue;
Przykład
while (warunek)
{
if (warunek2)
instrukcja1;
continue;
instrukcja1;
}
Break (przerwij) – powoduje natychmiastowe wyjście z pętli while lub for (mimo to, że
warunek końcowych nie jest jeszcze spełniony) i przejście do wykonywania następnych
instrukcji programu.
break;
Przykład
while (warunek1)
{
instrukcja1;
if (warunek2)
break;
}
instrukcja2;
UWAGA Instrukcje continue oraz break powinny być używane ostrożnie. Wraz z goto
stanowią one dwie najbardziej niebezpieczne instrukcje języka.
2.3. Pętla do...while
Pętla do...while (wykonuj...dopóki) wykonuje ciało pętli przed sprawdzeniem warunku
i sprawia że instrukcje w pętli zostaną wykonane co najmniej raz.
Składnia instrukcji do...while:
do instrukcja while (warunek;
Wykonywana jest instrukcja, po czym sprawdzany jest warunek. Jeśli warunek jest
spełniony, pętla jest powtarzana; w przeciwnym razie jej działanie się kończy.
Przykład 1.
// wypisujemy małe litery alfabetu
char z = 'a';
do
{
cout << z << ' ';
z++;
} while (z <= 'z' );
Przykład 2. Suma n – początkowych liczb naturalnych dodatnich.
#include <iostream> //przyłaczenie biblioteki
using namespace std; //deklaracja przestrzeni nazw
std
int main()
{
int n;
cout<<"Podaj n = ";
cin>>n;
int S=0;
int i=1;
do{S=S+i; i++;}while(i<=n);
cout<<"Dla n = "<<n<<"\n";
cout<<"S = "<<S<<"\t";
cout<<"\n\n";
system("PAUSE");
return 0;
}
Wskazówki:
1. Używaj pętli do...while, gdy chcesz mieć pewność że pętla zostanie wykonana
co najmniej raz.
2. Używaj pętli while, gdy chcesz pominąć pętlę (gdy warunek nie jest spełniony).
3. Sprawdzaj wszystkie pętle, aby mieć pewność, że robią to, czego oczekujesz.
2.4. Pętle for
Instrukcja for łączy w sobie inicjalizację zmiennej sterującej (licznika), sprawdzenie, czy
jej wartość spełnia warunek, oraz inkrementację tej zmiennej.
Składnia pętli for
for (inicjalizacja; test; akcja) instrukcja;
Instrukcja inicjalizacja jest używana w celu zainicjalizowania stanu licznika lub innego
przygotowania do wykonania pętli. Instrukcja test jest dowolnym wyrażeniem języka C++,
które jest obliczane przed każdym wykonaniem zawartości pętli. Jeśli wyrażenie test ma
wartość true, wykonywane jest ciało pętli, po czym wykonywana jest instrukcja akcja z
nagłówka pętli.
Przykład 1.
// dziesięć razy wpisuje napis "Informatyka"
for (int i = 1; i <= 10; i++)
cout << "Informatyka! ";
Przykład 2. Suma n – początkowych liczb naturalnych dodatnich.
#include <iostream> //przyłaczenie biblioteki
using namespace std; //deklaracja przestrzeni nazw
std
int main()
{
int n;
cout<<"Podaj n = ";
cin>>n;
int S=0;
for(int i=1;i<=n;i++)
S=S+i;
cout<<"Dla n = "<<n<<"\n";
cout<<"S = "<<S<<"\t";
cout<<"\n\n";
system("PAUSE");
return 0;
}
Zaawansowane pętle for
Instrukcje for są wydajne i działają w sposób elastyczny. Trzy niezależne instrukcje
(inicjalizacja, test i akcja) umożliwiają stosowanie różnorodnych rozwiązań.
Pętla for działa w następującej kolejności:
1. Przeprowadza inicjalizację.
2. Oblicza wartość warunku wyrażenia.
3. Jeśli warunek wyrażenie ma wartość true, wykonuje ciało pętli, a następnie wykonuje
instrukcję akcji.
Przy każdym wykonaniu pętli powtarzane są kroki 2 i 3.
Wielokrotna inicjalizacja i inkrementacja
Inicjalizowanie więcej niż jednej zmiennej, testowanie złożonego wyrażenia
logicznego czy wykonywanie więcej niż jednej instrukcji nie są niczym niezwykłym.
Inicjalizacja i akcja mogą być zastąpione kilkoma instrukcjami C++, oddzielonymi od siebie
przecinkami.
Przykład 1. Zastosowanie instrukcji wielokrotnych w pętli for
//
demonstruje wielokrotne instrukcje
// w pętli for
#include <iostream>
int main()
{
for (int i=0, j=0; i<3; i++, j++)
std::cout << "i: " << i << " j: " << std::endl;
return 0;
}
Wynik
i: 0 j: 0
i: 1 j: 1
i: 2 j: 2
Pętle zagnieżdżone
Pętle mogą być zagnieżdżone, tj. pętla może znajdować się w ciele innej pętli. Pętla
wewnętrzna jest wykonywana wielokrotnie, przy każdym wykonaniu pętli zewnętrznej.
Poniższy przykład przedstawia zapisywanie znaczników do macierzy, za pomocą
zagnieżdżonych pętli for.
Przykład. (dopisać)
2.5. Instrukcja Switch
W odróżnieniu od instrukcji if, ,która sprawdza jedną wartość, instrukcja switch
(przełącznik) umożliwia podjęcie działań na podstawie jednej z wielu różnych wartości.
Ogólna postać instrukcji switch wygląda następująco:
switch (wyrażenie)
{
case wartośćJeden: instrukcja;
break;
case wartośćDwa:
instrukcja;
break;
....
case wartośćN:
instrukcja;
break;
default:
instrukcja;
}
Wyrażenie jest dowolnym wyrażeniem języka C++, zaś jego instrukcje są dowolnymi
instrukcjami lub blokami instrukcji. Wartości muszą być stałymi (literałami lub wyrażeniami
o stałej wartości). Jeśli któraś z wartości case jest równa wartości wyrażenia, program
przechodzi do instrukcji w związanej z nią klauzuli case i jego wykonanie jest kontynuowane
aż do napotkania instrukcji break (przerwij). Jeśli wartość wyrażenia nie pasuje do żadnej
z wartości klauzul case, wykonywana jest klauzula default (domyślny). Jeśli klauzula nie
występuje default i wartość wyrażenia nie pasuje do żadnej z wartości klauzul case,
instrukcja switch jest pomijana i program przechodzi do następnych instrukcji w kodzie.
Przykład 1
switch (wybor)
{
case 0:
cout << "Zero!" << endl;
break;
case 1:
cout << "Jeden!" << endl;
break;
case 2:
cout << "Dwa!" << endl;
break;
default:
cout << "Domyślna!" << endl;
}
Przykład 2
switch (wybor)
{
case 2:
cout << "Mniejsza niż 3!";
break;
case 3:
cout << "Równa 3!";
break;
default:
cout << "Większa niż 3!";
}
Wskazówki:
1. Aby uniknąć głęboko zagnieżdżonych instrukcji if, używaj instrukcji switch.
2. W instrukcjach switch stosuj przypadek default, choćby do wykrycia sytuacji
pozornie niemożliwej.
3. Nie zapominaj o instrukcji break na końcu każdego przypadku case, chyba że
celowo chcesz by program przeszedł bezpośrednio dalej.
Literatura:
1. Jesse Liberty „C++ dla każdego”, Helion

Podobne dokumenty