Documente Academic
Documente Profesional
Documente Cultură
2009
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
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
*/ */
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
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
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.
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
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
!?
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
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
?: = ,
*=
/=
%=
+=
<<=
>>=
&=
^=
|=
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
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 ++; ++
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 .
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