elemente c
DESCRIPTION
Basic notions about C languageTRANSCRIPT
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
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
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
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
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
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