w Gliwicach
WYDZIA INYNIERII BIOMEDYCZNEJ
LABORATORIUM
JZYKÓW PROGRAMOWANIA
Instrukcje sterujace w C ]
Opracowaª: dr in». Piotr Zarychta
2
1 Cel ¢wiczenia.
Celem ¢wiczenia jest przybli»enie podstawowych instrukcji umo»liwiaj¡cych budow¦ p¦tli, a tak»e pokazanie ich praktycznego wykorzystania w programie.
2 Instrukcje steruj¡ce
2.1 Instrukcja warunkowa if...else
Instrukcje warunkowe s¡ wykorzystywane w momencie, gdy chcemy wykona¢ pewn¡ cz¦±¢ programu ale tylko wówczas, gdy speªniony jest okre±lony warunek. W C ] instrukcja warunkowa przyjmuje nast¦puj¡c¡ posta¢ [1, 2]: if (warunek)
instrukcja 1
Po sªowie kluczowym if podaje si¦ uj¦ty w nawiasy okr¡gªe warunek, który musi zosta¢ speªniony, aby wykonana zostaªa instrukcja 1. Je±li chcemy, aby po speªnieniu warunku wykonanych zostaªo wi¦cej instrukcji, a nie tylko jedna, wówczas musimy uj¡¢ caªy blok instrukcji w nawiasy klamrowe [1, 2].
if (warunek)
{
instrukcja 1;
instrukcja 2;
instrukcjaN ;
}
Mo»liwy jest tak»e przypadek, w którym wykonanie pewnej instrukcji lub bloku instrukcji uzale»niamy od nie speªnienia warunku. Nale»y wówczas wykorzysta¢ sªowo kluczowe else. Zatem ogólna posta¢ instrukcji steruj¡cej wygl¡da nast¦puj¡co [1, 2]:
if (warunek)
{
instrukcja 1;
instrukcja 2;
instrukcjaN ;
}
else
{
instrukcja 1;
instrukcja 2;
instrukcjaM ;
}
Nale»y pami¦ta¢, »e do sprawdzania warunku, a wi¦c porównywania argumentów sªu»¡ operatory relacji (po-równania). Wynikiem ich dziaªania mo»e by¢ prawda czyli warto±¢ logiczna true lub faªsz czyli warto±¢ logiczna false. Zbiór dost¦pnych operatorów relacji podano poni»ej [1, 2]:
• a==b - prawda (true) gdy argumenty a i b s¡ równe;
• a!=b - prawda (true) gdy argumenty a i b s¡ ró»ne;
3
• a>b
- prawda (true) gdy argument a jest wi¦kszy od b;
• a>=b - prawda (true) gdy argument a jest wi¦kszy lub równy b;
• a<b
- prawda (true) gdy argument a jest mniejszy od b;
• a<=b - prawda (true) gdy argument a jest mniejszy lub równy b; Rozwa»my teraz przykªad, w którym sprawdzamy jak¡ liczb¦ (dodatni¡, ujemn¡ lub zero) podaª u»ytkownik.
using System;
class Program {
static void Main() {
Console.WriteLine("Podaj liczb¦:");
string ciagLiczba=Console.ReadLine();
double liczba=Double.Parse(ciagLiczba);
if (liczba>0) Console.WriteLine("Podano liczb¦ dodatni¡!"); if (liczba==0) Console.WriteLine("Podano liczb¦ zero!");
if (liczba<0) Console.WriteLine("Podano liczb¦ ujemn¡");
}
}
Prosz¦ sprawdzi¢, czy poprawna jest podana ni»ej konstrukcja tego samego programu (wykorzystuj¡ca za-gnie»d»anie instrukcji if...else).
using System;
class Program {
static void Main() {
Console.WriteLine("Podaj liczb¦:");
string ciagLiczba=Console.ReadLine();
double liczba=Double.Parse(ciagLiczba);
if (liczba>0) Console.WriteLine("Podano liczb¦ dodatni¡!"); else if (liczba==0) Console.WriteLine("Podano liczb¦ zero!"); else Console.WriteLine("Podano liczb¦ ujemn¡");
}
}
2.2 P¦tla for
P¦tle to bardzo wa»ne narz¦dzie w r¦kach programisty, które pozwala na realizacj¦ powtarzaj¡cych si¦ czynno±ci.
Ogóln¡ posta¢ p¦tli for podano poni»ej [1, 2]:
for (wyra»enie pocz¡tkowe ; wyra»enie warunkowe ; wyra»enie modykuj¡ce) instrukcja 1; Wyst¦puj¡ce w p¦tli for wyra»enie pocz¡tkowe np. i=1 stosuje si¦ w celu nadania zmiennej steruj¡cej p¦tl¡
pocz¡tkowej warto±ci (inicjalizacja zmiennej steruj¡cej). Warto±¢ ta mo»e by¢ nast¦pnie zmieniana za pomoc¡
wyra»enia modykuj¡cego np. i++. Zmiana ta jest wykonywana, a» do momentu speªnienia warunku poda-nego w wyra»eniu warunkowym np. i<10. Nale»y pami¦ta¢, »e wyra»enie warunkowe jest obliczane przed ka»dym wykonaniem tre±ci p¦tli, a tre±¢ p¦tli jest wykonywana tylko w przypadku speªnienia warunku po-danego w wyra»eniu warunkowym. Nast¦pnie, po wykonaniu kolejnych instrukcji tre±ci p¦tli realizowane jest wyra»enie modykuj¡ce.
4
W przypadku, gdy tre±¢ p¦tli zawiera wi¦cej ni» jedn¡ instrukcj¦, nale»y uj¡¢ caª¡ tre±¢ p¦tli w nawiasy klamrowe.
for (wyra»enie pocz¡tkowe ; wyra»enie warunkowe ; wyra»enie modykuj¡ce)
{
instrukcja 1;
instrukcja 2;
instrukcjaM ;
}
Rozwa»my przykªad, w którym program wypisze kolejne liczby od 1..10 pionowo (jedna pod drug¡) i poziomo (jedna obok drugiej).
using System;
class Program {
static void Main() {
int i,j=10;
for (i=1 ; i<=j ; i++) Console.WriteLine(i);
for (i=1 ; i<=j ; i++) Console.Write(i+ );
}
}
2.3 P¦tla while
P¦tli while mo»na tak»e u»y¢ do realizacji powtarzaj¡cych si¦ czynno±ci. Ró»nica w porównaniu z p¦tl¡ for polega jednak na tym, »e liczba powtórze« nie jest bli»ej znana. Ogólna posta¢ p¦tli while jest nast¦puj¡ca [1, 2]: while (wyra»enie warunkowe) instrukcja 1;
W przypadku p¦tli while instrukcja (b¡d¹ blok instrukcji uj¦ty w nawiasy klamrowe) jest powtarzana tak dªugo, jak dªugo speªnione jest wyra»enie warunkowe, które jest sprawdzane zawsze przed wykonaniem tre±ci p¦tli. Mo»liwa jest zatem sytuacja, »e tre±¢ p¦tli nie zostanie wykonana ani razu.
Rozwa»my raz jeszcze przykªad, w którym program wypisze kolejne liczby od 1..10 pionowo (jedna pod drug¡) i poziomo (jedna obok drugiej). Tym razem do realizacji tak okre±lonego zadania wykorzystamy p¦tl¦ while.
using System;
class Program {
static void Main() {
int i=1,j=10;
while (i<=j) {
Console.WriteLine(i);
i++;
}
i=1;
while (i<=j) {
Console.Write(i+ );
i++;
}
}
}
5
Prosz¦ zwróci¢ uwag¦, »e w powy»szym programie przed u»yciem p¦tli while musimy przypisa¢ zmiennej i pocz¡tkow¡ warto±¢ (tu jest to i=1).
2.4 P¦tla do..while
P¦tla ta jest swego rodzaju modykacj¡ p¦tli while. Posta¢ ogólna p¦tli do..while przedstawia si¦ nast¦pu-j¡co [1, 2]:
do {
instrukcja 1;
instrukcja 2;
instrukcjaN ;
}
while(wyra»enie warunkowe);
Ró»nica w porównaniu z p¦tl¡ while jest taka, »e tutaj tre±¢ p¦tli wykona si¦ przynajmniej raz. Niezale»-
nie od tego, czy wyra»enie warunkowe jest speªnione. Natomiast tre±¢ p¦tli wyst¦puj¡ca po sªowie kluczowym do b¦dzie powtarzana tak dªugo, jak dªugo b¦dzie speªnione wyra»enie warunkowe. Nale»y zwróci¢ tak»e uwag¦
na konieczno±¢ u»ycia ±rednika po sªowie kluczowym while(wyra»enie warunkowe)!
Rozwa»my raz jeszcze przykªad, w którym program wypisze kolejne liczby od 1..10 pionowo (jedna pod drug¡) i poziomo (jedna obok drugiej). Tym razem do realizacji tak okre±lonego zadania wykorzystamy p¦tl¦ do..while.
using System;
class Program {
static void Main() {
int i=1,j=10;
do {
Console.WriteLine(i);
i++;
}
while (i<=j);
i=1;
do {
Console.Write(i+ );
i++;
}
while (i<=j);
}
}
2.5 P¦tla foreach
P¦tla foreach zostanie szerzej omówiona w ¢wiczeniu po±wi¦conemu operacjom na tablicach.
3 Zadania do samodzielnego wykonania przed ¢wiczeniem
1. Napisa¢ program, który wy±wietli liczby caªkowite z przedziaªu 0..50 z krokiem równym 5 (czyli 0, 5,..., 45, 50) i uczyni to poziomo oraz pionowo.
6
2. Napisa¢ program pobieraj¡cy od u»ytkownika dwie liczby caªkowite L1 i L2, a nast¦pnie wypisuj¡cy wszystkie liczby caªkowite z zakresu L1..L2. Uwaga! Liczby L1 i L2 nie musz¡ speªnia¢ zale»no±ci L1<L2.
Je±li L1>L2 nale»y wy±wietli¢ liczby z przedziaªu L2..L1.
3. Napisa¢ program wymuszaj¡cy na u»ytkowniku podanie wªa±ciwej warto±ci liczbowej b¡d¹ okre±lonego znaku. Na przykªad program prosi u»ytkownika o podanie liczby z przedziaªu 0..2. Podanie przez u»ytkownika warto±ci liczbowej nie nale»¡cej do w/w przedziaªu powinno skutkowa¢ ponowieniem pro±by.
4 Program ¢wiczenia
Sugeruje si¦ realizacj¦ przykªadów z pkt.3, wzgl¦dnie zada« utrwalaj¡cych skªadni¦ prezentowanych w ¢wiczeniu instrukcji steruj¡cych.
Literatura
[1] Lis M., C ]. Praktyczny kurs, Helion, Gliwice 2007,
[2] Hejlsberg A., Wiltamuth S., Golde P., Microsoft C ] Language Specication, Addison-Wesley, 2004,