Instrukcje sterujące w C#
Opracował dr Robert Fidytek
Instrukcje sterujące
Do tej pory zostały omówione instrukcje warunkowe if i if-else, instrukcje
iteracyjne for, while, do-while. Na dzisiejszym wykładzie zapoznamy się z
pozostałymi instrukcjami sterującymi:
instrukcja (wielokrotnego) wyboru
switch
instrukcje skoku
goto
break
continue
2
Instrukcja wyboru switch
Składnia: Zasada działania instrukcji wyboru switch:
switch(wyrażenie)
1. Obliczana jest wartość wyrażenia wyrażenie.
{
case wartośćA:
2. Jeżeli któraś wartość (wartośćA, wartośćB, ...) stojąca
instrukcjeA;
obok słowa case jest równa obliczonej wartości, to
break;
wykonywane są instrukcje danego bloku case.
case wartośćB:
Po osiągnięciu instrukcji break następuje wyjście z
instrukcjaB;
bloku instrukcji switch.
break;
case wartośćC: 3. Jeżeli żadna wartość stojąca obok słowa case, nie
instrukcjeC; odpowiada obliczonej wartości wyrażenia wyrażenie,
break; wykonywane są instrukcje bloku default.
... Po osiągnięciu instrukcji break następuje wyjście z
case wartośćN: bloku instrukcji switch.
instrukcjeN;
4. Jeżeli żadna wartość stojąca obok słowa case, nie
break;
odpowiada obliczonej wartości wyrażenia wyrażenie i w
default:
bloku instrukcji switch nie ma instrukcji default, to
instrukcje_default;
następuje wyjście z bloku instrukcji switch.
break;
}
3
Instrukcja wyboru switch
legenda:
wyr wyrażenie
warA wartośćA
warB wartośćB
warC wartośćC
4
Instrukcja wyboru switch
Zasady, których należy przestrzegać w
Przykład:
switch(wyrażenie)
czasie stosowania instrukcji wyboru switch:
{
Dozwolone są jedynie wartości wyrażenia
case wartośćA:
wyrażenie, które w wyniku dają wartość typu
case wartośćB:
całkowitego (sbyte, byte, short, ushort, int, uint,
instrukcjaB;
long, ulong), znakowego (char), wyliczeniowego
break;
(enum) lub łańcuchowego (string).
case wartośćC:
instrukcjeC;
Wartości wyrażenia (wartośćA, wartośćB, & )
break;
stojące obok słowa case muszą być
...
niepowtarzalne i zgodne z typem wyrażenia
case wartośćN:
wyrażenie.
instrukcjeN;
break;
Koniec instrukcji danego bloku case musi zawierać
default:
słowo kluczowe break (wyjątek stanowi przypadek,
instrukcje_default; gdy kilka wartości wyrażeń (np: wartośćA,
break; wartośćB) wskazuje na tą samą listę instrukcji lub
} mamy do czynienia z inną instrukcją skoku).
5
Przykład: Liczba dni
//nie rozważamy dni przestępnych
string miesiąc = "maj";
int liczba_dni;
switch(miesiąc)
{
case "luty":
liczba_dni = 28;
break;
case "kwiecień":
case "czerwiec":
case "wrzesień":
case "listopad":
liczba_dni = 30;
break;
default:
Po zakończeniu bloku case
liczba_dni = 31;
musi nastąpić instrukcja
break;
skoku np. break.
}
6
Console.WriteLine("Miesiąc {0} ma {1} dni.", miesiąc, liczba_dni);
Przykład: Dzień tygodnia
int dzień=7;
//wersja z if
if (dzień == 1) Console.WriteLine("poniedziałek");
else if (dzień == 2) Console.WriteLine("wtorek");
else if (dzień == 3) Console.WriteLine("środa");
else if (dzień == 4) Console.WriteLine("czwartek");
else if (dzień == 5) Console.WriteLine("piątek");
else if (dzień == 6) Console.WriteLine("sobota");
else if (dzień == 7) Console.WriteLine("niedziela");
else Console.WriteLine("niewłaściwy numer dnia tygodnia");
//wersja z switch
switch (dzień)
{
case 1: Console.WriteLine("poniedziałek"); break;
case 2: Console.WriteLine("wtorek"); break;
case 3: Console.WriteLine("środa"); break;
case 4: Console.WriteLine("czwartek"); break;
case 5: Console.WriteLine("piątek"); break;
case 6: Console.WriteLine("sobota"); break;
case 7: Console.WriteLine("niedziela"); break;
7
default: Console.WriteLine("niewłaściwy numer dnia tygodnia"); break;
}
Instrukcja (bezwarunkowego)
skoku goto
8
Skoki ze spadochronów nie są wcale takie niebezpieczne. No chyba, że skacze się bez sprzętu, a tym bardziej nago.
Instrukcja skoku goto
Instrukcja skoku goto pozwala na przeniesienie wykonywania programu do innego
miejsca w programie. Używanie instrukcji goto powoduje, że program staje się mniej
czytelny, dlatego też powinniśmy się starać jej unikać.
Składnia:
goto etykieta; //przeniesienie do miejsca, gdzie jest zdefiniowana etykieta
...
etykieta : //definicja etykiety (zakończona dwukropkiem)
Etykieta może mieć następujące formy:
a) identyfikator
b) case wartość
c) default
W przypadkach rodzajów etykiet b) i c) instrukcja skoku goto musi się znajdować w
bloku instrukcji wyboru switch.
Uwagi:
"'
Instrukcja goto nie może występować w bloku finally.
9
"'
Instrukcja goto nie może przenieść wykonywania kodu z jednej metody do drugiej.
Etykiety w różnych blokach
//(1) etykieta w bloku zewnętrznym - dobrze
//(3) etykieta w bloku wewnętrznym - zle
etykieta :
goto etykieta;
...
...
{
{
...
...
goto etykieta;
etykieta :
...
...
}
}
//(2) etykieta w tym samym bloku - dobrze
goto etykieta;
...
etykieta :
...
10
Gdańsk, Falowiec na ul. Obrońców Wybrzeża
Zastosowanie 1: Opuszczenie
wielokrotnie zagnieżdżonych pętli
Przykład poglądowy:
for(...)
{
while(...)
{
for(...)
{
//Co zostanie wyświetlone na ekranie?
...
for (int i = 1; i <= 10; i++)
goto etykieta;
{
...
for (int j = 1; j <= 4; j++)
} //for
{
} //while
if(i+j>3) goto skok;
} //for
Console.WriteLine("i={0}, j={1}",i,j);
}
etykieta :
}
instrukcje;
skok :
11
Console.ReadKey(true);
Zastosowanie 2: Ominięcie reguły
zabraniającej przejścia pomiędzy blokami
Przykład poglądowy:
//Co zostanie wyświetlone na ekranie?
switch (c)
char c='1';
{
switch (c)
case 'a':
{
instrukcje_a;
case '1':
goto case 'A';
Console.WriteLine("Bardzo");
case 'A':
goto case '2';
instrukcje_A;
case '2':
break;
Console.WriteLine("lubie");
...
goto default;
case 'b':
case '3':
instrukcje_b;
Console.WriteLine("programować");
goto default;
goto default;
default:
default:
instrukcje_default;
Console.WriteLine("komputery");
break;
break;
12
}
}
Instrukcja skoku break
Instrukcja skoku break powoduje przerwanie wykonywania
instrukcji iteracyjnej (pętli) lub instrukcji wyboru switch.
Przykład poglądowy:
//wyjście z najbardziej zagnieżdżonej pętli
while(...)
{
for(...)
{
...
if(warunek) break;
...
} //for
...
instrukcje_while;
Jeżeli jest kilka pętli zagnieżdżonych
...
jedna w drugiej, to instrukcja skoku break
} //while
powoduje przerwanie tylko tej pętli, w
13
której bezpośrednio się znajduje.
Co zostanie wyświetlone na
ekranie?
//przykład 1
for (int i = 1; i <= 10; i++)
{
if (i % 5 == 0) break;
Console.WriteLine(i*i*i);
}
//przykład 2
int j = 15;
while (--j > 7)
{
if (j * j < 100) break;
Console.WriteLine(j*j);
}
14
Co zostanie wyświetlone na
ekranie?
//przykład 1
for (int i = 1; i <= 10; i++)
{
if (i % 5 == 0) break;
Console.WriteLine(i*i*i);
}
//przykład 2
int j = 15;
while (--j > 7)
{
if (j * j < 100) break;
Console.WriteLine(j*j);
}
15
Instrukcja skoku continue
Instrukcja skoku continue może występować wewnątrz instrukcji
iteracyjnych. W odróżnieniu od instrukcji skoku break instrukcja
skoku continue nie kończy działania pętli, ale przerywa tylko
aktualny obieg pętli i zaczyna następny kontynuując pracę pętli.
Przykład poglądowy:
//przerwanie wykonywania obiegu pętli i rozpoczęcie nowego
while(...)
{
...
if(warunek)
continue;
...
} //while
16
Co zostanie wyświetlone na ekranie?
//przykład 1
for (int i = 1; i < 10; ++i)
{
if (i % 2 == 1) continue;
Console.Write("{0}, ",i);
}
//przykład 2
int j = -2;
while (++j < 10)
{
if(j++ %3 != 0) continue;
Console.WriteLine("Wykonano pętle dla j={0}",j);
}
17
Szablon programu
//zmiana koloru tła
char c;
do
{
Console.WriteLine("Menu: g-green, r-red, b-blue, k-koniec");
c = Console.ReadKey(true).KeyChar;
switch (c)
{
case 'g': case 'G':
Console.BackgroundColor = ConsoleColor.Green;
break;
case 'r': case 'R':
Console.BackgroundColor = ConsoleColor.Red;
break;
case 'b': case 'B':
Console.BackgroundColor = ConsoleColor.Blue;
break;
}
Console.Clear(); //wyczyszczenie i zamazanie okna tłem
18
} while (c != 'k' && c != 'K');
Wybrane metody i właściwości klasy Console
Console.BackgroundColor kolor tła
Console.ForegroundColor kolor czcionki
Console.Clear() - wyczyszczenie okna, zamazanie kolorem tła
Console.ReadKey(true).KeyChar wartość typu char naciśniętego klawisza
Console.SetCursorPosition(kolumna, wiersz) ustawienie pozycji kursora (liczymy od zera)
Console.CursorLeft numer kolumny, gdzie znajduje się kursor.
Kolumny są numerowane od lewej do prawej strony okna.
Console.CursorTop numer wiersza, gdzie znajduje się kursor.
Wiersze numerowane są od góry do dołu okna.
Console.BufferHeight (Console.BufferWidth) liczba dostępnych wierszy (kolumn) w
okienku.
Console.WindowHeight (Console.WindowWidth) liczba widocznych wierszy (kolumn)
w oknie.
Console.LargestWindowHeight (Console.LargestWindowWidth) maksymalna ilość
wierszy (kolumn) wyznaczona w oparciu o bieżącą wielkość fontu i rozdzielczość ekranu.
Console.Beep(częstotliwość, czas) - wydanie dzwięku o danej częstotliwości
19
podanej w Hz, przez określony czas podany w ms.
Zadanie 1
Popraw błędy:
double zmienna = 6;
switch (zmienna);
{
case 1, 2:
Console.WriteLine("1 lub 2");
break;
case 3:
case 4:
Console.WriteLine("3 lub 4");
case 4:
Console.WriteLine("4");
break;
default:
Console.WriteLine("inna liczba");
20
}
Zadanie 2
Jaka jest różnica w działaniu pomiędzy instrukcjami
break i continue
wewnątrz pętli while?
21
Zadanie 3
//Jakie błędy popełniono w poniższym kodzie programu?
goto skok;
for (double i = 1, i <= 10, i++)
{
Console.Write(i);
skok:
Console.Write(" * ");
}
22
Zadanie 4
//Jakie liczby zostaną wypisane na ekranie?
int i = 0, j = 3;
while(++i <= 10)
{
j -= i;
if (j > 0) continue;
else if (j < -5) break;
else Console.Write("{0}, ", j);
}
23
Wyszukiwarka
Podobne podstrony:
1 Użycie zmiennych (materiały ITA 104)id011Ćwiczenie laboratoryjne nr 6 materiałyLABORATORIUM CHEMIA I WYTRZYMALOSC MATERIALOW sprawko 1Cwiczenie laboratoryjne nr 5 materialyLaboratorium Elektroenergetyki zajęcia 2 materiały informacyjneMateriałoznawstwo i Techniki Wytwarzania Plan LaboratoriówMateriałoznawstwo laboratoria 28 02Laboratorium Wytrzymałości Materiałów Statyczna próba rozciągania metaliMateriały do zajęć laboratoryjnychREGULAMIN LABORATORIUM WYTRZYMAŁOŚCI MATERIAŁÓWLaboratorium Elektroenergetyki zajęcia 1 materiały informacyjnewięcej podobnych podstron