Metode evoluate de programare Limbajele c şi C++


Construcţiile de bază ale limbajului



Yüklə 1,64 Mb.
səhifə3/44
tarix07.04.2018
ölçüsü1,64 Mb.
#46828
1   2   3   4   5   6   7   8   9   ...   44

1.3. Construcţiile de bază ale limbajului




1.3.1. Caractere

Limbajul C foloseşte setul de caractere al codului ASCII care se codifică prin numere întregi din intervalul [0,127], adică 128 de coduri. Un astfel de întreg se păstrează pe un BYTE (OCTET) adică pe 8 biţi.

Mulţimea caracterelor se împarte în trei grupe:

- caractere negrafice (coduri cuprinse între 00=NUL şi 31 precum şi 127=DEL);

- spaţiu (codul 32);

- caractere grafice (coduri cuprinse între 33 şi 126).
Caracterele grafice se împart la rândul lor în:


  1. litere mari (coduri între 65 şi 90);

  2. litere mici (coduri între 97 şi 122);

  3. cifre (coduri între 48 şi 59);

  4. caractere speciale (celelalte coduri).

Caracterele negrafice au diferite funcţii. Astfel codul 10 semnifică LF (Line Feed), adică deplasează cursorul pe linia următoare în coloana 1, iar codul 13 semnifică CR (Carriage Return) adică deplasează cursorul în coloana 1 aceeaşi linie. În limbajul C combinaţia celor două caractere se notează prin:

\n

şi are semnificaţia trecerii cursorului la linie nouă şi coloana 1 (newline).



Tabulatorul orizontal (deplasarea cursorului peste un anumit număr de poziţii) se precizează prin notaţia:

\t

Să mai precizăm că următoarele 3 caractere: spaţiu, newline şi tabulator orizontal se mai numesc spaţii albe (white spaces).



1.3.2. Nume

În limbajul C, un nume este o succesiune de litere şi eventual cifre, care începe cu o literă, deci un nume este un identificator. Ca lungime un nume poate fi oricât de lung dar numai primele 32 de caractere se iau în considerare. Folosind notaţia BNF (vezi anexa) un nume se poate defini recursiv, astfel:


:: = | |

:: = A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Z|

a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|z|_



:: = 0|1|2|3|4|5|6|7|8|9|
Numele se folosesc pentru denumirea variabilelor, tablourilor, funcţiilor, etc.
Exemple:

A, _start, a_, matrice, matrice_patratica.

Dăm şi câteva contraxemple:

&B - conţine caracterul &;

x+y - conţine caracterul +;

1.3.3. Cuvinte cheie

Un cuvânt cheie este un cuvânt împrumutat din limba engleză, care are un înţeles predefinit. Aceste cuvinte se scriu cu litere mici. Un cuvânt cheie nu poate avea altă utilizare într-un program C decât cea care i-a fost predefinită. Fiind o succesiune de litere, un cuvânt cheie este un nume. Lista cuvintelor cheie se dă în anexa de la sfârşitul cărţii. Sensul fiecărui cuvânt cheie va rezulta la definirea construcţiei în care se utilizează.

Exemple:

for, do, if, while, else, break, return, int, long, double, static, extern.



1.3.4. Tipuri de bază

În limbajul C distingem câteva tipuri predefinte de date care se mai numesc tipuri de bază. În general un tip de dată are trei atribute bine conturate:



  1. mulţimea valorilor;

  2. reprezentarea (internă şi externă);

  3. comportamentul (adică operaţiile ce se pot face cu acel tip).

În tabelul de mai jos dăm cuvântul cheie, mulţimea valorilor, reprezentarea internă.
Reprezentarea internă

Cuvânt cheie Mulţimea valorilor Lungime (biţi) Formatul intern


int întregii din [-215; 215-1] 16 reprezentare binară

short întregii din [-215; 215-1] 16 reprezentare binară

long întregii din [-231; 231 - 1] 32 reprezentare binară

unsigned întregii din [0; 216-1] 16 reprezentare binară

char 8 cod ASCII

float [-3.4*10-38; 3.4*1038] 32 virgulă flotantă simplă precizie

double [-1.7*10-308; 1.7*10308] 64 virgulă flotantă dublă precizie

Facem precizarea că se poate folosi şi combinaţia unsigned long pentru întregii fără semn în dublă precizie.

Cu tipurile de bază se pot defini şi tipuri utilizator folosind instrucţiunea struct.

1.3.5. Constante

O constantă are un tip şi o valoare. Atât tipul cât şi valoarea unei constante se definesc prin caracterele care compun constanta respectivă.


Constantă întreagă zecimală

O constantă întreagă este un şir de cifre care eventual este prefixat de un semn (+ sau -) şi postfixat de litera L sau l. O constantă întreagă se reprezintă în binar pe 16 sau 32 de biţi. Sufixul L sau l forţează reprezentarea pe 32 de biţi.


Constantă întreagă octală

O constantă întreagă octală este un şir de cifre octale (cifre cuprinse între 0 şi 7) precedat de un zero nesemnificativ.



Constantă întreagă hexazecimală

O constantă întreagă hexazecimală este un şir de cifre hexazecimale prefixat cu 0x sau 0X.


Exemple:

Reprezentare Interpretare


12345 întreg zecimal reprezentat în binar pe 16 biţi

-12345 întreg zecimal reprezentat în binar pe 16 biţi

12345L întreg zecimal reprezentat în binar pe 32 biţi

012345 întreg octal reprezentat în binar pe 16 biţi (o cifră octală pe 3 biţi)

0xabcd întreg hexa reprezentat în binar pe 16 biţi (o cifră pe 4 biţi)

12345678 întreg zecimal reprezentat pe 32 de biţi


Constantă flotantă

O constantă flotantă este un număr raţional care se compune din următoarele elemente:



  1. un semn (+ sau -) care poate lipsi pentru numerele pozitive;

  2. o parte întreagă care poate fi şi vidă;

  3. o parte fracţionară care poate fi şi vidă;

  4. un exponent care poate fi şi vid.

Prezenţa părţii fracţionare este suficientă pentru ca numărul respectiv să reprezinte o constantă flotantă. Absenţa părţii fracţionare implică prezenţa părţii întregi şi a exponentului.

Partea întreagă reprezintă o succesiune de cifre zecimale. Partea fracţionară se compune din caracterul punct urmat de o succesiune de cifre zecimale, care poate fi şi vidă. Exponentul se compune din litera e sau E urmată de un + sau -, opţional, şi un şir de cifre zecimale.

Constantele flotante se păstrează în format flotant dublă precizie.

Exemple:

3.14; 0.314e1; 3.1415926; 2.71828; 2.; 271828E-5.


Constantă caracter

O constantă caracter reprezintă un caracter şi are ca valoare codul ASCII al caracterului respectiv. O constantă caracter grafic se poate scrie incluzând caracterul respectiv între caractere apostrof.


Exemple:
Constantă caracter valoare cod ASCII
‘A’ 65

‘B’ 66


‘a’ 97

‘0’ 48


‘9’ 58

‘*’ 77


Anumite caractere negrafice au notaţii speciale la scrierea cărora se utilizează caracterul backslash (\). Dăm în continuare un tabel cu cele mai folosite caractere negrafice:

Caracter Reprezentare ca şi constantă caracter Valoare cod ASCII


Backspace ‘\b’ 8

Retur de car ‘\r’ 13

Newline ‘\n’ 10

Apostrof ‘\’’ 39

Backslash ‘\\’ 92

Tabulator vertical ‘\v’ 11

Salt pagină imprimantă ‘\f’ 12

Carcterul NUL ‘\0’ 0



Constantă şir de caractere

O constantă şir de caractere este o succesiune de zero sau mai multe caractere delimitate prin ghilimele. Ghilimelele nu fac parte din şirul de caractere.

Exemple:

“123”; “Limbajul C”; “sir de caractere”; “sir\””; “”(şirul vid).



Constanta şir de caractere se reprezintă în memoria calculatorului printr-o succesiune de octeţi în care se păstrează codurile ASCII ale caracterelor şirului, iar ultimul octet conţine caracterul NUL care marchează sfârşitul şirului de caractere.

După cum se observă din exemplele date putem să folosim şi convenţia cu backslash.

De reţinut că ‘X’ şi “X” reprezintă construcţii diferite.

1.3.6. Variabile simple

Prin variabilă înţelegem o dată a cărei valoare se poate schimba în timpul execuţiei programului care o conţine. Unei variabile i se ataşează un nume prin intermediul căruia o putem referi sau modifica. Totodată valorile pe care le poate lua o variabilă trebuie să aparţină aceluiaşi tip. Corespondenţa dintre numele şi tipul unei variabile se realizează printr-o construcţie specială numită declaraţie.

După modul de grupare datele sunt:


  1. date izolate denumite şi variabile simple;

  2. date grupate:

- mulţimi ordonate de date de acelaşi tip la care ne referim cu indici,

- structuri în care date de tipuri diferite se grupează.
Declaraţia de variabilă simplă are formatul general:

tip listă_de_nume;

unde listă_de_nume este formată fie dintr-un singur nume fie din mai multe, separate prin virgule.

În limbajul C trebuie declarate toate variabilele înainte de a fi utilizate.

Exemple:

int a,b,c; // a, b, c sunt variabile de tip int reprezentate in binar pe 2 octeţi;

float x,y,z; // x, y, z sunt variabile de tip float in format flotant simpla precizie pe 32 de biţi;

char car; // car este o variabila de tip char pe 1 octet, poate conţine coduri ASCII;

long i,j,k; // i, j, k sunt variabile de tip long in format binar pe 32 de biţi.

1.3.7. Tablouri

Un tablou ca orice variabilă simplă trebuie declarat înainte de a fi utilizat. Dacă referirea la elementele tabloului se face cu un singur indice se spune că tabloul este unidimensional (se mai numeşte vector); dacă referirea se face cu doi indici tabloul se numeşte bidimensional (matrice); iar cu n indici tabloul este n-dimensional.

Declaraţia unui tablou în forma cea mai simplă este:
tip nume[l1][l2]...[ln];

unde:


l1, l2, ... ln sunt expresii constante care au valori întregi ce pot fi evaluate de compilator la întâlnirea lor.

Evident că se pot declara mai multe tablouri deodată şi atunci numele de tablouri se pot înşirui într-o listă, fiecare separat prin virgulă.


Exemple:
int t[5]; // s-a declarat un tablou unidimensional de 5 componente;

float a[5][3]; // s-a declarat un tablou bidimensional de 5*3=15 componente;


La elementele unui tablou ne referim prin variabile cu indici. O variabilă cu indici se compune din numele tabloului urmat de unul sau mai mulţi indici, fiecare indice fiind inclus în paranteze drepte. Numărul indicilor defineşte dimensiunea tabloului. Indicii sunt expresii care au valori întregi. Limita inferioară a indicilor este zero. Astfel dacă t este tabloul de tip int în exemplul de mai sus, elementele lui sunt:

t[0], t[1], t[2], t[3], t[4].


În cazul matricii a declarate mai sus elementele ei vor fi:

prima linie: a[0][0], a[0][1], a[0][2];

a doua linie: a[1][0], a[1][1], a[1][2];

...


a cincea linie: a[4][0], a[4][1], a[4][2];

Deci pentru dimensiunea k indicele variază între 0 şi lk-1.

Repartizarea memoriei pentru un tablou se face astfel: pentru fiecare element al tabloului se repartizează o zonă de memorie necesară în conformitate cu tipul tabloului respectiv (pentru tipul int câte 2 octeţi, pentru tipul float câte 4 octeţi, etc). Numele unui tablou este un pointer, el poate fi utilizat în diferite construcţii şi el are ca valoare adresa primului său element.

În desenul următor se indică repartizarea memoriei pentru tabloul t din exemplul de mai înainte:


t

adresa lui

t[0]

t[0] t[1] t[2] t[3] t[4]



1.3.8. Comentariu

În limbajul C un comentariu se scrie între /* şi */ pe oricâte rânduri. între /* şi */ se poate scrie o succesiune arbitrară de caractere, care însă nu poate să conţină secvenţa de terminare (adică */). Comentariul poate fi inserat într-un program în orice poziţie în care este legal să apară un caracter alb. El constituie o explicaţie pentru programator sau pentru utilizator. Compilatorul nu interpretează comentariul în nici un mod. Comentariul se recomandă a fi inserat în punctele în care programatorul poate lămuri prin explicaţii, anumite aspecte ale procesului de calcul sau ale datelor utilizate. În mediile BORLAND C există şi o altă convenţie de a marca un comentariu la nivelul unui rând cu ajutorul a două caractere slash (//), convenţie pe care am folosit-o de altfel în exemplele anterioare.




Yüklə 1,64 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   ...   44




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin