Instrukcje sterujÄ…ce przebiegiem programu


Wprowadzenie do programowania
Wprowadzenie do programowania
w języku C
w języku C
Część druga
Instrukcje sterujÄ…ce przebiegiem
programu
Autor
Roman Simiński
Kontakt
siminski@us.edu.pl
www.us.edu.pl/~siminski
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.
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje wyrażeniowa i złożona
Instrukcje wyrażeniowa i złożona
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; x = a + b;
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 );
}
Copyright © Roman SimiÅ„ski Strona : 2
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje warunkowe
Instrukcje warunkowe
Instrukcja warunkowa if i instrukcja alternatywy if-else
Instrukcja warunkowa if Instrukcja alternatywy if-else
if( wyrażenie ) if( wyrażenie )
instrukcja instrukcja_1
else
instrukcja_2
prawda fałsz
wyrażenie
prawda
wyrażenie
instrukcja_1 instrukcja_1
fałsz
instrukcja
Copyright © Roman SimiÅ„ski Strona : 3
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje warunkowe
Instrukcje warunkowe
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).
W niektórych przypadkach stosowanie instrukcji warunkowej może być zbędne
if( delta < 0 ) brak_rozw_rzecz = ( delta < 0 );
brak_rozw_rzecz = 1;
else
brak_rozw_rzecz = 0;
Copyright © Roman SimiÅ„ski Strona : 4
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje warunkowe, cd. ...
Instrukcje warunkowe, cd. ...
Gdy potrzebne sÄ… TRUE i FALSE
#define TRUE 1 #define TRUE (0==0)
#define FALSE 0 #define FALSE (!TRUE)
Można jeszcze inaczej, wykorzystując typ wyliczeniowy.
Przydatne operatory
Operator Znaczenie
== równe
!= różne
! logiczna negacja
&& logiczny and
|| logiczny or
Porównywanie z zerem zwykle można uprościć
if( delta == 0 ) if( !delta )
. . . . . .
if( delta != 0 ) if( delta )
. . . . . .
Copyright © Roman SimiÅ„ski Strona : 5
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje warunkowe, cd. ...
Instrukcje warunkowe, cd. ...
Uwaga na zagnieżdżone instrukcje if-else
if( kwota >= 0 ) /* Wydaje siÄ™ */ if( kwota >= 0 ) /* Jest */
if( kwota > 0 ) if( kwota > 0 )
printf( "Dochod" ); printf( "Dochod" );
else else
printf( "Strata" ); printf( "Strata" );
Trzeba:
if( kwota >= 0 ) if( kwota >= 0 )
{ if( kwota > 0 )
if( kwota > 0 ) printf( "Dochod" );
printf( "Dochod" ); else
} printf( "Zero!" );
else else
printf( "Strata" ); printf( "Strata" );
Copyright © Roman SimiÅ„ski Strona : 6
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcja przełączająca switch
Instrukcja przełączająca switch
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.
Copyright © Roman SimiÅ„ski Strona : 7
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcja przełączająca switch, cd. ...
Instrukcja przełączająca switch, cd. ...
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" );
}
sterowanie:
wejście do instr. switch puts(  przypadek == 0 );
case 1:
przypadek == ?
puts(  przypadek != 1 );
puts(  przypadek != 0 i przypadek != 1 );
sterowanie:
wyjście z instr. switch
Copyright © Roman SimiÅ„ski Strona : 8
:
0
e
s
a
c
d
e
f
a
u
l
t
:
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcja przełączająca switch, cd. ...
Instrukcja przełączająca switch, cd. ...
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" );
}
sterowanie:
wejście do instr. switch puts(  przypadek == 0 ); break;
case 1:
przypadek == ?
puts(  przypadek != 1 ); break;
puts(  przypadek != 0 i przypadek != 1 );
sterowanie:
wyjście z instr. switch
Instrukcja break  powoduje wyjście (zakończenie wykonania) instrukcji iteracyjnej
lub instrukcji switch.
Copyright © Roman SimiÅ„ski Strona : 9
:
0
e
s
a
c
d
e
f
a
u
l
t
:
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcja przełączająca switch, cd. ...
Instrukcja przełączająca switch, cd. ...
Przykład wykorzystania
Przykład  rozpoznanie czy znak jest literą, cyfrą lub znakiem interpunkcyjnym.
switch( znak )
{
case  0 :
case  1 :
char znak;
case  2 :
znak = getchar();
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;
}
Copyright © Roman SimiÅ„ski Strona : 10
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcja przełączająca switch, cd. ...
Instrukcja przełączająca switch, cd. ...
Przykład wykorzystania
Przykład  rozpoznanie i obsługa klawiszy naciskanych przez użytkownika.
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;
}
Copyright © Roman SimiÅ„ski Strona : 11
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcja przełączająca switch, cd. ...
Instrukcja przełączająca switch, cd. ...
Uwagi dodatkowe
Instrukcje nie muszą stanowić bloku:
switch( error_code ) switch( error_code )
{ {
case -1 : puts(  BÅ‚Ä…d! ); case -1 : {
make_report(); puts(  BÅ‚Ä…d! );
break; make_report();
case 0 : puts(  Brak błędu ); break;
do_something(); }
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.
Copyright © Roman SimiÅ„ski Strona : 12
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje iteracyjne
Instrukcje iteracyjne
Instrukcja iteracyjna do-while
Przypadek ogólny
do
instrukcja
while( wyrażenie );
instrukcja
Z wykorzystaniem instrukcji złożonej
prawda fałsz
do
wyrażenie
{
ciÄ…g instrukcji
}
while( wyrażenie );
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.
Copyright © Roman SimiÅ„ski Strona : 13
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje iteracyjne
Instrukcje iteracyjne
Przykład wykorzystania iteracji do-while
Zabezpieczenie wprowadzania danych danych, do-while + if
. . .
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 );
. . .
Copyright © Roman SimiÅ„ski Strona : 14
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje iteracyjne
Instrukcje iteracyjne
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();
Zamiast fflush:
break;
case '3' : check_disk();
void czyszczenie_bufora()
break;
{
}/* switch */
while( getchar() != '\n' )
}
;
while( klawisz !=  4 );
}
. . .
Copyright © Roman SimiÅ„ski Strona : 15
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje iteracyjne
Instrukcje iteracyjne
Instrukcja iteracyjna while
Przypadek ogólny
while( wyrażenie )
instrukcja
prawda fałsz
wyrażenie
Z wykorzystaniem instrukcji złożonej
while( wyrażenie )
instrukcja
{
ciÄ…g instrukcji
}
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.
Copyright © Roman SimiÅ„ski Strona : 16
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje iteracyjne
Instrukcje iteracyjne
Przykład wykorzystania iteracji while  sylwestrowe odliczanie ;-)
int licznik = 10;
licznik-
odpowiada
while( licznik > 0 )
{ licznik = licznik - 1
printf( "\n%d...", licznik );
licznik--;
}
printf(  \nNowy Rok!!! );
Porównywanie z zerem często zapisuje się krócej
while( licznik > 0 ) while( licznik )
{ {
printf( "\n%d...", licznik ); printf( "\n%d...", licznik );
licznik--; licznik--;
} }
Uwaga  wersja uproszczona może być niebezpieczna
int licznik = 11;
while( licznik > 0 )
{
printf( "\n%d...", licznik );
licznik = licznik - 2;
}
Copyright © Roman SimiÅ„ski Strona : 17
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje iteracyjne
Instrukcje iteracyjne
Instrukcja iteracyjna for
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.
Inicjalizacja
int licznik;
Warunek
licznik = 10;
licznik > 0
while( )
Ciało iteracji
{
printf( "\n%d...", licznik );
licznik--;
}
Modyfikacja
printf(  \nNowy Rok!!! );
int licznik;
Inicjalizacja Warunek Modyfikacja
for( licznik = 10 ; licznik > 0 ; licznik-- )
printf( "\n%d...", licznik );
printf(  \nNowy Rok!!! )
Ciało iteracji
Copyright © Roman SimiÅ„ski Strona : 18
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje iteracyjne
Instrukcje iteracyjne
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 );
Copyright © Roman SimiÅ„ski Strona : 19
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje break i continue
Instrukcje break i continue
Instrukcje break i continue  wspomaganie iteracji i instrukcji switch
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.
switch( klawisz ) klawisz = getchar();
{
case '1' : full_disk_format(); while( klawisz != '\n' )
break; {
case '2' : quick_disk_format(); if( klawisz == 'k' )
break; break;
case '3' : check_disk(); else
break; . . .
} }
Copyright © Roman SimiÅ„ski Strona : 20
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcje break i continue
Instrukcje break i continue
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();
Stosowanie break i continue jest
break;
czasem bardzo wygodne, sÄ… to jednak
case '3' : check_disk();
instrukcje niestrukturalne i ich
break;
}/* switch */
stosowanie może zacznie pogorszyć
}
czytelność kodu.
. . .
Copyright © Roman SimiÅ„ski Strona : 21
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcja return
Instrukcja return
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 );
}
Copyright © Roman SimiÅ„ski Strona : 22
Podstawy i języki programowania Język C Instrukcje sterujące przebiegiem programu
Podstawy i języki programowania Język C
Instrukcja return
Instrukcja return
Instrukcja powrotu  plusy i minusy
Napisać funkcję, otrzymującą jako parametr sumaryczny roczny dochód, wyświetlającą
informacjÄ™ tekstowÄ… o zarobku, stracie bÄ…dz zerowym dochodzie.
void wypisz_info( float sum_dochod ) void wypisz_info( float sum_dochod )
{ {
if( sum_dochod == 0 ) if( sum_dochod == 0 )
{ printf( "Nic nie zarobiles" );
printf( "Nic nie zarobiles" );
return; if( sum_dochod > 0 )
} printf( "Zarobiles!" );
if( sum_dochod > 0 ) if( sum_dochod < 0 )
{ printf( "Straciles!" );
printf( "Zarobiles!" ); }
return;
}
void wypisz_info( float sum_dochod )
{
if( sum_dochod < 0 )
if( sum_dochod == 0 )
{
printf( "Nic nie zarobiles" );
printf( "Straciles!" );
else
return;
if( sum_dochod > 0 )
}
printf( "Zarobiles!" );
}
else
printf( "Straciles!" );
}
Copyright © Roman SimiÅ„ski Strona : 23


Wyszukiwarka

Podobne podstrony:
Lab Instrukcje sterujace w C
instrukcja instalacji do programu relux
GTA V Save Editor instrukcja jak używać programu
autronic instrukcja obslugi programowalnego ukladu sterujacego lambda control system al700
Instrukcja Programowania Zelio Logic 2 wersja polska
Instrukcja do programu WSPR
Programowanie i jezyk C Wyklad 02 Instrukcje
Instrukcja obslugi programatoraTt
Instrukcja programowania pilota uniwersalnego Ferguson
Raporot z przebiegu procesu negocjacj i dokumentów programowych na lata 2007 2013 Warszawa styczeń
instrukcja wingo programowanie
Program instruktażu stanowiskowego preser
Instrukcja Programator NEC en
Instrukcja programowania pilota e MAK z plyty?
instrukcja programowania ESGI 2

więcej podobnych podstron