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