Manual C/C++ în română

Embed Size (px)

DESCRIPTION

Un manual in care sunt este explicat limbajul c si C++ in romana!

Citation preview

Sergiu G. Istrati

PROGRAMAREIniializare n limbajele C i C++

Ciclu de prelegeri la disciplina Programare

Chiinu 2003

AdnotareLucrarea de fa este destinat studenilor anilor I i II seciile de nvmnt de zi i fr frecven a Universitii Tehnice a Moldovei ce studiaz disciplina Programare i n special studenilor Facultii de Radioelectronc i Telecomunicaii catedra Sisteme Otpoelectronice cu specializrile 1871 Inginerie i Management n Telecomunicaii i 2105 Sisteme Optoelectronice.

Autor: lector superior Sergiu G.Istrati

Redactor responsabil: conf. univ. dr. Pavel Nistiriuc

Recenzent: academician, dr. hab. Victor I. Borevici

U.T.M. 2003

2

Cuprins Limbajul de programare C/C++ ntroducere 1. Alfabetul limbajului 2. Structura unui program 3. Tipuri de date 3.1. Tipuri de date simple predefinite. Constante 3.1.1. Constante ntregi 3.1.2. Constante reale 3.1.2. Constante character 3.1.3. iruri de caractere 4. Variabile 4.1. Nume de variabile (identificatori) 4.2. Descrierea variabilelor 4.3. Iniializarea variabilelor 5. Operaii i expresii 5.1. Operaii aritmetice 5.2. Operaia de atribuire 5.3. Operaii de incrementare(decrementare) 5.4. Relaii i operaii logice 5.5. Operaiile logice poziionale 5.6. Operaia dimensiune 5.7. Operaia virgul 5.8. Expresii condiionate 5.9. Conversii de tip 5.10. Prioritile operaiilor 6. Instruciuni 6.1. Tipurile instruciunilor 6.2. Instruciuni expresie 6.3. Instruciuni de ramificare (condiionale) 6.3.1. Instruciunea de ramificare IF i IF-ELSE 6.3.2. Instruciunea de salt necondiionat GOTO 6.3.3. Instruciunea de selectare SWITCH 6.3.4. Instruciunea de ntrerupere BREAK 6.4. Instruciuni iterative(ciclice) 6.4.1. Instruciunea ciclic FOR 5 6 8 12 12 12 14 15 16 16 16 16 17 18 18 18 18 19 20 22 22 23 23 25 26 26 27 28 28 29 30 32 33 33

3

6.4.2. Instruciunea ciclic WHILE 6.4.3. Instruciunea de ciclare DO_WHILE 6.4.4. Instruciunea de continuare CONTINUE 7. Masive 7.1. Descrierea masivelor 7.2. Accesul la elementele masivului 7.3. Iniializarea masivelor 7.4. Exemple de prelucrare a masivelor 8. iruri de caractere 8.1. Masive de iruri 9. Structuri n C/C++ 9.1. Declararea variabilelor de tip structur 9.2. Iniierea variabilelor tip nregistrare 9.3. Folosirea structurilor 9.4. Structuri imbricate 9.5. Masive de structuri 10. Funcii n C/C++ 10.1. Transmiterea parametrilor n funcie 10.2. ntoarcerea valorilor din funcie 10.3. Prototipul funciei 10.4. Variabile locale i domeniul de vizibilitate 10.5.Variabile globale 10.6. Conflicte dintre variabile locale i globale 11. Indicatori (pointeri) 11.1. Indicatori i funcii 12. Fiiere n C/C++ 12.1. Deschiderea fiierelor 12.2. Funcii de nscriere/citire din fiier 12.2.1. nscriere/citire de caractere 12.2.2. nscriere/citire de iruri 12.2.3. ntrare/ieire cu format 12.2.4. Fiiere i structuri Anexa1. Funcii de intrare-ieire n C/C++ Anexa 2. Funcii matematice Anexa 3. Funcii folosite la prelucrarea irurilor de caractere

34 35 36 36 36 37 38 40 41 43 44 45 45 46 47 47 49 52 54 56 57 59 60 61 64 68 70 73 74 75 77 78 81 89 97

4

ntroducere Scopul prezentei lucrri este familiarizarea studenilor cu principalele instrumente i metode de programare n limbajele C i C++. Limbajul de programare C a fost elaborat de ctre Denis M.Ritchi n 1972 i descris detaliat n cartea Limbajul de programare C de Ritchi i Brian B.Kernigan. Realizarea limbajului n conformitate cu regulile descrise n carte poart denumirea de Standard C K&R i este realizarea standard minimal. n 1983 a fost creat un nou standard C de ctre American National Standards Institute numit Standard ANSI-C. Mai apoi a fost elaborat limbajul C++ ca o derivat a limbajului C. n aa fel limbajul C++ posed marea majoritate a posibilitilor limbajului ANSI-C i n plus la acestea alte instrumente de programare cu posibiliti mai avansate. Lucrarea de fa conine descrierea att a instrumentelor din limbajul ANSI-C ce snt susinute i de copmpilatoarele C++, ct i descrierea instrumentelor de programare ale limbajului C++. Deasemenea n lucrare este atras o deosebit atenie exemplelor practice de rezolvare a diferitor tipuri de probleme cu lmurire detaliat. Prezenta lucrare este o parte din suita de lucrri didactico- metodice elaborate de ctre lectorul superior Sergiu G. Istrati ndreptate spre optimizarea procesului de instruire a studenilor la disciplina Programare. Au fost elaborate urmtoarele lucrri: Ciclu de prelegeri la disciplina Programare. Limbajul Pascal. Ciclu de prelegeri la disciplina Programare. Limbajul C. (prezenta lucrare) ndrumar metodic privind ndeplinirea lucrrilor de laborator. ndrumar metodic privind ndeplinirea lucrrilor individuale. ndrumar metodic privind ndeplinirea lucrrii de curs. Toate aceste lucrri pot fi accesate n Internet pe adresa www.istrati.com

5

Limbajul de programare C. 1. Alfabetul limbajului. Numim limbaj de programare un limbaj prin care putem comunica unui calculator metoda de rezolvare a unei probleme. Iar metoda de rezolvare a problemei, dup cum tim deja o numim algoritm. ntreaga teorie informatic se ocup de fapt cu elaborarea unor noi calculatoare, limbaje de programare i algoritmi. Datoria oricrui limbaj de nivel nalt este s ne pun la dispoziie o sintax ct mai comod prin care s putem descrie datele cu care lucreaz programul nostru i instruciunile care trebuiesc executate pentru a rezolva o anumit problem. Limbajul de programare C ca i orice alt limbaj de programare i are alfabetul su i specificul de utilizare a simbolurilor. Alfabet al unui limbaj de programare se numete un set de simboluri permis pentru utilizare i recunoscut de compilator, cu ajutorul cruia pot fi formate mrimi, expresii i operatori ai acestui limbaj de programare. Alfabetul oricrui limbaj de programare conine cele mai simple elemente cu semnificaie lingvistic, iar sintaxa limbajului definete modul n care se combin elementele vocabularului pentru a obine fraze corecte (instruciuni, secvene de instruciuni, declarri de tipuri, variabile, constante, etichete, funcii, proceduri etc.). Elementele vocabularului sunt alctuite din caractere. Orice caracter este reprezentat n calculator, n mod unic, printr-un numr natural cuprins ntre 0 i 127, numit cod ASCII. Mulimea elementelor alfabetului limbajului de programare C se poate mpri n 5 grupe: 1) Simboluri folosite la formarea identificatorilor i cuvintelor cheie. n componena aceastei grupe intr literele minuscule i majuscule ale alfabetului latin (englez) i simbolul subliniere _. Este de menionat faptul c literele minuscule i majuscule de acelai fel (Exemplu: a i A) sunt interpretate ca simboluri diferite din cauza c au diferite coduri ASCII. ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz _ 2) Literele minuscule i majuscule ale alfabetului rus (sau altui alfabet naional) i cifrele arabe. 0123456789 3) Simboluri speciale ce se folosesc le organizarea proceselor de calcul i la transmiterea compilatorului unui set de instrunciuni.

6

Simbolul , . ; : ? ' ! | / \ ~ * + -

Denumirea Virgul Punct Punct-virgul Dou puncte Semnul ntrebrii Apostrof Semnul exclamrii Linie vertical Slash Slash inversat Tilda Stelua Plus Minus

Simbolul ) ( } { < > [ ] # % & ^ = "

Denumirea Parantez rotund nchis Parantez rotund deschis Parantez figurat nchis Parantez figurat deschis Mai mic Mai mare Parantez patrat deschis Parantez patrat nchis Numr (diez) Procent Ampersand Negare logic Egal Ghilimele

4) Simboluri de conducere i de desprire. n componena acestei grupe intr spaiul (blank-ul), simbolul tabulare, simbolul de trecere n rnd nou, ntoarcerea cruciorului, linie nou i pagin nou. Aceste simboluri au destinaia de a despri obiectele determinate de utilizator aa ca constante i identificatori. O consecutivitate de simboluri de desprire este precautat de ctre compilator ca un singur simbol. (Exemplu: mai multe blank-uri consecutive). 5) Pe lng grupele de simboluri precutate limbajul C pe larg folosete consecutiviti de conducere, adic combinaii de simboluri speciale folosite n funciile de intrare-ieire a informaiei. Consecutivitatea de conducere este alctuit dintr-un slash inversat (\), care se afl neaprat pe primul loc, dup care urmeaz o combinaie din litere latine i cifre. Consecutivitatea de conducere \a \b \t \n \v Echivalentul hexazecimal 007 008 009 00A 00B

Denumirea Sunet (beep) ntoarcere cu o poziie Tabulare orizontal Trecere n rnd nou Tabulare vertical7

\r \f \" \' \0 \\ \ddd (d-cifr) \xddd (d-cifr)

ntoarcerea cruciorului Trecerea n alt format Ghilimele Apostrofa Simbolul zero Slash inversat Simbolul grupului de coduri PC n sistemul octal Simbolul grupului de coduri PC n sistemul hexazecimal

00C 00D 022 027 000 05C

Consecutivitatea de tipul \ddd i \xddd (aici prin d este notat o cifr orecare) permite a scrie un cod al calculatorului ca o consecutivitate de cifre octale sau hexazecimale respectiv. De exemplu simbolul de ntoarcere a cruciorului poate fi interpretat n diferite moduri: \r consecutivitatea general de conducere, \015 consecutivitatea octal de conducere, \x00D - consecutivitatea hexazecimal de conducere. n afar de aceasta n limbaj sunt rezervate cuvinte de serviciu, numite cuvinte cheie care pot fi folosite ntr-un sens strict definit: int, float, double, char, long, signed, unsigned, const, volatile, sizeof, if, else, goto, case, default, for, while, do, break, continue, near, far, void, return, pascal, cdecl, intrrupt, auto, extern, static, register, union, enum, typedef, asm, _cs. _ds, _es, _ss, _AH, _AX, _BX, _BL, _CH, _CL, _CX, _DX, _DL, _BP, _DI, _SI, _SP. Cuvintele cheie definesc sensul semantic al instruciunilor din C. Cuvintele cheie ce ncep cu semnul _ (subliniere) se folosesc pentru acces la segmentele de date i la registrele calculatorului. Prin sintaxa unui limbaj de programare se nelege, n general, un ansamblu de reguli de agregare a unitilor lexicale pentru a forma structuri mai complexe (instruciuni, declaraii, programe etc.) Structura unui program n limbajul de programare C deasemenea i are regulile ei de sintax dup cum urmeaz: un antet, urmat de funciile secundare dup care urmeaz corpul funciei principale (care conine n componena sa i o parte declarativ). i pentru descrierea n detaliu a acestor componente sunt necesare, desigur i alte reguli. 2. Structura unui program. Pentru a primi o reprezentare general a programului n C s urmrim un exemplu concret. Presupunem, c exist un masiv unidimensional x cu n elemente de

8

tip ntreg i e necesar s alctuim un program, care calculeaz i afiaz suma elementelor ntregului masiv. Aceasta este o problem tipic pentru prelucrarea masivelor unidimensionale. n concepiile limbajului C fiecare algoritm evideniat se realizeaz de o unitate de program numit funcie. Stilul de programare n C se caracterizeaz prin tendina de a evidenia un numr mare de funcii nu prea voluminoase, astfel, ca prelucrarea datelor n aceste funcii s nu depind de celelalte pri a programului. Acest lucru face programul destul de neles i d posibilitatea de a introduce uor corecii n unele funcii fr a tangenta celelalte. Prin funciile evideniate unica cu care ncepe ndeplinirea programului se numete principal i are denumirea fixat: main. Toate celelalte funcii au denumire arbitrare, pe care programatorul singur le numete. Ele pot fi nscrise n fiierul iniial pn la funcia main (n ordine arbitrar) sau se pot afla n fiiere diferite pe un suport magnetic. n programul de mai jos, ce realizeaz rezolvarea problemei intr funcia main() i funcia numit suma(). S analizm acest program: # include # include int suma (int y[10], int m) { int i, suma=0; for (i=0;i=). 3) Mai mic (b va avea valoarea zero sau unu i compararea oricrei din aceste valori cu 2 ne d 0.

19

Astfel observm c n limbajul de programare Turbo C putem scrie expresii ce par fr sens din punct de vedere al limbajelor de programare tradiionale. S cercetm operaiile logice. Ele , de obicei, se folosesc n calitate de legturi pentru reuniune a dou sau mai multe expresii . Tabelul ce urmeaz determin operaiile logice n Turbo C. Operaiile logice: Numele operaii logice 1.Conjuncie (SI logic) 2.Disjuncie (SAU logic) 3.Negare (NU logic) Semnul operaii n Turbo C && || |

Dac expr1 i expr2 sunt careva expresii , atunci expr1 && expr2 e adevrat n cazul cnd ambele sunt adevrate expr1||expr2 e adevrat n cazul cnd mcar una din expresii e adevrat. !expr1 e adevrat dac expr1 e fals i invers. Noi am stabilit pentru expr1 i pentru expr2 cazul cel mai general fr a mai indica ce fel de expresii ele sunt. Deci avem dreptul s scriem: 5&&2 . Valoarea acestei expresii va fi 1, din cauza c n Turbo C valoarea nenul se trateaaz ca adevr iar cea nul ca fals. Prioritile operaiilor logice se aranjeaaz n ordine descresctoare astfel: Negare (!). Conjuncie (&&). Disjuncie (||). Operaiile logice au o prioritate mai mic dect operaiile de relaie. Calcularea expresiilor logice, n care sunt numai operaii &&, se termin dac se descoper falsitatea aplicrii urmtoarei operaii &&. Reeind din definiia semanticii operaia &&, cum numai apare valoarea fals prelungirea calculelor nu are rost. Analog pentru expresiile logice ce conin numai operaii ||, calculele se termin odat ce apare valoarea adevr. Exemple de expresii logice: (5>2)&&47 adevarata; !(4>7) - adevarata; 4 ~

Operaia poziional I se realizeaz asupra fiecrii perechi de bii a datelor, de exemplu dac n program avem descrierea variabilelor : int n,d; i variabila n are valoarea 5, iar variabila d are valoarea 6, atunci expresia n&d ne d valoarea 4, deoarece reprezentarea interioar a valorii variabilei n este 0000000000000101 iar a variabilei d este 0000000000000110. Rezultatul aplicrii operaiei poziionale I va fi : n 0000000000000101 d 0000000000000110 4 0000000000000100 Operaia poziional I deseori se folosete pentru evidenierea vreunui grup de bii. Operaia poziional SAU se aplic asupra fiecrei perechi de bii a datelor i deseori se folosete pentru instalarea unor bii, de exemplu, expresia: X=X | mask instaleaz n unu acei bii ai lui x, crora le corespunde unu n mask. Nu trebuie s confundm operaile logice poziionale cu operaiile logice && i || . De exemplu, expresia 1&2 are valoarea 0, iar expresia 1&&2 are valoarea 1. SAU exclusiv poziional realizeaz asupra fiecrei perechi de bii operaia de adunare dup modulul 2. Rezultatele ndeplinirii operaiei SAU exclusiv poziional se determin n tabelul urmtor : Bitul primului operand 0 0 1 1 Bitul operandului al doilea 0 1 0 1 Bitul rezultatului 0 1 1 0

Operaiile de deplasare la snga(>>) i la dreapta ( < > = == != & ^ | && || ?: = *= /= %= += -= &= |= >>= 0) if(a>b) z=a; else z=b; b) if(n>0){if(a>b) z=a;}else z=b; Deosebirea const n faptul c n cazul a) avem instruciunea if de form scurt, care are ca instruciune forma if_else; . n cazul b) avem instruciunea if_else n form plin, avnd n calitate de instruciune1 forma if prescurtat. Secvena b difer de a numai prin prezena acoladelor, ce definesc un bloc, ns, evident, joac un rol important la interpretarea acestor intruciuni. 6.3.2. Instruciunea de salt necondiionat GOTO. Instruciunea goto ne d posibilitatea transmiterii controlului execuiei programului la o instruciune marcat cu o etichet. Instruciunea goto are formatul: goto_etichet;

29

Dup instruciunea goto, evident, se ndeplinete instruciunea, eticheta creia coincide cu eticheta din goto. Folosirea cestei instruciuni n Turbo C nicidecum nu se deosebete de folosirea ei n alte limbaje algoritmice. ns e dorita folosirea ct mai redus, a acestei instruciuni, deoarece limbajul Turbo C face parte din clasa limbajelor structurate. Totodat, avnd la dispoziie instruciunile goto i if, programatorul poate programa diferite operaii complicate. Exemplu :Folosirea instruciunilor if i goto la organizarea ciclurilor. Acest program calculeaz valoarea lui y care este egal cu n/(n+5),unde n=1,..,50 #define lim 50 main() { int n=0; float y=0; m1:++n; if(n