Sunteți pe pagina 1din 21

Limbajul de programare C

Trainer: Dorin Mancu


Preambul

Trainer
memIQ
Training – arie, obiective
Organizatorice: pauză, foaie prezență
Prezentare, obiective individuale
Bibliografie

The C Programming Language, Brian W.


Kernighan, Dennis M. Ritchie, ed. 2, 1988
Introducere
1978 – prima definiție
1983 – ANSI C – sintaxa
Unelte:
Eclipse + gcc
Visual Studio Express Edition
http://www.microsoft.com/visualstudio/eng/downloads#d-express-windows-8
Exemplu:
#include <stdio.h>
main() {
printf("hello, world\n");
}
Ciclul de dezvoltare
#include <stdio.h>
/* print Fahrenheit-Celsius table
for fahr = 0, 20, ..., 300 */
main() {
int fahr, celsius;
int lower, upper, step;
lower = 0; /* lower limit of temperature scale */
upper = 300; /* upper limit */
step = 20; /* step size */

fahr = lower;
while (fahr <= upper) {
celsius = 5 * (fahr-32) / 9;
printf("%d\t%d\n", fahr, celsius);
fahr = fahr + step;
}
}
Tipuri de bază: char (ASCI), short, int, long,
float, double
Înlocuiți int cu float
Specificatori de tip: %d, %6d, %f, %6f, %.2f,
%6.2f
Structura de control for
for(i = 0; i < 10; i++) {

}
Exercițiu: aplicați for pentru a tipări invers tabela
de temperaturi
Constante simbolice
#define MAX 10
Intrări/ieșiri caracter – biblioteca standard C
stream
Exemplu:
#include <stdio.h>
main() {
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
Exerciții:
numărarea liniilor dintr-un fișier text
copiere cu compactare spații
numărare cuvinte
Tablouri
int t[10];
Exercițiu: histogramă a lungimii cuvintelor
Funcții
return-type function-name(parameter declarations, if any)
{
declarations
statements
}
return expresie;
Pasarea parametrilor unei funcții se face prin
valoare – de verificat!
Pasarea unui tablou ca parametru
Exercițiu: calcul minim pentru un tablou de
întregi
Șiruri de caractere – terminare prin null
Exercițiu: program care inversează un șir de
caractere
Variabile
Variabile globale, locale
Vizibilitatea variabilelor
Declararea variabilelor – înainte de a fi folosite
Exerciții:
scrieți un program C care elimină comentariile din
sursele C.
program pentru verificarea că parantezele sunt în
pereche și ordine corectă - () {} []
Tipuri, operatori și expresii
Variabile și constante
Tipuri predefinite: char, int, float, double
sizeof() – operator evaluat la compilare
Calificator long, short aplicat la int; long la
double
Calificator signed, unsigned – aplicat la char &
intregi
limits.h, float.h
Constante
sufix l u, f
prefix 0, 0x
‘x’ – caracter; ‘\ooo’, ‘\xhh’, secvențe escape (‘\n’)
“sir caractere”
Enumerări
enum boolean { NO, YES };
const – calificator
Operatori aritmetici: / %
Operatori relaționali și logici
bool – convenție pentru evaluarea expresiilor logice
Conversii de tip:
Implicite
Explicite – cast
Operatorii ++, -- (prefix, postfix)
Operatori pe biți: & | ^ << >> ~
Ex: setare/ regăsire biți dintr-un registru
Rotire conținut întreg – rotateL(unsigned int x, int no)ș
Împachetare/despachetare numere pe 12 biți
asignare - = += (a += b)
Expresii condiționale e1? e2: e3
Precedența și asociativitatea operatorilor
Tipuri întregi – endianess (low sau high)
Exerciții:
int htoi(char *nrHexa);
void itoa(char *buff, int cine);
Structuri de control

Blocuri { }
if
switch
while, for, do – while
break, continue
goto, eticheta
Funcții și structura programului
Mecanism de apel funcție
Surse multiple, fișiere header
Variabile statice, funcții statice
Variabile register, volatile
Valori implicite
Recursivitate; exemplu calcul factorial
preprocesor
macro-uri: MAX(A,B) ((A)>(B))? (A): (B)
Funcții cu număr variabil de parametrii (stdarg.h)
void out(char *fmt, ...) {
va_list args;
va_start(args, fmt);
vsprintf(buffer, fmt, args);
va_end(args);
....
}

Temă: proiectați un sistem de logging; elemente


- nivele: VERBOSE, INFO, DEBUG, ERROR, FATAL, OFF
- Nivel curent
- target – unde se trimit mesajele
Pointeri și tablouri
Operator &, *
NULL
Aritmetica pointerilor: p + i, p – q
Pointeri ca argumente la funcții (ex. swap)
Tablou = adresa de început
a[i] --- *(a + i)
Comparare pointeri (în cadrul unui tablou)
Pointeri la char
char* msg = “hello”;
char msg[] = “hello”;
Ex: strcmp(), memcpy() – de optimizat (transfer int)!
Tablouri de pointeri:
exercițiu sortare cuvinte
main(int argc, char *argv[])
Tablouri multidimensionale
char* var[] = {“alb”, “verde”}
char var[][10] = {“alb”, “verde”}
Pointeri la funcții
sortare generică
void qsort(void *v[], int left, int right, int (*comp)(void *, void *))
Structuri
Definire
struct point {
int x;
int y;
};
struct point pt;
struct { ... } x, y, z;
typedef
Argumente la funcții, valoare întoarsă de funcție
Structuri ce se auto-referă (arbore binar)
creare, parcurgere arbore binar

Exercițiu: implementare interpretor comenzi


Interpretor comenzi
Elemente:
Tabela de comenzi
Comandă:
verb
handler
număr parametrii – min & max
help
Interpretor - pași:
identificare cuvinte linie de comandă
căutare comandă
validare număr de parametrii
lansare handler
comada help cu parametru opțional
State machine

Sisteme reactive
Descriere UML – diagrame state machine
Implementare C:
switch-uri imbricate
tabele de funcții
Aplicație

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