WYKAAD VII
Programowanie komputerów, MiBM, sem. III
Sterowanie
Katedra Mechaniki i Informatyki Stosowanej
Instrukcja i blok
Wyrażenie zakończone średnikiem ; staje się instrukcją.
W języku C średnik jest terminatorem.
Instrukcja pusta składa się wyłącznie ze średnika.
Nawiasy klamrowe{ }grupują deklaracje i instrukcje w jedną
instrukcję złożoną blok.
Typowym blokiem jest treść funkcji.
Średnika nie stawiamy po nawiasie}kończącym blok.
Zmienne można deklarować wewnątrz dowolnego bloku.
Także takiego, który grupuje instrukcje po if, else, while, itp.
Schemat blokowy
START
SCHEMAT BLOKOWY
czytanie danych
instrukcja
tak nie
czy ... ?
instrukcja
wydruk wynikow STOP
Instrukcja if-else
Instrukcje warunkowe
N T
czy ... ?
if( wyrażenie )
instrukcja-1
instr-1 instr-2 else
instrukcja-2
Częśćelsejest opcjonalna.
N T
czy ... ?
instrukcja
if( wyrażenie )
instrukcja
Instrukcja if-else c.d.
Użycie częścielseistrukcjiif-elsejest opcjonalne. W
zagnieżdżonych instrukcjachifpominięcie któregośelsemoże
prowadzić do niejednoznaczności.
if( n > 0 ) {
if( n > 0 )
if( a > b )
if( a > b )
z = a;
z = a;
}
else
else
z = b;
z = b;
UWAGA : Każda częśćelseprzyporządkowana jest najbliższej z
poprzednich instrukcjiif.
Konstrukcja else-if
Instrukcje warunkowe
T
wyr-1 instr-1
if( wyrażenie-1 )
N instrukcja-1
T
else if ( wyrażenie-2 )
wyr-2 instr-2
instrukcja-2
N
else if ( wyrażenie-3 )
T
wyr-3 instr-3 instrukcja-3
else
N
else
instrukcja-e
instr-e
Konstrukcja else-if c.d.
Zgodnie z przyjętą konwencją graficzną instrukcji, konstrukcja
else-ifmiałaby postać
if( wyrażenie-1 )
instrukcja-1
else
if ( wyrażenie-2 )
instrukcja-2
else
if ( wyrażenie-3 )
instrukcja-3
else
instrukcja-e
Zastosowanie konstrukcji else-if
Procedura wyszukiwania binarnego (K&R str. 87,88)
int binsearch( int x, int v[], int n )
/* poszukuje elementu x spośród uporządkowanych v[] */
{
int low, high, mid;
low = 0;
high = n - 1;
while( low <= high ) {
mid = (low+high) / 2;
if( x < v[mid] ) high = mid - 1;
else if( x > v[mid] ) low = mid + 1;
else
return mid; /* znaleziono */
}
return -1; /* nie znaleziono */
}
Instrukcja switch
Instrukcje warunkowe
T
w == sw-1 instr-1
N
switch( wyrażenie ) {
T
w == sw-2 instr-2
case sw-1 : instrukcje-1
case sw-2 : instrukcje-2
N
case sw-3 : instrukcje-3
T
w == sw-3
instr-3
default : instrukcje-d
}
N
default
instr-d
Zastosowanie instrukcji switch
Zliczanie znaków (K&R str. 89)
while( (c=getchar()) != EOF ) {
switch (c) {
case 0 : case 1 : case 2 : case 3 : case 4 :
case 5 : case 6 : case 7 : case 8 : case 9 :
ndigit[c- 0 ]++ ;
break;
case : case \n : case \t :
nwhite++ ;
break;
default:
nother++ ;
break;
}
}
Typowe funkcjonowanie instrukcji switch
T
switch( wyrażenie ) {
w == sw-1 instr-1
break
case sw-1 : instrukcje-1
N
break;
T
w == sw-2 instr-2
case sw-2 : instrukcje-2
break
N break;
T
case sw-3 : instrukcje-3
w == sw-3
instr-3
break;
break
N
default : instrukcje-d
default
instr-d
break;
break
}
Instrukcja switch c.d., instrukcja break
Wyrażenia stałecasepełnią rolę etykiet sprawdzanych na
identyczność z wartością wyrażeniaswitch.
Po wykonaniu instrukcji związanych z jednym przypadkiem
sterowanie przechodzi do instrukcji zawartych w następnych
przypadkach.
Najczęstszym sposobem opuszczenia (przerwania) instrukcji
switchjest użycie instrukcji break lub return.
Użycie break powoduje przekazanie sterowania do instrukcji
następnej po blokuswitch.
Przypadekdefault pasuje zawsze, tzn. wykonywany jest
zawsze, o ile nie nastąpiło wcześniejsze zakończenie instrukcji
switch.
Wyrażenie warunkowe
Trójargumentowy, prawostronny operator?:
wyr-1 ? wyr-2 : wyr-3
zwraca wartośćwyr-2jeżeli wartość wyrażeniawyr-1jest
różna od zera. W przeciwnym wypadku wartością wyrażenia
jestwyr-3.
Instrukcja warunkowa
if( a > b ) z = a;
else z = b;
może być zastąpiona przypisaniem
z = (a > b )? a : b ;
Wyrażenie warunkowe jest zwykłym wyrażeniem i może
występować wszędzie tam, gdzie mogą występować inne
wyrażenia.
Pętla while
Instrukcje iteracyjne
N
while( wyrażenie )
czy ... ?
instrukcja
T
instrukcja
Najpierw obliczane jest wyrażenie. Jeżeli jego wartość jest
różna od zera, to wykonuje się instrukcję.
Cykl powtarza się do chwili, gdy wartość wyrażenia stanie się
zerem.
Instrukcja może nie zostać wykonana ani razu.
Pętla do-while
Instrukcje iteracyjne
do
instrukcja
instrukcja
N T while( wyrażenie ) ;
czy ... ?
Najpierw wykonywana jest instrukcja, a następnie sprawdzane
jest wyrażeniewhile.
instrukcja wykonana zostanie przynajmniej raz.
Pętla for
Instrukcje iteracyjne
Instrukcja
for( wyr-1 ; wyr-2 ; wyr-3 )
instrukcja
wyr-1;
N
jest równoważna sekwencji
wyr-2 wyr-3;
T
wyr-1 ;
instrukcja
while( wyr-2 ) {
instrukcja
wyr-3 ;
}
Pętla for uwagi
Instrukcjewhileiforsą funkcjonalnie identyczne.
Kiedy nie występuje jawnie ani część inicjująca proces
iteracyjny, ani część modyfikująca, stosujemywhile
...
while( (c=getchar()) == || c == \n || c == \t )
; /* pomiń białe znaki */
Gdy występuje prosta część inicjująca i przyrost licznika pętli
stosujemyfor.
for( i = 0; i < n; i++ )
...
Wyrażeniawyr-1,wyr-2iwyr-3mogą zostać pominięte
(średniki zostają). Przyjmuje się, że warunekwyr-2jest
niezerowy (prawdziwy).
for( ; ; ) { /* powtarzaj w nieskończoność */
...
}
Zastosowanie instrukcji for
Odwracanie tekstu w miejscu (K&R str. 93)
#include
void reverse( char s[] )
{
int c, i, j;
for( i = 0, j = strlen(s)-1; i < j; i++, j-- ) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
UWAGA: Przecinek jest operatorem sekwencji wymusza
wykonanie argumentów wyrażenia od lewej strony do prawej.
Instrukcje break i continue
Przerwanie działania instrukcji iteracyjnych
Instrukcja break powoduje natychmiastowe zaprzestanie
wykonywanie instrukcji wewnątrz pętli while, for i do.
Instrukcja break w powiązaniu z instrukcją warunkową
umożliwia zakończenie iteracji niezależnie od stanu wyrażenia
warunkowego sterującego wykonaniem pętli.
Instrukcja continue powoduje przerwanie bieżącego kroku
iteracji i wznowienie wykonywania pętli od następnego kroku.
W przypadku while i do oznacza to natychmiastowe
sprawdzenie warunku zatrzymania pętli.
W przypadku for oznacza to wykonanie wyrażeń
modyfikujących i następnie sprawdzenie warunku końca.
Stosowanie instrukcji continue nie ma sensu poza
instrukcjami iteracyjnymi.
Instrukcja goto i etykiety
NIGDY (prawie) NIE UŻYWAĆ !!!
Instrukcja goto przenosi wykonanie programu do instrukcji
oznaczonej etykietą.
for( ... )
for( ... ) {
...
if( niepowodzenie )
goto error ; /* skok do obsługi błędów */
}
...
error:
/* napraw sytuację lub wypisz komunikat o błędzie */
Etykieta to identyfikator zakończony dwukropkiem. Może
poprzedzać każdą instrukcję.
Zasięgiem etykiety jest funkcja, w której etykieta wystąpiła.
Nie używać poza szczególnie wyjątkowymi sytuacjami !
Wyszukiwarka
Podobne podstrony:
Sieci komputerowe wyklady dr Furtak
Wykład 05 Opadanie i fluidyzacja
WYKŁAD 1 Wprowadzenie do biotechnologii farmaceutycznej
mo3 wykladyJJ
ZARZĄDZANIE WARTOŚCIĄ PRZEDSIĘBIORSTWA Z DNIA 26 MARZEC 2011 WYKŁAD NR 3
Wyklad 2 PNOP 08 9 zaoczne
Wyklad studport 8
Kryptografia wyklad
Budownictwo Ogolne II zaoczne wyklad 13 ppoz
wyklad09
Sporzadzanie rachunku przepływów pienieżnych wykład 1 i 2
fcs wyklad 5
Wyklad08 Zaopatrz wWode
Wyklad3
więcej podobnych podstron