2. Obiective si continut curs
Ciclul de dezvoltare a programului;
Compilarea, legarea i execu釘ia programelor C;
Elemente fundamentale ale limbajului C: identificatori,
cuvinte cheie, literali, comentarii, constante;
Structura programelor C;
Tipuri de date. Operatori. Expresii
Instruc釘iuni: expresie, compus, void, atribuirea, decizia
(if), selec釘ia (switch), cicluri (while, do while, for), continue,
salturi disciplinate (break, return) i nedisciplinate (goto).
Func釘ii: apel, definire, transfer prin valoare, vizibilitate
Tablouri: declarare, tablouri uni si multidimensionale,
sortare, cautare
Pointeri: declarare si iniializare, adresare i derefereniere,
aritmetica pointerilor, funcii care returneaz pointeri
3. Obiective i coninut curs
iruri de caractere
Alocarea dinamic a memoriei: Gestiunea memoriei
libere (heap), malloc(), calloc(), realloc(), free().
Pointeri la pointeri. Tablouri de pointeri. Alocare
dinamic pentru tablouri multidimensionale.
Structuri: Declarare i initializare; Accesul la membrii;
pointeri la structuri. Tablouri de structuri. Atribuirea
structurilor. Structuri i func釘ii. Uniuni, C但mpuri de bi釘i.
Func釘ii: transfer prin referin釘, Pointeri la func釘ii.
Fiiere: I/O, Fiiere text i fiiere binare. Func釘ii
specifice lucrului cu fiiere
Parametrii liniei de comand
Realizarea de programe complexe: Crearea de librarii
statice; Vizibilitatea variabilelor.
Func釘ii cu numr variabil de parametri
4. Bibliografie
The C Programming Language - Brian
Kernighan and Dennis Ritchie
(http://zanasi.chem.unisa.it/download/C.pdf)
5. Linkuri utile
http://cs.curs.pub.ro site-ul de cursuri al
facultii (forum, alte resurse, teme)
http://ocw.cs.pub.ro/courses/programare laboratoare + regulament + alte info utile
http://talentbuddy.co instrument util pentru
a exersa probleme de programare
7. Notare
Laborator 2p
Parial 2p
Teme de cas 2p
Examen final 4p
Bonus 0.5p pentru primii 10 din serie pe
talentbuddy (nu se ia in calcul la conditiile de
trecere)
Condiii de trecere
Laborator+parial+teme de cas>=3p
Examen >=2p
9. Caracteristici C
Dezvoltat intre 1969-1973
Programare imperativ
Programul = secven de instruciuni executat de
calculator
Utilizat pentru a dezvolta sisteme de operare
i aplicaii embedded
Influeneaz/st la baza majoritatea
limbajelor moderne:
Java, C#, Javascript, Objective-C, C++
10. Etapele rezolvrii unei probleme
Analiza i prelucrarea datelor de intrare
A good programmer is someone who always looks
both ways before crossing a one-way street.
Identificm eventualele cazuri speciale ale datelor
de intrare i le tratm separat
Ex1: se cere s se citeasc numere ->ne asigurm c sau citit numere i nu alte caractere
Ex2: se cere s se calculeze raportul a 2 numere -> ne
asigurm c numitorul este diferit de 0
Prelucrri necesare (algoritm de rezolvare)
Prezentarea rezultatelor
11. Pseudocod
Descriere informal a unui algoritm/program
Exemplu:
Program care afieaz maximul a 2 numere
Se citesc 2 numere intregi a,b
Dac a este mai mare sau egal cu b
Altfel
Afieaz a
Afieaz b
Dup ce elaborm pseudocodul 樽l scriem 樽n
limbajul de programare preferat (C)
12. Prezentarea rezultatelor
Rezultatele trebuie s fie inteligibile pentru
utilizator
Aa nu
Aa da
Datele cerute de la utilizator trebuie s fie
clare
Eventualele mesaje de eroare trebuie s fie
clare
13. Compilarea i execuia programelor C
Editare fisier surs
Compilare fiier surs
Generarea unui fiier obiect
gcc c nume_sursa.c => nume_sursa.o
gcc nume_sursa.c o nume_executabil
alteOptiuni => nume_executabil
Link-editare se genereaz fiierul executabil pe
baza unuia sau mai multe fiiere obiect
14. Structura unui program C
/* comentarii */
//When I wrote this, only God and I understood what I was doing
//Now, God only knows
/* includere fisiere antet (biblioteci) */
#include <stdio.h>
/* definitii si declaraii globale*/
int maxim(int a, int b);
int main()
{
/* definiii i declaraii locale */
/* secven instruciuni */
return 0; /* finalizarea execuiei + 樽ntoarcere rezultat*/
}
15. Hello world
/* includem biblioteca standard
I/O */
#include <stdio.h>
/* functia main intoarce un
rezultat intreg */
int main()
{
printf(Hello world!n);
return 0;
}
{acelasi program in pascal}
Program HelloWorld(output);
begin
writeln('Hello, world!');
end.
16. Sintaxa C elemente de baz
Limbaj case-sensitive
Printf(hello world) nu este acelai lucru cu
printf(hello world)
Cuvintele cheie se scriu cu litere mici
Identificatorii pot conine
litere, cifre, underscore (_), nu pot incepe cu
cifr
Comentarii:
// comentariu pe o singura linie
/* comentariu care se poate 樽ntinde pe mai multe
linii*/
17. Variabile
Def: un mod de a referi o locaie de memorie
utilizat 樽ntr-un limbaj de programare
http://cplus.about.com/od/introductiontoprogr
amming/g/variabledefn.htm
Pentru a lucra cu mai multe date trebuie s le
reinem 樽n memoria calculatorului
Variabilele sunt folosite pentru a regsi locul
unde am scris datele 樽n memorie
Variabile simple: au o singur valoare la un
moment dat
18. Variabile (2)
Caracterizate de
Nume identificatorul variabilei
Tip tipul variabilei
Valoare
Adresa
Ex: int x=5;
int= tipul variabilei
x=numele variabilei
5=valoarea variabilei
&x = adresa din memorie unde se afl stocat
valoarea variabilei cu numele x.
20. Tipuri de date simple (2)
C vs. Pascal
nr bytes pentru fiecare tip de
date operatorul sizeof
C
short
int
long
Pascal
integer
float
double
real
char
char
int /* C has no
boolean type */
boolean
21. Input/Output (I/O)
/*discutate oarecum mai devreme intrucat
sunt necesare la laborator*/
int printf ( const char * format, ... );
parametri:
sir de caractere ce poate conine descriptori de
format
expresii
descriptor de format:
%[flags][width][.precision][length]specifier
http://www.cplusplus.com/reference/cstdio/printf/
22. specifier
d or i
u
o
Output
Signed decimal integer
Unsigned decimal integer
Unsigned octal
Example
392
7235
610
x
Unsigned hexadecimal integer
7fa
I/O (2)
X
f
e
E
g
G
c
s
p
n
%
Unsigned hexadecimal integer
(uppercase)
Decimal floating point,
lowercase
Scientific notation
(mantissa/exponent), lowercase
Scientific notation
(mantissa/exponent),
uppercase
Use the shortest
representation: %e or %f
Use the shortest
representation: %E or %F
Character
String of characters
Pointer address
Nothing printed.
The corresponding argument
must be a pointer to a signed
int.
The number of characters
written so far is stored in the
pointed location.
A % followed by
another % character will write a
single % to the stream.
7FA
392.65
3.9265e+2
3.9265E+2
392.65
392.65
a
sample
b8000000
%
24. scanf
int scanf ( const char * format, ... );
http://www.cplusplus.com/reference/cstdio/sc
anf/
similar cu printf
se transmite ca parametru adresa variabilei
citite
intoarce ca rezultat numrul de valori citite cu
succes
citete 樽ntr-un buffer stdin.