Wprowadzenie do języka C

Wstęp   Budowa programów   Typy danych   Operatory arytmetyczne


Wiadomości wstępne.

Język C jest jednym z najważniejszych współczesnych języków programowania- Został opracowany przez Kernighama i Ritchiego ponad 20 lat temu. Język ten został użyty do napisania przeważającej części systemu operacyjnego UNIX i tym samym stał się językiem programowania systemowego. Od systemu UNIX wziął się system operacyjny LINUX.

Tworzenie programu odbywa się w dwóch etapach:

a) opracowanie kodu źródłowego (jest to czysty plik tekstowy)
Pierwszy etap polega na zapisaniu algorytmu za pomocą instrukcji języka. W efekcie otrzymamy kod źródłowy programu, który jest plikiem tekstowym zawierającym zapis algorytmu zgodny z zasadami składni języka.

b) generowanie kodu wynikowego
Drugi etap polega przetłumaczeniu konstrukcji właściwych językowi C na rozkazy procesora i doprowadzeniu programu do postaci wynikowej w danym systemie komputerowym. Zatem wystarczy z głównego okna edytora języka C użyć polecenia Compile/C'ompile w celu kompilacji i Run/Run w celu wykonania programu.

Język C korzysta z doświadczeń języków Algol i Pascal. Programy nauczania często przewidują nauczanie języka C dopiero po opanowaniu języka Pascal. Znajomość Pascala jest pomocna w nauce języka C, ponieważ oba te języki mają wiele cech wspólnych.

Wspólne cechy języka Pascal i C

1. Blokowa budowa programów. Programy zbudowane są z funkcji, a instrukcje w funkcjach są blokowane nawiasami {} (begin - end). Każdy zblokowany ciąg instrukcji traktuje się jak pojedynczą instrukcję.
2. Zasięg deklaracji zmiennych rozciąga się na blok, w którym ta deklaracja występuje i wszystkie bloki wewnętrzne, w których nie zadeklarowano inne) zmiennej o tej samej nazwie. Zmienne zadeklarowane w bloku przesłaniają zmienne o tych samych nazwach zadeklarowane na zewnątrz.
3. Wszystkie funkcje są globalne.
4. Konstrukcje instrukcji if, switch oraz instrukcje pętli są podobne

W porównaniu z Pascalem język C ma prostszą logikę, dzięki czemu Jest on bardziej elegancki i daje większą swobodę programowania. Na uwagę zasługują następujące uproszczenia.

Uproszczenia języka C

1. Wszystkie wartości są liczbowe (całkowite lub zmiennoprzecinkowe), dozwolone są zatem wyrażenia takie jak 'A'-1, czy 3+(a < b).
2. Nie rozróżnia się funkcji od procedur. Rolę procedury pełni funkcja nie zwracająca wartości. Poprawne są więc instrukcje: y=sin(x), oraz sin(x),.
3. Wywołanie funkcji zawsze zawiera nawiasy ( ), nawet, gdy funkcja nie ma parametrów
np: c=getch( ), lub clrscr( );
4. Parametry funkcji przekazywane są tylko przez wartość.
5. Każda instrukcja kończy się średnikiem (nawet ta przed else).
6. Wszystkie operatory zwracają wartości, np: a=b posiada swoją wartość podobnie jak a+b.
7. Wszystkie tablice są jednowymiarowe. Nawiasy [] są też operatorem podobnie jak np dodawanie i podobnie jak w przypadku a+b+c można tworzyć konstrukcje A[i][j].
8. Wszystkie pętle są typu "while", to znaczy wykonują się tak długo jak długo jest spełniony zadany warunek.

Szata graficzna programu napisanego w języku C może być dowolna. Zaleca się, aby każda instrukcja była napisana w oddzielnym wierszu - tak samo jak w języku Pascal.

Spis zagadnień


Budowa programów w języku C

Program w języku C jest podzielony na bloki zawarte między nawiasami klamrowymi  {  i  } (są to odpowiedniki "begin" i "end" z Pascala). Każdy blok może być kompletną funkcją, albo po prostu fragmentem kodu w ramach danej funkcji. Funkcja jest to po prostu wydzielona cząstka programu, która wykonuje jakieś zadanie (np. oblicza pole powierzchni prostokąta o danych bokach). W każdym programie napisanym w języku C musi znaleźć się funkcja o nazwie "main". Jest to główna programu, od której zaczyna się program. Najprostszy program w języku C wygląda więc tak:

void main(void) {          }

lub

main( ) {

            return 0;

            }

Istnieje tutaj jedna funkcję "main", która w tym przypadku nie zawiera żadnego kodu (czyli nic nie robi). Jak widzimy definicja funkcji składa się z nagłówka, który określa jej nazwę, parametry wejściowe i rodzaj zwracanej wartości oraz z właściwego ciała funkcji zawartego między { i }. Zapisując to inaczej definicja funkcji wygląda to tak:

typ_zwracanej_wartości  nazwa_funkcji(lista parametrów)  {         }

Funkcja w Pascalu wyglądała nastepująco:

function  nazwa_funkcji(lista parametrów) : typ_zwracanej_wartości;
begin

  
end;

Należy zauważyć, że po nazwie funkcji w języku C nie stawiamy średnika, tak jak to było w Pascalu (średnik symbolizuje zakończenie instrukcji w C).

W języku C każdy identyfikator lub nazwa funkcji musi zaczynać się od litery, albo od podkreślenia dolnego "_". Pozostałe znaki identyfikatora mogą oprócz liter i "_" zawierać także cyfry. Długość jest ograniczona do 32 znaków (może być większa, ale pozostałe znaki są po prostu ignorowane). Język C rozróżnia wielkość liter, tak więc "Zmienna" i "zmienna" to dwie różne nazwy.

Spis zagadnień


Typy danych

W języku C są  podstawowe proste typy danych: znakowy, liczba całkowita, liczba rzeczywista. Typy te można nieco zmodyfikować poprzez dodanie przy deklaracji następujących słów: "signed", aby uzyskać liczbę ze znakiem (jest to ustawienie domyślne); "unsigned", aby uzyskać liczbę bez znaku; "short", aby zmniejszyć wielkość zmiennej (ale zmniejszeniu ulega także zakres); "long", aby zwiększyć wielkość zmiennej (zwiększeniu ulega zakres, ale zmienna zajmuje więcej miejsca w pamięci).

Poniższa tabela zawiera podstawowe typy danych (najczęściej używane oznaczone kolorem niebieskim):

Nazwa typu

Typ

Zakres

Wielkość (w bajtach)

char

całkowity

-128..127

1

unsigned char

całkowity

0..255

1

int

całkowity

-2^31..2^31-1

4

unsigned int

całkowity

0..2^32

4

short int

całkowity

-32768..32767

2

unsigned short int

całkowity

0..65535

2

long int

całkowity

-2^31..2^31-1

4

unsigned long int

całkowity

0..2^32

4

float

rzeczywisty

6 znaków precyzji

4

double

rzeczywisty

10 znaków precyzji

8

   
Deklaracja zmiennej:

typ_danych    nazwa_zmiennej;

typ_danych    lista_zmiennych_oddzielonych_przecinkiem;

Przykłady deklaracji zmiennych:

char  znak;

int     liczba, a, suma;

  Można zadeklarować zmienną i przypisać jej wartość początkową:

char  znak='A';

int     liczba=15, a, suma=0;

Konstrukcja taka nie występuje w Pascalu, gdzie blok deklaracji zmiennych jest wydzielony.
Deklaracja zmiennej całkowitej o nazwie "dlugosc" (wraz z przypisaniem jej wartości początkowej) wygląda tak:

long  dlugosc=5;

Natomiast deklaracja zmiennej rzeczywistej o nazwie "pole" (wraz z przypisaniem jej wartości początkowej) może wyglądać nastepujaco:

float  pole=3.48;

Część całkowitą oddzielamy od części ułamkowej przy pomocy kropki, nie przecinka.

Deklaracja wszystkich zmiennych musi być wpisana zaraz za znakiem {  (znak ten rozpoczyna każdy blok). Zmienna taka jest lokalna, czyli jest dostępna tylko wewnątrz bloku, w którym jest zadeklarowana.

{

float  pole=3.48;

int liczba;

         {

         char  znak;

         float  zmienna;

 

         }

}


Istnieje jeszcze typ bezwartościowy “void”, który użyty był w przykładzie. Oznacza on tyle, że dana funkcja „main” nie zwraca żadnej wartości i nie przyjmuje żadnych parametrów.

void   main(void)

Stosowanie typów danych i deklaracji zmiennych będzie dalej opisane.

Spis zagadnień


Operatory arytmetyczne

Język C jest zawiera dużą ilość operatorów. Poznaliśmy już operator przypisania, przyszła pora na następne. Przedstawię to w formie tabeli, która będzie także zawierać pascalowy odpowiednik.

C

Pascal

Opis

+

+

dodawanie

-

-

odejmowanie

/

/ lub div

dzielenie

*

*

mnożenie

%

mod

reszta z dzielenia

++

brak

zwiększenie o 1

--

brak

zmniejszenie o 1

<<

shl

przesunięcie bitowe w lewo

>>

shr

przesunięcie bitowe w prawo

 


   Powrót do strony głównej