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 2
Struktura programu w j
ę
zyku C
Procedury i funkcje
Instrukcje steruj
ą
ce
Typy danych, zmienne i wyra
ż
enia
4
Programowanie komputerów
Działanie programu: program załadowany do pamięci
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51...
52...
53...
54...
23
Pamięć programu
Pamięć danych
Licznik rozkazów (LR)
spolszczone polecenia
maszynowego języka
procesora
5
Programowanie komputerów
Działanie programu: po rozkazie 23
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52...
53...
54...
24
Pamięć programu
Pamięć danych
Licznik rozkazów
6
Programowanie komputerów
Działanie programu: po rozkazie 24
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
0
53...
54...
25
Pamięć programu
Pamięć danych
Licznik rozkazów
7
Programowanie komputerów
Działanie programu: po rozkazie 25
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
0
53...
54
0
26
Pamięć programu
Pamięć danych
Licznik rozkazów
8
Programowanie komputerów
Działanie programu: po rozkazie 26
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
0
53...
54
0
27
Pamięć programu
Pamięć danych
Licznik rozkazów
9
Programowanie komputerów
Działanie programu: po rozkazie 27
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
0
53
118
54
0
28
Pamięć programu
Pamięć danych
Licznik rozkazów
10
Programowanie komputerów
Działanie programu: po rozkazie 28
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
0
53
118
54
118
29
Pamięć programu
Pamięć danych
Licznik rozkazów
11
Programowanie komputerów
Działanie programu: po rozkazie 29
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
1
53
118
54
118
30
Pamięć programu
Pamięć danych
Licznik rozkazów
12
Programowanie komputerów
Działanie programu: po rozkazie 30
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
1
53
118
54
118
26
Pamięć programu
Pamięć danych
Licznik rozkazów
13
Programowanie komputerów
Działanie programu: po rozkazie 26 (2)
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
1
53
118
54
118
27
Pamięć programu
Pamięć danych
Licznik rozkazów
14
Programowanie komputerów
Działanie programu: po rozkazie 27 (2)
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
1
53
17
54
118
28
Pamięć programu
Pamięć danych
Licznik rozkazów
15
Programowanie komputerów
Działanie programu: po rozkazie 28 (2)
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
1
53
17
54
135
29
Pamięć programu
Pamięć danych
Licznik rozkazów
16
Programowanie komputerów
Działanie programu: po rozkazie 29 (2)
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
2
53
17
54
135
30
Pamięć programu
Pamięć danych
Licznik rozkazów
17
Programowanie komputerów
Działanie programu: po rozkazie 30 (2)
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
2
53
17
54
135
26
Pamięć programu
Pamięć danych
Licznik rozkazów
18
Programowanie komputerów
Działanie programu: po rozkazie 31
22 ...
23 Wczytaj ilość liczb do k(51)
24 Wpisz 0 do k(52)
25 Wpisz 0 do k(54)
26 Jeśli k(51) = k(52), to skocz do 31
27 Wczytaj liczbę do k(53)
28 Dodaj k(53) do k(54)
29 Dodaj 1 do k(52)
30 Skocz do 26
31 Wypisz k(54)
32 ...
33 ...
34 ...
50...
51
2
52
2
53
17
54
135
Pamięć programu
Pamięć danych
135
19
Programowanie komputerów
Historia języka C/C++
koniec lat 60-tych poprzedniego stulecia – Martin Richards i jego
j
ę
zyk o nazwie BCPL,
1969 - powstanie w oparciu o j
ę
zyk BCPL pierwszej wersji systemu
UNIX na maszyn
ę
DEC PDP-11 w Bell Laboratories w USA.
Prace te prowadził Ken Thompson, do którego pó
ź
niej doł
ą
czył
Dennis Ritchie,
1970 – Ken Tompson i jego j
ę
zyk B, powstały na skutek rozwoju
j
ę
zyka BCPL,
1972 – Dennis Ritchie i jego j
ę
zyk C b
ę
d
ą
cy wynikiem rozwoju
j
ę
zyka B,
1978 – pierwszy opis standardu j
ę
zyka C – Dennis Ritchie i Brian
Kernighan w ksi
ąż
ce pt. „The C Programming Language” wyd.
Prentice-Hall (polskie wydanie w 1988r. pt. „J
ę
zyk C” wydawnictwo
WNT)
1989 – standard ANSI j
ę
zyka C
20
Programowanie komputerów
Historia języka C/C++
1983 – oddanie do u
ż
ytku pierwszej implementacji j
ę
zyka C++
(Bjarne Stroustrup)
1985 – powstanie pierwszej wersji j
ę
zyka C++ do u
ż
ytku
zewn
ę
trznego
1994 – przyj
ę
cie standardu ANSI/ISO j
ę
zyka C++
21
Programowanie komputerów
Jaki dokładnie jest język C ?
Jego kod jest niezwykle szybki, ale składnia j
ę
zyka mo
ż
e
przysparza
ć
wielu kłopotów niewprawnym programistom,
C ma ugruntowan
ą
pozycj
ę
na rynku – przetrwał prób
ę
czasu,
czego nie mo
ż
na powiedzie
ć
o wielu innych j
ę
zykach
programowania,
UNIX został prawie w 100% zaimplementowany w j
ę
zyku C
i cały czas jest podstawowym j
ę
zykiem programowania dla
systemów operacyjnych z grupy systemów UNIX, np. Solaris,
AIX, Linux, jest on równie
ż
wa
ż
ny dla systemu DEC VMS,
C jest równie
ż
bardzo wa
ż
nym j
ę
zykiem programowania dla
systemów z rodziny Windows i systemów sieciowych z rodziny
NetWare
22
Programowanie komputerów
Jakie jest odniesienie języka C do języków C++ i Java
J
ę
zyk C++ jest obiektowo zorientowanym rozszerzeniem
j
ę
zyka C
J
ę
zyk Java został zbudowany bezpo
ś
rednio na podstawie
j
ę
zyka C++
Wobec powy
ż
szego: aby dobrze porusza
ć
si
ę
w obszarze
j
ę
zyków C++ i Java wskazana jest znajomo
ść
j
ę
zyka C
Aby nazywa
ć
siebie profesjonalist
ą
, nale
ż
y zna
ć
j
ę
zyk C
23
Programowanie komputerów
Jaki dokładnie jest język C ?
C jest j
ę
zykiem tzw.
ś
redniego poziomu:
Niski poziom – języki maszynowe,
assemblery
Ś
redni poziom – język C
Wysoki poziom – języki pochodzące
od Algola: Pascal, Modula2, ADA, Basic,
jak również C++, Java
wydajność kodu
wynikowego C
zbliżona do wydajności
języka maszynowego
składnia kodu
ź
ródłowego C
zbliżona do składni
języka wysokiego poziomu
24
Programowanie komputerów
Kształt programu w języku C
Podstaw
ą
programu jest tzw. MODUŁ GŁÓWNY, który jest
zapisywany w postaci kodu
ź
ródłowego zapisanego w pliku
ASCII z rozszerzeniem „ .C ”
Struktura modułu głównego w j
ę
zyku C:
.. /* klauzule importu bibliotek */
.. /* deklaracje stałych, zmiennych, typów */
.. /* prototypy lub deklaracje funkcji lub procedur */
..
main( ) /* słowo domy
ś
lne i zastrze
ż
one */
{ /* klamra otwieraj
ą
ca program*/
.. /* polecenia wykonywane przez program */
..
} /* klamra zamykaj
ą
ca program*/
część
deklaracyjna
modułu
część
wykonywalna
modułu
25
Programowanie komputerów
Kształt programu w języku C
Przykład:
/* klauzula importu biblioteki */
#include <stdio.h>
main( )
/* int main(void) */
{
/* wypisanie tekstu na ekranie */
printf(„Witaj C”);
return 0;
/* wyj
ś
cie z programu */
}
26
Programowanie komputerów
Podział programu na procedury i funkcje
w j
ę
zykach programowania mamy do czynienia z dwoma
rodzajami podprogramów:
funkcje wykonuj
ą
ce czynno
ś
ci i zwracaj
ą
ce warto
ść
procedury wykonuj
ą
ce jakie
ś
czynno
ś
ci
deklaracje procedur i funkcji s
ą
umieszczane w cz
ęś
ci
deklaracyjnej modułu
w cz
ęś
ci wykonywalnej programu zdefiniowane procedury i
funkcje s
ą
wywoływane
wykorzystuj
ą
c procedury i funkcje w tek
ś
cie programu
realizujemy tzw. programowanie proceduralne, którego
najwy
ż
sz
ą
form
ą
jest programowanie strukturalne,
wykorzystuj
ą
ce technik
ę
dekompozycji („dziel i rz
ą
d
ź
”)
27
Programowanie komputerów
Deklarowanie procedur i funkcji
Funkcje w j
ę
zyku C deklarujemy według schematu:
zwracany_typ nazwa_funkcji (typ1 zmienna1,..., typn zmiennan);
Procedury w j
ę
zyku C:
void nazwa_procedury (typ1 zmienna1,..., typn zmiennan);
Parametry formalne funkcji (procedury).
W czasie wywołania funkcji (procedury)
w ich miejsce wstawiane są parametry
aktualne, które przekazują wartości do
podprogramu, na których on operuje
procedura nie zwraca wartości,
co oznaczamy słowem void
funkcja zwraca wartość,
obliczoną w czasie jej
wykonania
28
Programowanie komputerów
Deklarowanie procedur i funkcji
/* deklaracje importu bibliotek*/
.......................
/*deklaracje procedur i funkcji, np.:*/
int moja_fun1(int par1);
/*funkcja z jednym parametrem*/
{
/*tre
ść
funkcji*/
return warto
ść
/*wymagana deklaracja zwrotu warto
ś
ci funkcji*/
}
void moja_proc1(void);
/*procedura bezparametrowa*/
{
/*tre
ść
procedury*/
}
/* moduł główny */
main( )
{
/*tre
ść
programu*/
zmienna = moja_fun1(21);
/*przykład wywołania funkcji*/
moja_proc1( );
/*przykład wywołania procedury*/
return 0;
}
29
Programowanie komputerów
Komentarze
Komentarz jest fragmentem programu ignorowanym w procesie kompilacji
Wyróżnia się komentarze
blokowe
i
liniowe
Komentarz blokowy umieszcza się między sekwencją znaków "
/*
" a "
*/
",
a komentarz liniowy rozpoczyna się sekwencją "
//
" a kończy znakiem
końca linii.
Przykłady
/* To jest komentarz blokowy. Może zajmować kilka wierszy */
// To jest komentarz liniowy
Uwaga na nierozwa
ż
ne umieszczenie w zakresie komentarza
linii kodu
ź
ródłowego, np.
int a;
/*Komentarz w stylu
int b;
j
ę
zyka C */
30
Programowanie komputerów
Identyfikator (nazwa) słu
ż
y do nazywania obiektów wchodz
ą
cych w skład programu
napisanego w j
ę
zyku C (zmiennych, typów, funkcji itp).
Przykładowe identyfikatory:
i, liczba, j1, J1, data_urodzenia, _koniec
Przykłady niepoprawnych identyfikatorów:
2rok, 1_kwietnia, ab$, czary!mar, a-b
Nie nale
ż
y u
ż
ywa
ć
identyfikatorów maj
ą
cych dwa znaki podkre
ś
lenie obok siebie (s
ą
one poprawne z punktu widzenia składni j
ę
zyka C), poniewa
ż
mog
ą
by
ć
one
u
ż
ywane przez twórców kompilatora do tworzenia bibliotek, makr itp.
Identyfikatory
31
Programowanie komputerów
Stałe i zmienne w programie
stałe nie zmieniaj
ą
swojej warto
ś
ci w czasie działania programu
zmienne mog
ą
zmienia
ć
swoj
ą
warto
ść
dowolnie wiele razy
je
ż
eli chodzi o zakres widoczno
ś
ci mo
ż
emy wyró
ż
ni
ć
w programie
dwa rodzaje stałych i zmiennych:
zmienne i stałe globalne
deklarowane w cz
ęś
ci deklaracyjnej modułu, widoczne w
całym programie, a wi
ę
c we wszystkich jego procedurach,
funkcjach i funkcji main( )
zmienne i stałe lokalne
deklarowane wewn
ą
trz procedur, funkcji i widoczne wył
ą
cznie
w tych procedurach, funkcjach, w których zostały one
zadeklarowane
ka
ż
da stała lub zmienna musi mie
ć
okre
ś
lony typ danych
na obecnym etapie wykładu b
ę
dziemy wykorzystywa
ć
wył
ą
cznie
predefiniowane typy danych
32
Programowanie komputerów
Słowa kluczowe
Niektóre identyfikatory zostały zastrze
ż
one przez twórców j
ę
zyka. Słu
żą
one do
zapisu konstrukcji jakie s
ą
dopuszczalne w j
ę
zyku C. Dlatego nazywa si
ę
je słowami
kluczowymi. Słowa kluczowe nie mog
ą
by
ć
u
ż
yte jako nazwy zmiennych, typów lub
funkcji i nie s
ą
poprawnymi identyfikatorami w sensie składni j
ę
zyka C. W j
ę
zyku
ANSI C wyst
ę
puj
ą
nast
ę
puj
ą
ce słowa kluczowe:
auto
break
case
char
const
continue default
do
double
else
enum
extern float
for
goto
if
int
long
register
return
short
signed
sizeof
static
struct
switch typedef
union
unsigned
void
volatile
while
33
Programowanie komputerów
Deklarowanie stałych
stałe literalne (literal constant):
nazwa_stałej = warto
ść
, np.:
dzie
ń
= 24;
godzina = 60;
PI = 3.1416;
stałe symboliczne (symbolic constant):
#define nazwa_stałej warto
ść
, np.:
#define dzie
ń
24
#define godzina 60
# define PI 3.1416
const typ_stałej nazwa_stałej warto
ść
_stałej, np.:
const int dzie
ń
24;
const int godzina 60;
const float PI 3.1416;
34
Programowanie komputerów
Zmienne
Zmienn
ą
okre
ś
lany jest pewien obszar w pami
ę
ci komputera,
w którym mog
ą
by
ć
przechowywane dane. Z punktu widzenia
osoby pisz
ą
cej program, zmienna posiada nast
ę
puj
ą
ce cechy
podstawowe:
nazwa (identyfikator)
typ
warto
ść
Nazwa zmiennej pozwala wskaza
ć
w programie, o który
fragment pami
ę
ci nam chodzi. Łatwiej jest posługiwa
ć
si
ę
nazw
ą
ni
ż
adresem liczbowym (łatwiej zrozumie
ć
napis
printf(imi
ę
); ni
ż
np. printf(*0x12342);) Kompilator dokonuj
ą
c
tłumaczenia napisanego programu zamienia wszystkie nazwy
zmiennych na odpowiednie adresy w pami
ę
ci komputera.
Wszystkie nazwy zmiennych przed u
ż
yciem musz
ą
by
ć
zadeklarowane.
35
Programowanie komputerów
Zmienne
Warto
ść
zmiennej jest tym, co przechowujemy w obszarze pami
ę
ci
okre
ś
lanym przez nazw
ę
.
Warto
ść
mo
ż
e si
ę
zmienia
ć
w dowolnym momencie w czasie
wykonania programu.
Warto
ś
ci
ą
mo
ż
e by
ć
liczba całkowita, zmiennoprzecinkowa (ułamek
dziesi
ę
tny), adres w pami
ę
ci komputera (tzw. wska
ź
nik), tekst itp.
W
momencie
deklaracji
warto
ść
zmiennej
lokalnej
(zadeklarowanej wewn
ą
trz funkcji) jest nieokre
ś
lona tzn. jej
warto
ść
jest przypadkowa; zmienne globalne (deklarowane poza
funkcjami) s
ą
inicjowane na zero.
Typ zmiennej okre
ś
la jak
ą
warto
ść
mo
ż
na wpisa
ć
do obszaru
wskazywanego przez nazw
ę
(czy b
ę
dzie to liczba całkowita,
zmienno-przecinkowa ... , czy te
ż
inny rodzaj danej).
W zale
ż
no
ś
ci od rodzaju warto
ś
ci (typu zmiennej), inny b
ę
dzie
rozmiar pami
ę
ci potrzebny do jej zapami
ę
tania.
Kompilator na podstawie typu okre
ś
la jak
ą
ilo
ść
pami
ę
ci nale
ż
y
przydzieli
ć
zmiennej i jakie operacje s
ą
na niej dopuszczalne.
36
Programowanie komputerów
Deklarowanie i ustawianie wartości zmiennych
schemat deklaracji zmiennej (globalnej, lokalnej):
typ_zmiennej nazwa_zmiennej;
przykłady deklaracji zmiennych:
int długo
ść
, odległo
ść
; /*zmienne całkowitoliczbowa*/
float powierzchnia; /*liczba rzeczywista*/
char znak; /*zmienna znakowa*/
schemat nadawania warto
ś
ci zmiennej:
nazwa_zmiennej = warto
ść
_zmiennej;
przykłady nadawania warto
ś
ci zmiennym:
długo
ść
= 20; /*nadanie warto
ś
ci wprost*/
powierzchnia = 15.20; /*przecinek jest obowi
ą
zkowy*/
znak = ‘A’; /*znaki wpisujemy w apostrofach*/
odległo
ść
= długo
ść
; /*wpisanie warto
ś
ci jednej zmiennej do drugiej*/
37
Programowanie komputerów
Proste typy danych
liczba zmiennoprzecinkowa
2.2E-308 do
1.8E308
8
double
liczba zmiennoprzecinkowa
1.2E-38 do 3.4E38
4
float
liczba naturalna
0 do 4294967295
4
unsignet
long
liczba naturalna
0 do 65535
2
unsignet
short
liczba naturalna
0 do 65535
2 lub 4
unsignet int
long int – długa liczba
całkowita
-2147483648 do
2147483647
4
long
liczba całkowita
-32768 do 32767
2
short
pojedynczy znak ASCII
-127 do 127
1
char
liczba całkowita
-32768 do 32767
2 lub 4
int
Opis
Zakres
Liczba
bajtów
Oznaczenie
38
Programowanie komputerów
Zasada widzialności zmiennych i stałych
Zmienne i stałe zdefiniowane na poziomie całego modułu
głównego „main” obowi
ą
zuj
ą
we wszystkich miejscach tego
modułu, tzn.:
w jego cz
ęś
ci wykonywalnej
we wszystkich procedurach i funkcjach zawartych w
module,
Zmienne i stałe zdefiniowane w funkcji (procedurze)
obowi
ą
zuj
ą
tylko w zakresie tej funkcji (procedury)
39
Programowanie komputerów
Podział programu na moduły
Program mo
ż
e by
ć
zbudowany z wielu modułów, np.:
import
biblioteki standardowe
<stdio.h>, ......, <stdlib.h>
biblioteki własne
„moja_bib1.h”, ..., „moja_bib2.h”
moduł główny
z funkcją main( )
kompilator, linker
program wykonywalny
40
Programowanie komputerów
Standardowe moduły biblioteczne języka C
Na pocz
ą
tku tekstu programu u
ż
ywamy sentencji:
#include <nazwa_biblioteki_1.h>
#include <nazwa_biblioteki_2.h>
................
#include <nazwa_biblioteki_N.h>
Jest to tzw. klauzula importu standardowych bibliotek
ś
rodowiska j
ę
zyka C
Nazwy bibliotek standardowych piszemy w otoczeniu nawiasów
trójk
ą
tnych
Biblioteki s
ą
dodatkowymi modułami j
ę
zyka C, w których zostały
zgromadzone przygotowane wcze
ś
niej funkcje przydatne dla
programisty
Dzi
ę
ki takiemu rozwi
ą
zaniu nie trzeba ich implementowa
ć
samodzielnie
41
Programowanie komputerów
Biblioteka standardowa stdio.h - #include <stdio.h>
Z tej biblioteki b
ę
dziemy czerpa
ć
funkcje umo
ż
liwiaj
ą
ce
obsług
ę
konsoli wyj
ś
cia :
int printf(char *ci
ą
g_znaków, ...);
wypisanie jednego lub wielu ci
ą
gów znaków b
ę
d
ą
cych np..
tekstami, liczbami itd...
int puts(char *napis);
wypisanie pojedynczego napisu b
ę
d
ą
cego tekstem z
dodaniem znaku ko
ń
ca linii i wysuni
ę
cia. Działa szybciej ni
ż
printf, ale obsługuje tylko teksty
int putchar (int ch);
wypisanie na akrean pojedynczego znaku, np.:
putchar(‘K’);
putchar(‘O’);
putchar(‘T’);
utworzy na ekranie napis: „KOT”
42
Programowanie komputerów
Biblioteka standardowa stdio.h - #include <stdio.h>
Przykład 1.2. Wypisanie na ekranie dwóch tekstów:
„Ala ma kota. „
„A kot ma Al
ę
.”
Przy pomocy funkcji printf:
printf („Ala ma kota.”, „A kot ma Al
ę
.”);
Przy pomocy funkcji puts:
puts(„Ala ma kota.”);
puts(„A kot ma Al
ę
.”);
?
Czy w obu przypadkach tekst zostanie wypisany identycznie?
43
Programowanie komputerów
Biblioteka standardowa stdio.h - #include <stdio.h>
Odpowied
ź
do przykładu 1.2:
po wykonaniu polecenia printf:
po wykonaniu dwóch polece
ń
puts:
Ala ma kota. A kot ma Alę
Ala ma kota.
A kot ma Alę
44
Programowanie komputerów
Biblioteka standardowa stdio.h - #include <stdio.h>
Z tej biblioteki b
ę
dziemy czerpa
ć
funkcje umo
ż
liwiaj
ą
ce obsług
ę
konsoli wej
ś
cia (przykłady ich wykorzystania b
ę
d
ą
pó
ź
niej):
int scanf(char *ci
ą
g znaków, ...);
Wczytywanie z klawiatury ci
ą
gów znaków, które mog
ą
by
ć
tekstami, liczbami itp. Wczytywanie ka
ż
dego ci
ą
gu znaków
automatycznie ko
ń
czy si
ę
wprowadzeniem spacji lub dowolnego
znaku steruj
ą
cego np. tabulatora, Entera itp.)
char *gets (char *napis);
wczytanie pojedynczego napisu b
ę
d
ą
cego tekstem. Mo
ż
na
wprowadza
ć
spacje. Wpisywanie ko
ń
czy si
ę
po naci
ś
ni
ę
ciu
znaku Enter. Działa szybciej ni
ż
scanf, ale obsługuje tylko teksty
int getchar(void);
wczytanie pojedynczego znaku alfanumerycznego z klawiatury
45
Programowanie komputerów
Inne biblioteki standardowe języka C
<conio.h>
dodatkowe funkcje obsługi konsoli we/wy
<ctype.h>
obsługa typów znakowych
<string.h>
obsługa ła
ń
cuchów znaków
<math.h>
funkcje matematyczne
<time.h>
funkcje daty i czasu
<stdlib.h>
dynamiczna alokacja pami
ę
ci i inne funkcje systemowe
46
Programowanie komputerów
Operatory języka C
Operatory umo
ż
liwiaj
ą
zapisywanie ró
ż
nego rodzaju operacji
w kodzie
ź
ródłowym programu
Pokrótce omówimy nast
ę
puj
ą
ce rodzaje operatorów j
ę
zyka C:
operator unarny
operatory arytmetyczne
operatory logiczne
operatory relacyjne
operatory przyrostowe
47
Programowanie komputerów
Operator unarny
Operator unarny jest zapisywany w postaci znaku „minusa”
Umo
ż
liwia on ustawienie dowolnej liczby na jej warto
ść
przeciwn
ą
Przykład
a = 5;
b = – a;
czyli: b = – 5;
minus oznaczający
operator unarny
rezultat zadziałania
operatora unarnego
48
Programowanie komputerów
Operatory arytmetyczne
Umo
ż
liwiaj
ą
one zapis operacji arytmetycznych:
* (gwiazdka) - mno
ż
enie,
% (procent) - reszta z dzielenia całkowitoliczbowego,
/ (uko
ś
nik) - dzielenie,
+ (plus) - dodawanie
– (minus) – odejmowanie
W zapisie bardziej zło
ż
onych działa
ń
zaleca si
ę
stosowanie
nawiasów okr
ą
głych, aby unikn
ąć
nieporozumie
ń
zwi
ą
zanych z
priorytetami operatorów.
Przykłady:
8 – 2 * 4
// 0
(8 – 2) * 4
// 24
5 / 2
// 2,
5.0 / 2.0
// 2.5
5 % 2
//1
49
Programowanie komputerów
Operatory logiczne
Wykorzystywane w wyra
ż
eniach logicznych
Lista operatorów logicznych:
&& - iloczyn logiczny AND
|| - suma logiczna OR
! – negacja logiczna NOT
Przykłady:
zdanie: a AND b zapisujemy: a && b,
zdanie: a OR b zapisujemy: a || b,
zdanie NOT b zapisujemy: !b,
zdanie a OR NOT(b AND c) zapisujemy: a || !(b && c)
50
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 ==.
51
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.
52
Programowanie komputerów