Programowanie komputerów
Prowadzący:
dr hab. inż. Kazimierz Worwa, prof. UW MSC
r.a. 2007/2008
UCZELNIA WARSZAWSKA
Kierunek INFORMATYKA I EKONOMETRIA
2
Programowanie komputerów
Lokalizacja plików do wykładów
http://members.lycos.co.uk/pkjw84/kw/
logowanie:
nazwa u
ż
ytkownika
2007/2008
hasło
kw
Programowanie komputerów
Wykład 3
Instrukcje warunkowe
Instrukcje iteracyjne
4
Programowanie komputerów
Operatory relacyjne
Umo
ż
liwiaj
ą
one wykonywanie ró
ż
nych porówna
ń
w zdaniach
logicznych
Lista operatorów relacyjnych:
>
wi
ę
ksze ni
ż
,
>= wi
ę
ksze lub równe ni
ż
,
<
mniejsze ni
ż
,
<= mniejsze lub równe ni
ż
,
== równe
!= ró
ż
ne
UWAGA: Nale
ż
y zwróci
ć
uwag
ę
na istotn
ą
ró
ż
nic
ę
pomi
ę
dzy
operatorem przypisania =, a operatorem relacyjnym
porównania ==.
5
Programowanie komputerów
Priorytety operatorów porównania i relacyjnych
Najwy
ż
szy priorytet
!
>, >=, <, <=
==, !=
&&
Najni
ż
szy priorytet
||
W zapisie zda
ń
logicznych wykorzystujemy ponadto nawiasy
okr
ą
głe.
6
Programowanie komputerów
Operatory przyrostowe
Umo
ż
liwiaj
ą
zapis operacji inkrementacji (zwi
ę
kszenia
warto
ś
ci liczby całkowitej o jeden) lub dekrementacji
(zmniejszenia warto
ś
ci liczby całkowitej o jeden)
Inkrementacja:
a = a + 1; zapisujemy operatorem:
a++
Dekrementacja:
a = a – 1; zapisujemy operatorem:
a--
operatory
przyrostowe
7
Programowanie komputerów
Operatory przyrostowe
Przykład
#include <stdio.h>
int main(void) {
int i, j;
i = 10;
j = i++;
// Najpierw przypisanie, potem inkrementacja
/* wy
ś
wietlenie warto
ś
ci zmiennych i oraz j */
printf("i = %d",i);
printf(", j= %d", j);
getchar();
//Zatrzymanie okna konsoli
return 0;
}
Program 3.1
8
Programowanie komputerów
Operatory przyrostowe
Przykład
#include <stdio.h>
int main(void) {
int i, j;
i = 10;
j = ++i;
// Najpierw inkrementacja, potem pryzpisanie
/* Wy
ś
wietlenie warto
ś
ci zmiennych i oraz j */
printf("i = %d",i);
printf(", j= %d", j);
getchar();
//Zatrzymanie okna konsoli
return 0;
}
Program 3.2
9
Programowanie komputerów
Operacje WE: podstawy wykorzystania funkcji printf( )
printf( ) pochodzi z biblioteki <stdio.h>
umo
ż
liwia wypisywanie tekstu zapisywanego w cudzysłowie:
printf(„To jest tekst”);
printf(„Tekst zako
ń
czony znakiem ko
ń
ca wiersza\n”);
printf(„\nTekst poprzedzony znakiem ko
ń
ca wiersza.”);
printf(\n); /*przej
ś
cie do nast
ę
pnego wiersza*/
printf(„Tekst pierwszy”, „ Tekst drugi”, „ Tekst trzeci”);
umo
ż
liwia wypisywanie zmiennych i stałych razem z
dodatkowym tekstem lub oddzielnie
aby wypisywa
ć
stałe i zmienne nale
ż
y w funkcji printf()
wykorzystywa
ć
tzw. specyfikatory konwersji
10
Programowanie komputerów
Specyfikatory konwersji dla printf( )
specyfikatory konwersji wskazuj
ą
w tek
ś
cie miejsce
wyst
ę
powania zmiennej okre
ś
lonego typu
na tej podstawie warto
ść
tej zmiennej zostanie odpowiednio
przekonwertowana do tekstu, a tekst ten wysłany na konsol
ę
wyj
ś
cia
lista podstawowych specyfikatorów konwersji:
%lu
unsigned long
%u
unsigned int, unsigned short
%f
float, double
%ld
long
%d
int, short
%c
char
11
Programowanie komputerów
Specyfikatory konwersji wykorzystane w printf( )
#include <stdio.h>
int wiek = 20;
int odleglosc = 123;
int temperatura = -8;
int czas = 2;
int main ( )
{
printf("Nazywam sie Adam. Mam %d lat.", wiek);
printf("\nMieszkam %d kilometry od Warszawy i jade na uczelnie %d
godziny.", odleglosc, czas);
printf("\nOstatnio było %d stopni Celcjusza. Brr, zimno!!!", temperatura);
printf("\n");
printf("Wynik dzielenia 5/2 wynosi:\t%d.", 5/2);
getchar();
return 0;
}
Program 3.3
12
Programowanie komputerów
Znaki sterujące w printf( )
\n – przej
ś
cie do nast
ę
pnego wiersza
\t – wstawienie znaku tabulatora
\b – wymazanie znaku (backspace)
\\ - wstawienie znaku \
\? – wstawienie znaku zapytania
\’ – wstawienie apostrofu
\” – wstawia znak cudzysłowia
wi
ę
cej na ten temat w czasie zaj
ęć
laboratoryjnych
13
Programowanie komputerów
Operacje WY: podstawy wykorzystania funkcji scanf( )
scanf( ) pochodzi z biblioteki <stdio.h>
umo
ż
liwia wczytywanie warto
ś
ci do zmiennych
format warto
ś
ci jest okre
ś
lony przez tzw. specyfikatory
formatów
liczba argumentów musi odpowiada
ć
liczbie specyfikatorów
Przykład
int pierwszy, drugi;
scanf(„%d %d”, &pierwszy, &drugi);
14
Programowanie komputerów
Specyfikatory formatów dla scanf( )
lista podstawowych specyfikatorów konwersji:
%p
wska
ź
nik
%u
liczba całkowita bez znaku
%s
napis
%e lub %f
liczba zmiennoprzecinkowa
%d lub %i
liczba całkowita w postaci dziesi
ę
tnej
%c
pojedynczy znak
15
Programowanie komputerów
Uzycie printf() i scanf() - przykłady
#include <stdio.h>
unsigned int wiek, odleglosc;
int temperatura;
float czas;
main ( ) {
printf("Podaj wiek: ");
scanf("%u", &wiek);
printf("\nPodaj odleglosc: ");
scanf("%u", &odleglosc);
printf("\nPodaj temperature: ");
scanf("%d", &temperatura);
printf("\nPodaj czas: ");
scanf("%f", &czas);
getchar();
return 0;
}
Program 3.4
16
Programowanie komputerów
Instrukcje języka C
Wszystkie instrukcje w j
ę
zyku C z wyj
ą
tkiem instrukcji z
ł
o
ż
onej
ko
ń
cz
ą
si
ę ś
rednikiem.
Instrukcja z
łłłł
o
żżżż
ona
Instrukcja
z
ł
o
ż
ona
sk
ł
ada
si
ę
z
nawiasu
klamrowego
otwieraj
ą
cego, dowolnych instrukcji (mog
ą
by
ć
równie
ż
kolejne
instrukcje z
ł
o
ż
one) i nawiasu klamrowego zamykaj
ą
cego:
{
instrukcja1;
instrukcja 2;
instrukcja 3;
{
instrukcja 4;
instrukcja 5;
}
}
17
Programowanie komputerów
Instrukcja podstawienia
Instrukcja ta zawiera dowolne wyra
ż
enie j
ę
zyka C. Operatory
słu
żą
ce do konstrukcji wyra
ż
e
ń
zostan
ą
opisane ni
ż
ej.
Przykłady:
a=2; /* inicjowanie zmiennej */
a = b = c+4;
znak=‘a’;
18
Programowanie komputerów
Instrukcja warunkowa
Instrukcja warunkowa umo
ż
liwia wykonanie pewnej instrukcji w
zale
ż
no
ś
ci od warto
ś
ci wyra
ż
enia.
Wszystkie warto
ś
ci ró
ż
ne od 0 s
ą
w j
ę
zyku C traktowane jako
prawda, równe 0 jako fałsz.
Wyra
ż
enia logiczne s
ą
liczone tylko do momentu, w którym mo
ż
na
okre
ś
li
ć
jego warto
ść
.
Składnia:
if (wyra
ż
enie) instrukcja1;
lub
if (wyra
ż
enie) instrukcja1;
else instrukcja 3;
19
Programowanie komputerów
Instrukcja warunkowa
W obu postaciach instrukcja mo
ż
e by
ć
instrukcj
ą
zło
ż
on
ą
. W pierwszym przypadku
instrukcja wykonuje si
ę
, je
ś
li warto
ść
wyra
ż
enia jest ró
ż
na od 0. W drugim wykonuje
si
ę
jedna z dwóch podanych instrukcji (nigdy obie) - pierwsza, gdy warto
ść
wyra
ż
enia
jest ró
ż
na od 0, druga - gdy warto
ść
wyra
ż
enia jest równa 0.
20
Programowanie komputerów
Instrukcja warunkowa - przykład
if (a > 5)
printf("a jest wi
ę
ksze od 5\n");
else
printf("a jest mniejsze lub równe 5\n");
21
Programowanie komputerów
Instrukcja switch
Instrukcja switch słu
ż
y do wybierania jednego przypadku
z wielu.
Składnia:
switch (zmienna){
case stała1:
Instrukcja1;
Break;
case stała2:
Instrukcja2;
Break;
…………
default:
InstrukcjaD;
Break;
}
22
Programowanie komputerów
Instrukcja switch – przykład 1
#include <stdio.h>
int main(void) {
int i;
printf(„Wprowadz liczbę od 1 do 4: ”);
scanf(„%d, &i);
switch(i) {
case 1: printf(„jeden”);
break;
case 2: printf(„dwa”);
break;
case 3: printf(„trzy);
break;
case 4: printf(„cztery”);
break;
default: printf(„Liczba nierozpoznana”);
}
return 0;
}
23
Programowanie komputerów
Instrukcja switch – przykład 2
#include <stdio.h>
int main(void) {
char ch;
printf(„\nWprowadź literę: ”); ch = getche(); printf(\n”);
switch(ch) {
case ‘a’:
case ‘ą’:
case ‘e’:
case ‘ę’:
case ‘i’:
case ‘o’:
case ‘ó’:
case ‘u’:
case ‘y’:
printf(„ jest samogłoską\n”);
break;
default:
printf(„ jest spółgłoską\n”);
}
return 0;
}
24
Programowanie komputerów
Instrukcja switch – przykład 3
#include <stdio.h>
int main(void) {
char ch;
do {
printf(„Wprowadź literę, q kończy: ”);
ch = getchar();
printf(\n”);
switch(ch) {
case ‘a’: printf(„Nadszedł ”);
case ‘b’: printf(„czas ”);
case ‘c’: printf(„ludzi honoru”);
break;
case ‘d’: printf(„Idzie ”);
case ‘e’: printf(„żołnierz”);
}
}while(ch != ‘q’);
return 0;
}
25
Programowanie komputerów
Pętla while
Składnia:
while (wyra
ż
enie) instrukcja;
Instrukcja umieszczona w p
ę
tli „while" (mo
ż
e to by
ć
instrukcja
zło
ż
ona) jest powtarzana a
ż
do momentu, gdy warto
ść
wyra
ż
enia
b
ę
dzie równa 0.
W przypadku, gdy warto
ść
wyra
ż
enia od razu b
ę
dzie równa 0,
instrukcja nie wykona si
ę
ani raz.
Je
ś
li wyra
ż
enie nie przyjmie warto
ś
ci 0, instrukcja b
ę
dzie si
ę
wykonywa
ć
niesko
ń
czon
ą
liczb
ę
razy.
Przykład
char znak;
znak=
znak=
znak=
znak=getchar
getchar
getchar
getchar();
();
();
();
while (znak!=‘#’) {
printf
printf
printf
printf(„
(„(„
(„\\\\n Niepoprawny znak”);
n Niepoprawny znak”);
n Niepoprawny znak”);
n Niepoprawny znak”);
znak=
znak=
znak=
znak=getchar
getchar
getchar
getchar();
();
();
();
}}}}
26
Programowanie komputerów
Pętla do
Składnia;
do
instrukcja;
while (wyra
ż
enie);
P
ę
tla „do" jest podobna do p
ę
tli „while", z t
ą
ró
ż
nic
ą
,
ż
e warunek
kontynuacji jest sprawdzany po wykonaniu instrukcji.
Oznacza to,
ż
e instrukcja wykona si
ę
przynajmniej jeden raz.
27
Programowanie komputerów
Pętla do
Przykład:
{
do
printf(„Zako
ń
czy
ć
program?\n");
while (getchar() != ‘T');
}
28
Programowanie komputerów
Pętla for
Składnia:
for (wyra
ż
enie1; wyra
ż
enie2; wyra
ż
enie3) instrukcja;
Przykład:
{
int i;
char txt[10];
for (i = 0; i < 10; i ++)
txt[i] = 'A';
}
29
Programowanie komputerów
Pętla for
Składnia:
for (wyra
ż
enie1; wyra
ż
enie2; wyra
ż
enie3) instrukcja;
Wszystkie wyra
ż
enia s
ą
opcjonalne.
Wyra
ż
enie1 jest obliczane przed wej
ś
ciem do p
ę
tli (tylko raz!).
Nast
ę
pnie oblicza si
ę
wyra
ż
enie2 i sprawdza czy jest ono ró
ż
ne od 0. Je
ś
li
tak, wykonywana jest instrukcja i obliczane jest wyra
ż
enie3.
Nast
ę
pnie sprawdzana jest warto
ść
wyra
ż
enia2. P
ę
tla jest wykonywana
a
ż
do momentu, gdy warto
ść
wyra
ż
enia2 b
ę
dzie równa 0.
Wyra
ż
enie3 jest zawsze obliczane po wykonaniu instrukcji.
Je
ś
li wszystkie trzy wyra
ż
enia w p
ę
tli for s
ą
puste (p
ę
tla postaci:
for(;;) instrukcja;
to jest to bezwarunkowa p
ę
tla niesko
ń
czona.
Instrukcja w p
ę
tli for mo
ż
e nie wykona
ć
si
ę
ani raz, je
ś
li wyra
ż
enie2
b
ę
dzie od razu równe 0.
P
ę
tla for mo
ż
e by
ć
p
ę
tl
ą
niesko
ń
czon
ą
, je
ś
li wyra
ż
enie2 nigdy nie
przyjmie warto
ś
ci 0.
Wyra
ż
enie1 b
ę
dzie zawsze obliczone (dokładnie jeden raz).
P
ę
tla for umo
ż
liwia zgrupowanie instrukcji inicjuj
ą
cej p
ę
tl
ę
, warunku
kontynuacji i instrukcji po wykonaniu p
ę
tli w jednym miejscu w
programie.
30
Programowanie komputerów
Instrukcja Return
Powoduje wyj
ś
cie z aktualnie wykonywanej funkcji.
Instrukcja return mo
ż
e wyst
ą
pi
ć
w dowolnym miejscu w ciele
funkcji.
Instrukcja return mo
ż
e by
ć
u
ż
yta z podaniem wyra
ż
enia lub bez.
Je
ś
li wyra
ż
enie zostanie podane, to jego warto
ść
zostanie obliczona
przed wyj
ś
ciem z funkcji i zwrócona na zewn
ą
trz.
Składnia:
return;
lub
return wyra
ż
enie;
31
Programowanie komputerów
Instrukcja Return - przykład
long silnia(int n)
{
long wynik;
int i;
if (n <= 0) return 1;
wynik = 1;
for (i = 1; i <= n; i ++)
wynik = wynik * i;
return wynik;
}
32
Programowanie komputerów
Instrukcja skoku
Składnia:
goto etykieta;
Instrukcja
skoku
powoduje
bezwarunkowe
przekazanie
sterowania do instrukcji poprzedzonej etykiet
ą
.
Etykiet
ę
definiuje si
ę
w dowolnym miejscu wewn
ą
trz funkcji, z
której została wykonana instrukcja skoku.
Składnia:
etykieta:
Etykiet nie trzeba deklarowa
ć
.
33
Programowanie komputerów
Instrukcja skoku - przykład
int f()
{
int l;
scanf("%d", &l");
if (l < 0) goto err;
printf("%d! = %d\n", l, silnia(l));
return 1;
err:
printf("Nie mo
ż
na obliczy
ć
silni liczby mniejszej od 0\n");
return 0;
}
34
Programowanie komputerów