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 definiie
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
nlocuii int cu float
Specificatori de tip: %d, %6d, %f, %6f, %.2f,
%6.2f
Structura de control for
for(i = 0; i < 10; i++) {

}
Exerciiu: aplicai for pentru a tipri invers tabela
de temperaturi
Constante simbolice
#define MAX 10

Intrri/ieiri caracter biblioteca standard C


stream
Exemplu:
#include <stdio.h>
main() {
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}

Exerciii:
numrarea liniilor dintr-un fiier text
copiere cu compactare spaii
numrare cuvinte

Tablouri
int t[10];

Exerciiu: histogram a lungimii cuvintelor


Funcii
return-type function-name(parameter declarations, if any)
{
declarations
statements
}
return expresie;

Pasarea parametrilor unei funcii se face prin


valoare de verificat!
Pasarea unui tablou ca parametru
Exerciiu: calcul minim pentru un tablou de
ntregi
iruri de caractere terminare prin null
Exerciiu: program care inverseaz un ir de
caractere
Variabile
Variabile globale, locale
Vizibilitatea variabilelor
Declararea variabilelor nainte de a fi folosite

Exerciii:
scriei 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, secvene escape (\n)
sir caractere

Enumerri
enum boolean { NO, YES };
const calificator
Operatori aritmetici: / %
Operatori relaionali i logici
bool convenie pentru evaluarea expresiilor logice

Conversii de tip:
Implicite
Explicite cast

Operatorii ++, -- (prefix, postfix)


Operatori pe bii: & | ^ << >> ~
Ex: setare/ regsire bii dintr-un registru
Rotire coninut ntreg rotateL(unsigned int x, int no)
mpachetare/despachetare numere pe 12 bii

asignare - = += (a += b)
Expresii condiionale e1? e2: e3
Precedena i asociativitatea operatorilor
Tipuri ntregi endianess (low sau high)

Exerciii:
int htoi(char *nrHexa);
void itoa(char *buff, int cine);

Structuri de control
Blocuri { }
if
switch
while, for, do while
break, continue
goto, eticheta

Funcii i structura programului


Mecanism de apel funcie
Surse multiple, fiiere header
Variabile statice, funcii statice
Variabile register, volatile
Valori implicite
Recursivitate; exemplu calcul factorial
preprocesor
macro-uri: MAX(A,B) ((A)>(B))? (A): (B)

Funcii cu numr variabil de parametrii (stdarg.h)


void out(char *fmt, ...) {
va_list args;
va_start(args, fmt);
vsprintf(buffer, fmt, args);
va_end(args);
....
}
Tem: proiectai 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 funcii (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:
exerciiu sortare cuvinte
main(int argc, char *argv[])
Tablouri multidimensionale
char* var[] = {alb, verde}
char var[][10] = {alb, verde}

Pointeri la funcii
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 funcii, valoare ntoars de funcie
Structuri ce se auto-refer (arbore binar)
creare, parcurgere arbore binar

Exerciiu: implementare interpretor comenzi

Interpretor comenzi
Elemente:
Tabela de comenzi
Comand:
verb
handler
numr parametrii min & max
help

Interpretor - pai:
identificare cuvinte linie de comand
cutare comand
validare numr de parametrii
lansare handler
comada help cu parametru opional

State machine
Sisteme reactive
Descriere UML diagrame state machine
Implementare C:
switch-uri imbricate
tabele de funcii
Aplicaie

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