2. Struktura programu
Zagadnienia: Struktura programu. Zbiory (pliki) nagłówkowe. Instrukcje. Zmienne
pamięciowe. Typy danych - definiowanie zmiennych prostych. Tryb tek-
stowy pracy wyświetlacza (sterowanie kursorem, atrybuty zanków).
Ciągi znaków (stałe znakowe, stałe liczbowe, sekwencje specjalne).
Komentarz. Kontakt z programem - nawiązanie do operacji wejścia i
wyjścia.
Struktura programu
Program w języku C [16], [22], [8] niezależnie od jego rozmiaru składa się z de-
finicji jednej lub kilku funkcji opisujących, przy pomocy instrukcji języka programowa-
nia, żądane operacje procesu przetwarzania oraz definicji (deklaracji) zmiennych,
stałych i typów. Obowiązujące zasady:
" Każdy program musi zawierać dokładnie jedną funkcję o nazwie main zapisaną
następująco:
main()
{
.......
definicja ciała funkcji
......
}
" Nawiasy klamrowe (grupujące) ograniczają obszar kodu funkcji (definicji ciała
funkcji).
" Pierwsza instrukcja wykonywalna w programie wynikowym odpowiada pierw-
szej instrukcji w funkcji main w programie zródłowym.
" Instrukcje są wykonywane kolejno (sekwencyjnie) - w kolejności ich zapisu w
programie zródłowym.
" Wszystkie funkcje znajdują się na tym samym poziomie leksykalnym (sa jedna-
kowo widoczne).
" Funkcje, zmienne i stałe muszą być przed ich użyciem zdefiniowane (lub zapo-
wiedziane - zadeklarowane).
" Kolejność definicji funkcji w pliku zródłowym nie ma znaczenia (jeżeli w definio-
wanej funkcji występuje odwołanie do innej funkcji to funkcja, do której jest od-
wołanie musi być zdefiniowana lub zapowiedziana wcześnej).
Zbiory (pliki) nagłówkowe
W dowolnym miejscu programu można użyć dyrektywy preprocesora #include -
włączenia w miejsce jej wystąpienia zawartości wskazywanego zbioru [22]. Zwykle
są to tzw. zbiory nagłówkowe zawierające makrodefinicje oraz deklaracje funkcji bi-
bliotecznych lub funkcji zdefiniowanych w innych modułach programu. Zbiory na-
główkowe mają rozszerzenie h. Składnia dyrektywy:
" #include
- włączanie tzw. standardowych zbiorów nagłówko-
wych, związanych z bibliotekami standardowymi języka. Wskazany zbiór będzie
poszukiwany tylko w folderach zawierających zbiory tego typu np. w folderze
INCLUDE.
" #include nazwa pliku.h - zbiór nagłówkowy jest najpierw poszukiwany w ak-
tualnym folderze, a dopiero pózniej (jeśli nie został odnaleziony) w folderach
zawierających standardowe zbiory nagłówkowe;
Na przykład w folderze INCLUDE znajdują się pliki:
" bios.h - deklaracje funkcji odwołujących się do systemu BIOS;
Marian Urbanek Podstawy programowania.
Struktura programu.
" conio.h - zawiera makrodefinicje i deklaracje umożliwiające bezpośrednią
współpracę z konsolą;
" ctype.h - zawiera informacje wykorzystywane przez makrodefinicje do kla-
syfikowania znaków;
" dos.h - zawiera makrodefinicje i deklaracje umożliwiające wywoływanie
funkcji systemu DOS;
" stdio.h - deklaracje typów i makrodefinicje wykorzystywane przez standar-
dowe funkcje we/wy;
" string.h - wykorzystywany do przetwarzania ciągów znaków.
Instrukcje
Instrukcje umożliwiają zapis algorytmu, a co za tym idzie służą do sterowania
przebiegiem programu. Wyrażenie zakończone średnikiem jest uważane za instruk-
cję [10]. Na przykład i + 1 jest wyrażeniem, zaś x + 1; jest instrukcją. Ponadto in-
strukcjami są także:
" instrukcja pusta ; (średnik),
" instrukcja warunku (if),
" instrukcje iteracji (for, do , while),
" instrukcja wyboru (switch, case),
" instrukcje przerwania, kontynuacji (break, continue),
" instrukcja skoku (goto),
" instrukcja powrotu (return),
" instrukcja złożona { }.
Instrukcja złożona - powstaje przez zamknięcie kilku instrukcji w nawiasy
klamrowe { }. Może być użyta w każdym miejscu gdzie dopuszcza się użycie instruk-
cji, szczególnie w sytuacjach gdy konieczne jest użycie kilku instrukcji a składnia
języka dopuszcza jedną. Na przykład
{
a = 1;
b = a +1;
}
Zmienne pamięciowe
Każdy algorytm [20] składa się z dwóch zasadniczych części: opisu obiektów,
na których działa oraz opisu czynności, które są wykonywane na tych obiektach. W
językach programowania obiekty przyjęto nazywać strukturami danych1, czynności
natomiast - instrukcjami2. Pełny opis algorytmu w języku programowania nazywa
się programem.
Przeprowadzenie operacji na obiektach (danych) wymaga, przechowywania ich
wartości w komórkach pamięci. Komputer lokalizuje potrzebne do przetwarzania da-
ne poprzez znajomość adresu komórki. Takie postępowanie dla programisty jest
bardzo niewygodne. W językach programowania (wyższego poziomu) dostęp do da-
nych w pamięci odbywa się poprzez ich nazwy a nie bezpośrednio przez podanie
adresu. Przy odwoływaniu do danych można przyjąć następujące ustalenia:
" Nazwy obiektów (danych), których wartość może podczas przetwarzania ulec
zmianie nazywa się zmiennymi.
1
Struktura danych (ang. data structure) - jednostka konstrukcyjna danych złożonych, a także budowa, we-
wnętrzne powiązania i zależności.
2
Instrukcja - wyrażenie zakończone średnikiem; ciąg jednostek syntaktycznych (zgodny z zasadami gramatyki
języka). Jednostka syntaktyczna to element mający ściśle określoną składnię i interpretację.
2
Marian Urbanek Podstawy programowania.
Struktura programu.
" Obiekty (dane), których wartość nie ulega zmianie nazywa się stałymi (literały).
" Nazwa (identyfikator) musi jednoznacznie identyfikować zmienną (stałą). Może
składać się z liter, cyfr i znaków podkreślenia ( _ ).
" W nazwach (w języku C) rozróżniane są wielkie i małe litery. Na długość nazwy
nakłada ograniczenia kompilator. Tradycyjnie nazwy zmiennych pisze się ma-
łymi, a nazwy stałych wielkimi literami.
" Wszystkie obiekty (zmienne, stałe) przed użyciem muszą być zdefiniowane lub
zadeklarowane.
" Definicja zmiennej określa jej typ czyli zbiór dopuszczalnych wartości jakie
może przyjmować oraz rezerwuje dla niej miejsce w pamięci.
" Deklaracja zmiennej określa tylko typ zmiennej bez rezerwacji miejsca w pa-
mięci (wskazuje kompilatorowi, że zmienną zdefiniowano gdzie indziej).
" Jako nazw zmiennych nie można używać słów kluczowych języka3 (są zare-
zerwowane). Mają one specjalne znaczenie dla kompilatora i nie powinny być
używane jako identyfikatory. Słowa kluczowe muszą być pisane małymi literami.
Typy danych
Typy danych [22] należą do pojęć logicznych, gdyż same nie stanowią obiektu,
który mógłby zostać wykorzystany w programie. Reprezentantami typów w progra-
mach są zmienne. Zmienne zajmują pewien obszar pamięci operacyjnej, którego
rozmiar i sposób interpretacji określany jest przez typ zmiennej. Zmienne w przeci-
wieństwie do typów są pojęciami fizycznymi. Typy danych dzieli się na:
" proste (nazywane typami skalarnymi lub skalarami),
" strukturalne (złożone).
Typy proste są niepodzielne i wykorzystuje się je do tworzenia typów struktural-
nych. Do typów prostych zalicza się następujące typy danych:
" arytmetyczne (tab. 2.1),
" wskaznikowe (zawiera adres jakiegoś obszaru pamięci - innej zmiennej),
" referencyjne (służą do reprezentacji innych zmiennych).
Tabela 2.1. Przykłady arytmetycznych typów podstawowych
Typ zmiennej Zakres wartości
char - znakowy 0 255
int - liczba całkowita -32768 - 32767
short int - liczba całkowita krótka -32768 - 32767
long int - liczba całkowita długa -2.147.483.648 - 2.147.483.647
unsigned int - liczba całkowita bez znaku 0 - 65535
float - liczba zmiennoprzecinkowa 3.4E-38 - 3.4E+38
double - liczba zmiennoprzecinkowa 1.7E-308 - 1.7E308
Razem z typem int mogą występować kwalifikatory: short, long, unsigned.
Typy złożone mogą składać się zarówno z elementów typów prostych, jak rów-
nież innych typów złożonych. Do typów złożonych zalicza się:
" tablice (struktura jednorodna) - wielokrotne wystąpienie identycznych zmien-
nych (elementy tablicy zajmują kolejne bajty pamięci),
" struktury - grupa powiązanych zmiennych różnych typów (składowe struktury
zajmują kolejne bajty pamięci),
" unie - zmienne różnych typów (składowe zajmują pamięć od tego samego baj-
tu),
3
Słowa kluczowe to jednostki leksykalne mające postać ustalonych identyfikatorów - są zastrzeżone (np. int, if,
else, short, void itd).
3
Marian Urbanek Podstawy programowania.
Struktura programu.
" enum - typ wyliczeniowy,
" ciągi znaków - tablica jednowymiarowa.
Zmienne definiowane są według składni:
identyfikator typu lista identyfikatorów zmiennych;
gdzie lista identyfikatorów zmiennych składa się z nazw zmiennych oddzielanych
przecinkami.
Przykład: int indeks, j, i;
float delta, x_1, x_2;
char cyfra, litera;
Tryb tekstowy pracy wyświetlacza
Ekran w trybie tekstowym (może pracować w trybie graficznym) jest podzielony
na jednakowe pola. W każdym z pól może znalezć się jeden znak (najmniejszy wy-
świetlany element). Liczba pól w pionie i poziomie zależy od aktualnego trybu tek-
stowego. Każdy znak wyświetlany na ekranie posiada atrybuty (kolor znaku i kolor tła
oraz jasność i migotanie). Na ekranie w trybie tekstowym jest zawsze określony pro-
stokątny obszar zwany oknem tekstowym, do którego będą wysyłane dane podczas
operacji wyprowadzania (na ekran). Operacje te nie zmieniają pozostałej części ob-
razu. Domyślnie oknem tekstowym jest cały obszar ekranu. Obszar ten można ogra-
niczać definiując własne okno (rys. 2.1). Zdefiniowanie okna wymaga określenia
jego współrzędnych (nr kolumny - x; nr wiersza - y) jego lewego górnego narożnika
(x1, y1) oraz prawego dolnego narożnika (x2, y2).
wiersz nr 3 wiersz nr 3 okna
kolumna nr 2 kolumna nr 2 okna
(x, y)
wsp. znaku (3, 2) w oknie
1 2 3 4 5 6 7 8 9 .... 80
1
2
3
1 2 3 4
(x1,y1)
4
1
5
2
A
6
3
(x2,y2)
7
...
25
Rysunek 2.1. Organizacja okna tekstowego
Do zdefiniowania okna tekstowego służy instrukcja window.
window(int x1, int y1, int x2, int y2);
Nawigację w aktywnym oknie umożliwiają:
" gotoxy(int x, int y) - ustawia kursor w punkcie (x, y) aktywnego okna,
" wherex() - zwraca liczbę całkowitą określającą (kolumna - współrzędna piono-
wa x) położenie kursora,
" wherey() - zwraca liczbę całkowitą określającą (wiersz - współrzędna pozioma
y) położenie kursora,
Powyższe funkcje wymagają włączenia zbioru nagłówkowego conio.h.
Opis atrybutów znaku wysyłanego na ekran zajmuje jeden bajt (na przykład
znak koloru MAGENTA = 5, na tle koloru RED = 4, z efektem migotania), gdzie po-
4
Marian Urbanek Podstawy programowania.
Struktura programu.
szczególne bity (0 - 7) oznaczają (rys. 2.2):
7 6 5 4 3 2 1 0
1 1 0 0 0 1 0 1
kolor znaku
bit podwyższonej jasności
kolor tła
efekt migotania
Rysunek 2.2. Atrybuty znaku
Do zdefiniowania koloru tła i koloru znaku wysyłanego na ekran służą:
" textbackground(int kolor) - ustawia kolor tła; zmienna kolor informuje o kodzie
koloru na palecie kolorów(tab. 2.2),
" textcolor(int kolor) - ustawia kolor znaku,
W zbiorze conio.h zdefiniowane są nazwy stałych dla kolorów znaku (z) i tła (t).
Tabela 2.2. Kolory znaku i tła
BLACK czarny 0 t/z
BLUE niebieski 1 t/z
GREEN zielony 2 t/z
CYAN turkusowy 3 t/z
RED czerwony 4 t/z
MAGENTA karmazynowy 5 t/z
BROWN brązowy 6 t/z
LIGHTGRAY jasnoszary 7 t/z
DARKGRAY ciemnoszary 8 z
LIGHTBLUE jasnoniebieski 10 z
LIGHTGREEN jasnozielony 11 z
LIGHTCYAN jasnoturkusowy 12 z
LIGHTRED jasnoczerwony 13 z
LIGHTMAGENTA jasnokarmazynowy 14 z
YELLOW żółty 15 z
WHITE biały 16 z
BLINK efekt migotania 128
Ciągi znaków
Sekwencja dowolnej liczby znaków ujęta w znaki cudzysłowu "...." jest nazywa-
na ciągiem znaków, napisem, stałą tekstową lub tekstem [8]. Znaki cudzysłowu
nie są częścią tekstu, służą jedynie do określania jego granic. Napis "Tolka" jest re-
prezentowany następująco:
'T' 'o' 'l' 'k' 'a' '\0'
Rysunek 2.3. Interpretacja napisu
Przy takim zapisie ("Tolka") automatycznie dopisywany jest znacznik końca na-
pisu '\0' (rys. 2.3).
Stałe znakowe
Między apostrofami (np. 'x') można umieścić dowolny znak tworząc stałą zna-
kową [8]. Oznacza ona wartość równą numerycznej wartości kodu tego znaku, okre-
ślonej na podstawie zbioru znaków. Należy zwrócić uwagę na różnicę między stałą
5
Marian Urbanek Podstawy programowania.
Struktura programu.
znakową i stałą tekstową. Np. 'T' - oznacza wartość numeryczną kodu litery T, zaś
"T" oznacza literę T zakończoną znakiem końca '\0'.
Stałe liczbowe
Każda stała [17] zmiennopozycyjna jest traktowana jak liczba o podwójnej pre-
cyzji. Stałe typu long oznacza się literą L np. 126L. Dla stałych ósemkowych i
szesnastkowych wprowadzono specjalną notację: zero początkowe w stałej typu int
oznacza liczbę ósemkową, natomiast początkowe znaki 0x lub 0X oznaczają liczbę
szesnastkową.
Np. 037 oznacza stałą ósemkową 37,
0X1F oznacza stałą szesnastkową 1F.
Sekwencje specjalne
Znak ukośnika (backslash) oznacza początek sekwencji specjalnej [22], to jest
znaków o specjalnym znaczeniu. Sekwencja specjalna jest stałą, na którą można się
powołać w programie.
\a 0x07 BELL dzwonek;
\b 0x08 BS usuń znak przed kursorem (cofacz);
\f 0x0C FF nowa strona;
\n 0x0A LF nowy wiersz;
\r 0x0D CR powrót karetki;
\t 0x09 HT tabulacja pozioma;
\v 0x0B VT tabulacja pionowa;
Jeżeli zamierza się wyświetlić (wydrukować) znaki mające w języku specjalne
znaczenie należy je również poprzedzić znakiem ukośnika. Na przykład:
\\ 0x5C \ znak lewego ukośnika (drukowalny);
\ 0x27 apostrof (drukowalny);
\ 0x22 cudzysłów (drukowalny);
\? 0x3F ? pytajnik (drukowalny).
Komentarz
Oznacza dowolny napis poprzedzony znakami // lub poprzedzony znakami /* oraz
zakończony znakami */. Znakami /* */ zaznacza się komentarz składający się z wielu
wierszy, zaś znakami // rozpoczyna się komentarz obejmujący znaki tylko do końca
wiersza. Na przykład:
/*T%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%W%
Q% PROGRAM: stożek v1.0 Q%
Q% AUTOR: .......................... Warszawa 2003.09.10 Q%
Q% ZBIÓR: cw03.cpp Q%
Z%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%]%*/
Do skomentowania wiersza instrukcji można wykorzystać drugi sposób
float l, l_kw;
l = sqrt(l_kw); // sqrt(x) - pierwiastek kwadrat z x.
Kompilator ignoruje wszystkie znaki zawarte między ogranicznikami komenta-
rza. Komentarze mogą wystąpić wszędzie tam, gdzie może wystąpić odstęp lub znak
nowego wiersza.
Kontakt z programem - nawiązanie do operacji wejścia i wyjścia
Bardzo prosty sposób komunikowania się z programem zapewniają operatory
<< oraz >> związane z obiektowymi4 strumieniami wejścia i wyjścia. Dla strumieni
wejściowych (wprowadzanie danych) zdefiniowano operator >> umożliwiający wpro-
wadzanie danych typów podstawowych. Na przykład dla standardowego strumienia
4
W C++ służą do realizacji operacji wejścia-wyjścia dla wszystkich podstawowych typów danych.
6
Marian Urbanek Podstawy programowania.
Struktura programu.
wejścia reprezentowanego przez predefiniowany obiekt cin wprowadzanie danych
można zrealizować następująco:
int promien;
float wysokosc;
cin >> promien >> wysokosc;
Operacje wyjścia umożliwia operator <<. Ze standardowego strumienia wyjścia
reprezentowanego przez predefiniowany obiekt cout wyprowadzanie danych można
zrealizować następująco:
cout << " Obwod figury = " << 19.25;
Przykład cw02
Przedstawić w postaci algorytmu (rys. 2.1) ciąg czynności, których programowa
realizacja pozwoli uzyskać na ekranie monitora następujące napisy: To jest program
napisany w języku C! , Programowanie w C to jest to !! oraz Naciśnij klawisz En-
ter& .
Postępowanie Algorytm
1. Przygotowanie ekranu (wyczyszcze-
nie).
Początek
2. W drugim wierszu wyświetlenie napisu:
To jest program napisany w języku
1
C! .
Przygotowanie ekranu
3. Przejście o dwa wiersze niżej.
4. Wyświetlenie napisu Programowanie
2
w C to jest to !! .
Wyśw. napisu:"To jest program
5. Przejście o trzy wiersze niżej.
napisany w języku C!"
6. Wyświetlenie napisu Naciśnij klawisz
Enter& .
3
7. Wstrzymanie realizacji programu.
Kursor o dwa wiersze niżej
4
Wyśw. napisu
"Programowanie w C to jest to !!"
5
Kursor o trzy wiersze niżej
6
Wyśw. napisu:"Naciśnij klawisz
Enter. . ."
7
Wstrzymanie realizacji programu
Koniec
Rysunek 2.1. Algorytm wyświetlania napi-
sów
7
Marian Urbanek Podstawy programowania.
Struktura programu.
Interfejs
Program
/*T%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%W%
Q% PROGRAM: demo. Q%
Q% ZADANIE: ten program dodaje otuchy i wiary w siebie!! Q%
Q% DANE: brak. Q%
Q% WYNIKI: wyświetla na ekranie monitora miły napis. Q%
Q% AUTOR: .......................... 2001.09.10 Q%
Q% PLIK : cw02.cpp Q%
Z%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%]%*/
#include /* deklaracje funkcji umożliwiających */
/* bezpośrednią pracą z konsolą */
#include // deklaracje typów i makrodefinicji dla
#include // standardowych funkcji wejścia i wyjścia
main() /* main - funkcja "główna" programu */
{ // ciało funkcji
clrscr(); // odświeżenie okna
cout <<"\n\t\tTo jest program napisany w języku C!\n\n";
cout <<"\t\t\ Programowanie w C to jest to !!\a\a\a";
cout <<"\n";
cout <<"\n";
cout <<"\n";
cout <<"\tNaciśnij klawisz Enter...";
getch(); // zatrzymanie programu
}
Ćwiczenia
1. Polecenie dla preprocesora rozpoczyna się znakiem: a) #, b) $, c) &.
2. Włączenia pliku nagłówkowego umożliwia dyrektywa:
a) include, b) define, c) typedef.
3. Pliki nagłówkowe mają rozszerzenie: a) h, b) c, c) cpp.
4. Wykonanie programu w języku C rozpoczyna się od funkcji o nazwie:
a) clrscr, b) main, c), cprintf.
5. W trybie tekstowym pracy wyświetlacza (ekranu) najmniejszym, identyfikowalnym
elementem jest: a) znak, b) piksel, c) tekst.
6. Który z napisów jest instrukcją: a) x + 1, b) x + 1; c) #include.
7. Instrukcja złożona to sekwencja instrukcji zawarta pomiędzy znakami:
a) { }, b) /* */, c) # #.
8. Napis "filtr \"a:\\\" " będzie interpretowany na wyświetlaczu jako łańcuch znaków:
a) filtr "a:\", b) filtr \, c) filtr \"a:\\\".
8
Wyszukiwarka
Podobne podstrony:
02 struktury
struktura programu w C
02 struktura
02 Środowisko programistyczne
SO 02 Struktury Systemow Komputerowych
2008 02 Extreme Programming i CMMI – kreatywność czy dyscyplina (Cz 3) [Inzynieria Oprogramowania]
02 Machine Programming
02 Struktrura metali (4)
02 Machine Programming
1 02 Korzystanie z zalet zintegrowanego ¶rodowiska programi
2006 02 Qt ISO Maker–moja pierwsza aplikacja w Qt [Programowanie]
więcej podobnych podstron