ELEMENTE DE BAZA
ALE LIMBAJULUI C
Asa cum se intampla cu orice limbaj artificial, temelia pe care se cladesc programele C este alcatuita din alfabet si vocabular (atomi lexicali). Combinand atomii lexicali dupa regulile specifice de sintaxa se construiesc linii valide de program si, in final, programul.
Alfabetul limbajului
Alfabetul limbajului este alcatuit dintr-o multime de simboluri care se pot clasifica in simboluri afisabile si neafisabile.
Setul minim de simboluri afisabile (care pot fi reprezentate grafic) este alcatuit din:
· &nbs 212d32c p; &nbs 212d32c p; litere mari ale alfabetului englez:
A B C D E F G
H I J K L M N O P Q R S T
U V W X Y Z
· &nbs 212d32c p; &nbs 212d32c p; litere mici ale alfabetului englez:
a b c d
e f g h i j k l m n o p q r s t
u v w x y z
· &nbs 212d32c p; &nbs 212d32c p; cifre zecimale:
· &nbs 212d32c p; &nbs 212d32c p; liniuta de subliniere: _
· &nbs 212d32c p; &nbs 212d32c p; semne de punctuatie si semne speciale:
, . ; : ? ' ( ) a i < > " ! | t / A # &
^ * - s + A I %
Prezentam in Tabelul 11.1 denumirea unora din semnele enumerate.
Tabelul 11.1 Cateva semne folosite in C si denumirea lor
Semn |
Nume |
Semn |
Nume |
bara verticala |
slash |
||
t |
backslash |
A |
tilda |
diez |
liniuta de subliniere (underscore) |
||
& |
ampersand |
sageata sus |
Simbolurile neafisabile (fara echivalent grafic) sunt reprezentate prin secvente escape (de evitare) sau coduri backslash-caracter. Aceste simboluri reprezinta coduri ASCII care nu pot fi citite de la tastatura. Folosirea lor in programe in locul echivalentelor ASCII este recomandata din ratiuni de portabilitate.
Codurile backslash ale limbajului C sunt prezentate in Tabelul 11.2.
Tabelul 11.2 Codurile backslash din C si semnificatia lor
Coduri backslash |
Semnificatie |
ta |
Alarma |
tb |
backspace (recul cu o pozitie) |
tf |
form feed (salt pagina noua) |
tn |
newline (salt la rand nou si de la capat) |
tr |
carriage return (retur car) |
tt |
horizontal tab (tab orizontal) |
tv |
vertical tab (tab vertical) |
t' |
apostrof |
t" |
ghilimele |
t0 |
caracter nul |
tt |
backslash |
tddd |
caracter ASCII in notatie octala |
txdd |
caracter ASCII in notatie hexazecimala |
Observatii:
· &nbs 212d32c p; &nbs 212d32c p; Tab orizontal inseamna saltul cursorului cu un numar de coloane, iar tab vertical saltul cursorului cu un numar de linii.
· &nbs 212d32c p; &nbs 212d32c p; Notatia octala foloseste cifre in baza (adica ), iar notatia hexazecimala cifre in baza (adica 0,1,2,3,4,5, 6,7,8,9,A,B,C,D,E,F Se observa ca literele A,B,C,D,E,F corespund respectiv numerelor . Secventele "tddd" permit scrierea oricarui caracter din setul ASCII ca un numar octal format din trei cifre, iar secventele "txdd" ca un numar hexazecimal format din doua cifre. De exemplu, caracterul backspace poate fi scris ca "t010" sau "tx08"
Vocabularul limbajului
Vocabularul limbajului este alcatuit din atomi lexicali. Acestia reprezinta grupuri de simboluri afisabile care primesc in timpul procesului de compilare o anumita semnificatie. Prezentam mai jos urmatorii atomi lexicali:
· &nbs 212d32c p; &nbs 212d32c p; identificatori (nume)
· &nbs 212d32c p; &nbs 212d32c p; constante
· &nbs 212d32c p; &nbs 212d32c p; operatori
· &nbs 212d32c p; &nbs 212d32c p; semne de punctuatie
· &nbs 212d32c p; &nbs 212d32c p; simboluri speciale
Identificatori
Un identificator reprezinta o secventa de litere, cifre, liniute de subliniere, primul caracter din secventa fiind obligatoriu o litera sau liniuta de subliniere.
De exemplu, Cod_mat,cod_mat,y_1,ax,_ol sunt identificatori, in timp ce x1, a&b, 3xy nu sunt. In legatura cu identificatorii facem urmatoarele precizari:
· &nbs 212d32c p; &nbs 212d32c p; In C se face deosebirea intre literele mari si mici ale alfabetului. De exemplu, Cod_mat si cod_mat reprezinta nume diferite;
· &nbs 212d32c p; &nbs 212d32c p; Desi sunt permisi, este recomandabil ca identificatorii care incep cu liniuta de subliniere sa fie evitati. Ei pot coincide cu nume rezervate, invizibile programatorului, provocand erori;
· &nbs 212d32c p; &nbs 212d32c p; Standardul ANSI C nu limiteaza numarul de caractere (lungimea) unui identificator. Un compilator C va ignora insa caracterele aflate pe pozitii mai mari decat un numar prestabilit.
Cuvintele cheie sunt cuvinte rezervate C care au o destinatie prestabilita (nu pot fi folosite ca nume de functie sau variabila). Standardul ANSI C are de cuvinte cheie, din care au fost definite de varianta originala a limbajului C (standardul Kernighan/Ritchie).
Tabelul 11.3 Cuvinte cheie dupa standardul Kernighan / Ritchie
auto |
break |
case |
char |
continue |
default |
do |
double |
else |
extern |
float |
for |
goto |
if |
int |
long |
register |
return |
short |
sizeof |
static |
struct |
switch |
typedef |
union |
unsigned |
while |
Tabelul 11.4 Cuvinte cheie adaugate de standardul ANSI C
const |
enum |
signed |
void |
volatile |
Dupa cum se poate observa cuvintele cheie din C se scriu cu litere mici. Pe langa cuvintele cheie rezervate de standardul ANSI C, diverse tipuri de compilatoare C includ si cuvinte cheie folosite in exploatarea eficienta a mediului de operare specific (facilitati privind programarea interlimbaje, accesarea intreruperilor etc.), numite cuvinte cheie extinse.
Cuvintele cheie extinse folosite cel mai des sunt:
asm |
cdecl |
far |
huge |
interrupt |
near |
pascal |
_cs |
_ds |
_es |
_ss |
Constante
Constantele pot fi numere, caractere, siruri de caractere; valoarea lor nu se schimba in timpul executiei unui program. In C exista patru tipuri de constante: intreg, real, caracter, sir.
O constanta intreaga este un numar zecimal, octal sau hexazecimal care reprezinta o valoare intreaga pozitiva. Daca se doresc si reprezentari ale unor numere intregi negative se adauga semnul minus in fata constantei respective.
Constantele intregi zecimale sunt numere intregi scrise in baza (de exemplu: 38,6496), constantele octale sunt numere in baza care incep, pentru identificare, cu cifra zero (de exemplu: ), iar constantele hexazecimale sunt numere in baza care incep pentru identificare cu caracterele 0x (de exemplu: 0xA3,0xBC1,0x7E31
Constantele reale sunt numere reale pozitive. Pentru a reprezenta valori reale negative se plaseaza semnul minus in fata constantei. Semnul minus este tratat ca operator aritmetic. Exista doua modalitati de reprezentare o constantelor reale: in format F (cu punct zecimal) si in format exponential (forma stiintifica).
Reprezentarea in format F este reprezentarea uzuala pentru numere reale. De exemplu, constantele ,-4296.823, .69 sunt valori reale reprezentate in format F. Se observa ca partea intreaga a reprezentarii poate sa lipseasca atunci cand este egala cu zero ( este tot una cu
O
numar simbexp valexp
unde
· &nbs 212d32c p; &nbs 212d32c p;
numar
este o
· &nbs 212d32c p; &nbs 212d32c p; simbexp este E sau e
· &nbs 212d32c p; &nbs 212d32c p; valexp este o constanta intreaga pozitiva precedata sau nu de semnele sau
· &nbs 212d32c p; &nbs 212d32c p; grupul simbexp valexp se interpreteaza ca fiind egal cu valexp
Remarca. In realitate intre numar simbexp valexp nu apar spatii. De exemplu, numerele reale: se scriu, respectiv: 1.6E+3,-2.6E-4, 0.32e+6,423E+04.
O constanta caracter este o litera, cifra, semn de punctuatie sau secventa escape cuprinse intre doua apostrofuri. Exemplu de constante caracter: 'a','tn','t'','7' reprezentand respectiv a,newline, apostrof,7
O constanta sir este o secventa de litere, cifre si simboluri incluse intre ghilimele. Exemple de constante sir: "tn Acesta e un sir", "Str. Cameliei, nr.3" etc.. Constantele sir se memoreaza in octeti consecutivi (un octet pentru fiecare caracter). Sfarsitul sirului este marcat de un octet nul (care contine 't0') ce se adauga automat. Din acest motiv un sir cu n caractere ocupa n+1 octeti consecutivi.
Operatori
Operatorii reprezinta combinatii de semne speciale care arata modalitatea de prelucrare sau atribuire a valorilor. Limbajul C poseda o bogata familie de operatori, fapt ce permite elaborarea unor programe compacte.
In Tabelul 11.5 prezentam lista operatorilor C si semnificatia lor.
Tabelul 11.5 Lista operatorilor C si semnificatia lor
Operator |
Semnificatie |
ai |
paranteze drepte (stanga si dreapta) |
paranteze rotunde (stanga si dreapta) |
|
membru structura |
|
referinta indirecta la membru de structura |
|
incrementare (prefix sau postfix) |
|
decrementare (prefix sau postfix) |
|
sizeof |
dimensiunea unei variabile sau unui tip in octeti |
A |
NOT pe bit |
NOT logic |
|
& |
adresa, +I pe bit |
indirectare, inmultire |
|
impartire |
|
adunare |
|
scadere, negatie aritmetica |
|
<< |
deplasare logica pe bit la stinga |
>> |
deplasare logica pe bit la dreapta |
ss |
egalitate |
!s |
neegalitate |
< |
mai mic |
> |
mai mare |
<s |
mai mic sau egal cu |
>s |
mai mare sau egal cu |
SAU exclusiv pe bit |
|
SAU pe bit |
|
&& |
+I logic |
SAU logic |
|
operator conditional |
|
s |
atribuire simpla |
ops |
atribuire compusa |
modul |
|
virgula (operator de secventiere) |
Observatie Caracterul op de la atribuirea compusa poate fi unul din semnele * / % + - >> << ê& ^ rezultand corespunzator operatorii compusi *s /s %s +s -s >>s <<s ês &s ^s.
Intre semnele care alcatuiesc un operator compus nu trebuie sa existe spatiu. De exemplu, operatorul >s nu poate fi utilizat sub forma > s De la regula de mai sus face exceptie operatorul conditional (?:) care are alta interpretare.
Semne de punctua|ie
Semnele de punctuatie folosite in C sunt: # : AI
Utilizarea lor va fi exemplificata pe parcursul lucrarii.
Simboluri speciale
Orice simbol care nu apartine alfabetului C este
considerat atom lexical. Astfel de semne sunt: si Ele pot fi folosite in constructia constantelor caracter
si a sirurilor. Ca exemplu, consideram
Atomii lexicali sunt separati in cadrul programului prin simboluri ale alfabetului cu rol de separator. Separatorii sunt: spatiul, tabul (orizontal si vertical), sfarsit de linie, sfarsit de pagina, comentariu. Prin comentariu se intelege orice succesiune de simboluri cuprinse intre si . Comentariile nu sunt luate in considerare de compilator, ele servesc la documentarea programului usurand intelegerea si depanarea lui. Un comentariu poate fi plasat oriunde in program si se poate intinde pe unul sau mai multe randuri.
Exemplu:
Acest program calculeaza produsul a doua matrici. Matricile de intrare A(4x3) si B(3x2) se citesc de la tastatura, iar matricea produs rezultata este C(4x2).
Comentariile nu pot fi imbricate (incluse unul in altul). De exemplu, urmatoarea constructie este eronata:
/* Un comentariu care include
/* un comentariu inclus */
Modul in care sunt aranjati atomii lexicali intr-un program este impus de specificul problemei si de regulile de sintaxa ale limbajului.
TESTE DE CONTROL
Un identificator este:
a) &nbs 212d32c p; o secventa de cifre, liniute de subliniere si litere
b) &nbs 212d32c p; o secventa de cifre, liniute de subliniere si litere, primul caracter din secventa fiind obligatoriu liniuta de subliniere sau litera
c) &nbs 212d32c p; o secventa de cifre, litere, spatii, liniute de subliniere
In C un identificator poate fi scris:
a) &nbs 212d32c p; numai cu litere mici
b) &nbs 212d32c p; numai cu litere mari
c) &nbs 212d32c p; combinat, cu litere mici si litere mari
Daca intr-un identificator C se inlocuieste o litera mica (mare) cu litera sa omoloaga mare (mica) atunci:
a) &nbs 212d32c p; identificatorul obtinut este considerat identic cu primul
b) &nbs 212d32c p; se obtine un identificator diferit
In C exista:
a) &nbs 212d32c p; patru tipuri de constante: intregi, reale, caracter, sir
b) &nbs 212d32c p; patru tipuri de constante: naturale, reale, complexe, caracter
c) &nbs 212d32c p; cinci tipuri de constante: intregi, reale, complexe, caracter, sir
In C secventa de cifre este interpretata ca:
a) &nbs 212d32c p;
o
b) &nbs 212d32c p;
o
c) &nbs 212d32c p;
o
Secventa de caractere 0xABC poate fi:
a) &nbs 212d32c p; un identificator
b) &nbs 212d32c p;
o
c) &nbs 212d32c p; si una si alta
Cuvintele cheie:
a) &nbs 212d32c p; au semnificatii date de programator
b) &nbs 212d32c p; au semnificatii prestabilite
c) &nbs 212d32c p; au semnificatii date de contextul in care sunt utilizate
Despre constantele reale 3.0E si se poate afirma ca:
a) &nbs 212d32c p; sunt gresite deoarece contin punct in loc de virgula
b) &nbs 212d32c p; sunt corecte si reprezinta valori diferite
c) &nbs 212d32c p; sunt corecte si reprezinta aceeasi valoare
d) &nbs 212d32c p; sunt gresite deoarece prima contine litera E, iar a doua nu are parte intreaga
Secventa 'a' reprezinta:
a) &nbs 212d32c p; un sir
b) &nbs 212d32c p; un caracter
Secventa
'Citirea matricii A'
reprezinta
a) &nbs 212d32c p; un sir
b) &nbs 212d32c p; un comentariu
c) &nbs 212d32c p; nici una, nici alta
Constructiile
'a'
si
"a"
a) &nbs 212d32c p; reprezinta acelasi lucru
b) &nbs 212d32c p; reprezinta un sir, respectiv un caracter
c) &nbs 212d32c p; reprezinta un caracter, respectiv un sir
RASPUNSURI
11.1-b 11.2-c 11.3-b 11.4-a 11.5-b
11.6-b 11.7-b 11.8-c 11.9-b 11.10-c
11.11-c
|