Historia języka C

Typy danych

Typowe typy danych

1969 język BCPL; Martin Richards z University Mathematical Laboratories w Cambridge; dla pierwszej instalacji sys-Typ danych

Opis

Typowe wymagania

temu operacyjnego UNIX

pamięciowe

int

wielkość całkowita

2 bajty albo 1

1970 język B zdefiniowany dwa lata wcześniej przez Kena słowo (zmienia się

Thompsona dla pierwszego systemu UNIX działającego zależnie od

na DEC PDP-7.

kompilatora)

1972 definicja języka C przez Dennisa M. Ritchie z Bell Labo-char

pojedyńczy znak

1 bajt

ratories w New Jersey dla systemu UNIX działającego na minikomputerze DEC PDP-11.

float

liczba zmienno-

1 słowo (4 bajty)

przecinkowa

Cele:

double

liczba zmiennoprzecin-

2 words (8 bytes),

• połączenie cech języka wysokiego poziomu zapewniając łakowa podwójnej precyzji

twość projektowania algorytmów, a zarazem dostatecznie (tzn. najbardziej zna-niskiego, aby algorytmy te były optymalne.

czące cyfry i wykładnik,

które mogą mieć większy

• uniezależnienie takiego języka od konkretnej maszyny i rozmiar)

systemu operacyjnego, przy uwzględnieniu jednocześnie właściwości jak największej liczby maszyn.

Stałe

Zestaw znaków języka C

Przykład

Nazwa

C używa liter dużych A do Z, liter małych a do z, cyfr 0 do 1234

int

9 i pewnych znaków specjalnych do budowy swoich podstawo-2345l

long int

wych elementów programu takich, jak stałe, zmienne, operatory 2345L

long int

i wyrażenia.

1234u

unsigned int

Lista znaków specjalnych

2345U

unsigned int

5678ul

unsigned long int

!

*

+

\

"

<

12.34

double

*

(

=

|

{

>

1e-2

double

%

)

~

;

}

/

1.2e-2

double

^

-

[

:

,

?

2.3f

float

&

_

]

’

.

(blank)

2.3F

float

3.4e-2l

long double

Ciągi specjalne – budowane jako kombinacje, np. \b \n \t 3.4e-3L

long double

iotd.

Różne systemy liczbowe

Identyfikatory i słowa kluczowe

Identyfikatorami są nazwy nadawane różnym elementom pro-System liczbowy

gramu takim, jak zmienne, funkcje i tablice.

dziesiętny

ósemkowy

szesnastkowy

Identyfikatory składają się z liter, cyfr oraz ewentualnie znaku 31

037

0x1f

podkreślenia (_) (traktowanego jak litera) występujących w do-31

037

0X1F

wolnym porządku, z jednym ograniczeniem, że pierwszym znakiem musi być litera.

Stałe znakowe

Przykłady prawidłowych identyfikatorów: Stała znakowa jest pojedyńczym znakiem zamkniętym po-między apostrofami.

x

y12

sum_1

_temp

’A’

’a’

’3’

’$’

’ ’

names

area

tax_rate

TABLE

Zestaw znaków ASCII (American Standard Code for Information Słowa kluczowe – pewne zarezerwowane wyrazy, które mają Interchange)

predefiniowane znaczenie w C.

Standardowe słowa kluczowe:

Stała

Wartość

’A’

65

auto

extern

sizeof

’x’

120

break

float

static

’3’

51

case

for

struct

’$’

36

char

goto

switch

’ ’

32

const

if

typedef

continue

int

union

default

long

unsigned

Znaki specjalne

do

register

void

double

return

volatile

Znak

Symbol

Wartość ASCII

else

short

while

enum

signed

bell(alarm)

\a

007

cofnięcie

\b

008

Pewne kompilatory rozpoznają wszystkie albo część następu-poziomy tabulator

\t

009

jących słów kluczowych:

pionowy tabulator

\v

011

nowa linia (line feed) \n

010

ada

far

near

nowa strona (form feed)\f

012

asm

fortran

pascal

powrót karetki

\r

013

entry

huge

cudzysłów

\"

034

apostrof

\’

039

char esc=’\\’;

/*

znak \ */

znak zapytania

\?

063

int

i=0;

/*

licznik iteracji

*/

backslash

\\

092

int

limit=MAXLINE+1; /* maks. liczby iteracji

*/

null

\0

000

float eps=1.0e-5;

/* parametr dokładności

*/

liczba ósemkowa

\ooo

liczba szesnastkowa

\xoo

Domyślne wartości początkowe zmiennych: Wyrażenie stałe – wyrażenie zawierające tylko stałe statyczne i zewnętrzne -- 0

automatyczne

-- gdy wartości początkowe są

określone ta sama wartość

#define MAXL 10000

przy każdym wywołaniu funk-

#define VTAB ’\013’

cji albo wejściu do bloku.

#define VTAB ’\x7’

Bez określenia wartości po-

#define VTAB ’\X7’

czątkowych przyjmują one

#define VTAB ’\v’

wartości losowe.

Stałe napisowe – ciągi znaków zamknięte pomiędzy zna-Kwalifikator const (constant) (może być użyty do zadeklaro-kami cudzysłowu

wania dowolnej zmiennej) Mówi, że wartość zmiennej nie będzie zmieniona.

"To jest napis!"

albo

const double e=2.1234e-2;

"" /* napis pusty*/

const char msg[]="Uwaga";

int strlen(const char []);

Technicznie napis jest tablicą o liczbie elementów większej o

/* zawartość tablicy -- argument nie może jeden od liczby znaków, które zawiera napis. Po znakach wystę-

być zmieniony wewnątrz funkcji */

puje znak NULL (\0).

Stała ’x’ jest różna od "x".

Każda próba zmiany wartości zmiennej zadeklarowanej jako constant kończy się w sposób zależny od implementacji.

Stałe napisowe mogą być połączone razem w trakcie kompi-lacji programu:

char text[]="Kalifornia";

"Hej!" "Przygodo!"

jest identyczne z:

"Hej!Przygodo!"

Tablica 11 - elementowa.

Stałe wyliczeniowe

(Lista wartości stałych całkowitoliczbowych).

char text[11]="Kalifornia";

enum boolean {NO,YES};

Rozmiar powinien być wyspecyfikowany właściwie.

enum escapes {BELL=’\a’, BACKSPACE=’\b’, TAB=’\t’, NEWLINE=’\n’, VTAB=’\v’, RETURN=’\r’};

enum months {JAN=1, FEB, MAR, APR, MAY, JUN, JUL, char text[6]="Kalifornia";

/*

Stracimy koniec

*/

AUG, SEP, OCT, NOV, DEC};

char text[20]="Kalifornia"; /*

dodatkowe elementy

/*

months: february is second, march third mogą być wyzerowane, albo mogą zostać

and so on

*/

wypełnione znakami bez znaczenia */

Nazwy w różnych wyliczeniach muszą być różne. Wartości w Wyrażenia

tym samym wyliczeniu mogą się powtarzać.

Nazwa typu enum należy do tej samej przestrzeni co nazwy Wyrażenie reprezentuje pojedyńczą jednostkę danych, tak typów struktur i unii.

samo jak liczba albo znak. Wyrażenie może składać się z po-Nazwy zmiennych wylioczeniowych należą do tej samej klasy, jedyńczej wielkości takiej jak stała, zmienna, element tablicy co identyfikatory zwykłych zmiennych.

albo odniesienie do funkcji. Może równiez składać się z pewnych kombinacji takich elementów połączonych wzajemnie przez Deklaracje

jeden albo więcej operatorów.

Wyrażenie może równiez reprezenrtiować warunek logiczny (w C prawda jest reprezentowana przez liczbę całkowitą 1 a fałsz int lower,upper, step;

przez 0).

char c,lin[1000];

Instrukcje

Instrukcja poleca komputerowi wykonać pewną czynność. W

C występują trzy różne klasy instrukcji: instrukcje wyrażenia, instrukcje blokowe i instrukcje sterujące.

int lower;

Instrukcje wyrażenia – wyrażenia kończone znakiem śred-int upper;

nika (;).

int step;

char c;

char lin[1000];

a=3;

c=a+b;

++i;

Wartości początkowe mogą być przypisane zmiennym we-printf("Obszar = %f", area);

wnątrz deklaracji typu:

Instrukcja blokowa – grupa instrukcji pojedyńczych otoczo-nych parą nawiasów klamrowych ({ and })

{

pi=3.141593;

circum=2. * pi * radius;

area = pi * radius * radius;

}

Instrukcje sterujące

while (count <= n)

{

printf("x= ");

scanf("%f",&x);

sum += x;

++count;

}