Documente Academic
Documente Profesional
Documente Cultură
Cuprins
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Istoric Elemente sintactice de baz Structura unui program C/C++ Apelul unei funcii Revenirea din funcii Directive preprocesor Comentarii Exemple de programe C/C++ Tipuri de date Constante Variabile simple Tablouri iruri de caractere
2
1. Istoric
A fost creat n anul 1972 de ctre Dennis Ritchie la AT&T Lab Implementat pentru prima data pe calculatoate PDP-11 sub SO UNIX In anul 1978 apare prima ediie a crii de referin The C programming Language de Brian Kernighan si Dennis Ritchie (K&R): versiuni: 1988, 2012 - eBook In anul 1988 apare standardul ANSI C In anul 1981 este creat limbajul C++ de ctre Bjarne Stroustroup la AT&T Lab, limbaj considerat ca un superset al limbajului C In 2011, C++11 din C++0X Limbajul C a fost folosit la implementarea SO UNIX iar compilatorul C a fost scris n mare parte chiar n limbajul C
3
Istoric
Caracteristici:
asigur o foarte bun portabilitate a codului combin avantajele limbajelor de nivel nalt cu funcionalitatea limbajelor de asamblare
limbaj de asamblare portabil
Identificatori
Sunt secvene de caractere folosite pentru nume de constante, tipuri de date, variabile sau funcii Un identificator este compus din litere mici sau mari, cifre i caracterul underscore (_) Un identificator nu poate s nceap cu o cifr Lungimea maxim a unui identificator depinde de implementare Identificatorii trebuie s difere de cuvintele cheie
Constante
Sunt valori fixe, reprezentnd numere ntregi sau reale, caractere sau iruri de caractere De obicei se scriu cu litere mari Exemple:
12 23.45 'A "RRRYYY"
Operatori
Sunt simboluri utilizate pentru specificarea unor operaii de efectuat asupra unor variabile sau constante In urma aplicrii unui operator se obine un rezultat O combinaie valid de operatori, variabile, constante, apeluri de funcii formeaz o expresie
cea mai simpl expresie conine doar o variabil sau o constant
Delimitatori
Sunt simboluri care separ diverse entiti In limbajul C/C++ unele simboluri au dubl semnificaie, de operator i delimitator, n funcie de context
spaiul alb {, } (, ) [, ] <, > " ' /* */ // ; (spaiu simplu, tab, newline sau LF, comentarii), delimitarea instruciunilor compuse compunerea expresiilor; definirea i apelul funciilor declarare tablou; referire element de tablou directive preprocesor sau ca operatori relaionali delimitare irurilor de caractere constante caracter sau secvene de evitare comentarii pe mai multe linii comentarii pe o singur linie marcare sfrit de instruciune
9
Date
Sunt caracterizate prin valori, operaii primitive i structur Tipurile de date se dau prin cuvinte cheie Exemple: char, int, float, double
Variabile
Permit reprezentarea n program a valorilor unor date, valori ce pot fi modificate pe parcursul execuiei programului
10
Declaraiile/definitii globale specific tipuri de variabile sau tipuri de date vizibile in tot programul
11
Structura unui program C/C++ Orice program C/C++ conine o funcie cu numele main() i eventual alte funcii Execuia programului ncepe cu funcia main() iar la terminarea execuiei acestei funcii se ncheie i execuia programului (mai sunt alte task-uri inainte si dupa) In funcia main() pot fi apelate alte funcii (proprii sau din biblioteci), care la rndul lor pot apela alte funcii, .a.m.d. Un program C/C++ nu poate avea mai multe funcii main()
12
Tip rezultat:
specific tipul de date returnat de funcie poate s fie un tip predefinit sau un tip definit de utilizator dac nu este specificat se consider implicit c este tipul int dac funcia nu returneaza nici un rezultat, se specific acest lucru prin tipul void (vid, lips)
Nume funcie:
este un identificator al limbajului:
ca urmare se face distincie ntre litere mici i litere mari funciile Fact() i fact() sunt diferite
13
Parametri formali:
o list de variabile asociate datelor ce urmeaz a fi prelucrate, folosit la definirea funciei numele acestora trebuie s fie ct mai sugestiv pentru rolul sau coninutul acestora lipsa parametrilor formali se specific prin cuvntul cheie void, sau nimic
14
Structura unui program C/C++ Delimitatorii {} ncadreaz o construcie numit instruciune compus (sau bloc), alctuit din declaraii i instruciuni Declaraiile in cadrul unui bloc se numesc declaraii locale i sunt valabile numai pn la sfritul blocului
15
Limbajul C++ permite declaraii i n interiorul unui bloc, de exemplu nainte de utilizare:
domeniul unei astfel de declaraii este cuprins ntre poziia acesteia i sfritul blocului in bloc, in instructiuni gen for(), etc.
16
Structura unui program C/C++ Se face distincie ntre declaraia i definiia unei funcii
Declaraia (prototipul) este format din antetul funciei (nume funcie, tip rezultat, tipul i eventual numele fiecrui parametru formal) i se ncheie obligatoriu cu caracterul ;
Definiia cuprinde antetul (inclusiv numele parametrilor formali dar fr caracterul ;) urmat de blocul funciei De regul, prototipul apare la nceputul programului a.i. compilatorul poate verifica corectitudinea apelurilor funciei, indiferent unde se afl definiia acesteia
17
Observaii:
In interiorul unei funcii nu se admit alte definiii de funcii In limbajul C/C++ nu exist funcii ncorporate n limbaj:
funciile unui program sunt definite de utilizator sau sunt luate din biblioteci de funcii C/C++ (*.h)
Noiuni: funcie apelant, funcie apelat Parametrii actuali: valori corespunztoare parametrilor formali, comunicate funciei n momentul apelului
19
Apelul unei funcii Dac nu exist parametri actuali, la apel se folosete combinaia nume_functie( )
Apelul unei funcii poate s apar n expresii mai simple sau mai complicate:
dac apare izolat, apelul se termin, cu caracterul ;
21
Valoarea expresiei (cu unele conversii implicite) este transmis funciei apelante:
expresia trebuie s aib tipul rezultatului declarat n prototipul funciei sau un tip ce poate fi convertit ctre acel tip
22
6. Directive preprocesor
Funciile din biblioteci sunt declarate mpreun cu constantele, tipurile i variabilele asociate n fiiere antet ("header"), avnd extensia .h" Utilizarea acestor funcii necesit includerea fiierelor antet corespunztoare n program
Acest lucru se realizeaz cu directiva preprocesor #include
23
Prima form permite includerea unor fiiere a cror amplasare este specificat n setrile mediului de programare A doua form include fiiere antet din directorul curent sau calea specificata in mediu
Exemple:
#include <stdio.h> #include "my_def.h"
24
Directive preprocesor
Directiva "define":
#define identificator sir_simboluri
Permite definirea unor constante simbolice Identificatorul este nlocuit cu irul de simboluri, din poziia curent i pn la sfritul fiierului sau pn la ntlnirea unei directive #undef ce anuleaz definiia Exemple:
#define PI #define EPS #define MAX #define DIM #undef PI //#define CIRCUM 3.1415 1.0E-10 100 MAX*5 2*PI*7
25
7. Comentarii
Permit introducerea unor explicaii n programul surs pentru creterea lizibilitii programului Nu sunt luate n considerare de ctre compilator Comentariile n limbajul C/C++ se pot introduce n dou moduri:
/* Comentarii specifice limbajului C dar pot fi folosite i n limbajul C ++*/
caz n care tot ce este delimitat de caracterele /* i */ este considerat comentariu
26
Comentarii La nceputul fiecrui program se poate utiliza un bloc de comentarii cu urmtorul coninut:
numele programului numele autorului programului, eventual adresa de e-mail o scurt descriere a programului data finalizrii primei versiuni a programului numele fiierului
Utilizarea judicioas a comentariilor n codul surs fac ca depanarea, revizuirea i ntreinerea programelor s fie mai uoar
27
28
Exemplul 2: // directive preprocesor #include <stdio.h> int sqr(int); // prototip functie sqr void main(void) { int numar, rezultat; printf("Introduceti un numar intreg : "); scanf("%d", &numar); rezultat = sqr(numar); // apel functie sqr printf("%d la patrat = %d \n", numar, rezultat); } // definitie functie sqr int sqr(int z) { return(z*z); }
29
void main(void) { cit_sir(); // apel functie de citire sir afis_sir(); // apel functie de afisare sir } // functie pentru citirea unui sir de caractere pe care il depune in tabloul global void cit_sir(void) { // apel functie din biblioteca standard pentru afisarea unui mesaj printf("\nIntroduceti sirul : "); // apel functie din biblioteca standard pentru citirea unui sir de caractere scanf("%s", tab); } // functie pentru afisarea unui sir de caractere, preluat din tabloul global void afis_sir(void) { // apel functie din biblioteca standard pentru afisarea unui mesaj // si a unui sir de caractere printf("\nSirul introdus anterior este : %s\n", tab); }
31
Observaii:
Comentariile pot s apar oriunde poate s apar un spaiu alb
Funciile printf() i scanf() fac parte din grupul de funcii de intrare/ieire pentru consol din biblioteca C:
aceste funcii permit realizarea dialogului dintre operator i program de aceea este necesar cunoaterea acestor funcii din documentaii sau din help-ul mediului de programare
32
9. Tipuri de date
Data este o reprezentare a informaiei prelucrate (numr, mrime fizic, ...) caracterizat prin valorile pe care le poate avea, prin operaiile primitive de transformare i prin structur Tipul unei date determin valorile pe care aceasta le poate lua, dimensiunea zonei de memorie ocupate i modul n care este reprezentat valoarea n memorie Tipul unei date se specific prin cuvinte cheie
33
Alt clasificare:
tipuri predefinite (existente n limbaj) alte tipuri definite de utilizator
34
Tipuri de date
Tipuri fundamentale
Tipul void
Indic absena oricrei valori, sau prezenta a ori carei valori in unele cazuri Utilizare: declararea unei funcii fr parametri sau fr rezultat (pn n aceasta faz)
Tipuri aritmetice
Tipuri de baz:char, int, float, double
bool(C++): true, false, introdus recent cu clase
35
Tip bool [signed] char unsigned char [signed] int short [int] signed [short int] unsigned [int] unsigned [short int] [signed] long [int] unsigned long [int] float double long double
Bii 8 8 8 16 16 16 16 16 32 32 32 64 80
Domeniu
Reprez. Obs
C2 C2
C2 C2 C2 C2 C2 C2 C2 7 cifre 15 cifre 19 cifre
36
10. Constante
Constantele sunt valori fixe (numerice, caractere sau iruri de caractere), nealterabile prin program Tipul constantei este determinat de compilator:
Implicit, pe baza valorii constantei Explicit, pe baza sintaxei utilizate
37
Constante
Constante ntregi
Tipuri: zecimale, octale, hexazecimale Tipul implicit:
int long int unsigned long int
38
Constante
Constante zecimale (baza 10): prima cifr nu este 0 Constante octale (baza 8): prima cifr este 0, urmat de cifre octale Constante hexazecimale (baza 16): prefix 0x sau 0X, urmat de cifre hexazecimale
O constant ntreag devine negativ dac i se aplic operatorul unar de negativare "-" Exemple:
12, -15, 24u, 43l, 678ul 076, 0777u, 01275ul 0x1A, 0x34C12, 0X123456B
39
Constante
Constante reale
Tip implicit: double Tip explicit: prin sufixe F,f , L, l
F, f L, l float long double
Se compun din:
o parte ntreag ca i o constant zecimal o parte fracionar: punct zecimal (.) urmat de o succesiune de cifre zecimale un exponent: e(E)[+,-]sir_cifre_zecimale
40
Constante Restricii:
Partea ntreag i partea fracionar nu pot lipsi simultan Punctul zecimal pe de-o parte i simbolul e(E) cu exponentul pe de alt parte, nu pot lipsi deodat
Exemple:
9.23E6 9.23x106 2e-4 2x10-4 -.45E16 -0.45x1016 .0, 0., 1., 1.0
41
Constante
Constante caracter
Sunt caractere ncadrate ntre apostrofuri
exemplu: 'a', '0', '+', '$
Pentru reprezentarea intern se folosete codul ASCII In C tipul constantei caracter este int, cu octetul mai semnificativ 0 sau cu extensie de semn i poate s apar oriunde poate s apar tipul int In C++ tipul constantei caracter este char
42
Pentru a putea specifica caractere neafiabile, se utilizeaz "secvenele de evitare" ("escape sequences") care folosesc caracterul \ ("backslash")
43
Constante \b 0x08 BS \f 0x0c FF \n 0x0a LF \r 0x0d CR \t 0x09 HT \v 0x0b VT \\ 0x5c \ \' 0x27 ' \" 0x22 " \ddd (octal) ; \0xdd ; \0Xdd (hexazecimal) Exemple:
\8' BS
Constante
Constante ir de caractere
Sunt succesiuni de caractere delimitate de ghilimele:
Exemplu: "Sir de caractere (sic)"
Caracterul " (ghilimele) poate s apar ntr-un ir dac se utilizeaz o secven de evitare:
Exemplu: "Tipul \"int\""
Un ir se continu pe rndul urmtor folosind caracterul \ (backslash), la sfritul rndului care se continu:
Exemplu: "Text (linia 1)\ continuare (linia 2)"
45
Atenie:
Caracterul 'A' ocup 1 octet n C++ i 2 octei n C irul "A" ocup 2 octei irul nul "" ocup 1 octet
46
O variabil simpl (sau izolat) nu are legtur cu alt variabil simpl Unei variabile simple i corespunde un tip de date ce nu poate fi schimbat pe parcursul execuiei programului
47
Corespondena ntre numele unei variabile i tipul acesteia se definete printr-o declaraie:
tip nume_var; tip lista_de_nume;
Exemple:
int suma; int suma, produs, media; char answer;
48
Variabile simple
Observaii:
1. Declaraia se termin obligatoriu cu delimitatorul ;
Dac tipul expresiilor de iniializare nu coincide cu tipul variabilei pe care o iniializeaza atunci se fac conversii de tip (cele permise) Exemple:
char ch='A', ans = 'N'; int k=-100, i=0; float e=2.7172;
50
12. Tablouri
Un tablou este o list de elemente de acelai tip plasate succesiv n memorie
Orice tablou are un nume Tipul elementelor tabloului reprezint tipul tabloului respectiv
Tipuri:
Unidimensionale ( uneori numite vectori) Multidimensionale
51
Tablouri
Tablouri unidimensionale
Declaraia tabloului:
tip nume_tablou[dimensiune]; tip este un tip de dat (predefinit sau definit de utilizator) nume_tablou este un identificator [ ] este delimitator dimensiune este o expresie constant ntreag i pozitiv ce specific numrul de elemente din tablou
52
Tablouri Pentru referirea unui element se folosete operatorul de indexare [ ], preciznd numele tabloului i poziia elementului n tablou (numit i index sau indice):
nume_tablou[index]
Indexul este, n general, o expresie ntreag i pozitiv (nu neaprat constant) Primul element are indexul 0, iar ultimul are indexul (dimensiune-1)
53
Tablouri Pe baza numrului de elemente i a tipului, compilatorul determin dimensiunea zonei de memorie care se aloc tabloului, dup relaia:
dimens_memorie = sizeof(tip) * dimensiune
Exemplu:
int tab[100];
primul element: tab[0] ultimul element: tab[99] un element oarecare: tab[i] dimensiunea memoriei alocate tabloului este: sizeof(int)*100 = 2(4)00
54
Tablouri
Dup alocarea memoriei necesare, la compilarea restului programului sau la execuie, nu se mai fac verificri de domeniu la indici:
de exemplu o referire de genul tab[200] nu va fi semnalat ca eroare ns va genera surprize la execuie
55
Tablouri
Tablouri multidimensionale
Declaraie:
tip nume_tablou[dim1][dim2]...[dimN];
56
Tablouri
Un tablou cu mai multe dimensiuni este de fapt un tablou unidimensional avnd ca elemente alte tablouri
Exemplu:
int tab[10][20];
este un tablou cu 10 elemente (linii) iar fiecare element este un tablou de 20 de numere ntregi (coloane) Tablourile se pot initializa in program cu instructiuni sau folosind valori trecute intre acolade.
57
Pentru a marca sfritul irului, dup ultimul caracter se adaug un octet cu valoarea 0 (caracterul '\0'):
In cazul unui ir vid nume_tablou[0] = '\0'
58
iruri de caractere Intr-un tablou se pot memora cel mult (dimensiune-1) caractere Terminatorul '\0' permite testarea uoar a sfritului irului de caractere
Constantele iruri de caractere pot fi folosite pentru iniializarea unui tablou de caractere
Exemplu:
char tab[ ] = Program de test;
59