elemente c

9
Elemente ale limbajului C A. Cuvinte cheie Standar d: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while B. Tipuri predefinite (standard) Identificator size of (PC) Domeniul de valori Descriptori conversie Exemple de constante Char signed char 1 -128 .. 127 %c %i %d %x %o ‘A’ 0x41 ‘\n’ Unsigned char 1 0 .. 255 int signed int 2 -32768 .. 32767 %i %d %x %o 12 0xC Short int signed short int %hi %hd %hx %ho 014 -32500 unsigned int 2 0 .. 65535 %u %x %o 0xfff unsigned short int %hu %hx %ho 65535u long int signed long int 4 -2147483648 .. 2147483647 %li %ld %lx %lo -1L 300000l unsigned long int 4 0 .. 4294967295 %lu %lx %lo 4000000000ul float 4 3.4e –38 .. 3.4e+38 %f, %e, %g 1.2 double 8 1.7e-308 .. 1.7e+308 %lf %le %lg 8e9 long double 10 3.4e-4932 .. 1.1e+4932 %Lf %Le %Lg -1.23456789 2.5e-30 C. Definitii si declaratii Definitii de noi tipuri (se prezinta forma generala si exemple) enumerare enum id_enum {lista_valori}; enum raspuns {DA, NU, Nedecis}; typedef enum id_tip_enum {lista_valori}; typedef enum Logic {Adev, Fals}; 1

Upload: bianca-tudora

Post on 12-Dec-2015

214 views

Category:

Documents


2 download

DESCRIPTION

Basic notions about C language

TRANSCRIPT

Page 1: Elemente C

Elemente ale limbajului C

A. Cuvinte cheie

Standard: auto double int structbreak else long switchcase enum register typedefchar extern return unionconst float short unsignedcontinue for signed voiddefault goto sizeof volatiledo if static while

B. Tipuri predefinite (standard)

Identificator sizeof(PC)

Domeniul de valori Descriptori conversie

Exemple de constante

Charsigned char

1 -128 .. 127%c %i %d %x %o

‘A’ 0x41‘\n’

Unsigned char 1 0 .. 255int signed int 2 -32768 .. 32767

%i %d %x %o 120xC

Short intsigned short int

%hi %hd %hx %ho 014-32500

unsigned int 2 0 .. 65535 %u %x %o 0xfffunsigned short int %hu %hx %ho 65535ulong intsigned long int

4 -2147483648 .. 2147483647 %li %ld %lx %lo -1L300000l

unsigned long int 4 0 .. 4294967295

%lu %lx %lo 4000000000ul

float 4 3.4e –38 .. 3.4e+38 %f, %e, %g 1.2double 8 1.7e-308 .. 1.7e+308 %lf %le %lg 8e9long double 10 3.4e-4932 ..

1.1e+4932 %Lf %Le %Lg -1.23456789

2.5e-30

C. Definitii si declaratii

Definitii de noi tipuri (se prezinta forma generala si exemple)

enumerare

enum id_enum {lista_valori}; enum raspuns {DA, NU, Nedecis};

typedef enum id_tip_enum {lista_valori}; typedef enum Logic {Adev, Fals};

structura

struct id_str { tip_camp lista_id_campuri;

. . . . . };

struct produs {int cod; unsigned long cantitate, pret; };

typedef struct id_s /* id_s poate lipsi */ { tip_camp lista_id_campuri;

. . . . . } id_tip_str;

typedef struct { unsigned char zi, luna; unsigned int an; } TData;

1

Page 2: Elemente C

tablou

typedef id_tip_t[dim]; typedef int VectInt[200];

referinta (pointer) la valoare de tip Tval

typedef TVal * tip_pointer; typedef int * AdrInt;typedef TProdus * PProdus;

referinta (pointer) la functie

typedef int (* tip_func)(lista_tipuri_param); typedef int (* TF)(int, VectInt);

sinonim tip predefinit sau deja definit de utilizator

typedef id_tip_existent id_sinonim;typedef unsigned long Ulong;typedef char Byte;typedef enum raspuns TRasp;typedef struct produs TProdus;

Declaratii de variabile

simple, de tip predefinit sau definit de utilizator prin enum, struct sau typedef

tip lista_id_var;

tip id_var = initializare;

VectInt x, y;int nx = 0;TF axx;enum raspuns r = Nedecis; TData start = {1,1,2000};

referinta la tip predefinit sau definit de utilizator prin enum, struct sau typedef

tip * id_var;tip * id_var = initializare;

int * anx;TData * astart = &start;

referinta (pointer) la functie

tip_rez (* id_var)(lista_tipuri_parametri); int (* af)(int, VectInt);

prototip functie

tip_rez idf (lista_tipuri_parametri);tip_rez idf (lista_parametri);

int Max2i (int, int);int MinVect (int nv, VectInt v);

tablou, cu dim elemente de acelasi tip (tip_el)

tip_el idt[dim];

tip_el idt[dim]={cel_mult_dim_valori_initiale};tip_el idt[]={lista_valori_initiale}; /* dimensiune = numar valori initiale */

int a[200];TData date[50];int numere[5]= {12, 2, 24 };char mesaj[] = “Buna ziua”;

2

Page 3: Elemente C

D. Accesul la valorile si adresele variabilelor

Variabila simpla:

valoare : x

adresa : &x

Vector v cu dim elemente de tip t, cu indici intre 0 si dim-1 (vectorul ocupa dim * sizeof(t) octeti):

adresa vectorului : v

Adresa elementului cu indice i : v+i sau &v[i]

Valoarea elementului cu indice i :

v[i] sau *(v+i)

Structura s:

adresa structurii : &sadresa campului x : &(s.x)

valoarea campului x : s.x

Pointer p la o variabila de tip t:

valoarea variabilei : *pDaca t - tip structura

adresa campului x : valoarea campului x :

&(*p).x sau &p->x(*p).x sau p->x

Exemple:

3

Page 4: Elemente C

E. Operatori

Operator Semnificatie Asoc Operator Semnificatie Asocf(e) apel functie v1 < v2 mai mic t[i] indexare v1 <= v2 mai mic sau egals.c selectie v1 > v2 mai marep->c selectie indirecta v1 >= v2 mai mare sau egala-- postdecrementare v1 == v2 egala++ postincrementare v1 != v2 diferit -n schimbare semn i1 & i2 "si" bit cu bit+n plus unar (fara efect) i1 ^ i2 "sau exclusiv" bit cu bit--a predecrementare i1 | i2 "sau" bit cu bit ++a preincrementare i1 && i2 “si” logic (conjunctie) !i negatie logica i1 || i2 “sau” logic (disjunctie)0~i negare bit cu bit i? v1: v2 operator conditional*p adresare indirecta a = v atribuire&x preluare adresa a *= v a = a * vsizeof(x) determinare dimensiune a /= v a = a / v(d)e conversie de tip (cast) a %= v a = a % vn1 * n2 inmultire a -= v a = a - v n1 / n2 impartire a += v a = a + vi1 % i2 rest impartire (modulo) a &= v a = a & vv1 + v2 adunare a ^= v a = a ^ vv1 - v2 scadere a |= v a = a | vi1 << i2 deplasare stanga a <<= v a = a << vi1 >> i2 deplasare dreapta a >>= v a = a >> v

e1 , e2 secventiere Legenda: a - adresa (valoare stanga); c - camp; d - declarator tip; e - expresie; f - functie; i - intreg; n - numar; p - pointer; s - structura sau uniune; t - tablou; v - valoare; x - entitate

Marea majoritate a operatorilor necesita operanzi de acelasi tip. Aceasta conditie impune, atunci cand operanzii sunt de tipuri diferite, conversia valorii unuia, sau chiar a ambilor operanzi, la acelasi tip, pentru "echilibrare". Regula de echilibrare este urmatoarea: daca operanzii sunt de tip unsigned int si long atunci daca orice unsigned int poate fi reprezentat ca long atunci tipul echilibrat este long altfel tipul echilibrat este unsigned long altfel se alege tipul care apare mai tarziu in secventa int unsigned int long unsigned long float double long double

Tipul rezultatului operatiei este cel stabilit in urma echilibrarii.

De exemplu, daca se considera valorile intregi s = 76, n = 16 si m = 6 si valoarea de tip double x = s, atunci expresia s / n are valoarea 4, in timp ce expresiile s / (double)n si x / n se evalueaza la 4.75.De asemenea:

m / n * 100 0 m / (double)n * 100 37.5m * 100 / n 37 m * 100. / n 37.5

4

Page 5: Elemente C

F. Instructiuni

Forma generala Semnificatie Exemple

expresie; Expresia este o atribuire sau un apel de functie cu efect lateral

a = 7;printf (“%i\n”, a);nn = np = 0;

{ declaratii_si_defnitii secventa_instructiuni}

Reprezinta corpul unei functii sau o parte dintr-o instructiune structurata (decizie, ciclu etc.)

{ s += v[i]; n++;}

if (expresie) instructiune_1else instructiune_2

Expresia codifica o conditie. In functie de valoarea expresiei (!= 0 sau == 0) decide ce instructiune se executa (1 sau 2)

if ( x < y ) min = x;else min = y;

if (expresie) instructiune

Executa instructiune numai daca valoarea expresiei este diferita de 0 (adica este indeplinita conditia)

if ( x < 0 ) negative++;

switch (expresie_tip_intreg){ case k_1: secv_instruct_1 case k_2: secv_instruct_2 . . . . default: secventa_d}

Selectie secventa de prelucrari, astfel: - evalueaza expresia- daca exista eticheta (k_x) egala cu valoarea expresiei atunci continua executia cu secventa corespunzatoare altfel daca exista default atunci executa secventa_d altfel nu se executa nimic

Executia continua de la secventa selectata pana la break sau pana la sfarsit.

switch (c){ case ‘N’: y++; break; case ‘S’: y--; break; case ‘E’: x++; break; case ‘V’: x--; break; default : erori++;}

x = baza;switch (exp){ case 4: x *= baza; case 3: x *= baza; case 2: x *= baza;}

while (expresie) instructiune

Cat timp valoarea expresiei este diferita de 0 (este indeplinita conditia codificata) se repeta instructiunea

d = x; k = 0;while ( d % y == 0 ){ d /= y; k++; }

do instructiune while (expresie);

Executa instructiunea cat timp valoarea expresiei este diferita de 0

do { printf (‘nval = “); scanf (“%i”, &n); } while (n <= 0);

for (expr_i; expr_c; expr_a) instructiune

Este echivalenta cu:{ expr_i; /* initializari */ while (expr_c) { instructiune /* prelucr.*/ expr_a; /* actualizari */ }}

Expresiile pot fi si secvente de formae1, e2,... sau pot lipsi

for(s = i = 0, p = 1; i < n ; i++ ){ s += v[i]; p *= v[i];}

for(d = x, k = 0; d % y == 0; d /= y, k++ );

5

Page 6: Elemente C

Forma generala Semnificatie Exemple

break; Iesire fortata dintr-un ciclu (do, for, while) sau selectie (switch)

for (i = 0; i < n; i++) if ( v[i] == x ) break;

continue; Salt la sfarsitul corpului unui ciclu (deci nu se mai executa instructiunile care urmeaza dupa continue).

k = 0; s = 0;for (i = 0; i < n; i++){ if ( v[i] >= 0 ) continue; s += v[i]; k++;}

return expresie; Termina executia corpului unei functii, intorcand ca rezultat valoarea expresiei.

int Min (int a, int b){ return a < b ? a : b; }

int XX (int v[], int n){ int i = 0; for (; i < n; i++) if (v[i] < 0) return i; return -1;}

return ; Termina executia corpului unei functii cu rezultat de tip void.

void Inv (int *a, int *b){int t; if ( *a == *b ) return; t = *a; *a = *b; *b = t;}

6