Sunteți pe pagina 1din 80

1.

Istoric
2. Elemente sintactice de baz
3. Structura unui program C/C++
4. Apelul unei funcii
5. Revenirea din funcii
6. Directive preprocesor
7. Comentarii
8. Exemple de programe C/C++
9. Tipuri de date
10.Constante
11.Variabile simple
12.Tablouri
13.iruri de caractere
Obiective
Descrierea structurii unui program C/C++
Definirea i utilizarea practic a noiunilor:
comentarii
directive preprocessor
declaraii globale
funcii -definiia i prototipul unei funcii, apelul
unei funcii, parametri formali i parametri actuali
Dobndirea abilitilor de redactare i testare a
unor programe simple C/C++
C - creat n anul 1972 de ctre Dennis Ritchie la AT&T Lab
Implementat pentru prima dat pe calculatoate PDP-11 sub
SO UNIX
n 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
n anul 1988 apare standardul ANSI C
n anul 1981 este creat limbajul C++ de ctre Bjarne
Stroustroup la AT&T Lab, limbaj considerat ca un superset al
limbajului C
n 2011, C++11 din C++0X; n 2014, C++14
Limbajul C a fost folosit la implementarea SO UNIX iar
compilatorul C a fost scris n mare parte chiar n limbajul C
Caracteristici:
asigur o foarte bun portabilitate a codului
combin avantajele limbajelor de nivel nalt cu
funcionalitatea limbajelor de asamblare
limbaj de asamblare portabil
C/C++ se folosesc la o gam larg de aplicaii: SO,
grafic, baze de date etc.
limbaje de band larg
C - limbaj structurat (asignare, conditional, repetitiv
anterior) cu avantaje si dezavantaje
Cuvinte cheie (keywords)
Sunt rezervate pentru declaraii de date i pentru
instruciuni
Standardul ANSI C prevede 32 de cuvinte cheie
Implementrile C/C++ pot aduce extensii setului
de cuvinte cheie
Toate cuvintele cheie folosesc litere mici
Limbajul C/C++ face distincie ntre litere mici i litere
mari ( "case-sensitive") (Cod diferit de cod)
Limbaj compact
Limbaj structurat
Ofer mai multe reprezentri datelor funcie de hard
Are o bibliotec de funcii structurat
Identificatori
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
n 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
Exemple: operatori de atribuire, aritmetici, logici,
relaionali etc.
Delimitatori
Sunt simboluri care separ diverse entiti
n 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
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
pot fi modificate pe parcursul execuiei programului
n limbajul C/C++, programul este o colecie de
uniti distincte numite funcii
Structura general a unui program C/C++:
1. comentarii de nceput
2. directive preprocesor, include, define
3. prototipuri de funcii
4. declaraii/definiii globale
5. funcia main()
6. definire funcii
Preprocesorul
efectueaz operaii prealabile compilrii (includere
de fiiere, macrodefiniii)
directivele preprocesorului ncep ntotdeauna cu
caracterul #
Declaraiile/definiii globale
specific tipuri de variabile sau tipuri de date
vizibile n tot programul
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 nainte i dup)
n 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()
O funcie C/C++ are urmtoarea structur:
[tip_rezultat] <nume_functie>([lista_parametri_formali])
{
[declaratii_locale]
[instructiuni]
}
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 returneaz 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
Deci, o funcie poate fi considerat ca fiind
format din:
antet: definete interfaa cu restul programului
blocul asociat: descrie operaiile efectuate
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
Delimitatorii {} ncadreaz o construcie numit
instruciune compus (sau bloc), alctuit din declaraii
i instruciuni
Declaraiile n cadrul unui bloc se numesc declaraii
locale i sunt valabile numai pn la sfritul blocului
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 n bloc, n instruciuni gen for() etc.
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..
compilatorul poate s verifice corectitudinea apelurilor
funciei, indiferent unde se afl definiia acesteia
Observaii:
n interiorul unei funcii nu se admit alte definiii
de funcii
n 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)
Funciile unui program pot fi amplasate n mai
multe fiiere (module):
n acest caz se creaz un proiect ("project") folosind
facilitile mediului de programare
funciile definite ntr-un modul i folosite n alte module
trebuie declarate nainte de folosire direct sau prin
includerea unor fiiere antet cu prototipurile acestora
se poate folosi i mecanismul extern
n limbajul C nu exist o instruciune special de apel
Apelul unei funcii se face prin nume astfel:
nume_functie([lista_param_actuali]);
Noiuni: funcie apelant, funcie apelat
Parametrii actuali: valori corespunztoare parametrilor
formali, comunicate funciei n momentul apelului
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 ;
Parametrii actuali trebuie s corespund ca numr, poziie
i tip cu parametrii formali
Parametrii actuali sunt n general expresii:
dup evaluarea acestora se fac anumite conversii admise de la
un tip de date la altul
Revenirea dintr-o funcie se face cu instruciunea return
Prin aceast instruciune se termin execuia funciei
curente i se d controlul funciei apelante
Instruciunea return poate s apar oriunde n blocul
unei funcii
Forme: return;
return expresie;
Valoarea expresiei (cu unele conversii implicite) este
transmis funciei apelante:
expresia - s aib
tipul rezultatului declarat n prototipul funciei sau
un tip ce poate fi convertit ctre acel tip
O funcie care returneaz un rezultat trebuie s conin o
instruciune "return expresie"
Funcia apelant poate neglija rezultatul returnat de o
funcie
Dac funcia nu returneaz ceva:
instruciunea return poate lipsi
revenirea din funcie se face dup execuia ultimei instruciuni
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
Forme:
#include <nume_fisier>
#include "nume_fisier" //cautare director curent-cale mediu
Prima form permite includerea unor fiiere a cror
amplasare este specificat n setrile mediului
A doua form include fiiere antet din
directorul curent sau
calea specificat n mediu
Exemple:
#include <stdio.h>
#include "my_def.h"
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 3.1415
#define EPS 1.0E-10
#define MAX 100
#define DIM MAX*5
#undef PI
//#define CIRCUM 2*PI*7
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 astfel:
/* Comentarii specifice limbajului C dar pot fi folosite i n
limbajul C ++*/
tot ce este delimitat de caracterele /* i */ este considerat comentariu
// Comentarii specifice limbajului C++
tot ce urmeaz dup caracterele // pn la sfritul liniei curente este
considerat comentariu
La nceputul fiecrui program se va 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
faciliteaz depanarea, revizuirea i ntreinerea programelor
Exemplul 1:
// directive preprocesor
#include <stdio.h>
// functia main
void main(void)
{
printf("Hello world");
}
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);
}
Exemplul 3: program pentru citirea i afiarea unui ir de caractere
folosind funcii
// directive preprocesor
/* includerea unor fisiere antet ce contin prototipurile functiilor din
biblioteca standard folosite in program*/
#include <stdio.h>
// definirea unei constante simbolice
#define DIM 24
void main(void)
{
cit_sir(); // apel functie de citire sir
afis_sir(); // apel functie de afisare sir
}
// declaratii globale
// tablou de caractere
char tab[DIM];
// prototipuri functii
void cit_sir(void);
void afis_sir(void);
// 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);
}
Observaii:
Comentariile - 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
permit realizarea dialogului dintre operator i program
de aceea este necesar cunoaterea acestor funcii din
documentaii sau din help-ul mediului de programare
Funcia main() poate returna un rezultat i poate avea
parametri
Exemplul 4: Urmrii redactarea unui program
Click aici
Data - reprezentare a informaiei prelucrate (numr,
mrime fizic etc.) caracterizat prin:
valorile pe care le poate avea
operaiile primitive de transformare
structur
Tipul unei date determin:
valorile pe care aceasta le poate lua
dimensiunea zonei de memorie ocupate
modul n care este reprezentat valoarea n memorie
Tipul unei date se specific prin cuvinte cheie
Clasificare:
tipuri fundamentale (primitive) (aritmetice, caractere, iruri de
caractere, pointeri, referine, void etc.)
tipuri derivate (agregate) (tablouri, tipuri definite de utilizator,
liste etc.)
Alt clasificare:
tipuri predefinite (existente n limbaj)
alte tipuri definite de utilizator
Tipul void
Indic absena oricrei valori, sau prezena a ori crei valori n
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
Modificatori de tip: signed, unsigned, short, long
Tipuri de date
Tip Bii Domeniu Reprez.
bool 8
[signed] char 8 -2
7
...2
7
- 1 C2
unsigned char 8 0...2
8
- 1 C2
[signed] int 16 -2
15
...2
15
- 1 C2
short [int] 16 -2
15
...2
15
- 1 C2
signed [short int] 16 -2
15
...2
15
- 1 C2
Tip Bii Domeniu Reprez. Obs
unsigned [int] 16 0...2
16
- 1 C2
unsigned [short int] 16 0...2
16
- 1 C2
[signed] long [int] 32 -2
31
...2
31
- 1 C2
unsigned long [int] 32 0...2
32
- 1 C2
float 32 +-(3.4*10
-38
...3.4*10
+38
) VM 7 cifre
double 64 +-(1.7*10
-308
...1.7*10
+308
) VM 15 cifre
long double 80 +-(3.4*10
-4932
...3.4*10
+4932
VM 19 cifre
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
Constante ntregi
Tipuri: zecimale, octale, hexazecimale
Tipul implicit:
int
long int
unsigned long int
Tipul explicit se precizeaz prin adugarea unui
sufix (U,u, L, l):
U, u unsigned int sau unsigned long int
L, l long int sau unsigned long int
UL, Ul, ul, uL unsigned long int
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
Constante reale
Tip implicit: double
Tip explicit: prin sufixe F, f, L, l
F, f float
L, l 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
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.23x10
6
2e-4 2x10
-4
-.45E16 -0.45x10
16
.0, 0., 1., 1.0
Constante caracter
Sunt caractere ncadrate ntre apostrofuri
exemplu: 'a', '0', '+', '$
Pentru reprezentarea intern se folosete codul ASCII
n 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
n C++ tipul constantei caracter este char
Caractere ASCII:
neafiabile: 0...31, DEL (127)
afiabile: spatiu(32), 33...126
din setul extins: 128...255
Pentru a putea specifica caractere neafiabile, se
utilizeaz "secvenele de evitare" ("escape sequences")
care folosesc caracterul \ ("backslash")
\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
'\42' "
'\0x41' A
Constante ir de caractere
Sunt succesiuni de caractere delimitate de ghilimele:
Exemplu: "Sir de caractere (sic)"
Caracterele din interiorul irului pot fi secvene de
evitare:
Exemplu: "\t Sir cu tabulare"
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)"
Caracterele unui ir se memoreaz unul dup altul, pe 1
octet fiecare
Sfritul de ir se marcheaz cu caracterul '\0' (NULL)
Deci un ir de n caractere ocup (n+1) octei n memorie
Exist i noiunea de ir nul: ""
Atenie:
Caracterul 'A' ocup 1 octet n C++ i 2 octei n C
irul "A" ocup 2 octei
irul nul "" ocup 1 octet
Variabila permite reprezentarea n program a valorii unei
date, valoare ce poate fi modificat pe parcursul execuiei
unui program
Referirea la o variabil se face prin numele acesteia:
prin nume putem citi valoarea variabilei i putem modifica (scrie)
aceast valoare
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
Tipul unei variabile se specific prin cuvinte cheie
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;
Observaii:
1. Declaraia se termin obligatoriu cu delimitatorul ;
2. Pentru variabile se folosesc, de obicei, litere mici
3. Variabilele declarate n interiorul unei funcii (bloc) se
numesc variabile locale (automatice) iar cele declarate
n afara oricrei funcii se numesc variabile globale
4. Fiecrei variabile i corespunde o zon din memoria
intern care are asociate dou valori:
adresa zonei de memorie (referin, left-value sau L-value)
(poate sta n stnga unui operator de atribuire)
valoarea memorat (R-value sau right-value) (poate sta
numai n dreapta unui operator de atribuire !)
Variabilele se pot iniializa prin construcii de forma:
tip nume = expresie_constanta;
Avemdiferene ntre: declarare, asignare, iniializare
Variabilele globale se aloc n memorie la compilare i se
iniializeaz cu valoarea expresiei:
implicit se iniializeaz cu zero
Variabilele locale (automatice) se aloc pe stiv, la
execuie:
cele neiniializate au valori nedefinite
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;
70
S se scrie n limbajul C/C++ programul pentru
a calcula aria unui triunghi dreptunghic:
a) Scriei comentariile iniiale
b) Indicai directivele preprocesor pentru a
putea utiliza funciile printf i scanf
c) Declarai prototipul funciei de calcul al
ariei
n funcia principal main():
- declarai trei laturi ca variabile ntregi a,b,c
- apelai funcia de calcul a ariei
d) Definii funcia de calcul a ariei
Activitate
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
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
Tablouri
Pentru referirea unui element
se folosete operatorul de indexare [ ]
preciznd numele tabloului
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)
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
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
Acest lucru impune o mai mare atenie din partea
programatorului
Tablouri
Declaraie:
tip nume_tablou[dim
1
][dim
2
]...[dim
N
];
Referirea unui element se face astfel:
nume_tablou[index
1
][index
2
]...[index
N
];
Dac n=2 tabloul se numete matrice
Exemplu: float tab[10][5];
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 iniializa n program cu instruciuni sau folosind
valori trecute ntre acolade.
Tablouri
n limbajul C nu exist un tip de date special pentru iruri
de caractere, dar se pot folosi tablourile unidimensionale
de caractere pentru a memora iruri de caractere
Declarare:
char nume_tablou[dimensiune];
Pentru a marca sfritul irului, dup ultimul caracter se
adaug un octet cu valoarea 0 (caracterul '\0'):
n cazul unui ir vid nume_tablou[0] = '\0'
ntr-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;
iruri de caractere
Programele C/C++ au ca punct de pornire funcia
principal main()
Funciile n C/C++ sunt definite de un nume, o list
de parametri formali i un tip returnat
Datele sunt simple sau compuse i respect
anumite reguli de declarare i de utilizare
Un program bine scris conine comentarii i este
structurat pe funcii ce conin datele adecvate
80

S-ar putea să vă placă și