Sunteți pe pagina 1din 36

C5 /29.10.

2009

1. Redactarea programelor C / C++


1.1. 1.2. 1.3. 1.4. 2.1. 2.2. 2.3. 2.4. Generaliti Structura unui program Funcii Elementele limbajului Variabile globale Variabile locale Variabile de tip registru Iniializarea variabilelor

2. Variabile

3. Expresii
3.1. Operatori
1/36

1. Redactarea programelor C
1.1. Generaliti
Mediul Borland C a fost extins la Visual C i C++ Builder, C#, adaptate programrii orientate obiect i interfeei grafice Windows 95. Limbajul C a fost extins la C++ permind aplicarea conceptelor programrii prin abstractizarea datelor i programrii orientate spre obiecte. Fiierele surs pot avea extensia C, CP, CPP, H.
2/36

1.2. Structura unui program


Un program C este conine o funcie principal (main) main i eventual alte funcii secundare, apelate de ctre funcia principal, situate la acelai nivel (far imbricare). Structura unui program este urmtoarea: Directive de procesare, # Declaraii de date globale, Declaraii de funcii, sau doar [ Antete de funcii (prototipuri) ; ] Funcia principal; [ Descrierea funciilor (implementri) ] Descrierea funciilor se poate face fie n ntregime naintea funciei main fie doar prototipul nainte, iar corpul dup aceasta.
3/36

Exemplu:
# include class Inele { }; class Sarpe { }; void main (void) { Sarpe S( 5, 8, 'O',200, 0, 0, 1); {

char Rasp; randomize(); do { while (!kbhit() && !S.Bara() ) S.Tara(); if (!S.Bara()) { Rasp=toupper(getche()); if (Rasp!=0x1b) { S.Coteste(Rasp); S.Tara (); } if (S.Lungime()<180) { S.Creste (); S.Viteza(); } } } while ( (Rasp!=0x1b) && (!S.Bara()) ) ; getche(); closegraph();

Sarpe A(40, 8, 'A', 0, -35, +20), P(70, 8, 'P', 0, +35, +20), Q(40, 8, 'Q', 0, +35, -20), O(70, 8, 'O', 0, -35, -20);

4/36

Comentariile se scriu ntre caracterele /* i */ : /* /* Comentariu Acest program realizeaza

*/ */

sau la nivelul unui rnd dup caracterele // : ... a=b+c; // Comentariu // Suma numerelor

5/36

Includerea unui fiier surs (*.h sau *.cpp) se realizeaz prin directiva include astfel: # include specificator_fiier # include <specificator_fiier> // pentru fiiere utilizator // pentru fiiere standard

Exemplu:
#include <stdio.h>; #include <conio.h>; #include Grafica.h // Standard Input Output Header // Console Input, Console Output (Crt) // Contine functii proprii de desanare
6/36

#include <iostream.h>; // Input & Output Stream

1.3. Funcii
O funcie este format dintr-un antet i un bloc (corp). Ea poate fi apelat dac a fost definit n ntregime sau doar antetul su. Antetul unei funcii are urmtorul format: Tip Nume (List_parametri_formali) unde: Tip este tipul valorilor funciei (codomeniul); Nume este un identificator (liter urmat eventual de litere sau cifre); List_parametri_formali conine parametrii formali separai prin ,. Exemplu: int Min (int a, int b) { if (a<b) return a; else return b; } Obs. Prototipul unei funcii este antetul acesteia urmat de ; .
7/36

Corpul unei funcii are urmtoarea structur: { Declaraii Instruciuni } Exemple:


int Cmmdc (int a, int b) // { if (b= =0) return a; else return Cmmdc(b,a % b); // } int cmmdc (int a, int b) // { int rest; do {rest=a%b; a=b; b=rest; } while (rest!=0); // rest 0; return a; } Cmmdc(a,b) Cmmdc(b,a Mod b); cmmdc(a,b)

sau while (rest) ;


8/36

1.4. Elementele limbajului


Alfabetul limbajului C este format din litere mari i mici, cifre i caractere speciale (\n=CrLf, \t=Tab). Identificatorii sunt formai din liter_ urmat eventual de litere_ sau cifre (caracterul _ poate fi utilizat pe post de liter). Exist cuvinte cheie care pot fi utilizate doar n contextul definit (de exemplu case, float, int, long, return, short, static, structure, switch, union, unsigned, void). Tipurile predefinite sunt urmtoarele: - short (Z [-215,215-1]), - int (Z [-215,215-1]), - unsigned (N [0,216-1]), - long (Z [-231,231-1]), - float (Q* [-3.410-38, 3.41038]), - double (Q*[-1.710-308, 1.710308]), - char (cod ASCII).

9/36

Constantele numerice pot fi zecimale (123, 123Long, 111long), octale (077), hexa (0xabba, 0XBABA), sau flotante (2.71828, 6.023e23, 6.023E23). Constantele de tip caracter pot fi afisabile ('A', '0', '"') sau functionale ('\b'=Backspace, '\r'=Return, '\n'=Newline, '\''=Apostrof, '\\'=Backslash, '\v'=Verticaltab, '\f'=Salt de pagina, '\0'=Null. Constantele de tip sir de caractere se scriu ntre ghilimele ("Mesaj").

10/36

Declararea variabilelor simple se face astfel: Tip Lista_identificatori_de_variabile; Exemplu: Exemplu int i, j; float x,y; char c;

Declararea unui tablou se realizeaza astfel: Tip Nume_Tablou [d1] [d 2] ... [di] ... [dn]; // indicele ki: 0 ki<di Exemple: Exemple float x[100]; x[0]=1; ... x[99]=100; // x este pointer la I-ul element int a[2][2]; a[1][0]=3; a[0][0]=1; a[0][1]=2; // a contine adresa tabloului a[1][1]=4;
11/36

2. Variabile
Variabilele pot fi statice sau dinamice, locale sau globale.

2.1. Variabile globale


Declararea unei variabile globale se face la nceputul unui fiier surs (n afara tuturor funciilor) i poate fi referit pn la sfritul programului (n orice funcie). Utilizarea lor din alte fiiere surs se poate face doar dac acestea sunt declarate (acolo) ca variabile externe: extern declaraie_variabil
12/36

Exemplu: Exemplu VExterne.Cpp: #include <stdio.h>; #include "Fs.h"; float Pi=3.14; // variabila globala void main (void) { float r; printf(" Dati raza cercului : "); scanf("%f",&r); printf(" Lungimea cercului = %f \n",LungC(r)); scanf ("\n"); } Fs.h: float LungC (float r) { extern float Pi; // variabila externa return 2*Pi*r; }
13/36

2.2. Variabile locale


O variabil local este utilizabil (vizibil) doar n modulul sau n funcia n care a fost definit, putnd fi alocat dinamic (variabil automatic, alocat pe stiv) sau static (variabil static, alocat n zona de memorie a programului). Implicit o variabil local este automatic, iar dac dorim ca aceasta s fie static, declaraia ei trebuie s fie precedat de cuvntul cheie static: static declaraie_variabil Funciile au implicit atributul extern, deci pot fi apelate din alte fiiere surs, dar dac dorim ca acest apel s nu fie permis, atunci se vor declara statice prin scrierea cuvntului cheie static naintea antetului acesteia ( static antet_funcie ).
14/36

Exemplu: Exemplu VLocale.Cpp: #include <stdio.h>; #include "Sursa.h"; void main (void) { int n; printf(" Dati un numar < 256 : "); scanf("%d",&n); printf(" Valoarea in Hexa este "); Print_Hexa(n); // }
15/36

Print_Byte(n/256); Print_Byte(n%256); scanf ("\n");

!?

Sursa.h: static int Cifra_Hexa (int s) { static intc; if (s<10) c=s+'0'; else c=s+'A'-10; // c=s+'0'+7 return c; } static void Print_Byte(int b) { static int H = b / 16; static int h = b % 16; printf("%c%c",Cifra_Hexa(H),Cifra_Hexa(h)); } void Print_Hexa(int z) { static int HH = z / 256; Print_Byte(HH); static int hh = z % 256; Print_Byte(hh); }
16/36

2.3. Variabile de tip registru


Exist posibilitatea ca ntr-un registru liber s fie alocat o variabil care este utilizat frecvent, penntru a mri viteza de execuie. n registrii se pot memora parametri funciilor sau variabile automatice de tip int, char sau pointer. Pentru ca o variabil s fie memorat ntr-un registru, declaraia ei trebuie s fie precedat de cuvntul cheie register: register declaraie_variabil Exemplu: Exemplu float f ( register int i ); { register int n; register char c; ... }
17/36

2.4. Iniializarea variabilelor


Variabilele simple se iniializeaz printr-o declaraie de forma: Tip Identificator_de_variabil = Expresie

Exemplu: Exemplu float f ( int n ); { int i=1; int m=n/2; ... }


18/36

Tablourile se iniializeaz printr-o declaraie de forma: Tip Ident_tablou [n] = {Expresie1, Expresie2,..., Expresiem} unde mn, iar dac n este omis, atunci n=m.

Exemplu: Exemplu int X [13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; int Y [ ] = {1,2,3,4,5,6,7}; int A[3][ ] = { {1,2,3},{4,5},{6} }; // {{1,2,3},{4,5,?},{6,?,?}}

19/36

irurile de caractere se iniializeaz astfel: char Ident_string [n] = "ir_caractere" iar n poate fi este omis.

Exemplu: Exemplu char Mesaj [100] = " Zarurile vor fi aruncate ..."; char Alt_Mesaj [] = {"...Zarurile sunt aruncate ... !"}; char Ult_Mesaj [] = " Zarurile au fost aruncate ! " ;

20/36

3. Expresii
O expresie este format din operanzi, operanzi operatori i paranteze pentru prioritate, i are o valoare i un tip. tip Asocierea operatorilor se face de la stnga la dreapta, cu excepia operatorilor unari i de atribuire, care se asociaz de la dreapta la stnga. Operanzii pot fi: constante, constante simbolice, variabile simple sau structurate (tablouri, structuri, sau elemente ale acestora), funcii sau apeluri de funcii.
21/36

3.1. Operatori
Operatorii, Operatorii n ordinea descresctoare a prioritii sunt cei alaturati:

(
(unar)

)
(unar)

[
(unar)

]
(unar)

+ /

&

++

(tip)

sizeof

+ << < == & ^ | && ||


(ternar )

>> <= != >= >

?: = ,

*=

/=

%=

+=

<<=

>>=

&=

^=

|=

22/36

Operatorii aritmetici sunt urmtorii: + , , * , / , % pentru adunare, scdere, nmulire, ct (mprire), rest (mod),.

Exemplu: Exemplu int i, j ; int cat = i / j; int rest = i % j; float a=5,b=2; float c=a/b; // 5 / 2 = 2.5
23/36

// 13 / 5 = 2 // 13%5 = 3

Operatorii relaionali sunt urmtorii: < , <= , > , >= , == , != , pentru < , , > , , = , , rezultatul (valoarea expresiei relaionale) fiind 1 pentru adevrat, iar 0 pentru fals.

Exemplu: Exemplu int i=1; ... i<=j ... ... i==j ... int j=2 ; // == 1 // == 0

24/36

Operatorii logici sunt:

! (Not) , && (And) , || (Or).


Exemplu: Exemplu Xor = !x&&y || x&&!y
// x Xor y = Not x And y Or x And Not y

Operaiile pe bii se pot realiza utiliznd urmtorii operatori:

~ (complementul fa de FFFF, schimb fiecare bit),


<< (deplasare la stnga), & (And bit cu bit), >> (deplasare la dreapta),

^ (Xor bit cu bit),

| (Or bit cu bit).


25/36

Exemplu: Exemplu
// ASCII #include <stdio.h>; #include <conio.h>; int Cifra (int c) // cifra hexa: 01...9AB...F { if (c<10) return c | '0'; else return (c-9) | '@'; } int c; void main (void) { textbackground(BLUE); textcolor(WHITE); clrscr(); do { printf(" Dati un caracter #Esc : "); c=getch(); printf(" ... Hexa = %c%c \n",Cifra(c>>4),Cifra(c&0xF)); } while (c!=0x1B); }
26/36

Operaia de atribuire se realizeaz astfel: Var = Expresie; // expresie de atribuire cu tipul Var Exist posibilitatea realizrii de atribuiri multiple prin expresii de forma: Varn = ... = Var2 = Var1 = Expresie; Mai exist o facilitate utiliznd o operaie de atribuirede atribuire de forma: Var = Expresie; // unde {+, , *, /,%, &, ^, | , <<, >>} cu semnificaia: Var = Var Expresie; Exemplu: Exemplu v = e = 2.7181828; x += dx; y = dy; n <<= k; // v = (e = 2.7181828); // x = x+dx; y = y dy; // n = n*2k
27/36

Operatorii de incrementare / decrementare sunt ++ ++ respectiv prin care se mrete / micoreaz, valoarea operandului cu 1. Acetia pot fi utilizai: n forma forma prefixat: ++ operand; respectiv operand; // valoarea expresiei, dup aplicarea lor n forma postfixat:
operand ++; ++

respectiv operand ; //valoarea expresiei, nainte de aplicare

Exemplu: Exemplu a = ++b; a = b ; // b=b+1; // a=b; a=b; b=b1;


28/36

Operatorul de conversie explicit (expresie cast) realizeaz conversia unui operand ntr-un tip precizat astfel: (Tip) operand ;

Exemplu: Exemplu int a=12; int b=5; float c=a/b; printf(" a Div b = %5.2f \n", c); c=(float)a/b; printf(" a / b = %5.2f \n", c); (float)a
// a Div b = 2.00 // a / b = 2.40

29/36

Conversiile implicite (realizate automat) se fac astfel: a) charint, b) floatdouble, c) (double,*)(double,double)=double, d) (long,*)(long,long)=long, e) (unsigned,*)(unsigned,unsigned)=unsigned.
Dac n C conversia explicit se poate efectua prin (tip) expresie, n C++ se poate realiza i prin tip (expresie). (expresie)
Exemplu: Exemplu
#include <stdio.h>; #include <iostream.h>; #include <conio.h>;

void main (void) { char c; cout << " Dati c : "; cin >> c; cout << " Car. c = " << c << endl; cout << " Val. c = " << (int) c << endl; cout << " Val. c = " << int (c) << endl; void *p; p=&c; cout << " Val. c = " << *(int *) p << endl; typedef int * Pint; cout << " Val. c = " << * Pint (p)<< endl; // Coninutul adresei getch(); // la care se afla un ntreg
}
30/36

Operatorul pentru dimensiune (sizeof) determin lungimea n octei a unei variabile simple sau structurate, precum i a unui tip de dat: sizeof (Data) ; Exemplu: Exemplu int a; printf(" SizeOf int = %d \n", sizeof(a)); // SizeOf int = 2 printf(" SizeOf short = %d \n", sizeof(short)); // SizeOf short =2

31/36

Operatorii condiionali ? : sunt utilizati n construcii de forma: Expresie1 ? Expresie2 : Expresie3 ; Valoarea expresiei rezultat este Expresie2 dac Expresie1 este nenul, altfel este Expresie3 .

Exemplu: Exemplu Max = a>b ? a : b;


Atunci Max=a Altfel Max=b; // Daca a>b

32/36

Operatorul virgul permite gruparea mai multor expresii ntr-una singur, aceasta avnd valoarea ultimei expresii: Expresie1 , Expresie2 , ...

, Expresien ;

Exemplu: Exemplu
float x0,y0,r, x, y; printf(" Dati C(x0,y0,r) = "); scanf("%f %f %f",&x0,&y0,&r); // Cercul C
printf(" Dati P(x,y) = "); scanf("%f %f",

&x, &y

);

// Punctul P

printf(" %s",((x-=x0, y-=y0, x*=x, y*=y, x+y)==r*r) ? "P e pe C" : "P nu e pe C");

33/36

Operatorul de rezoluie (::) se utilizeaz cnd dorim s referim o variabil global redefinit ntr-o funcie, astfel:

:: Variabil
Exemplu: Exemplu
#include <conio.h>; #include <iostream.h>;

unsigned x; // Variabile Globale (::) char y[10]; int i=99; void main (void) { clrscr(); unsigned x; // Variabile Locale int y; cout << " Dati doua numere : "; cin >> ::x >> x; cout << " Cele doua numere = " << ::x << ' ' << x << endl; cout << " Cele doua numere = " << ++::x << ' ' << --x << endl; cout << " Cele doua numere = " << ::x << ' ' << x << endl; cout << " Dati nume,varsta : "; cin >> ::y >> y; cout << " Numele si varsta = " << ::y << ',' << y << endl; for (int i=11; i<::i; ::i-=11) cout << i <<"::"<< ::i << endl; getche(); }
34/36

4.
4.1. 4.2. 4.3. 4.4. 4.5. 4.6. 4.7. 4.8. 4.9.

Operaii de intrare/ieire
Funcia Printf Funcia Scanf Funcia PutChar Funcia GetChar Funcia GetChe Funcia GetCh Funcia KbHit Funciile PutS, GetS Stream-uri

C6 : C7 : 5.
5.1. 5.2. 5.3. 5.4. 5.5. 5.6. 5.7. 5.8. 5.9. 5.10. 5.11.

Instruciuni
Instruciunea Vid Instruciunea Expresie Instruciunea Compus Instruciunea If Instruciunea Switch Instruciunea While Instruciunea Do_While Instruciunea For Instruciunea Break Instruciunea Continue Instruciunea GoTo
35/36

Tema:
Se d o matrice A reprezentnd notele a m studenti la n discipline (ai,j= nota studentului i la disciplina j). Se cere: 1.S se calculeze (afieze) pentru fiecare student: a)media notelor; b)media notelor de trecere (ai,j 5); c)disciplina/disciplinele preferate (cu not maxim); 2.S se determine pentru fiecare disciplin: a)media notelor; b)media notelor de trecere (ai,j 5); c)studentul/studenii cel mai bun/cei mai buni (cu not maxim); d)primii p (dat) studeni n ordinea descresctoare a notelor; 3.S se tipreasc primii q (dat) studeni n ordinea: a)descresctoare a mediilor; b)cresctoare a examenelor promovate; 4.S se precizeze: a)Exist discipline cu toi studenii promovai ? b)Exist discipline la care toi studenii au medii mai mari dect 8?
. . . C5 / 29.10.2009
36/36

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