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
\’
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;
}