Instrukcje sterujące przebiegiem programu

background image

Wprowadzenie do programowania

Wprowadzenie do programowania

w języku C

w języku C

Instrukcje sterujące przebiegiem

programu

Część druga

Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa.

Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne.

Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.

Roman Simiński

siminski@us.edu.pl

www.us.edu.pl/~siminski

Autor

Kontakt

background image

Instrukcje wyrażeniowa i złożona

Instrukcje wyrażeniowa i złożona

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

2

Strona :

Instrukcja wyrażeniowa

Instrukcja wyrażeniowa — to każde poprawne wyrażenie w języku C (również
wyrażenie puste) zakończone znakiem średnika.

Wykonanie takiej instrukcji polega na wyznaczeniu wartości danego wyrażenia.

x = 0;

a + b;

x = a + b;

;

Instrukcja złożona

Instrukcja złożona — zwana inaczej blokiem, to lista instrukcji ujęta w nawiasy
klamrowe {}.

Blok traktowany jest jako pojedyncza instrukcja.

Identyfikator zadeklarowany w obrębie bloku ma jego zakres.

Bloki mogą być zagnieżdżane do dowolnej głębokości.

{
int i = 0, j = 1, k;
k = i + j;
printf( "k = %d", k );
}

background image

Instrukcje warunkowe

Instrukcje warunkowe

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

3

Strona :

Instrukcja warunkowa if i instrukcja alternatywy if-else

if( wyra enie )

ż

instrukcja

if( wyra enie )

ż

instrukcja_1
else
instrukcja_2

prawda

fałsz

wyrażenie

instrukcja_1

instrukcja_1

prawda

fałsz

wyrażenie

instrukcja

Instrukcja warunkowa if

Instrukcja alternatywy if-else

background image

Instrukcje warunkowe

Instrukcje warunkowe

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

4

Strona :

Jakiego typu jest wyrażenie warunkowe?

W języku C nie ma predefiniowanego typu Boolean.

Każde wyrażenie dające w wyniku wartość całkowitą różną od zera jest traktowane
jako prawdziwe, a dające w wyniku wartość zerową jest traktowane jako fałszywe.

W wyrażeniach relacyjnych i porównania prawda to

1, fałsz to 0 całkowite (int).

if( delta < 0 )
brak_rozw_rzecz = 1;
else
brak_rozw_rzecz = 0;

brak_rozw_rzecz = ( delta < 0 );

W niektórych przypadkach stosowanie instrukcji warunkowej może być zbędne

background image

Instrukcje warunkowe, cd. ...

Instrukcje warunkowe, cd. ...

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

5

Strona :

Gdy potrzebne są TRUE i FALSE

#define TRUE 1
#define FALSE 0

Porównywanie z zerem zwykle można uprościć

if( delta == 0 )
. . .

if( !delta )
. . .

#define TRUE (0==0)
#define FALSE (!TRUE)

Można jeszcze inaczej, wykorzystując typ wyliczeniowy.

if( delta != 0 )
. . .

if( delta )
. . .

Operator

Znaczenie

==

równe

!=

różne

!

logiczna negacja

&&

logiczny and

||

logiczny or

Przydatne operatory

background image

Instrukcje warunkowe, cd. ...

Instrukcje warunkowe, cd. ...

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

6

Strona :

Uwaga na zagnieżdżone instrukcje if-else

if( kwota >= 0 ) /* Wydaje si */

ę

if( kwota > 0 )
printf( "Dochod" );
else
printf( "Strata" );

if( kwota >= 0 ) /* Jest */
if( kwota > 0 )
printf( "Dochod" );
else
printf( "Strata" );

if( kwota >= 0 )
{
if( kwota > 0 )
printf( "Dochod" );
}
else
printf( "Strata" );

Trzeba:

if( kwota >= 0 )
if( kwota > 0 )
printf( "Dochod" );
else
printf( "Zero!" );
else
printf( "Strata" );

background image

Instrukcja przełączająca switch

Instrukcja przełączająca switch

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

7

Strona :

Postać ogólna

switch( wyra enie )

ż

{
case wyra enie_stałe : instrukcje

ż

case wyra enie_stałe : instrukcje

ż

. . .
default : instrukcje
}

Instrukcja switch:

sprawdza czy wartość wyrażenia jest równa jednemu z kilku przypadków
określonych wyrażeniem stałym,

wykonuje skok do instrukcji zapisanych za owym wyrażeniem stałym.

Jeżeli nie znaleziono przypadku pasującego do wartości wyrażenia, wykonywane są
instrukcje zapisane po frazie default.

Instrukcja służy do podejmowania decyzji wielowariantowych.

Wszystkie wyrażenia są typu całkowitego.

background image

Instrukcja przełączająca switch, cd. ...

Instrukcja przełączająca switch, cd. ...

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

8

Strona :

Przykład + ilustracja graficzna

int przypadek;
. . .
switch( przypadek )
{
case 0 : puts( "przypadek == 0" );
case 1 : puts( "przypadek == 1" );
default : puts( "przypadek != 0 i przypadek != 1" );
}

puts( ”przypadek != 0 i przypadek != 1” );

puts( ”przypadek != 1” );

puts( ”przypadek == 0” );

przypadek == ?

sterowanie:

wejście do instr. switch

sterowanie:

wyjście z instr. switch

case

0:

case 1:

defau

lt:

background image

Instrukcja przełączająca switch, cd. ...

Instrukcja przełączająca switch, cd. ...

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

9

Strona :

Instrukcja switch to nie jest instrukcja wyboru ― jak ją „zrobić” w C?

int przypadek;
. . .
switch( przypadek )
{
case 0 : puts( "przypadek == 0" );
break;
case 1 : puts( "przypadek == 1" );
break;
default : puts( "przypadek != 0 i przypadek != 1" );
}

puts( ”przypadek != 0 i przypadek != 1” );

puts( ”przypadek != 1” ); break;

puts( ”przypadek == 0” ); break;

przypadek == ?

sterowanie:

wejście do instr. switch

sterowanie:

wyjście z instr. switch

case

0:

case 1:

defau

lt:

Instrukcja break — powoduje wyjście (zakończenie wykonania) instrukcji iteracyjnej
lub instrukcji switch.

background image

Instrukcja przełączająca switch, cd. ...

Instrukcja przełączająca switch, cd. ...

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

10

Strona :

Przykład wykorzystania

switch( znak )
{
case ’0’ :
case ’1’ :
case ’2’ :
case ’3’ :
case ’4’ :
case ’5’ :
case ’7’ :
case ’8’ :
case ’9’ : puts( ”Cyfra” );
break;
case ’,’ :
case ’.’ :
case ’;’ : puts( ”Znak interpunkcyjny” );
break;
default : if( znak >= ’A’ && znak <= ’Z’ )
puts( ”Du a litera” );

ż

else
if( znak >= ’a’ && znak <= ’z’ )
puts( ”Mała litera” );
else
puts( ”Inny znak” );
break;
}

Przykład — rozpoznanie czy znak jest literą, cyfrą lub znakiem interpunkcyjnym.

char znak;
znak = getchar();

background image

Instrukcja przełączająca switch, cd. ...

Instrukcja przełączająca switch, cd. ...

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

11

Strona :

Przykład wykorzystania

switch( get_key_from_keyboard() )
{
case ALT_F1 : show_last_used_help();
break;
case CTRL_F1 : show_current_context_help();
break;
case F1 : show_general_help();
break;
case CTR_F4 :
case ESC : close_current_window();
break;
}

Przykład — rozpoznanie i obsługa klawiszy naciskanych przez użytkownika.

background image

Instrukcja przełączająca switch, cd. ...

Instrukcja przełączająca switch, cd. ...

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

12

Strona :

Uwagi dodatkowe

switch( error_code )
{
case -1 : puts( ”Bł d!” );

ą

make_report();
break;
case 0 : puts( ”Brak bł du” );

ę

do_something();
break;
}

Instrukcje nie muszą stanowić bloku:

switch( error_code )
{
case -1 : {
puts( ”Bł d!” );

ą

make_report();
break;
}
case 0 : {
puts( ”Brak bł du” );

ę

do_something();
break;
}
}

Uwaga ― przypadek default nie musi być ostatnim na liście. Warto dla tego
przypadku również stosować instrukcje break.

background image

Instrukcje iteracyjne

Instrukcje iteracyjne

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

13

Strona :

Instrukcja iteracyjna do-while

do
instrukcja
while( wyra enie );

ż

Przypadek ogólny

do
{
ci g instrukcji

ą

}
while( wyra enie );

ż

Z wykorzystaniem instrukcji złożonej

Instrukcja stanowiąca ciało iteracji do-while wykona się przynajmniej raz.

Wyrażenie występujące w nawiasach określa warunek kontynuacji, zatem iteracja
kończy się gdy wartość wyrażenia będzie zerowa.

wyrażenie

instrukcja

prawda

fałsz

background image

Instrukcje iteracyjne

Instrukcje iteracyjne

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

14

Strona :

Przykład wykorzystania iteracji do-while

. . .
do
{
printf( "Podaj wiek osoby:" );

gets( linia );
wiek = atoi( linia );

if( wiek <= 0 )
printf( "Wiek musi być liczb dodatni i ró n od zera!\n" );

ą

ą

ż ą

}
while( wiek <= 0 );
. . .

Zabezpieczenie wprowadzania danych danych, do-while + if

background image

Instrukcje iteracyjne

Instrukcje iteracyjne

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

15

Strona :

Przykład wykorzystania iteracji do-while ― organizacja prostego menu

. . .
do
{
puts( "\nFormatowanie dysku, wybierz opcje:" );
printf( "\n1. Format\n2. Szybki format\n3. Diagnostyka\n4. Koniec\n>” );

klawisz = getchar(); fflush( stdin );
switch( klawisz )
{
case '1' : full_disk_format();
break;
case '2' : quick_disk_format();
break;
case '3' : check_disk();
break;
}/* switch */
}
while( klawisz != ’4’ );
. . .

Zamiast fflush:

void czyszczenie_bufora()
{
while( getchar() != '\n' )
;
}

background image

Instrukcje iteracyjne

Instrukcje iteracyjne

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

16

Strona :

Instrukcja iteracyjna while

while( wyra enie )

ż

instrukcja

Przypadek ogólny

while( wyra enie )

ż

{
ci g instrukcji

ą

}

Z wykorzystaniem instrukcji złożonej

Instrukcja stanowiąca ciało iteracji while może nie wykonać się wcale.

Wyrażenie występujące w nawiasach określa warunek kontynuacji, zatem iteracja
kończy się gdy wartość wyrażenia będzie zerowa.

wyrażenie

instrukcja

prawda

fałsz

background image

Instrukcje iteracyjne

Instrukcje iteracyjne

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

17

Strona :

Przykład wykorzystania iteracji while ― sylwestrowe odliczanie ;-)

int licznik = 10;

while( licznik > 0 )
{
printf( "\n%d...", licznik );
licznik--;
}
printf( ”\nNowy Rok!!!” );

Porównywanie z zerem często zapisuje się krócej

while( licznik > 0 )
{
printf( "\n%d...", licznik );
licznik--;
}

while( licznik )
{
printf( "\n%d...", licznik );
licznik--;
}

Uwaga — wersja uproszczona może być niebezpieczna

int licznik = 11;
while( licznik > 0 )
{
printf( "\n%d...", licznik );
licznik = licznik - 2;
}

licznik-–

odpowiada
licznik = licznik - 1

background image

Instrukcje iteracyjne

Instrukcje iteracyjne

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

18

Strona :

Instrukcja iteracyjna for

int licznik;

while( )
{


}

printf( ”\nNowy Rok!!!” );

Nie ma nic wspólnego — poza nazwą — z instrukcją iteracyjną for z języka Pascal.
Instrukcja for w języku C stanowi uogólnienie schematu iteracji while.

int licznik;

for( ; ; )


printf( ”\nNowy Rok!!!” )

licznik = 10;

licznik > 0

licznik--;

Inicjalizacja

Warunek

Modyfikacja

printf( "\n%d...", licznik );

Ciało iteracji

licznik = 10

licznik > 0

licznik--

printf( "\n%d...", licznik );

Inicjalizacja

Warunek

Modyfikacja

Ciało iteracji

background image

Instrukcje iteracyjne

Instrukcje iteracyjne

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

19

Strona :

Instrukcja iteracyjna for — ogólny schemat

inicjalizacja;
while( warunek )
{
ciało_iteracji
modyfikacja
}

for( inicjalizacja; warunek; modyfikacja )
ciało_iteracji

Uwaga — poszczególne sekcje iteracji for mogą być dowolnymi legalnymi, być może
złożonymi, wyrażeniami w języku C. Mogą to być wyrażenia przecinkowe.

int licznik;
for( licznik = 10; licznik > 0; printf( ”\n%d...”, licznik-- ) )
;
printf( ”\nNowy Rok!!!” );

int i, j;
for( i = 0, j = 10; i != j; i++, j-- )
printf( ”\ni = %d j = %d”, i, j );

background image

Instrukcje break i continue

Instrukcje break i continue

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

20

Strona :

Instrukcje break i continue — wspomaganie iteracji i instrukcji switch

switch( klawisz )
{
case '1' : full_disk_format();
break;
case '2' : quick_disk_format();
break;
case '3' : check_disk();
break;
}

Instrukcja break pozwala na natychmiastowy „wyskok” z najbardziej zagnieżdżonej,
dowolnej instrukcji iteracyjnej lub instrukcji switch.

Instrukcja continue pozwala na przerwanie bieżącego przebiegu dowolnej iteracji
i przejście do wykonania następnego przebiegu od jego początku.

Dla iteracji while i do-while instrukcja continue powoduje przeniesienie

sterowania do fazy testowania warunku kontynuacji. W przypadku iteracji for

sterowanie przenoszone jest do wyrażenia modyfikującego a potem do testowania

warunku.

klawisz = getchar();

while( klawisz != '\n' )
{
if( klawisz == 'k' )
break;
else
. . .
}

background image

Instrukcje break i continue

Instrukcje break i continue

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

21

Strona :

Przykład wykorzystania instrukcji break i continue

. . .
for( ; ; )

/* Iteracja niesko czona czyli p tla */

ń

ę

{
puts( "\nFormatowanie dysku, wybierz opcje:" );
printf( "\n1. Format\n2. Szybki format\n3. Diagnostyka\n4. Koniec\n>” );

klawisz = getchar(); fflush( stdin );

if( klawisz == ’4’ )

/* Czy wybrano klawisz ko ca ?*/

ń

break;

/* Tak, wychodzimy z iteracji */

if( !( klawisz >= ’0’&& klawisz <= ’9’) ) /

* Czy klawisz jest cyfr ? */

ą

continue;

/* Klawisz nie jest cyfr , nie ma co dalej sprawdzać */

ą

switch( klawisz )
{
case '1' : full_disk_format();
break;
case '2' : quick_disk_format();
break;
case '3' : check_disk();
break;
}/* switch */
}
. . .

Stosowanie break i continue jest

czasem bardzo wygodne, są to jednak

instrukcje niestrukturalne i ich

stosowanie może zacznie pogorszyć

czytelność kodu.

background image

Instrukcja return

Instrukcja return

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

22

Strona :

Instrukcja powrotu z podprogramu

Każda funkcja wraca do miejsca swojego wywołania po osiągnięciu końca jej bloku
lub napotkaniu instrukcji return.
Jeżeli po słowie return występuje wyrażenie, to wartość tego wyrażenia jest
przekazywana do miejsca wywołania.

Instrukcja return może być również stosowana dla funkcji o type rezultatu void,
umożliwia to wcześniejsze zakończenie działania funkcji.

float delta( float a, float b, float c )
{
return b * b - 4 * a * c;
}

float pole_trojkata( float a, float h )
{
return 0.5 * a * h;
}

float wczytaj_liczbe_f( char komunikat[] )
{
char bufor_tekstowy[ 80 ];
printf( komunikat );
fgets( bufor_tekstowy, 80, stdin ) ;
return atof( bufor_tekstowy );
}

background image

Instrukcja return

Instrukcja return

Instrukcje sterujące przebiegiem programu

Język C

Język C

Podstawy i języki programowania

Podstawy i języki programowania

Copyright © Roman Simiński

23

Strona :

Instrukcja powrotu ― plusy i minusy

void wypisz_info( float sum_dochod )
{
if( sum_dochod == 0 )
{
printf( "Nic nie zarobiles" );
return;
}

if( sum_dochod > 0 )
{
printf( "Zarobiles!" );
return;
}

if( sum_dochod < 0 )
{
printf( "Straciles!" );
return;
}
}

void wypisz_info( float sum_dochod )
{
if( sum_dochod == 0 )
printf( "Nic nie zarobiles" );
else
if( sum_dochod > 0 )
printf( "Zarobiles!" );
else
printf( "Straciles!" );
}

void wypisz_info( float sum_dochod )
{
if( sum_dochod == 0 )
printf( "Nic nie zarobiles" );

if( sum_dochod > 0 )
printf( "Zarobiles!" );

if( sum_dochod < 0 )
printf( "Straciles!" );
}

Napisać funkcję, otrzymującą jako parametr sumaryczny roczny dochód, wyświetlającą
informację tekstową o zarobku, stracie bądź zerowym dochodzie.


Wyszukiwarka

Podobne podstrony:
Instrukcje sterujące przebiegiem programu w C
JS 07 Sterowanie przebiegiem programu, Programowanie, instrukcje - teoria
Lab 06 Instrukcje sterujace id Nieznany
Instrumenty polityki handlowej-program UŁ, MSG I stopień, III rok, Przedsiębiorstwo, kuna
Informa, Wykład 2 Instrukcje sterujące
Informa Instrukcje sterujące
06 Instrukcje sterujące C Pętle
Sem II Transport, Podstawy Informatyki Wykład XII Object Pascal Instrukcje sterujące
Instrukcja do Winkalk, Instrukcja Obs˙ugi programu WinKalk
Instrukcja i sprawozdanie z obsługi programu flux2d na podstawie zadanego zagadnienia(1), Elektrotec
05 Instrukcje Sterujace
instrukcja instalacji do progra Nieznany
Lab 07 Instrukcje sterujace w C
Informa, Instrukcje sterujące
1 Instrukcje sterujace (materia Nieznany (2)

więcej podobnych podstron