Sunteți pe pagina 1din 494

TEST 1(Intrebari cu C, despre 10.

Care este tipul unei constante


memorie, operatii de citire, character? int
specificatori de format) 11.Cum se reprezinta in memorie o
1.Ce este o operatie de citire? constanta caracter? Caracterul sau
Operatie de introducere a datelor secventa escape intre caracterele
de la un periferic apostrof
2.Ce este o operatie de intrare sau 12.Ce valoare are a din declaratia int
iesire? Operatie de shimb dintre a[10]? Adresa primului element in
program si periferic tablou
3.Ce este a in float a[10][50]? 13.Care este valoarea unei constante
Numele tabloului character? Codul ASCII al
4.Ce este un cuvint cheie in C? caracterului respectiv
Cuvint cu utilizare predefinita ce 14.Ce este o declaratie implicita? In
nu poate fi schimbata de user C nu exista declaratii implicite
5.Cum se stabileste legatura dintre 15.Cita memorie (in octeti) ocupa un
numele variabilei si tipul ei? Prin sir de n caractere? n+1
declaratia variabilei 16.Poate,fi schimbata valoarea sau
6.Ce este o operatie de scriere? tipul unei variabile in tipul executiei
Operatie de introducere a datelor la programului?Valoarea da,tipul nu
un periferic 17.Poate oare fi schimbata valoarea
7.Ce este un sir de caractere? O sau tipul constantei in timpul
succesiune de 0 sau mai multe executiei programului?
caractere scrise intre ghilimele Valoareanu,tipul nu
8.Unde poate fi amplasat un 18.Afisarea sirurilor de caractere cu
comentariu in program? Oriunde printf()se face prin intermediul
este legal un spatiu alb. specificatorilor de format definiti de
9.Ce este o operatie de afisare? literele: s
Operatie de scriere la terminalul 19.0314 este o constanta zecimala?
standart(display) Fals
20.Elementele unui tablou pot fi de 30.Citirea sirurilor de caractere cu
tipuri diferite? Fals scanf()se face prin intermediul
21.Elementele unei structuri pot fi specificatorilor de format definiti de
de tipuri diferite? Adevarat literele: s
22.Pe (citi biti) se reprezinta o 31.Citirea caracterelor cu scanf()se
constanta hexazecimala? 32 face prin intermediul specificatorilor
23. Pe (citi biti) se reprezinta o de format definiti de literele: c
constanta zecimala intreaga? 32 32.Pe (citi biti) se reprezinta o
24. Pe (citi biti) se reprezinta o constanta zecimala intreaga ce se
constanta octala? 32 termina cu L sau l? 32
25.Citirea nr. intregi cu scanf() se 33.Cita memorie (in biti) se aloca
face prin intermediul specificatorilor tipului float? 32
de format definiti de literele: doxXu 34. Pe (citi biti) se reprezinta o
26..Afisarea nr.ce nu sunt intregi cu constanta zecimala intreaga ce se
printf()se face prin intermediul termina cu F sau f? 32
specificatorilor de format definiti de 35. Pe (citi biti) se reprezinta o
literele: doxXu constanta hexazecimala ce se
27. Afisarea nr. intregi cu printf()se termina cu L sau l? 32
face prin intermediul specificatorilor 36. Cita memorie (in biti) se aloca
de format definiti de literele: doxXu tipului long? 32
28.Citirea nr.ce nu sunt intregi cu 37. Pe (citi biti) se reprezinta o
scanf()se face prin intermediul constanta octala ce se termina cu L
specificatorilor de format definiti de sau l? 32
literele: flfLf 38.Pe (citi biti) se reprezinta o
29.Afisarea caracterelor cu constanta flotanta? 64
printf()se face prin intermediul 39. Cita memorie (in biti) se aloca
specificatorilor de format definiti de tipului double? 64
literele: c 40.Citi octeti ocupa tabloul float
a[10][50]? 2000
41.Citi octeti ocupa tabloul double a 2. Ce valoare are elementul
[10][50]? 4000 a[1][0][1] ? int a[3][2][2] = {
42. Citi octeti ocupa tabloul char a 1,2,3,4,5,6,7,8,9,10,11,12 }; 6
[100]? 100 3. Care expresii calculează pătratul
43.Cita memorie (in biti) se aloca lui x ? pow(x,2) si x*x
tipului long double? 80 4. Ce extrage codul ? char a[
44. Pe (citi biti) se reprezinta o ]="123"; printf("%d", strlen(a));
constanta flotanta ce se termina cu 3
L sau l? 80 5.Ce afişează codul ? double x=1.0,
45.Fie declaratia int a[10] ,cita y=2.0; printf("%.2lf ", (double)(
memorie (in octeti) se aloca? 20 (int)x / (int)y )+(x/y) ); 0.50
46.Cita memorie (in biti) se aloca 6. Care este declaraţia corectă
tipului int? 16 pentru un tablou de 5 numere
47.Care este ultimul element al întregi ? int data[5]
tabloului int a[10]? 9 7. Ce afişează codul ? char a[ ]={
48. Cita memorie (in biti) se aloca '1', '2', '3', 0 }; printf("%d",
tipului char? 8 sizeof(a)); 4
49.Ce indice are primul element al 8. Ce extrage codul ? int y=5, z;
tabloului int a[10]? 0 z=(++y)++; printf("y=%d, z=%d",
50.Care este valoarea inferioara p-u y,z); eroare la compilare
indici in tablouri? 0 9. Care expresie atribuie bitului cu
TEST 2(problem simple in C care numărul de ordine 4 valoarea 1 ?
cu variante de raspuns) (size|=4)
1.Ce extrage codul ? double x = - 10. Ce afişează codul ? int x=10/2;
3.5, z=3.5; printf("%.0f : %.0f ", printf("%.2f ", (double)x*2);
ceil(x), ceil(z)); printf("%.0f : %.0f 10.00
", floor(x), floor(z)); -3 : 4 - 4 : 3 11. Ce extrage codul ?
printf("Litera\0x41"); Litera
12. Ce extrage codul ? char a[ ] = 23. Care expresie foloseşte un
"123\0"; printf("%d", strlen(a)); număr minim de paranteze şi este
eroare la execuţie echivalentă cu expresia dată ?
13. int i=0, j; j=( i=4, i/2, i*i/i ); retrun
Care va fi valoarea lui j ? 4 (x=((((y=2)*z)+((a|b)*(2+s)))));
14. Ce extrage codul ? int x = retrun x=(y=2)*z+(a|b)*(2+s);
0x1234, y = 0x5555; printf( 24. Care este lungimea maximă (în
"0x%04.4x", x | y ); 0x5775 octeţi) pentru tipurile short, int,
15. Ce extrage codul ? char c = 'A' long ? 2, 4, 4
+ 4; printf("%c", c); Codul este 25. Ce extrage codul ? int x=0x1234,
corect. Va afişa un caracter legal y=0x5555; printf("0x%04.4",
16. Ce extrage codul ? printf("%d x&y); 0x1014
", 7%4); 3 26. Ce tip are constanta 27U ?
17. Ce conţine variabila c ? char c = unsigned int
'\101'; 101 (codul ASCII al literei ?) 27. Ce valoare are expresia ? 0xF &
18. Ce extrage codul ? int a=3, b=4, ~0x9 0x6
c; c=a + + + - - b; printf("%d %d 28. Ce tip va avea rezultatul
%d", a,b,c); eroare la compilare adunării a două variabile de tip
19. Care este cel mai mare număr short ? int
ce poate fi afişat ? short int x; ... 29. Ce valoare are sizeof(x) ? short
printf("%d", x); 32767 x[5][7]; 70
20. Care tip de date asigură cea mai 30. Ce valoare are z ? int z, x=5, y =
mare precizie în calculele cu virgula -10, a=4, b=2; z=x++ - --y*b/a; 10
mobilă ? long double 31. Ce valoare are z ? int z, x = 5, y
21. Ce returnează operatorul & ? = -10; z=x- -y; -5
adresa operandului 32. Ce extrage codul ? int x=0x1234,
22. Ce afişează codul ? int a=5|3; y=0x5555; printf("0x%04.4x",
float b=1.5f; b-=a/2; x^y); 0x4761
printf("%.2f",b); -1.50
33. Care iniţializare este greşită ? 44. Ce afişează codul ? char a[ ]={
int data[2][2]={ 1,2,3,4,5 }; '1', '2', '3' }; printf("%d",
34. Ce extrage codul ? int sizeof(a)); 3
x=0x1234; printf("0x%04.4", ~x); 45. Ce afişează codul ? int x=1;
eroare la compilare printf("%d", --x?++x:--x); -1
35. Ce extrage codul ? printf("%d", 46. Ce extrage codul ? short
64>>3); 8 tar[4][3] = { {1}, {2,3}, {4,5,6} };
36. Cum se notează operaţia logică printf("%d", sizeof(tar)); 24
AND ( şi ) în C ? && 47. Ce afişează codul ? int a=5^3;
37. Ce valoare are a ? int a, b=1, float b=1.5f; b+=--a/2;
c=2, d=3, e=4, f=3; a=b=c=d=e=f; printf("%.2f",b); 3.50
3 48. Constantele 314ul şi 134Lu au
38. Ce extrage codul ? short int a[ ] acelaşi tip Fals
= { 1, 2, 3 }; printf("%d", sizeof(a) / 49 Ce valori conţine tabloul x ? int
sizeof(a[0])); 3 x[10] = { 1,2,3,4,5,6,7,8,9,10 }; int y
39. Ce extrage codul ? double x = = 20, i = 10; x[--i]=y; {
1.0 - 1/2 - 1/2; printf("%.2f", x); 1,2,3,4,5,6,7,8,9,20}
1.00 TEST 3(probleme cu casuta unde
40. Care expresii calculează corect trebuie sa scrii, cind se termina ciclu,
valoarea fracţiei x/y ? int x=5, y=2; de cite ori)
float z; z=(float)x/(float)y; 1)unsigned n; scanf( "%d", &n );
41. Care este rezultatul operaţiei switch( n % 2 ) { case 0: printf(
sizeof( 5. ) ? 8 "ne" ); case 1: printf( "cunoscut" );
42. Ce afişează codul int i=4; int } Ce extrage codul ? cuvântul
x=6; double z; z=x/i; printf(z=%.2f "necunoscut" la citirea unui număr
",z); z=1.00 par; cuvântul "cunoscut" la citirea
43. Ce extrage codul ? char x='B'; unui număr impar.
putchar(x-1); putchar(x+1); AC
2) int z = 8, y; for( y = 1; z++ < 8; ) z 9) int p1(); int p2(); int p3(); int n =
+= y; printf( "%d", z ); Ce extrage 1; while( n = p2() || p3() ) { if( n ) n=
codul ? 9 p1(); } Când se va termina ciclul ?
3) int z = 8, y; for( y = 1; y++ < 8; ) z când p2() şi p3() vor returna
+= y; printf( "%d", z ); Ce extrage valoarea 0
codul ? 43 10) int p1(); int p2(); int p3(); int n
4) int x = 1; for( ; ; ) { if( x++ == 3 ) = 1; while( n = p2() ) { if( n ) n =
break; continue; } printf( "%d", x p1(); if( n ) n= p3(); } Când se va
); Ce extrage codul ? 4 termina ciclul ? când p2() va
5) int x = 1; for( ; ; ) { if( x++ == 4 ) returna valoarea 0
break; continue; } printf( "%d", x 11) int a = 4, b = 5; if( a = b ) b++;
); Ce extrage codul ? 5 a++; a *= b; Ce valoare are a ? 36
6) unsigned x = -1; int y = 1; if( y <= 12) int x = 4, a = 2, b = 4, c = 8; if( x
x ) printf( "B is true" ); if( y == ( x != b ) x = a; else x = c; if( x != a ) c
= -1 ) ) printf( "C is true"); if( (int)x += b; else c +=a; printf( "%d", c );
>= y ) printf( "A is true" ); Ce Ce extrage codul ? 12
extrage codul ? B is true 13) int x = 4, a = 2, b = 4, c = 8; if( x
7) unsigned x = -1; int y = 10; if( y != b ) x = a; else x = c; if( x == a ) c
<= x ) printf( "A is true\t" ); if( y += b; else c +=a;
== ( x = -10 ) ) printf( "B is true\t" printf( "%d", c ); Ce extrage codul
); if( (int)x >= y ) printf( "C is ? 10
true\t" ); Ce extrage codul ? A is 14) int x = 1 / 2; if ( x ) printf(
true "%d", x ); else printf( "%d", x * 2
8) int p1(); int p2(); int p3(); int n = ); Ce extrage codul ? 0
1; while( n ) { n = p1(); if( n ) n = 15) int x = 1 / 2; if ( x ) printf(
p2(); if( n ) n= p3(); } Când se va "%d", x ); else printf( "%d", x + 2
termina ciclul ? când p1() sau p2() ); Ce extrage codul ? 2
sau p3() va returna valoarea 0
16) int x = 3 / 2; if ( x ) printf( 25) char s[99], i = 0; for( gets( s );
"%d", x ); else printf( "%d", x + 2 s[i] == ' '; s[i] ) i++ ; printf( "%d",
); Ce extrage codul ? 1 s[i] ); Ce extrage codul ? codul
17) for( ; ; ) continue; De câte ori se primului caracter diferit de spaţiu
va executa ciclul ? infinit al şirului citit s
18) for ( ; (1 < 2 ) < ( 2 < 1 ) ; ) 26) int p1(); int p2(); int p3(); int n
break; De câte ori se va executa = 1; while( n = p3() ) { if( n ) n =
ciclul ? 0 p2(); if( n ) n= p3(); } Când se va
19) for ( ; (1 < 2 ) > ( 2 < 1 ) ; ) termina ciclul ? când p3() va
break; De câte ori se va executa returna valoarea 0
ciclul ? 1 27) char s[99] = "abracadabra", i =
20) int s = 0, i; for( i = 1; i < 5; i++ ) 0, t; for( gets( s ); i < ( t = strlen( s )
{ if( ( i == 2 ) || ( i == 3 ) ) continue; s ); ) { goto( t - i, 5 ); printf( "%c",
+= i; } Ce valoare are s ? 5 s[i++] ); } Ce extrage codul ? eroare
21) int x = 0; for( ; ; ) { if( x++ == 4 la compilare
) continue; break; } printf( "%d", x 31) int x = 1, y = 2, z = 3; if( z >= y )
); Ce extrage codul ? 1 if( y <= z ) puts( "CIB" ); else if( x
22) int i = 5; while( i > 0 ) { printf( <= z ) puts( "INF" ); else puts(
"%d", --i ); } while( i <= 5 ) { "SPE" ); Ce extrage codul ? CIB
printf( "%d", i++ ); } Ce extrage 32) int x = 1, y = 2, z = 3; if( x >= y )
codul ? if( x <= z ) puts( "CIB" ); else if( x
43210012345 <= z ) puts( "INF" ); else puts(
23) int i = 5; while( i > 1 ) { printf( "SPE" ); Ce extrage codul
"%d", --i ); } while( i <= 4 ) { (nimic)
printf( "%d", i++ ); } 4 3 2 1 1 2 3 33) int x = 1, y = 2, z = 3; if( z >= y )
4 if( y <= x ) puts( "CIB" ); else if( x
24) int i = 5; while( i > 1 ) { printf( <= z ) puts( "INF" ); else puts(
"%d", --i ); } while( i < 5 ) { printf( "SPE" ); Ce extrage codul ? INF
"%d", i++ ); }. 4 3 2 1 1 2 3 4
34) int x = 1, y = 2, z = 3; if( x >= y ) pentru a obţine un cod corect ? 2 4
if( y <= z ) puts( "CIB" ); else if( x 5
<= z ) puts( "INF" ); 41) int x, z = 1;for( x=0; x<5; x++ ) {
Else puts( "SPE" ); Ce extrage z++; if( x>3 ) break; if( x<3 )
codul ? (nimic) continue; z++; } printf( "%d", z );
35) int x = 1, y = 2, z = 3; if( z >= y ) Ce extrage codul ? 7
if( y <= x ) puts( "CIB" ); else if( z 42) int x, z = 1; for( x=0; x<5; x++ )
<= x ) puts( "INF" ); else puts( { z++; if( x>3 ) break; if( x<4 )
"SPE" ); Ce extrage codul ? SPE continue; z++; } printf( "%d", z );
36) void f( int x, int y ) { int t; t = x; Ce extrage codul ? 6
x = y; y = t; } main() { int a = 2, b = 43) int p1(); int p2(); int p3(); int n
7; f( a, b ); printf( "%d %d", a, b ); = 1; while( n = p1() ) { if( n ) n =
} Ce extrage codul ? 2 7 p2(); if( n ) n= p3(); } Când se va
37) void f( int x, int y ) { int t; t = x; termina ciclul ? când p1() va
x = y; y = t; } main() { int a = 7, b = returna valoarea 0
2; f( a, b ); printf( "%d %d", a, b ); 44) Care construcţie defineşte un
} Ce extrage codul ? 7 2 ciclu infinit ? for ( i=0; 1; ++i) ;
38) while( strlen( s ) > n ) s[n] = '\0'; while( 1 ); for ( i=0; ; ++i ); do { }
Ce face codul ? Scurtează şirul s while( "?" ); . for ( ; ; );
până la lungimea n 45) char s[99] = "ASEM", i = 0;
39) switch( a ) { case 1: a++; break; for( ; i < strlen( s ); ) printf( "%c",
case 2: ; case 3: a--; return; case 4: ; s[i++] + 1 ); Ce extrage codul ?
case 5: a += 1; continue;} BTFN
Care alternative trebuie aruncate 46) char s[66] = "ASEM", i = 0;
pentru a obţine un cod corect ? 2 4 for( ; i < strlen( s ); ) printf( "%c",
40) switch( a ) { case 1: a++; break; s[i++] + 2 ); Ce extrage codul ?
case 2: ; case 3: a--; return; case 4: ; CUGO
case 5: a += 1; exit( 0 ); }
Care alternative trebuie aruncate
47) char s[11] = "ASEM", i = 1; c++ ); Ce extrage codul ? Fără
for( ; i < strlen( s ); ) printf( "%c", sfârşit tabela codului ASCII extins
s[i++] + 1 ); Ce extrage codul ? TFN 56) int x, z = 0; for( x=0; x<5; x++ )
48) char s[22] = "ASEM", i = 1; { z++; if( x>3 ) continue; if( x>3 )
for( ; i < strlen( s ); ) printf( "%c", break; z++; } printf( "%d", z ); Ce
s[i++] - 1 ); Ce extrage codul ? extrage codul ? 9
49) int p1(); int p2(); int p3(); int n 57) int x, z = 0; for( x=0; x<5; x++ )
= 1; while( n = p2() && p3() ) {if( n {z++; if( x>3 ) continue; if( x<3 )
) n= p1(); } Când se va termina break; z++; } printf( "%d", z ); Ce
ciclul ? când p2() sau p3() va extrage codul ? 1
returna valoarea 0 58) int x, z = 0; for( x = 0; x < 5; x++
50) int x = 100; do { --x; } while( x > ) { z++; if( x < 3 ) continue; if( x > 3
50 ); printf( "%d", x ) Ce extrage ) break; z++; } printf( "%d", z );
codul ? 50 Ce extrage codul ? 6
51) for( ; ( 1 < 2 ) < ( 2 < 1 ); ) 59) int x = 3, c = 0; while( ( x - 1 ) ) {
continue; De câte ori se va executa ++c; x--; } Ce valoare are c ? 2
ciclul ? 0 60) int n = 1, m, r = 3; main() {
52) for( ; ( 1 < 2 ) > ( 2 < 1 ); ) printf( "%d", ( n + r ) * m ); Ce
continue; De câte ori se va executa extrage codul ? 0
ciclul ? . infinit 61) int n = 1, m, r = 3; main() { int n
53) int y; for( y = 0; y < 3; y++ ) ; = 3, m, r = 1; printf( "%d", ( n + r )
printf( "%d ", y ); Ce extrage codul * m ); Ce extrage codul ?
? 3 imprevizibil
54) int s = 0, i; for( i = 1; i < 7; i++ ) 62) i = 14; if( i == ( 10 + 5 ) ) { i++; }
{ if( ( i == 2 ) || ( i == 3 ) ) continue; Ce valoare are i ? 14
s += i; Ce valoare are s ? 16 63) i = 14; if( i = ( 10 + 5 ) ) { i++; }
55) unsigned char c; for( c = 0; c < Ce valoare are i ? 16
256; c++ ) printf( "%c - %d ", c,
64) int x = 1; if( x = 15 % 5 ) printf( ? declaraţia prototipului este
"3" ); else printf( "5" ); Ce extrage greşită
codul ? 5 72) int x = 1; if( x = 17 % 5 ) printf(
65) int main() { print( x++ ); } int x "3" ); else printf( "5" ); Ce extrage
= 55; void print( int x ) { printf( codul ? 3
"%d", --x ); } Ce extrage 73) int x, z = 2; for( x=0; x<5; x++ )
codul ? 54 { z++; if( x>3 ) break; if( x<3 )
66) int main() { print( x++ ); } int x continue; z++; } printf( "%d", z );
= 5; void print( int x ) { printf( Ce extrage codul ? 8
"%d", --x ); } Ce extrage codul ? 4 74) int x = 1; if( x = 51 % 5 ) printf(
67) int i, j, c = 0, m[3][4]; for( i = 0; "3" ); else printf( "5" ); Ce extrage
i < 3; i++ ) for( j = 0; j < 4; j++ ) { codul ? 3
m[ i ][ j ] = c; ++c; } Ce valoare are 75) while( c = getch() != 'e' ) printf(
m[2][3] ? 11 "%d", c ); Ce extrage codul ? 1 la
68) int i, j, c = 0, m[4][4]; for( i = 0; introducerea oricărui caracter diferit
i < 4; i++ ) for( j = 0; j < 4; j++ ) { de 'e'
m[ i ][ j ] = c; ++c; } Ce valoare are 76) int a[2][2], b = 1, x, i, y; for( i =
m[2][3] ? 11 0; i < 2; i++ ) for( y = 0; y < 2; y++ )
69) int x = 4, y = 2; char op = '+'; a[i][y] = b++; x = a[1][1]; Ce
switch( op ) { default: x = 2; case valoare are x ? 4
'+': x += y; case '-': x -= y; } Ce 77) int a[2][2], b = 0, x, i, y; for( i =
valoare are x ? 4 0; i < 2; i++ ) for( y = 0; y < 2; y++ )
70) int x = 4, y = 2; char op = '-'; a[i][y] = b++; x = a[1][1]; Ce
switch( op ) { default: x = 2; case valoare are x ? 3
'+': x += y; case '-': x -= y; } Ce 78) int i; void increment( int i ){
valoare are x ? 2 ::i++; } main() { for( i=0; i<10;
71) int f(); este prototipul unei increment( i ) ){ } printf( "%d", i );
funcţii. Câte argumente are funcţia } Ce extrage codul ? 10
79) int f( void ); este prototipul unei 86) int i = 4; switch( i ) { default: ;
funcţii. Câte argumente are funcţia case 3: i += 5; if( i == 8 ) { i++; if( i
? 0 == 9 ) break; i *= 2; } i -= 4; break;
80) int c = 0; int main() { while( 1 ) case 8: i += 5; break; } printf(
{if( c > 5 ) break; c++; } { int c = 0; "%d", i ); Ce extrage codul ? 5
while( 1 ) {if( c > 20 ) break; c++; } } 87) int a[4][2], b = 0, x, i, y; for( i =
printf( "%d", c ); } Ce extrage 0; i < 4; i++ ) for( y = 0; y < 2; y++ )
codul ? 6 a[i][y] = b++; x = a[1][1]; Ce
81) int x; for( x = 1; x < 4; x++ ) { valoare are x ? 3
switch( x ) { case 2: printf( "%d", x 88) char a = 'a', b = 'b', c = 'c'; b = c
); case 0: printf( "%d", x ); = getch(); switch( b ) { case 'b':
default: break; case 3: printf( printf( "%c", c ); break; default:
"%d", x ); } } Ce extrage codul ? printf( "%c", a ); break; case 'c':
223 printf( "%c", b ); } Ce extrage
82) int x; for( x = 0; x < 4; x++ ) { codul ? c la citirea lui c . b la
switch( x ) { case 2: printf( "%d", x citirea lui b . a la citirea lui a a
); case 0: printf( "%d", x ); default: la citirea unui caracter diferit de
break; case 3: printf( "%d", x ); } } caracterele b, c
Ce extrage codul ? 0223 89) int x, z = 2; for( x=0; x<5; x++ )
83) int a = 3, b = 4; if( a == b ) b++; { z++; if( x>3 ) break; if( x<3 )
a++; a *= b; Ce valoare primest a? continue; z++; } printf( "%d", z );
16 Ce extrage codul ? 8
84) int a = 4, b = 4; if( a == b ) b++; 90) void f( int ); este prototipul unei
a++; a *= b; Ce valoare are a ? 25 funcţii. Care este tipul valorii
85) int i = 4; switch( i ) { default: ; returnate de funcţie ? int
case 3: i += 4; if( i == 8 ) { i++; if( i 92) int x = 3; if( x == 2 ); x = 0; if( x
== 9 ) break; i *= 2; } i -= 4; break; == 3 ) x++; else x += 2; Ce valoare
case 8: i += 5; break; }printf( are x ? 2
"%d", i ); Ce extrage codul ? 9
93) for( ; ; ) break; De câte ori se 105) int *f( int ); Ce reprezintă
va executa ciclul ? 1 construcţia ? instrucţiunea este
94) for( ; ; ); break; De câte ori se greşită
va executa ciclul ? . nu se poate 106) int j = 3, x = 1, y = 1; void f() {
determina int x = 0; static int y = 0; x++; y++;
95) for( i = 0; i < n; i++ ) for( j = n - i; j < n;} int
j++main()
) a[ i ][{jfor(
] = ij += j0;+ y1;< Care
5; j++parte
)
a matricei va fi inţializată ? sub diagonala {secundară
f(); x++; y++; } printf( "%d %d",
96) int x = 0; for( ; x = 1; ) break; De câtex,ori se }va
y ); Ceexecuta
extrageciclulcodul? ? 15 5
97) void f() { int x = 0; static int y = 0; x++;107)y++;int i,j,c=0,
printf( "%dm[3][4];
%d ",For x, y ); } int
(i=0;i<3;i++)
main() { f(); f(); return 0; } Ce extrage codul ? 1112 For (j=0;j<4;j++) {
98) int x = 1; for( ; x = 0; ) break; De câte ori se va executa
m[i][j]=c; ++c; Ce ciclul
valoare? 0 are
m[2][3]?
99) int i; main() { while( i < 10 ) { i++; } printf( "%d", 11 i ); } Ce extrage codul ?
10 108) While (getch()); De cite ori se
100) int x = 4, a = 2, b = 4, c = 8;if( x == b )va x =executa
a; else ciclul? Pina
x = b; if( x !=lab ) c += b;
else c +=a; printf( "%d", c ) Ce extrage codul actionarea
? 12 unei taste ce nu
101) int z = 0, y; for( y = 1; y++ < 8; corespunde unui character ASCII.
) z += y; printf( "%d", z ); Ce 109) int a=2; for ( ;1;) a++; int a=3;
extrage codul ? 35 for ( ; ;) a++; int a=3; for ( ;0;) a++;
102) int x = 2, y = 5; char op = '*'; int a=2; do a++; while (a-3); int
switch( op ) { default: x = 3; case a=3; do a++; while (a-3); In care
'+': x += y; case '-': x -= y; } Ce cazuri variabila a va avea valoarea
valoare are x ? 3 3 dupa executia codului? 3); 4)
103) while( strlen( s ) > n ) s[n] = 0; 110) void f() { Int x=0 static int y=0;
Ce face codul ? Scurtează şirul s x++;y++; printf(“%d %d”,x,y); int
până la lungimea n main(){ f(); f(); return 0; } Ce
104) while( getche() == ' ' ); De câte extrage codul ? 1 1 1 2
ori se va executa ciclul ? până la 111) int x = 100;do { --x; } while( x <
citirea primului caracter ASCII 50 );printf( "%d", x ); Ce extrage
codul ? 99
112) int x, z = 0; for( x=0; x<5; x++ 4. Câte afirmaţii sunt corecte ? 3
) {z++; if( x>=2 ) continue;if( x<=2 ) Cu excepţia pointerilor void,
break;z++; } printf( "%d", z ); Ce pointerii spre acelaşi tip pot fi
extrage codul ? 1 scăzuţi unul din altul Un pointer
113) char s[55] = "ASEM", i = 0; de un anumit tip nu poate fi
for( ; i < strlen( s ); ) printf( "%c", convertit la un pointer de alt tip
s[i++] + 3 ); Ce extrage codul ? Pointerii sunt alocaţi întotdeauna
DUHP pe 32 biţi
114) f( int ); este prototipul unei 5. double ac[12]; int i; Care ciclu
funcţii. Care este tipul valorii atribuie valori tuturor elementelor
returnate de funcţie ? declaraţia ? for( i = 0; i < 12; i++ ) scanf(
prototipului este greşită "%le", i + ac ); for( i = 0; i < 12; i++
115) int i, j, c = 0, m[4][3]; for( i = ) scanf( "%le", &ac[ i ] ); . for( i =
0; i < 4; i++ ) for( j = 0; j < 3; j++ ) { 0; i < 12; i++ ) scanf( "%le", ac + i
m[ i ][ j ] = c; ++c; } Ce valoare are );
m[2][2]} 8 6.char *F( char *p ) { p += 3; return
TEST 4(cu pointeri*) ( p ); } main() { char *x, *y; x =
1. char buf[ 5 ] = "a"; const char *p "HELLO"; y = F( x ); printf(
= buf; Care instrucţiuni sunt "%s", y ); } Ce extrage codul ? LO
corecte ? p = buf; 7.1) F( int *x ) 2) F( int x[ ] ) 3) F(
2. int m[ 2 ][ 2 ][ 2 ] = { 1, 2, 3, 4, 5, int x[ 10 ] ) Câte construcţii sunt
6, 7, 8 }; printf( "%d", ***m ); echivalente cu F( int x ) ?nici una
printf( "%d", **m[ 0 ] ); printf( 8.char *p, S[ ] =
"%d", *m[ 0 ][ 0 ] ); Ce extrage "abcdefghijklmnop"; p = S; Ce
codul ? 111 conţine şirul p + 5 ? fghijklmnop
3. int x[ ] = { 1, 2, 3, 4, 5 ], *p, *q; p 9. x[ 5 ] = 5 şi 5[ x ] = 5 sunt expresii
= x; q = &p; Câte instrucţiuni echivalente Adevarat
atribuie valoarea 17 pentru x[ 2 ] ? 10.double data[12]; Care
*( *q + 2 ) = 17; 1 construcţii apelează corect
elementul cu numărul de ordine 6 ? 17. char *x = "cara"; Câte funcţii
*(&data[0]+5) printf() nu afişează litera r ?
11.int x[ ] = { 1, 4, 1, 5, 1, 4, 1, 5 }; printf( "%c", *x + 2 ); 1
int *p, y; p = x + 4; y = p - x; Ce 18. char *buf = "0123456789", *p
valoare are y ? 4 = buf; p += 5; printf( "%s ", p
12.char s[ ] = "12345'; s[ 3 ] = 0; ); printf( "%s", buf ); Ce extrage
printf( "%d", atoi( s + 1 ) ); Ce codul ? 56789 0123456789
extrage codul ? 23 19.char s[ ] = "Hello, World !", *p
13.void swap( int *m, int *n ) { = s; Care cod e preferabil pentru o
int *t = m; m = n; n = t; } Funcţia converti literele şirului s în litere
trebuie să permute 2 valori int. mici ? for( ; *p; p++ ) { *p =
Care afirmaţii sunt corecte ? tolower( *p ); }
. permutarea m şi n nu va 20.char *s[ 3 ] = { "Line 1", "Line
produce permutarea scontată 2", "Line 3" }; Câte instrucţiuni
extrag şirul 2 ?printf( "%s", s[ 1 ] );
printf( "%s", *s[ 1 ] ); 2
14.int a[ 4 ][ 2 ], b = 0, x, i, y; for(
21.Într-o funcţie parametrul actual
i = 0; i < 4; i++ ) for( y = 0; y < 2;
este un tablou de 10 numere int.
y++ ) a[ i ][ y ] = b++; x = *( *(a +
Care declaraţii pentru parametrul
2 ) - 1 ); Ce valoare are x ? 3
formal corespunzător sunt corecte ?
15.int *f() { int x = 0; x++;
. int *t int t[ ]
return &x; } main() { int *y = f();
22.int a; a *= b *= *c *= **d; Codul
printf( "%d", ( *y )++ ); f() ;
e corect. Ce tip au b, c, d ? int *c
printf( "%d", *y ); Ce extrage
int b . int **d
codul ? eroare la executie,
23.int *ac( int x ); Ce reprezintă
16.Câte construcţii sunt
construcţia ? prototipul unei
echivalente cu int a[ 5 ], *p = a +
funcţii
3; ? int a[ 5 ], *p = &a[ 3 ];1
24. Într-o funcţie parametrul actual
este o matrice de 10x5 numere int.
Câte declaraţii pentru parametrul "egal" : "diferit" ); Ce extrage
formal corespunzător sunt corecte ? codul ? diferit
int m[ ][ ]; adica 1 33.double s[ 3 ] = [ 1, 2, 3 }, *p = s;
25. Câte instrucţiuini atribuie lui p printf( "%f ", *( p + 1 ) ); printf(
o referinţă către valoarea lui y ? p "%f ", s[ 1 ] ); printf( "%f ", 1[ s ] );
= &y; deci 1 printf( "%f ", *++ p ); De câte ori va
26.int i, j, c = 0, m[ 5 ][ 5 ]; register fi extrasă valoarea 2 de acest cod?
int *p; for( i = 0; i < 5; i++ ) for( j = 4
0; j < 5; j++ ) m[ i ][ j ] = c++; p 34. double s = 1.2, *p = &s, *q; void
= &m[ 1 ][ 1 ]; Ce valoare are p[ 2 ] *r; r = p; q = r; printf( " %f ", *r );
?8 Care linii sunt greşite ? 4, 5
27.int *p[ 5 ]; Ce reprezintă 35. Care operaţii sunt legale pentru
construcţia ? tablou de pointeri pointeri ? de relaţie (mai mic, mai
28.if( !printf( "%s", "12345" + 1 ) ) mare etc.), scăderea
puts( "eroare" ); Ce extrage codul ? 36. char *s; char *s[ 5 ]; char[5] s;
2345 char s[ 5 ]; char s[ ]; char s[ 4 ];
29.char *p, S[ ] = "abcdefg"; p = S; Câte instrucţiuni definesc un tablou
p += ( p + 5 ); Ce conţine *p ? codul de 4 caractere + 1 pentru caracterul
este gresit eroare la execuţie nul ? 1
30.Care declaraţie pentru un tablou 37. void F( int *p ) { ... } Care
de 12 numere întregi este corectă ? apeluri transmit corect valoarea
int data[12]; întreagă x către această funcţie ?
31. int y[ 4 ] = { 6, 7, 8, 9 }, *p = y + . F( &x )
2; printf( "%d", p[ 1 ] ); Ce 38. int x = 10, *p1, **p2, ***p3,
extrage codul ? 9 ****p4; p1 = &x; p2 = &p1; p3
32. char s1[ ] = "asem"; char s2[ 5 = &p2; p4 = &p3; printf( "%d", p3
]; strcpy( s2, s1 ); printf( s1 == s2 ? ); printf( "%d", *p3 ); printf(
"%d", **p3 ); printf( "%d", ***p3
);printf( "%d", ****p3 ); De câte ori **d este o expresie corectă; câte
va fi extrasă valoarea lui x ? 1 declaraţii sunt corecte ? 3
39.int a, b[ ] = { 2, 3 }, *p = b; a = 45.char s[ ] = "10.123"; *( s + 4 ) =
++*++p; printf( "%5d %5d", a, *p 0; printf( " %.3f ", atoi( s + 1 ) ); Ce
); Ce extrage codul ? 4 4 extrage codul ? 0.100
40. int x[ ] = { 1, 2, 3, 4, 5, 4, 3, 2, 1 46. int a[ 15 ] = { 1, 2, 3, 4, 5 }, *p; p
}, u, *p = x; ??? for( u = 0; u < 5; = a; printf( "%d", *( p + 3 ) ); Ce
u++ ) printf( "%d-", x[ u ] ); Cu ce extrage codul ? 4
trebuie înlocuit ??? pentru a TEST 11(intrebari simple C++)
extrage şirul 1-2-3-11-5 ? *p[ 3 ] = 1)int *p = new int(10); *p = -10; Ce
11; valoare are p ? adresa unde este
41. int *p, y[ 10 ], i; for( i = 0; i < stocată valoarea 10
10; i++ ) { y[ i ] = i; } p = y; p += 8; 2) const char *s1 = "abc", *s2 =
printf( "%d", *p ); Ce extrage "ABC"; Care din următoarele
codul ? 8 atribuiri sunt corecte ? 1) s1[0] =
42.char **s; ( 3[ s ] )[ 5 ] = 'e'; s[ 6 ][ s2[0] 2) s1[0] = 'A'; 3) s1 = s2;
4 ] = 'e'; s[ 5 ][ 3 ] = 'e'; s[ 4 ][ 6 ] = 3
'e'; s[ 3 ][ 5 ] = 'e'; 3) .. { int x = 10; { int x = -10; cout
*( *( s + 5 ) + 3 ) = 'e'; Câte << ::x; } } Ce extrage eroare
instrucţiuni atribuie caracterul 'e' la compilare
pentru caracterul cu numărul de 4) Ce valoare are sizeof 'a' în C ?
ordine 6 în şirul cu numărul de 2
ordine 4 al tabloului s ? 1 5) int a = 10;int& ra;ra = a; Ce
43. char *x = NULL; printf( "%s", valoarea are ra ? eroare
x ); Ce extrage codul ? (null) la compilare
44.int a;int b;int *b;int *c;int 6) double f(); // declaraţie prototip
**c;int **d;int ***d; a * b * *c * funcţie C++ Câţi parametri are
funcţia ? 0
7) Ce tip are constanta 'a' în C ? 18) int& f(int a) { return a; } ... int a
Int = 10;Ce returnează f(a) ? 10
8) int& f(int x) { return -x; } Ce 19 ) union { int a; float b; double c;
valoare are f(7) ? eroare la } u = {3.14};Ce valoare are u.a ?
compilare 3
9) Ce valoare are sizeof 'a' în C++ ? 20) f(); // declaraţie prototip funcţie
1 C++ Ce tip returnează funcţia ?
10) Ce tip are constanta 'ab' în C ? Int
eroare sintactică 21) Care este poziţia parametrilor
11) Ce valoare are sizeof 'ab' în C ? impliciţi în lista de parametri ai
eroare sintactică unei funcţii? ultimii în listă
12) int& f(int& a) { return a; } ... int 22) char * const s1 = "abc", *s2 =
a = 10; Ce returnează f(a) ? "ABC";Care din următoarele
10 atribuiri sunt corecte ?1) s1[0] =
13) Ce tip are constanta 'a' în C++ ? s2[0];2) s1[0] = 'A';3) s1 = s2;
Char 1 2
14) int& f(int& a, int& b) { return a 23) union { int a; float b; double c;
+ b; }... int a = 2, b = 8;Ce } u = {3.14};Ce valoare are u.b ?
returnează f(a,b) ? eroare la Imprevizibil
compilare 24)Ce valoare are sizeof 'ab' în C++
15) int f(int x = 0, int y = 0) { ? 4
return x + y; } float f(int x = 0, int y 25)int& p = *new int(10); p = -
= 1) { return float(x)/y; }Ce 10; Ce valoare are p ? -
returnează f(1,1) ? eroare la 10
compilare 26)Ce tip are constanta 'ab' în C++
16) struct A { int B; ... } *C;Care ? Int
expresie este corectă ? C->B 27) int x = -10; // var. globală { int x
17) struct A { int B; ... } C; Care = 10; cout << ::x; } Ce extrage ?
expresie este corectă ? C.B Eroare la compilare
28)Ce tip are constanta 'a' în C++ ? 32767 << setw(10) <<32767; Câte
Char numere egale vom obţine pe ecran?
29) ... { int y = 10; { int x = -10; 2
} cout << x;} Ce extrage ? 9)Fie sizeof(int) este 4 şi cout <<
eroare la compilare 32323 + 23232;Ce extrage ?
TEST 12 55555
1)Fie sizeof(int) este 2 şi cout << 10)cout << "Hello, C++!"; Cum se
32323 + 23232; un rezultat numeşte aici operatorul "<<" ?
greşit Operator de inserare
2)Care modificator defineşte 11)char msg[15];cin >> msg;cout
lăţimea câmpului de extragere a << msg;La intrare avem mesajul
datelor cu cout ?setw() "Hello!C++!" Ce va afişa?
3)Care modificator defineşte Hello!C++!
numărul de semne zecimale pentru 12)Care modificator defineşte
valorile flotante extase cu cout ? modul de aliniere pentru valorile
setprecision() extrase cu cout? setf()
4)int s = 10, c = 20;cout << 13)int s = 2 > 1 << 2;cout << s;Ce
setbase(8) << s << ' ' << dec << c;Ce extrage ? 0
extrage ? 12 20 14)cout << "C++ are clase!" << '\n'
5)char s[5], c[3];cin >> s >> c;cout << "C++ are clase!"<< "\n" <<
<< s << c; La intrare avem: "C++ are clase!" << endl; Pe câte
Limbajul C++ Ce extrage ? linii vom obţine acelaşi mesaj ? . 2
Imprevizibi (LimbajulC++) 15)La intrare avem: C++ is fine!Ce
6)#define SQR(x) x*x Ce valoare obţinem la ieşire ?char s[22]; cin >>
are 225/SQR(15) ? 225 s; cout << s; C++
7)cout << dec << 12 << oct << 12 << 16) int x; cin >> x;Cum se numeşte
hex << 12; Ce va afişa? 1214c aici operatorul ">>" ? Operator
8)cout << setw(1) << 32767 << de extragere
setw(4) << 32767 << setw(7) <<
17) int s = 10, c = 20;cout << 7. Ce este o instanţă? Un obiect de o
setbase(8) << s << ' ' << c; 12 24 anumită clasă
18 )int s = 3, c = 4;cout << 8. Structura C++ are implicit toţi
setprecision(1) << double(s)/c; membrii?public
0.8 9. class my { int a; public: void
19 )int s = 2; double c = 3;Ce show_a(int a=15) { cout << this->a;
valoare are sizeof( 2 < 3 ? s : c ) ? }void get_a() { cout << "a="; cin >>
8 a; } };main() { int a=25; my ob;
TEST 13(Problemecu clase si ob.get_a(); ob.show_a(); }
structuri) Numărul introdus
1. Cum pot fi accesaţi membrii 10. class my { int a; public: void
privaţi ai unei structuri ? Prin get_a() { cout << "a="; cin >> a;
funcţii membru publice }void show_a(int a){ cout << a; }
2. Care parte a definiţiei unei clase };main() { int a=25;my ob;ob.get_a();
defineşte modul de implementare a ob.show_a(a); } 25
unui TAD? Partea privată 11. class my { int a; public: void
3. În C++ structura poate fi membru get_a() { cout << "a="; cin >> a;
al unei clase? Adevarat }void show_a() { cout << a; }
4. Cum pot fi accesaţi membrii };main() { int a=25; my ob;
privaţi ai unei clase? Prin funcţii ob.get_a(); ob.show_a(a); }
membru publice Mesaj de eroare
5. Care definiţii sunt corecte? struct S 12. class my { int a; public: void
{ int y; S *z; }; class A; struct E { get_a() { cout << "a="; cin >> a; }
int z; A& x; }; class E; struct A { int void show_a() { cout << a; } };main()
x; E y; }; { int a=25; my ob;
6. Ce este incapsularea? Modul de ob.get_a();ob.show_a(); }
ascundere a datelor şi funcţiilor în . Numărul introdus
definiţia unei clase prin protecţia 13. class my { int a;public: void
lor get_a() { cout << "a="; cin >> a; }
void show_a(int a=15) { int a=35; a; } };
cout << a; } };main() { int a=25; my main() { int a=25; my
ob; ob.get_a(); ob.show_a(45); } ob;ob.get_a();ob.show_a(); }
Mesaj de eroare Lipseşte răspunsul Numărul introdus
corect 19. class my { int a;public: void
14. class my { int a; public: void get_a() { cout << "a="; cin >> a; }
get_a() { cout << "a="; cin >> a; void show_a(int a=15) { cout << a; }
}void show_a(int a=15) { cout << a; } };main() { int a=25;my
};main() { int a=25; my ob;ob.get_a();ob.show_a(35); }
ob;ob.get_a(); ob.show_a(); } 15 35
15.class my { int a;public: void 20. class my { int a; public: void
get_a() { cout << "a="; cin >> a; } get_a() { cout << "a="; cin >> a; }
void show_a(int a) { cout << a; } void show_a(int a=15) { cout << a; }
};main() { int a=25; my ob; };
ob.get_a(); ob.show_a(15); } 15 main() { int a=25; my ob; ob.get_a();
16. class my { int a;public: void ob.show_a(); } 15 implicit
get_a() { cout << "a="; cin >> a; 21. class my { int a;public: void
}void show_a() { cout << a; } show_a(int a=15) { cout << my::a;
};main() { int a=25; my ob; } void get_a() { cout << "a="; cin >>
ob.get_a(); ob.show_a(23); } a; } };
Mesaj de eroare main() { int a=25;my *ob; ob.get_a();
17. class my { int a;public: void ob.show_a(); } Mesaj de eroare
get.a() { cout << "a="; cin >> a; } 22. struct a { int b;void c(void) {
void show.a() { cout << a; } };main() b=26; cout << b; } } d;main() {
{ int a=25; my ob;ob.get.a(); d.b=16; cout << d.b; } 16
ob.show.a(); } Mesaj de eroare 23. struct A { int b;static int
18. class my { int a;public: void c; public: void d(int e) { b=e; } };int
show_a(int a=15) { cout << my::a; c=0;A m, n; 211
} void get_a() { cout << "a="; cin >>
24. struct A { int b;void c(int d) { b=g; } } x, *w, t[3];main() { w=new
b=d; } public: int e;void f(int g) { A; ... } 5151
b=g; }} m, *n;main() { n=new A; ... } 31. class S { int a,b;public: S23() {
n->c(10) m.b m.c(10) a=2; b=3; } } x,y,z;main() { z=x*y; }
n->b Eroare la compilare
25. struct A { int b;void c(int d) { 32. class S { int a,b;public: S23() {
b=d; } public: int e; void f(int g) { a=2; b=3; } } w;main() {cout <<
b=g; } } m; m.f(10) m.b=10 w.a+w.b; } Eroare la compilare
m.e=10 33. class a { int b;void c(void) {
m.c(10) b=26; cout << b; } } d;main() {
26. struct A { int x; char g[57]; } w, d.b=16; cout << d.b; } Mesaj de
*s; w.g s->g s->x eroare!
. w.x TEST 14
27. struct A { int b;void c(int d) { 1..class my { int a; public: my();void
b=d; } public: int e;void f(int g) { show_a(); };my::my() { cout << "a=";
b=g; } } *m;main() { m=new A; ... } cin >> a; a=25;}void my::show_a() {
m->b=10 m->f(10) m- cout << a; }main() { my ob;int
>f(10) m->c(10) a=25;ob.show_a(); }Ce afişează? e.
28. struct S { int a,b;public: S23() { Lipseşte răspunsul correct
a=2; b=3; }void show() { cout << a 2. class my { int a;public: my(int
<< ' ' << b; } } w;main() { w.show(); a=5) { my::a=1; }~my() { cout << "
} e. Eroare la Aici destructorul!"; }void show_a() {
compilare cout << " " << a; } };void f(my c) {
29. class A { char n[27]; } c.show_a(); }main() { my a(3);f(a);
*w[5];main() { for(int i = 0; i < 5; i++ }Ce afişează? a. Lipseşte răspunsul
) w[i] = new A; ... } w[1]->n[1] corect (1 Aici destructorul ! Aici
w[1]->n destructorul !)
30. class A { int b;void c(int d) { 3 .class my { int a;public: my(int a=1)
b=d; } public: int e;void f(int g) { { my::a=5; }~my() { cout << " Aici
destructorul!"; }void show_a() { cout a) { my::a=a; }my::my() { cout <<
<< " " << a; } };void f(my& b) { "a="; cin >> a; } void my::show_a() {
b.show_a(); }main() { my a(3);f(a); cout << a; }main() { my& ob; int
}Ce afişează? d. 5 Aici a=25;ob.show_a(); }Ce afişează? d.
destructorul!! Mesaj de eroare
4 .struct S { int a,b;public: S() { a=2; 9 .class my { int a; public: my(int
b=3; }void show() { cout << a << ' ' a); my(); void show_a();
<< b; }} w;main() { w.show(); }Ce va };my::my(int a) { my::a=a; }my::my()
afişa? d. 2 3 { cout << "a="; cin >> a; }void
5 .class my { int a;public: my(int a=1) my::show_a() { cout << a; }main() {
{ my::a=3; }~my() { cout << " Aici my ob(); int a=25; ob.show_a(); }Ce
destructorul!"; }void show_a() { cout afişează? d. Mesaj de eroare
<< " " << a; } };main() { my *p; 10. class my { int a;public: my(int
p=new my(5);p->show_a(); p- a=4) { my::a=a; } my() { a=5; }void
>~my(); }Ce afişează? d. 3 Aici show_a() { cout << " " << a; }
destructorul! };main() { my a[4]={0,1,2,3,4};
6. class my { int a; public: my(int for(int i=0; i<4; i++)a[i].show_a();
a=5) { my::a=1; } ~my() { cout << " }Ce afişează? a. Mesaj de eroare
Aici destructorul!"; } void show_a() 11. class my { int a; public: my(int
{ cout << " " << a; } };void f(my& b) a=1) { my::a=2; } void show_a() {
{ b.show_a(); }main() { my a(3);f(a); cout << a; } };main() { my ob(3);
}Ce afişează? a. 1 Aici destructorul! my& p=ob; p->show_a(); }Ce
7. class my { int a;public: my(int a); afişează? b. Mesaj de eroare
void show_a(); };my::my(int a) { 12 .class my { int a; public: my(int
my::a=a; }void my::show_a() { cout a=35) { my::a=a; } ~my() { cout <<
<< a; } main() { my ob(15); int " Aici destructorul!"; }void show_a();
a=25;ob.show_a();}Ce afişează? d. 15 };void my::show_a() { cout << a;
8. class my { int a;public: my(int a); }main() { my ob; int a=25;
my(); void show_a(); };my::my(int
ob.show_a(); }Ce afişează?a. 35 Aici 17 .class my { int a; public: my(int
destructorul! a=1) { my::a=5; }~my() { cout << "
13.class my { int a; public: my(); Aici destructorul!"; } void show_a()
void showa(); };my::my() { cout << { cout << " " << a; } };main() { my
"a="; cin >> a; }void my::showa() { *p; p=new my(3);p->show_a(); p-
cout << a; } main() { my ob;int a=25; >~my(); }Ce afişează?. 5 Aici
ob.showa(); }Ce afişează? Numărul destructorul!
inrodus 18 .class my { int a; public: my(int
14 .class my { int a;public: my(int a=1) { my::a=5; }~my() { cout << "
a=3) { my::a=1; } ~my() { cout << " Aici destructorul!"; } void show_a()
Aici destructorul!"; } void show_a() { cout << " " << a; } };void f(my *b)
{ cout << " " << a; } };void f(my c) { { b->show_a(); }main() { my
c.show_a(); }main() { my a(5); f(a); a(3);f(&a); }Ce afişează? . 5 Aici
}Ce afişează?d. Lipseşte răspunsul destructorul!
corect 19.class my { int a;public: my(int a);
15. class my { int a; public: my(int void show_a(); };my::my(int a) {
a=1) { my::a=8; } ~my() { cout << " my::a=a; }void my::show_a() { cout
Aici destructorul!"; } void show_a() << a; }main() { my ob(25); int a=15;
{ cout << " " << a; } };main() { my ob.show_a();}Ce afişează? 25
*p; p=new my(3);p->show_a(); p- 20 .class my { int a; public: my(int a)
>~my(); }Ce afişează? e. Lipseşte { my::a=3; } ~my() { cout << " Aici
răspunsul corect destructorul!"; }void show_a() { cout
16 .class my { int a;public: my(int << " " << a; } };main() { my *p;
a=1) { my::a=3; }~my() { cout << " p=new my[5]; for(int i=0; i<3; i++)
Aici destructorul!"; }void show_a() { p[i].show_a(); }Ce afişează? Mesaj
cout << " " << a; } }; void f(my *b) { de eroa
b->show_a(); }main() { my 21. class my { int a;public: my(int
a(5);f(&a); }Ce afişează? 3 Aici a=1) { my::a=2; } void show_a() {
destructorul! cout << a; } };main() { my ob(3);
my& p=ob;p.show_a(); } Ce afişează? a) { my::a=a; }my::my() { cout <<
a. 2 "a="; cin >> a; }void my::show_a() {
22 .class my { int a;public: my(int a) cout << a; }main() { my ob=my();int
{ my::a=5; }my() { a=1; }~my() { a=125;ob.show_a(); }Ce afişează?
cout << " Aici destructorul!"; }void Numărul introdus
show_a() { cout << " " << a; } 27. class my { int a; public: my(int a)
};main() { my *p; p=new { my::a=5; } my() { a=1; } ~my() {
my[3];for(int i=0; i<3; i++){ cout << " Aici destructorul!"; } void
p[i].show_a();p[i].~my(); } }Ce show_a() { cout << " " << a; }
afişează? . Lipseşte răspunsul corect };main() { my *p; p=new my[3];
(1 Aici destructorul! 1 Aici for(int i=0; i<3; i++) {
destructorul! 1 Aici destructorul!) p[i].show_a(); p[i].~my(); } }Ce
23. class my { int a;public: my(int afişează? Lipseşte răspunsul corect
a=4) { my::a=a; } my() { a=5; } (1 Aici destructorul! 1 Aici
void show_a() { cout << " " << a; } destructorul! 1 Aici destructorul!)
};main() { my a[4]={1,2,3,4};for(int 28 .class my { int a; public: my(int
i=0; i<4; i++) a[i].show_a(); }Ce a) { my::a=5; } my() { } ~my() {
afişează?d. 1 2 3 4 cout << " Aici destructorul!"; } void
24 .class S { int a,b;public: S() { a=2; show_a() { cout << " " << a; }
b=3; }} x,y,z;main() { z=x*y; ... }Ce };main() { my *p; p=new
valoare are z?Eroare la compilare my[3];for(int i=0; i<3; i++)
25 .class my { int a; public: my(int p[i].show_a(); }Ce afişează? Lipseşte
a=1) { my::a=5; } ~my() { cout << " răspunsul corect
Aici destructorul!"; } void show_a() 29 .class my { int a;public: my(int
{ cout << " " << a; } };main() { my a);my(); void show_a(); };my::my(int
*p; p=new my(3);p->show_a(); }Ce a) { my::a=a; }my::my() { cout <<
afişează? b. 5 "a="; cin >> a; }void my::show_a() {
26 .class my { int a;public: my(int cout << a; }main() { my ob; int
a);my();void show_a(); };my::my(int
a=25;ob.show_a(); }Ce afişează?. 34.class my { int a;public: my(int a) {
Numărul introdus my::a=5; }~my() { cout << " Aici
30 .class S { int a,b;public: S() { a=2; destructorul!"; }void show_a() { cout
b=3; }} w;main() { cout << w.a+w.b; << " " << a; } }; main() { my *p;
}Ce va afişa? Eroare la p=new my[3];for(int i=0; i<3;
compilare i++)p[i].show_a(); }Ce afişează? .
31. class my { int a; public: my(int Mesaj de eroare
a); my();void show_a(); 35. class my { int a;public: my(int a);
};my::my(int a) { my::a=a; }my::my() my(); void show_a(); };my::my(int
{ cout << "a="; cin >> a; }void a) { my::a=a; }my::my() { cout <<
my::show_a() { cout << a; }main() { "a="; cin >> a; }void my::show_a() {
my ob=my(); int a=25; cout << a; }main() { my ob(28); int
ob.show_a(); }Ce afişează? Numărul a=25; ob.show_a(); }Ce afişează?.
introdus Lipseşte răspunsul correct (28)
32 .class my { int a; public: my(); 36. class my { int a; public: my( int
void show_a(); };my::my() { cout << a); void show_a(); };my::my(int
"a="; cin >> a; }void my::show_a() { a=35) { my::a=a; }void my::show_a()
cout << a; } main() { my ob; int { cout << a; }main() { my ob(15); int
a=25; ob.show_a(); }Ce afişează?. a=25;ob.show_a(); }Ce afişează?
Numărul inrodus 15
33 .class my { int a, b; public: my(int 37. class my { int a; public: my(int
a=1, int b=2) { my::a=a; my::b=6; } a=1) { my::a=2; } void show_a() {
void show_a() { cout << " " << a << " cout << a; } };main() { my ob(3),
" << b; } }; main() { my a[2][3]={ *p=&ob; p->show_a(); }Ce
my(1,2), my(), 1, 2, my(3), my(3,4) afişează? . 2
};for(int i=0; i<2; i++) { for(int j=0; TEST 15(problem cu operatori)
j<3; j++) a[i][j].show_a(); cout << 1 .class my { int a; public: my() {
endl; } } Ce afişează? 1 6 1 6 1 6 2 cout << "a="; cin >> a; } void
63636 show_a() { cout << a; } int operator
-(int b) { return ( (a-b)%5 ); } 5 .class my { int a;public: my() { cout
};main() { my a; int c; c=-(3-a); << "a="; cin >> a; }void show_a() {
cout << c; }Ce afişează?. Mesaj de cout << a; } int operator /(int b) {
eroare return ( (a/b)%2 ); } };main() { my a;
2 .class my { int a; public: my() { int c; c=a/3; cout << c; }Ce
cout << "a="; cin >> a; } void afişează?b. 1, când câtul numerelor
show_a() { cout << a; } int a şi 3 este impar e. 0, când câtul
operator /(int b) { return ( (a/b)%2 ); } numerelor a şi 3 este par 1, când
};main() { my a;int c; c=1/(3/a);cout câtul numerelor a şi b este impar
<< c; }Ce afişează? Mesaj de 0, când câtul numerelor a şi b este
eroare par
3. class my { int a;public: my() { cout 6. class my { int a; public: my() {
<< "a="; cin >> a; } void show_a() cout << "a="; cin >> a; } void
{ cout << a; } int operator -(int b) show_a() { cout << a; } int operator -
{ return ( (a-b)%5 ); } };main() { my (int b) { return ( (a-b)%5 ); } };main()
a; int c; c=a-3; cout << c; }Ce { my a; int c; c=a- -3; cout << c;
afişează?a. Restul impartirii (a-b)/5 }Ce afişează?a. Valoarea a+3
b. Restul impartirii (a-3)/5 f. modulo 5 c. Restul impartirii
Valoarea a-b modulo 5 g. Valoarea (a+3)/5 d. Restul impartirii (a+b)/5
a-3 modulo 5 f. Valoarea a+b modulo 5
4. class my { int a;public: my() { cout 7. class my { int a;public: my() { cout
<< "a="; cin >> a; }void show_a() { << "a="; cin >> a; } void show_a() {
cout << a; }int operator *(int b) { cout << a; } int operator +(int b) {
return ( (a*b)%1 ); } };main() { my return ( (a+b)%3 ); } };main() { my a;
a;int c;c=a*3;cout << c; }Ce int c;c=7+a;cout << c; }Ce
afişează?a. 0, dacă produsul afişează?Mesaj de eroare
numerelor a şi 3 este par b. 0, 8 .class my { int a; public: my() {
dacă produsul numerelor a şi b este cout << "a="; cin >> a; } void
par c. 0, dacă a este par show_a() { cout << a; } int operator
+(int b) { return ( (a+b)%3 ); } ceil(z));
};main() { my a; int c;c=a+7; cout printf("%.0f : %.0f ", floor(x),
<< c; }Ce afişează?b. Valoarea a+7 floor(z));
modulo 3 c. Valoarea a+b modulo
3 d. Restul impartirii (a+b)/3 h. -3 : 4 - 4 : 3
Restul impartirii (a+7)/3
9 .class my { int a;public: my() { cout ***************************************
<< "a="; cin >> a; }void show_a() { *******
cout << a; }int operator +(int b) { Ce valoare are elementul
return ( (a%1+b)%3 ); } };main() { a[1][0][1] ?
my a;int c;c=a+7;cout << c; }Ce int a[3][2][2] = {
afişează?h. Lipseşte răspunsul 1,2,3,4,5,6,7,8,9,10,11,12 };
correct (1)
10 .class my { int a; public: my() { 6 in dev, dar eu cred ca 11
cout << "a="; cin >> a; } void
show_a() { cout << a; } int operator ***************************************
*(int b) { return ( (a*b)%2 ); } *******
};main() { my a;int c; c=a*3; cout Care expresii calculează
<< c; }Ce afişează?c. 0, dacă pătratul lui x ?
produsul numerelor a şi 3 este par
e. 0, dacă a este par g. 1, dacă a este pow(x,2) si x*x
impar h. 1, dacă produsul
numerelor a şi 3 este impar j. 0, ***************************************
dacă produsul numerelor a şi b este *******
par Ce extrage codul ?
char a[ ]="123";
Ce extrage codul ? printf("%d", strlen(a));
double x = -3.5, z=3.5;
printf("%.0f : %.0f ", ceil(x), 3
*************************************** ???
*******
Ce afişează codul ? ***************************************
double x=1.0, y=2.0; *******
printf("%.2lf ", (double)( (int)x / Ce extrage codul ?
(int)y )+(x/y) ); int y=5, z;
z=(++y)++;
0.50 printf("y=%d, z=%d", y,z);

*************************************** eroare la compilare


*******
Care este declaraţia corectă ***************************************
pentru un tablou de 5 numere *******
întregi ? Care expresie atribuie bitului cu
numărul de ordine 4 valoarea 1
int data[5] ?

*************************************** ??? (size|=4)


*******
Ce afişează codul ? ***************************************
char a[ ]={ '1', '2', '3', 0 }; *******
printf("%d", sizeof(a)); Ce afişează codul ?
int x=10/2;
4 printf("%.2f ", (double)x*2);

*************************************** 10.00
*******
Care expresii sunt corecte ?
*************************************** 0x5775
*******
Ce extrage codul ? ***************************************
printf("Litera\0x41"); *******
Ce extrage codul ?
Litera char c = 'A' + 4;
printf("%c", c);
***************************************
******* Codul este corect. Va afişa un
Ce extrage codul ? caracter legal
char a[ ] = "123\0";
printf("%d", strlen(a)); ***************************************
*******
eroare la execuţie Ce extrage codul ?
printf("%d ", 7%4);
***************************************
******* 3
int i=0, j;
j=( i=4, i/2, i*i/i ); ***************************************
Care va fi valoarea lui j ? *******
Ce conţine variabila c ?
4 char c = '\101';

*************************************** 65 (codul ASCII al literei A)


*******
Ce extrage codul ? ***************************************
int x = 0x1234, y = 0x5555; *******
printf( "0x%04.4x", x | y ); Ce extrage codul ?
int a=3, b=4, c;
c=a + + + - - b; ***************************************
printf("%d %d %d", a,b,c); *******
Ce afişează codul ?
eroare la compilare int a=5|3; float b=1.5f; b-=a/2;
printf("%.2f",b);
***************************************
******* -1.50
Care este cel mai mare număr
ce poate fi afişat ? ***************************************
short int x; ... *******
printf("%d", x); Care expresie foloseşte un
număr minim de paranteze şi
32767 este echivalentă cu expresia
dată ?
*************************************** retrun
******* (x=((((y=2)*z)+((a|b)*(2+s)))));
Care tip de date asigură cea mai
mare precizie în calculele cu retrun x=(y=2)*z+(a|b)*(2+s);
virgula mobilă ?
***************************************
long double *******
Care este lungimea maximă (în
*************************************** octeţi) pentru tipurile short, int,
******* long ?
Ce returnează operatorul & ?
2, 4, 4
adresa operandului
***************************************
*******
Ce extrage codul ? Ce valoare are sizeof(x) ?
int x=0x1234, y=0x5555; short x[5][7];
printf("0x%04.4", x&y);
70
0x1014
***************************************
*************************************** *******
******* Ce valoare are z ?
Ce tip are constanta 27U ? int z, x=5, y = -10, a=4, b=2;
z=x++ - --y*b/a;
unsigned int sau unsigned char
10
***************************************
******* ***************************************
Ce valoare are expresia ? *******
0xF & ~0x9 Ce valoare are z ?
int z, x = 5, y = -10;
0x6 z=x- -y;

*************************************** -5
*******
Ce tip va avea rezultatul ***************************************
adunării a două variabile de tip *******
short ? Ce extrage codul ?
int x=0x1234, y=0x5555;
int printf("0x%04.4x", x^y);

*************************************** 0x4761
*******
*************************************** ***************************************
******* *******
Care iniţializare este greşită ? Ce valoare are a ?
int a, b=1, c=2, d=3, e=4, f=3;
int data[2][2]={ 1,2,3,4,5 }; a=b=c=d=e=f;

*************************************** 3
*******
Ce extrage codul ? ***************************************
int x=0x1234; *******
printf("0x%04.4", ~x); Ce extrage codul ?
short int a[ ] = { 1, 2, 3 };
0x0000 sau eroare la compilare printf("%d", sizeof(a) /
sizeof(a[0]));
***************************************
******* 3
Ce extrage codul ?
printf("%d", 64>>3); ***************************************
*******
8 Ce extrage codul ?
double x = 1.0 - 1/2 - 1/2;
*************************************** printf("%.2f", x);
*******
Cum se notează operaţia logică 1.00
AND ( şi ) în C ?
***************************************
&& *******
Care expresii calculează corect
valoarea fracţiei x/y ? AC
int x=5, y=2; float z;
***************************************
z=x/(float)y; *******
z=(float)x/(float)y; Ce afişează codul ?
z=(float)x/y; char a[ ]={ '1', '2', '3' };
printf("%d", sizeof(a));
***************************************
******* 3
Care este rezultatul operaţiei
sizeof( 5. ) ? ***************************************
*******
8 Ce afişează codul ?
int x=1;
*************************************** printf("%d", --x?++x:--x);
*******
Ce afişează codul ? -1
int i=4; int x=6; double z;
z=x/i; printf(z=%.2f ",z); ***************************************
*******
z=1.00 Ce extrage codul ?
short tar[4][3] = { {1}, {2,3},
*************************************** {4,5,6} };
******* printf("%d", sizeof(tar));
e extrage codul ?
char x='B'; 24
putchar(x-1);
putchar(x+1);
*************************************** 2. Ce este o operaţie de intrare
******* sau ieşire?
Ce afişează codul ? Operatie de shimb dintre program
int a=5^3; float b=1.5f; si periferic
b+=--a/2; printf("%.2f",b); 3. Ce este a în float a[10][50]
?Numele tabloului
3.50 4. Ce este un cuvînt cheie în C?
Cuvint cu utilizare predefinita ce
*************************************** nu poate fi schimbata de user
******* 5. Cum se stabileşte legătura
Constantele 314ul şi 134Lu au dintre numele variabilei şi tipul
acelaşi tip ei?
Prin declaratia variabilei
Fals 6. Ce este o operaţie de scriere?
Operatie de introducere a datelor la
*************************************** un periferic
******* 7. Ce este un şir de caractere?
Ce valori conţine tabloul x ? O succesiune de 0 sau mai multe
int x[10] = { 1,2,3,4,5,6,7,8,9,10 }; caractere scrise intre ghilimele
int y = 20, i = 10; x[--i]=y; 8. Unde poate fi amplasat un
comentariu în program?
{ 1,2,3,4,5,6,7,8,9,20 } Oriunde este legal un spatiu alb.
9. Ce este o operaţie de afişare?
Operatie de scriere la terminalul
standart(display)
1. Ce este o operaţie de citire? 10. Care este tipul unei
Operatie de introducere a datelor constante caracter? int
de la un periferic 11. Cum se reprezintă o
constantă caracter?
Caracterul sau secventa escape 20. Elementele unui tablou pot fi
intre caracterele apostrof de tipuri diferite. Fals
12. Ce valoare are a din 21. Elementele unei structuri pot
declaraţia int a[10]?Adresa fi de tipuri diferite.Adevarat
primului element in tablou 22. Pe câţi biţi se reprezintă o
13. Care este valoarea unei constantă hexazecimală? 16
constante caracter?Codul ASCII daca ii sunt suf.,altfel 32
al caracterului respectiv 23. Pe câţi biţi se reprezintă o
14. Ce este o declaraţie constantă zecimală întreagă? 16
implicită?In C nu exista declaratii daca ii sunt suf.,altfel 32
implicite 24. Pe câţi biţi se reprezintă o
15. Câtă memorie (în octeţi) constantă octală?16 daca ii sunt
ocupă un şir de n caractere? suf.,altfel 32
n+1 25. Citirea numerelor întregi cu
16. Poate, oare, fi schimbată scanf() se face prin intermediul
valoarea sau tipul unei variabile specificatorilor de format
în tipul execuţiei programului? definiţi de literele:
Valoarea da,tipul nu doxXu
17. Poate, oare, fi schimbată 26. Afişarea numerelor ce nu
valoarea sau tipul unei sunt întregi cu printf() se face
constante în timpul execuţiei prin intermediul specificatorilor
programului? de format definiţi de literele:
Valoarea nu,tipul nu doxXu
18. Afişarea şirurilor de 27. Afişarea numerelor întregi cu
caractere cu printf() se face prin printf() se face prin intermediul
intermediul specificatorilor de specificatorilor de format
format definiţi de literele:s definiţi de literele:
19. 0314 este o constantă doxXu
zecimală. Fals
28. Citirea numerelor ce nu sunt 36. Câtă memorie (în biţi) se
întregi cu scanf() se face prin alocă tipului long? 32
intermediul specificatorilor de 37. Pe câţi biţi se reprezintă o
format definiţi de literele: flfLf constantă octală ce se termină
29. Afişarea caracterelor cu cu L sau l?32
printf() se face prin intermediul 38. Pe câţi biţi se reprezintă o
specificatorilor de format constantă flotantă? 64
definiţi de literele: c 39. Câtă memorie (în biţi) se
30. Citirea şirurilor de caractere alocă tipului double? 64
cu scanf() se face prin 40. Câti octeţi ocupă tabloul
intermediul specificatorilor de float a[10][50] ?2000
format definiţi de literele: s 41. Câti octeţi ocupă tabloul
31. Citirea caracterelor cu double a[10][50] ? 4000
scanf() se face prin intermediul 42. Câţi octeţi ocupă tabloul
specificatorilor de format char a[100] ?100
definiţi de literele: c 43. Câtă memorie (în biţi) se
32. Pe câţi biţi se reprezintă o alocă tipului long double? 80
constantă zecimală întreagă ce 44. Pe câţi biţi se reprezintă o
se termină cu L sau l? 32 constantă flotantă ce se termină
33. Câtă memorie (în biţi) se cu L sau l? 80
alocă tipului float? 32 45. Fie declaraţia int a[10], câtă
34. Pe câţi biţi se reprezintă o memorie (în octeţi) se alocă?20
constantă flotantă ce se termină 46. Câtă memorie (în biţi) se
cu F sau f?32 alocă tipului int?16
35. Pe câţi biţi se reprezintă o 47. Care este indicele ultimului
constantă hexazecimală ce se element al tabloului int a[10] ? 9
termină cu L sau l? 32 48. Câtă memorie (în biţi) se
alocă tipului char? 8
49. Ce indice are primul element Care este poziţia parametrilor
al tabloului int a[10] ? 0 impliciţi în lista de parametri ai
50. Care este valoarea inferioară unei funcţii ?
pentru indici în tablouri?0 ultimii în listă

Ce tip are constanta 'a' în C ? int a = 10;


Int int& ra;
ra = a;
Ce valoare are sizeof 'a' în C ? Ce valoarea are ra ?
e. 2 eroare la compilare
Ce tip are constanta 'a' în C++ ?
Char int& f(int x) { return -x; }
Ce valoare are f(7) ?
Ce valoare are sizeof 'a' în C++ ? eroare la compilare
1
const char *s1 = "abc", *s2 =
Ce tip are constanta 'ab' în C ? "ABC";
eroare sintactică Care din următoarele atribuiri sunt
corecte ?
Ce valoare are sizeof 'ab' în C++ ? 1) s1[0] = s2[0];
sizeof(int) 2) s1[0] = 'A';
Ce tip are co 3) s1 = s2;
nstanta 'ab' în C++ ? 3
Int
char * const s1 = "abc", *s2 =
Ce valoare are sizeof 'ab' în C ? "ABC";
eroare sintactică Care din următoarele atribuiri sunt
corecte ?
1) s1[0] = s2[0];
2) s1[0] = 'A'; int *p = new int(10); *p = -10;
3) s1 = s2; Ce valoare are p ?
12 adresa unde este stocată valoarea -
10
f(); // declaraţie prototip funcţie
C++ int& p = *new int(10); p = -10;
Ce tip returnează funcţia ? Ce valoare are p ?
int -10

double f(); // declaraţie prototip int& f(int& a) { return a; } ... int a =


funcţie C++ 10;
Câţi parametri are funcţia ? Ce returnează f(a) ?
0 10

int& f(int a) { return a; } ... int a =


... { int x = 10; { int x = -10; cout << 10;
::x; } } Ce returnează f(a) ?
Ce extrage ? eroare la compilare
eroare la compilare
int x = -10; // var. globală int& f(int& a, int& b) { return a +
{ int x = 10; cout << ::x; } b; }
Ce extrage ? ... int a = 2, b = 8;
-10 Ce returnează f(a,b) ?
eroare la compilare
... { int y = 10; { int x = -10; } cout
<< x;} int f(int x = 0, int y = 0) { return x +
Ce extrage ? y; }
eroare la compilare float f(int x = 0, int y = 1) { return
float(x)/y; } Fie sizeof(int) este 4 şi
Ce returnează f(1,1) ? cout << 32323 + 23232;
eroare la compilare Ce extrage ?
55555
union { int a; float b; double c; } u =
{3.14}; La intrare avem: C++ is fine!
Ce valoare are u.b ? Ce obţinem la ieşire ?
imprevizibil char s[22]; cin >> s; cout << s;
union { int a; float b; double c; } u = C++
{3.14};
Ce valoare are u.a ? char s[5], c[3];
3 cin >> s >> c;
cout << s << c;
struct A { int B; ... } C; La intrare avem: Limbajul C++
Care expresie este corectă ? Ce extrage ?
C.B imprevizibil

struct A { int B; ... } *C; int s = 10, c = 20;


Care expresie este corectă ? cout << setbase(8) << s << ' ' << c;
C->B Ce extrage ?
12 24

int s = 10, c = 20;


cout << setbase(8) << s << ' ' << dec
Fie sizeof(int) este 2 şi << c;
cout << 32323 + 23232; Ce extrage ?
Ce extrage ? 12 20
un rezultat greşit
int s = 3, c = 4; cout << "Hello, C++!";
cout << setprecision(1) <<
double(s)/c; Cum se numeşte aici operatorul
Ce extrage ? "<<" ?
0.8
Operator de inserare
int s = 2; double c = 3;
Ce valoare are sizeof( 2 < 3 ? s : c ) cout << dec << 12 << oct << 12 <<
? hex << 12;
8
Ce va afişa?
Care modificator defineşte modul
1214c
de aliniere pentru valorile extrase
cu cout ? char msg[15];
setf() cin >> msg;
cout << msg;
Care modificator defineşte lăţimea La intrare avem mesajul
câmpului de extragere a datelor cu "Hello!C++!"
cout ? Ce va afişa?
setw()
Hello!C++!
Care modificator defineşte numărul
de semne zecimale pentru valorile cout << "C++ are clase!" << '\n' <<
flotante extase cu cout ? "C++ are clase!"<< "\n" << "C++
setprecision() are clase!" << endl;

Pe câte linii vom obţine acelaşi


mesaj ?
3

cout << setw(1) << 32767 << setw(4) 1 char * const s1 = "abc", *s2 =
<< 32767 << setw(7) << 32767 << "ABC";
setw(10) << 32767; Care din următoarele atribuiri
sunt corecte? 1,2
Câte numere egale vom obţine pe 1) s1[0] = s2[0];
ecran? 2) s1[0] = 'A';
3) s1 = s2;
2
2 union { int a; float b; double c;
int x; cin >> x;
} u = {3.14};
Cum se numeşte aici operatorul Ce valoare are u.a? imprevizibil
">>" ?
3 Ce valoare are sizeof 'a' în
Operator de extragere C? e. 2

#define SQR(x) x*x 4 Ce valoare are sizeof 'ab' în


C++? eroare sintactică
Ce valoare are 225/SQR(15) ?
5 int& p = *new int(10); p = -10;
225 Ce valoare are p? -10

int s = 2 > 1 << 2; 6 int a = 10;


cout << s; int& ra;
ra = a;
Ce extrage ? 0 2 > 1 << 2 este Ce valoarea are ra? 10
echivalent cu 2 > (1 << 2)
7 int& f(int x) { return -x; } 15 f(); // declaraţie prototip
Ce valoare are f(7)? -7 funcţie C++
Ce tip returnează funcţia? int
8 int *p = new int(10); *p = -10;
Ce valoare are p? -10 16 struct A { int B; ... } C;
Care expresie este corectă? C.B
9 int& f(int& a) { return a; } ... int
a = 10; 17 Care este poziţia
Ce returnează f(a)? 10 parametrilor impliciţi în lista de
parametri ai unei
10 union { int a; float b; double funcţii? oriunde în listă
c; } u = {3.14};
Ce valoare are u.b? imprevizibil 18 Ce valoare are sizeof 'a' în
C++? 1
11 ... { int y = 10; { int x = -10; }
cout << x;} 19 double f(); // declaraţie
Ce extrage? 10 prototip funcţie C++
Citi parametri are functia? 0
12 Ce tip are constanta 'ab' în
C? eroare sintactica 20 const char *s1 = "abc", *s2 =
"ABC";
13 Ce valoare are sizeof 'ab' în Care din următoarele atribuiri
C? eroare sintactica sunt corecte? 1,2

14 ... { int x = 10; { int x = -10; 1) s1[0] = s2[0];


cout << ::x; } } 2) s1[0] = 'A';
Ce extrage? -10 3) s1 = s2;
21 Ce tip are constanta 'ab' în
C++? int 28 Ce tip are constanta 'a' în
C++? int
22 int f(int x = 0, int y = 0) {
return x + y; }
float f(int x = 0, int y = 1) { return
float(x)/y; }
Ce returnează f(1,1)? eroare la
compilare

23 int& f(int& a, int& b) { return


a + b; }
... int a = 2, b = 8;
Ce returnează f(a,b)? nu se
poate determina

24 int x = -10; // var. globală


{ int x = 10; cout << ::x; }
Ce extrage? -10

25 Ce tip are constanta 'a' în


C? char

26 int& f(int a) { return a; } ... int


a = 10;
Ce returnează f(a)? 10

27 struct A { int B; ... } *C;


Care expresie este corectă? C.B
class my { int a;
public: void get_a() { cout
<< "a="; cin >> a; }
void show_a(int a){
cout << a; } };
Part 1
1
struct A main() { int a=25;
{ int b; my ob;
void c(int d) { b=d; } ob.get_a();
public: int e; ob.show_a(a); }
void f(int g) { b=g; } Ce afisează? a= 25
} *m; 5
main() { m=new A; ... } Care definiţii sunt corecte?
Expresii corecte struct S { int y; S *z; };
m->c(10) class A; struct E { int z; A& x; };
m->f(10) 6
m->e=10 class my { int a;
m->b=10 public: void get_a() { cout
2 << "a="; cin >> a; }
Cum pot fi accesaţi membrii privaţi ai void show_a(int
unei structuri ? a=15) { cout << a; } };
funcţii membru publice
3
Structura C++ are implicit toţi main() { int a=25;
membrii: public my ob;
4 ob.get_a();
ob.show_a(); }
Ce afişează? a= 15
7 10
Ce este o instanţă? obiect de o class my { int a;
anumită clasă public: void get_a() { cout
8 << "a="; cin >> a; }
class my { int a; void show_a(int a) {
public: void get_a() { cout cout << a; } };
<< "a="; cin >> a; }
void show_a() {
cout << a; } }; main() { int a=25;
my ob;
ob.get_a();
main() { int a=25; ob.show_a(15); }
my ob; Ce afişează? 15
ob.get_a(); 11
ob.show_a(23); } În C++ structura poate fi membru al
Ce afişează? Mesaj de eroare unei clase
9 Răspuns: Adevărat
class my { int a; 12
public: void show_a(int class A { int b;
a=15) { cout << this->a; } void c(int d) { b=d; }
void get_a() { cout public: int e;
<< "a="; cin >> a; } }; void f(int g) { b=g; }
} x, *w, t[3];
main() { w=new A; ... }
main() { int a=25; Câte exemplare de fiecare membru al
my ob; clasei vor fi alocate în memorie? 1 1 1
ob.get_a(); 1
ob.show_a(); } 13
Ce afişează? Numărul introdus
class my { int a;
public: void get_a() { cout
<< "a="; cin >> a; } Ce afişează? Numărul introdus
void show_a(int 16
a=15) { int a=35; cout << a; } }; struct A { int b;
void c(int d) { b=d; }
public: int e;
main() { int a=25; void f(int g) { b=g; }
my ob; } m;
ob.get_a(); Care expresii sunt corecte?
ob.show_a(45); } m.b=10
Ce afişează? Mesaj de eroare m.c(10)
14 m.f(10)
Ce este incapsularea? Modul de m.e=10
ascundere a datelor şi funcţiilor în 17
definiţia unei clase prin protecţia class a { int b;
lor void c(void) { b=26; cout << b; }
15 } d;
class my { int a; main() { d.b=16; cout << d.b; }
public: void show_a(int Ce va afişa? Mesaj de eroare!
a=15) { cout << my::a; } 18
void get_a() { cout struct A { int x; char g[57]; } w, *s;
<< "a="; cin >> a; } }; Care expresii sunt corecte?
s->g
w.g
main() { int a=25; s->x
my ob; w.x
ob.get_a(); 19
ob.show_a(); }
Care parte a definiţiei unei clase main() { n=new A; ... }
defineşte modul de implementare a Care expresii sunt corecte? m.b; n-
unui TAD? Întrega definiţie >c(10); n->b; m.c(10);
20 24
struct S { int a,b; Cum pot fi accesaţi membrii privaţi ai
public: void S23() { a=2; b=3; } unei clase? funcţii membru publice
void show() { cout << a << ' ' << b; } 25
} w; class my { int a;
main() { w.show(); } public: void get_a() { cout
Ce va afişa? 0 0 Lipseste raspunsul << "a="; cin >> a; }
correct void show_a() {
21 cout << a; } };
class S { int a,b;
public: S23() { a=2; b=3; }
} x,y,z; main() { int a=25;
main() { z=x*y; } my ob;
Ce valoare are z? Eroare la ob.get_a();
compilare ob.show_a(a); }
22 Ce afişează? Mesaj de eroare
class A { char n[27]; } *w[5]; 26
main() { for(int i = 0; i < 5; i++ ) class my { int a;
w[i] = new A; ... } public: void show_a(int
Care expresii sunt corecte? nici una a=15) { cout << my::a; }
23 void get_a() { cout
struct A { int b; << "a="; cin >> a; } };
void c(int d) { b=d; }
public: int e;
void f(int g) { b=g; } main() { int a=25;
} m, *n; my *ob;
ob.get_a(); Câte exemplare de fiecare membru al
ob.show_a(); } clasei vor fi alocate în memorie? 212
Ce afişează? Mesaj de eroare 30
27 class my { int a;
class my { int a; public: void get_a() { cout
public: void get_a() { cout << "a="; cin >> a; }
<< "a="; cin >> a; } void show_a() {
void show_a(int cout << a; } };
a=15) { cout << a; } };

main() { int a=25;


main() { int a=25; my ob;
my ob; ob.get_a();
ob.get_a(); ob.show_a(); }
ob.show_a(35); } Ce afişează? Numărul introdus
Ce afişează? 35 31
28 class S { int a,b;
struct a { int b; public: S23() { a=2; b=3; }
void c(void) { b=26; cout << b; } } w;
} d; main() {cout << w.a+w.b; }
main() { d.b=16; cout << d.b; } Ce va afişa? Eroare la compilare
Ce va afişa? 16 32
29 class my { int a;
struct A { int b; public: void get_a() { cout
static int c; << "a="; cin >> a; }
public: void d(int e) { b=e; } void show_a(int
}; a=15) { cout << a; } };
int c=0;
A m, n;
main() { int a=25;
my ob; main() { my ob;
ob.get_a(); int a=25;
ob.show_a(); } ob.show_a(); }
Ce afişează? 15 Ce afişează? 25 iniţializat
33 2
class my { int a; class my { int a;
public: void get.a() { cout public: my(int a=1) {
<< "a="; cin >> a; } my::a=8; }
void show.a() { ~my() { cout << "
cout << a; } }; Aici destructorul!"; }
void show_a() {
cout << " " << a; } };
main() { int a=25;
my ob; main() { my *p; p=new my(3);
ob.get.a(); p->show_a();
ob.show.a(); } p->~my(); }
Ce afişează? Mesaj de eroare Ce afişează? 8 Aici destructorul

Part 2
1 3
class my { int a; class my { int a;
public: my(); public: my(int a) { my::a=5; }
void show_a(); }; ~my() { cout << " Aici destructorul!";
my::my() { cout << "a="; cin >> a; }
a=25;} void show_a() { cout << " " << a; } };
void my::show_a() { cout << a; }
main() { my *p; p=new my[3]; p[i].show_a(); }
for(int i=0; i<3; i++) Ce afişează? Mesaj de eroare
p[i].show_a(); } 6
Ce afişează? Mesaj de eroare class my { int a;
4 public: my(int a);
class my { int a, b; my();
public: my(int a=1, int b=2) void show_a(); };
{ my::a=a; my::b=6; } my::my(int a) { my::a=a; }
void show_a() { my::my() { cout << "a="; cin >> a; }
cout << " " << a << " " << b; } }; void my::show_a() { cout << a; }

main() { my a[2][3]={ my(1,2), my(), main() { my ob=my();


1, 2, my(3), my(3,4) }; int a=25;
for(int i=0; i<2; i++) ob.show_a(); }
{ for(int j=0; j<3; j++) Ce afişează? Numărul introdus
a[i][j].show_a(); 7
cout << endl; } } class S { int a,b;
Ce afişează? 1 6 1 6 1 6 2 6 3 6 3 6 public: S() { a=2; b=3; }
5 } w;
class my { int a; main() { cout << w.a+w.b; }
public: my(int a) { Ce va afişa? Eroare la compilare
my::a=3; } 8
~my() { cout << " class my { int a;
Aici destructorul!"; } public: my(int a);
void show_a() { my();
cout << " " << a; } }; void show_a(); };
my::my(int a) { my::a=a; }
main() { my *p; p=new my[5]; my::my() { cout << "a="; cin >> a; }
for(int i=0; i<3; i++) void my::show_a() { cout << a; }
Ce afişează? 1 2 3 4
main() { my ob=my(); 11
int a=125; class my { int a;
ob.show_a(); } public: my(int a=1) {
Ce afişează? Numărul introdus my::a=5; }
9 ~my() { cout << "
class my { int a; Aici destructorul!"; }
public: my(int a); void show_a() {
my(); cout << " " << a; } };
void show_a(); };
my::my(int a) { my::a=a; } main() { my *p; p=new my(3);
my::my() { cout << "a="; cin >> a; } p->show_a(); }
void my::show_a() { cout << a; } Ce afişează? 5
12
main() { my& ob; class my { int a;
int a=25; public: my(int a=5) {
ob.show_a(); } my::a=1; }
Ce afişează? Mesaj de eroare ~my() { cout << " Aici
10 destructorul!"; }
class my { int a; void show_a() { cout << "
public: my(int a=4) { " << a; } };
my::a=a; }
my() { a=5; } void f(my& b) { b.show_a(); }
void show_a() {
cout << " " << a; } }; main() { my a(3);
f(a); }
main() { my a[4]={1,2,3,4}; Ce afişează? 1
for(int i=0; i<4; i++) 13
a[i].show_a(); } class my { int a;
public: my(int a=35) {
my::a=a; } main() { my a[4]={0,1,2,3,4};
~my() { cout << " for(int i=0; i<4; i++)
Aici destructorul!"; } a[i].show_a(); }
void show_a(); }; Ce afişează? Mesaj de eroare
void my::show_a() { cout << a; } 16
class S { int a,b;
main() { my ob; public: S() { a=2; b=3; }
int a=25; } x,y,z;
ob.show_a(); } main() { z=x*y; ... }
Ce afişează? 35 Ce valoare are z? Eroare la
14 compilare
class my { int a; 17
public: my(int a); struct S { int a,b;
void show_a(); }; public: S() { a=2; b=3; }
my::my(int a) { my::a=a; } void show() { cout << a << ' ' << b; }
void my::show_a() { cout << a; } } w;
main() { w.show(); }
main() { my ob(15); Ce va afişa? 2 3
int a=25; 18
ob.show_a();} class my { int a;
Ce afişează? 15 public: my(int a);
15 void show_a(); };
class my { int a; my::my(int a) { my::a=a; }
public: my(int a=4) { void my::show_a() { cout << a; }
my::a=a; }
my() { a=5; } main() { my ob(25);
void show_a() { int a=15;
cout << " " << a; } }; ob.show_a();}
Ce afişează? 25 class my { int a;
19 public: my(int a) { my::a=5; }
class my { int a; my() { a=1; }
public: my(int a=1) { ~my() { cout << " Aici destructorul!";
my::a=5; } }
~my() { cout << " Aici void show_a() { cout << " " << a; } };
destructorul!"; }
void show_a() { cout << " main() { my *p; p=new my[3];
" << a; } }; for(int i=0; i<3; i++)
{ p[i].show_a();
void f(my *b) { b->show_a(); } p[i].~my(); } }
Ce afişează? 1 Aici destructorul!
main() { my a(3); 1Aici destructorul! 1 Aici
f(&a); } destructorul!
Ce afişează? 5 22
20 class my { int a;
class my { int a; public: my(int a=1) {
public: my(int a); my::a=2; }
my(); void show_a() {
void show_a(); }; cout << a; } };
my::my(int a) { my::a=a; }
my::my() { cout << "a="; cin >> a; } main() { my ob(3), *p=&ob;
void my::show_a() { cout << a; } p->show_a(); }
Ce afişează? 2
main() { my ob(); 23
int a=25; class my { int a;
ob.show_a(); } public: my();
Ce afişează? Mesaj de eroare void show_a(); };
21 my::my() { cout << "a="; cin >> a; }
void my::show_a() { cout << a; } main() { my a(3);
f(a); }
main() { my ob; Ce afişează? 1 Aici destructorul!
int a=25; 26
ob.show_a(); } class my { int a;
Ce afişează? Numărul inrodus public: my(int a) {
24 my::a=5; }
class my { int a; my() { }
public: my(int a); ~my() { cout << "
my(); Aici destructorul!"; }
void show_a(); }; void show_a() {
my::my(int a) { my::a=a; } cout << " " << a; } };
my::my() { cout << "a="; cin >> a; }
void my::show_a() { cout << a; } main() { my *p; p=new my[3];
for(int i=0; i<3; i++)
main() { my ob(28); p[i].show_a(); }
int a=25; Ce afişează? Lipseşte răspunsul
ob.show_a(); } corect
Ce afişează? Lipseşte răspunsul 27
corect class my { int a;
25 public: my();
class my { int a; void showa(); };
public: my(int a=5) { my::a=1; } my::my() { cout << "a="; cin >> a; }
~my() { cout << " Aici destructorul!"; void my::showa() { cout << a; }
}
void show_a() { cout << " " << a; } }; main() { my ob;
int a=25;
void f(my c) { c.show_a(); } ob.showa(); }
Ce afişează? Numărul inrodus
28 destructorul!
class my { int a; 30
public: my(int a); class my { int a;
my(); public: my(int a=1) {
void show_a(); }; my::a=5; }
my::my(int a) { my::a=a; } ~my() { cout << "
my::my() { cout << "a="; cin >> a; } Aici destructorul!"; }
void my::show_a() { cout << a; } void show_a() {
cout << " " << a; } };
main() { my ob;
int a=25; main() { my *p; p=new my(3);
ob.show_a(); } p->show_a();
Ce afişează? Numărul introdus p->~my(); }
29 Ce afişează? 5 Aici destructorul!
class my { int a; 31
public: my(int a) { class my { int a;
my::a=5; } public: my(int a=1) {
my() { a=1; } my::a=2; }
~my() { cout << " void show_a() {
Aici destructorul!"; } cout << a; } };
void show_a() {
cout << " " << a; } }; main() { my ob(3); my& p=ob;
p->show_a(); }
main() { my *p; p=new my[3]; Ce afişează? Mesaj de eroare
for(int i=0; i<3; i++) 32
{ p[i].show_a(); class my { int a;
p[i].~my(); } } public: my( int a);
Ce afişează? 1 1 1 Aici destructorul! void show_a(); };
Aici destructorul! Aici my::my(int a=35) { my::a=a; }
void my::show_a() { cout << a; } void f(my c) { c.show_a(); }

main() { my ob(15); main() { my a(5);


int a=25; f(a); }
ob.show_a(); } Ce afişează? 1 Aici destructorul!
Ce afişează? 15 35
33 class my { int a;
class my { int a; public: my(int a=1) {
public: my(int a=1) { my::a=2; }
my::a=5; } void show_a() {
~my() { cout << " Aici cout << a; } };
destructorul!"; }
void show_a() { cout << " main() { my ob(3); my& p=ob;
" << a; } }; p.show_a(); }
Ce afişează? 2
void f(my& b) { b.show_a(); } 36
class my { int a;
main() { my a(3); public: my(int a=1) { my::a=3; }
f(a); } ~my() { cout << " Aici destructorul!";
Ce afişează? 5 }
34 void show_a() { cout << " " << a; } };
class my { int a;
public: my(int a=3) { void f(my *b) { b->show_a(); }
my::a=1; }
~my() { cout << " Aici main() { my a(5);
destructorul!"; } f(&a); }
void show_a() { cout << " Ce afişează? 3
" << a; } }; 37
class my { int a;
public: my(int a=1) { class my { int a;
my::a=3; } public: my() { cout << "a="; cin >> a;
~my() { cout << " }
Aici destructorul!"; } void show_a() { cout << a; }
void show_a() { int operator +(int b) { return (
cout << " " << a; } }; (a%1+b)%3 ); } };
main() { my a;
main() { my *p; p=new my(5); int c;
p->show_a(); c=a+7;
p->~my(); } cout << c; }
Ce afişează? 3 Aici destructorul! Ce afişează? Lipseşte răspunsul
Part 3 corect
1 3
class my { int a; class my { int a;
public: my() { cout << public: my() { cout <<
"a="; cin >> a; } "a="; cin >> a; }
void show_a() { void show_a() {
cout << a; } cout << a; }
int operator -(int b) { int operator +(int b)
return ( (a-b)%5 ); } }; { return ( (a+b)%3 ); } };
main() { my a;
main() { my a; int c;
int c; c=a+7;
c=a-3; cout << c; }
cout << c; } Ce afişează? Restul impartirii
Ce afişează? Restul impartirii (a- (a+7)/3, Valoarea a+7 modulo 3
3)/5, Valoarea a-3 modulo 5 4
2 class my { int a;
public: my() { cout <<
"a="; cin >> a; } void show_a() {
void show_a() { cout << a; }
cout << a; } int operator /(int b) {
int operator /(int b) { return ( (a/b)%2 ); } };
return ( (a/b)%2 ); } };
main() { my a;
main() { my a; int c;
int c; c=a/3;
c=1/(3/a); cout << c; }
cout << c; } Ce afişează? 1, când câtul
Ce afişează? Mesaj de eroare numerelor a şi 3 este impar; 0, când
5 câtul numerelor a şi 3 este par
class my { int a; 7
public: my() { cout << class my { int a;
"a="; cin >> a; } public: my() { cout << "a="; cin >> a;
void show_a() { }
cout << a; } void show_a() { cout << a; }
int operator -(int b) { int operator *(int b) { return (
return ( (a-b)%5 ); } }; (a*b)%1 ); } };

main() { my a; main() { my a;
int c; int c;
c=-(3-a); c=a*3;
cout << c; } cout << c; }
Ce afişează? Mesaj de eroare Ce afişează? 0
6 8
class my { int a; class my { int a;
public: my() { cout << public: my() { cout <<
"a="; cin >> a; } "a="; cin >> a; }
void show_a() { void show_a() {
cout << a; } cout << a; }
int operator +(int b) int operator -(int b) {
{ return ( (a+b)%3 ); } }; return ( (a-b)%5 ); } };
main() { my a;
int c; main() { my a;
c=7+a; int c;
cout << c; } c=a- -3;
Ce afişează? Mesaj de eroare cout << c; }
9 Ce afişează? Valoarea a+3 modulo
class my { int a; 5; Restul impartirii (a+3)/5
public: my() { cout <<
"a="; cin >> a; } Part 4
void show_a() { 1
cout << a; } class A { protected:int a;
int operator *(int b) public:A(int x=7){a=0;}};
{ return ( (a*b)%2 ); } };
class B: public A { int b;
main() { my a; void show(){ cout << a << endl; }
int c; public:B(int x=5){b=x;}};
c=a*3;
cout << c; } int main() {
Ce afişează? 1, dacă produsul B y(3); y.show();
numerelor a şi 3 este impar; 0, dacă return 0; }
produsul numerelor a şi 3 este par
10 Ce afişează ? compilation error
class my { int a;
public: my() { cout <<
"a="; cin >> a; }
2 4
class A { protected: int a; class A { protected:int a;
public:A(int x=3){a=x;}}; public:A(int x=3){a=0;}};

class B: public A { int b; class B: public A { int b;


public:B(int x=5){b=x;} protected:void show(){ cout << a <<
void show(){ cout << a << endl; }}; endl; }
public:B(int x=7){b=x;}};
int main() {
B y(7); y.show(); int main() {
return 0; } B *p=new B(5);
p->show();
Ce afişează ? 3 return 0; }

3 Ce extrage ? compilation error


class A { int a;
public:A(int x=3){a=x;} 5
private:void show(){ cout << a << class A { public:int a;
endl; }}; public:void show(){ cout << a <<
endl; }
class B: private A { int b; A(int x=5){a=x;}};
public:B(int x=5){b=0;}};
class B: private A { protected:int b;
int main() { public:void show(){ cout << b <<
B y(7); y.show(); endl; }
return 0; } B(int x=7){b=0;}};

Ce extrage ? compilation error class C: public B { int c;


public:void show(){ cout << a+b+c
<< endl; } return 0; }
C(int x=3){c=x;}};
Ce afişează ? compilation error
int main() {
C w(9); 7
w.show(); class A { int a;
return 0; } public:A(int x=7){a=x;}
protected:void show(){ cout << a <<
Ce afişează ? compilation error endl; }};

6 class B: public A { int b;


class A { public:int a; public:B(int x=5){b=x;}};
public:void show(){ cout << a <<
endl; } int main() {
A(int x=3){a=x;}}; B y(3); y.show();
return 0; }
class B: protected A { int b;
public:void show(){ cout << b << Ce extrage ? compilation error
endl; }
B(int x=5){b=x;}}; 8
class A { protected:int a;
class C: public B { int c; public:A(int x=7){a=x;}};
public:void show(){ cout << a+b+c
<< endl; } class B: public A { protected:int b;
C(int x=9){c=x;}}; void show(){ cout << a << endl; }
public:B(int x=3){b=0;}};
int main() {
C w(7); int main() {
w.show(); B y(5); y.show();
return 0; } return 0; }

Ce afişează ? compilation error Ce extrage ? compilation error

9 11
class A { int a; class A { int a;
public:A(int x=3){a=x;} public:A(int x=3){a=0;}
void show(){ cout << a << endl; }}; private:void show(){ cout << a <<
endl; }};
class B: public A { int b;
public:B(int x=5){b=x;}}; class B: protected A { int b;
public:B(int x=5){b=x;}};
int main() {
B y(7); y.show(); int main() {
return 0; } B y(7); y.show();
return 0; }
Ce extrage ? 3
Ce extrage ? compilation error
10
class A { int a; 12
public:A(int x=5){a=x;} class A { protected:int a;
private:void show(){ cout << a << public:A(int x=3){a=x;}};
endl; }};
class B: public A { int b;
class B: public A { int b; public:void show(){ cout << a <<
public:B(int x=7){b=x;}}; endl; }
B(int x=5){b=x;}};
int main() {
B y(3); y.show(); int main() {
B *p=new B(7); B y(7); y.show();
p->show(); return 0; }
return 0; }
Ce afişează ? compilation error
Ce extrage ?3
15
13 class A { int a;
class A { int a; public:A(int x=5){a=x;}
public:A(int x=3){a=x;} void show(){ cout << a << endl; }};
void show(){ cout << a << endl; }};
class B: pivate A { int b;
class B: protected A { int b; public:B(int x=3){b=x;}};
public:B(int x=5){b=x;}};
int main() {
int main() { B y(7); y.show();
B y(7); y.show(); return 0; }
return 0; }
Ce extrage ? compilation error
Ce extrage ? compilation error
16
14 class A { int a;
class A { int a; public:A(int x=7){a=x;}
public:A(int x=5){a=x;}}; protected:void show(){ cout << a <<
endl; }};
class B: public A { int b;
public:B(int x=3){b=0;} class B: protected A { int b;
void show(){ cout << a << endl; }}; public:B(int x=3){b=x;}};

int main() { int main() {


B y(5); y.show(); B(int x=5){b=x;}};
return 0; }
class C: public B { int c;
Ce extrage ? compilation error public:void show(){ cout << a+b+c
<< endl; }
17 C(int x=7){c=x;}};
class A { int a;
public:A(int x=3){a=x;} int main() {
protected:void show(){ cout << a << C w(9);
endl; }}; w.show();
return 0; }
class B: private A { int b;
public:B(int x=7){b=x;}}; Ce afişează ?17
Part 5
int main() { 1
B y(5); y.show(); class A {protected: double x,y;
return 0; } virtual void show(){cout << x+y <<
endl;}
Ce extrage ? compilation error public:A(double x=1, double
y=2){A::x=x;A::y=y;}};
18
class A { public:int a; class B: public A {protected: int x,y;
public:void show(){ cout << a << void show(){cout << x-y << endl;}
endl; } public:B(int x=3, int
A(int x=3){a=x;}}; y=4){B::x=x;B::y=y;}};
class B: public A { protected:int b; class C: public B {unsigned x,y;
public:void show(){ cout << b << void show(){cout << x*y << endl;}
endl; }
public: C(unsigned x=5, unsigned int main()
y=6){C::x=x;C::y=y;}}; { A a, *p; B b; C c;
p=&a;
int main() p->show();
{ A a, *p; B b; C c; return 0; }
p=&c;
p->show(); Ce extrage ?3
return 0; }
3
Ce extrage ? compilation error class A {protected: double x,y;
virtual void show(){cout << x+y <<
2 endl;}
class A {protected: double x,y; public:A(double x=1, double
public:virtual void show(){cout << y=2){A::x=x;A::y=y;}};
x+y << endl;}
A(double x=1, double class B: public A {protected: int x,y;
y=2){A::x=x;A::y=y;}}; public:void show(){cout << x-y <<
endl;}
class B: public A {protected: int x,y; B(int x=3, int y=4){B::x=x;B::y=y;}};
public:void show(){cout << x-y <<
endl;} class C: public B {unsigned x,y;
B(int x=3, int y=4){B::x=x;B::y=y;}}; public: void show(){cout << x*y <<
endl;}
class C: public B {unsigned x,y; C(unsigned x=5, unsigned
public: void show(){cout << x*y << y=6){C::x=x;C::y=y;}};
endl;}
C(unsigned x=5, unsigned int main()
y=6){C::x=x;C::y=y;}}; { A a, *p; B b; C c;
p=&a;
p->show(); y=2){A::x=x;A::y=y;}};
return 0; }
class B: public A {protected: int x,y;
Ce extrage ? compilation error public:void show(){cout << x-y <<
endl;}
4 B(int x=3, int y=4){B::x=x;B::y=y;}};
class f{public:virtual double s()=0;};
class C: public B {unsigned x,y;
class r: public f {double a,b; public: void show(){cout << x*y <<
public:double s(){return a*b;} endl;}
r(double a=3, double b=4){this- C(unsigned x=5, unsigned
>a=a;this->b=b;}}; y=6){C::x=x;C::y=y;}};

class c: public f {double r; int main()


public: double s(){return M_PI*r*r;} { A a, *p; B b; C c;
c(double r=0){c::r=r;}}; p->show();
return 0; }
int main()
{ f *p; r b; c d(1); Ce extrage ? run time error
p=&d; cout << p->s() << endl;
return 0; } 6
class A {protected: double x,y;
Ce extrage ? compilation error public:virtual void show(){cout <<
x+y << endl;}
5 A(double x=1, double
class A {protected: double x,y; y=2){A::x=x;A::y=y;}};
public:virtual void show(){cout <<
x+y << endl;} class B: public A {protected: int x,y;
A(double x=1, double public:B(int x=3, int
y=4){B::x=x;B::y=y;}}; return 0; }

class C: public B {unsigned x,y; Ce extrage ? compilation error


public:C(unsigned x=5, unsigned
y=6){C::x=x;C::y=y;}};

int main() 8
{ A a, *p; B b; C c; class A {protected: double x,y;
p=&c; virtual void show(){cout << x+y <<
p->show(); endl;}
return 0; } A(double x=1, double
y=2){A::x=x;A::y=y;}};
Ce extrage ?3
class B: public A {protected: int x,y;
7 void show(){cout << x-y << endl;}
class f{public:virtual double s()=0;}; B(int x=3, int y=4){B::x=x;B::y=y;}};
class r: public f {double a,b; class C: public B {unsigned x,y;
public:double s(){return a*b;} void show(){cout << x*y << endl;}
r(double a=3, double b=4){this- C(unsigned x=5, unsigned
>a=a;this->b=b;}}; y=6){C::x=x;C::y=y;}};
class c: public f {double r; int main()
public: double s(){return M_PI*r*r;} { A a, *p; B b; C c;
c(double r=0){c::r=r;}}; p=&c;
p->show();
int main() return 0; }
{ f *p=new f; r b; c d(1);
p=&b; cout << p->s() << endl;
10
Ce extrage ? compilation error class A {protected: double x,y;
virtual void show(){cout << x+y <<
9 endl;}
class A {protected: double x,y; A(double x=1, double
public:virtual void show(){cout << y=2){A::x=x;A::y=y;}};
x+y << endl;}
A(double x=1, double class B: public A {protected: int x,y;
y=2){A::x=x;A::y=y;}}; void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << class C: public B {unsigned x,y;
endl;} public: void show(){cout << x*y <<
B(int x=3, int y=4){B::x=x;B::y=y;}}; endl;}
C(unsigned x=5, unsigned
class C: public B {unsigned x,y; y=6){C::x=x;C::y=y;}};
public: void show(){cout << x*y <<
endl;} int main()
C(unsigned x=5, unsigned { A a, *p; B b; C c;
y=6){C::x=x;C::y=y;}}; p=&b;
p->show();
int main() return 0; }
{ A a, *p; B b; C c;
p=&b; Ce extrage ? compilation error
p->show();
return 0; } 11
class f{public:virtual double s()=0;};
Ce extrage ?-1
class r: public f {double a,b;
public:double s(){return a*b;} endl;}
r(double a=3, double b=4){this- C(unsigned x=5, unsigned
>a=a;this->b=b;}}; y=6){C::x=x;C::y=y;}};

class c: public f {double r; int main()


public: double s(){return M_PI*r*r;} { A a, *p; B b; C c;
c(double r=0){c::r=r;}}; (p=&b)->show();
return 0; }
int main()
{ f *p; r b; c d(1); Ce extrage ?-1
p=&b; cout << p->s() << endl;
return 0; } 13
class A {protected: double x,y;
Ce extrage ? compilation error virtual void show(){cout << x+y <<
endl;}
12 A(double x=1, double
class A {protected: double x,y; y=2){A::x=x;A::y=y;}};
public:virtual void show(){cout <<
x+y << endl;} class B: public A {protected: int x,y;
A(double x=1, double public:void show(){cout << x-y <<
y=2){A::x=x;A::y=y;}}; endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << class C: public B {unsigned x,y;
endl;} public: void show(){cout << x*y <<
B(int x=3, int y=4){B::x=x;B::y=y;}}; endl;}
C(unsigned x=5, unsigned
class C: public B {unsigned x,y; y=6){C::x=x;C::y=y;}};
public: void show(){cout << x*y <<
int main() return 0; }
{ A a, *p; B b; C c;
p=&a; Ce extrage ?30
p->show();
return 0; } 15
class A {protected: double x,y;
Ce extrage ? compilation error public:virtual void show(){cout <<
x+y << endl;}
14 A(double x=1, double
class A {protected: double x,y; y=2){A::x=x;A::y=y;}};
public:virtual void show(){cout <<
x+y << endl;} class B: public A {protected: int x,y;
A(double x=1, double public:B(int x=3, int
y=2){A::x=x;A::y=y;}}; y=4){B::x=x;B::y=y;}};

class B: public A {protected: int x,y; class C: public B {unsigned x,y;


public:void show(){cout << x-y << public: void show(){cout << x*y <<
endl;} endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}}; C(unsigned x=5, unsigned
y=6){C::x=x;C::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << int main()
endl;} { A a, *p; B b; C c;
C(unsigned x=5, unsigned p=&b;
y=6){C::x=x;C::y=y;}}; p->show();
return 0; }
int main()
{ A a, *p; B b; C c; Ce extrage ?3
(p=&c)->show();
16
class A {protected: double x,y; class B: public A {protected: int x,y;
public:virtual void show(){cout << public:B(int x=3, int
x+y << endl;} y=4){B::x=x;B::y=y;}};
A(double x=1, double
y=2){A::x=x;A::y=y;}}; class C: public B {unsigned x,y;
public:C(unsigned x=5, unsigned
class B: public A {protected: int x,y; y=6){C::x=x;C::y=y;}};
public:void show(){cout << x-y <<
endl;} int main()
B(int x=3, int y=4){B::x=x;B::y=y;}}; { A a, *p; B b; C c;
(p=&c)->show();
class C: public B {unsigned x,y; return 0; }
public:C(unsigned x=5, unsigned
y=6){C::x=x;C::y=y;}}; Ce extrage ?3

int main() 18
{ A a, *p; B b; C c; class A {protected: double x,y;
(p=&c)->show(); virtual void show(){cout << x+y <<
return 0; } endl;}
public:A(double x=1, double
Ce extrage ?-1 y=2){A::x=x;A::y=y;}};

17 class B: public A {protected: int x,y;


class A {protected: double x,y; void show(){cout << x-y << endl;}
public:virtual void show(){cout << public:B(int x=3, int
x+y << endl;} y=4){B::x=x;B::y=y;}};
A(double x=1, double
y=2){A::x=x;A::y=y;}}; class C: public B {unsigned x,y;
public: void show(){cout << x*y << return 0; }
endl;}
C(unsigned x=5, unsigned Ce extrage ? compilation error
y=6){C::x=x;C::y=y;}};
20
int main() class A {protected: double x,y;
{ A a, *p; B b; C c; public:virtual void show(){cout <<
p=&b; x+y << endl;}
p->show(); A(double x=1, double
return 0; } y=2){A::x=x;A::y=y;}};

Ce extrage ? compilation error class B: public A {protected: int x,y;


public:void show(){cout << x-y <<
19 endl;}
class f{public:virtual double s()=0;}; B(int x=3, int y=4){B::x=x;B::y=y;}};

class r: public f {double a,b; class C: public B {unsigned x,y;


public:double s(){return a*b;} public:C(unsigned x=5, unsigned
r(double a=3, double b=4){this- y=6){C::x=x;C::y=y;}};
>a=a;this->b=b;}};
int main()
class c: public f {double r; { A a, *p; B b; C c;
public: double s(){return M_PI*r*r;} p=&c;
c(double r=0){c::r=r;}}; p->show();
return 0; }
int main()
{ f *p=new f; r b; c d(1); Ce extrage ?-1
p=&d; cout << p->s() << endl;
21
class A {protected: double x,y; A(double x=1, double
public:virtual void show(){cout << y=2){A::x=x;A::y=y;}};
x+y << endl;}
A(double x=1, double class B: public A {protected: int x,y;
y=2){A::x=x;A::y=y;}}; public:B(int x=3, int
y=4){B::x=x;B::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << class C: public B {unsigned x,y;
endl;} public: void show(){cout << x*y <<
B(int x=3, int y=4){B::x=x;B::y=y;}}; endl;}
C(unsigned x=5, unsigned
class C: public B {unsigned x,y; y=6){C::x=x;C::y=y;}};
public: void show(){cout << x*y <<
endl;} int main()
C(unsigned x=5, unsigned { A a, *p; B b; C c;
y=6){C::x=x;C::y=y;}}; (p=&b)->show();
return 0; }
int main()
{ A a, *p; B b; C c; Ce extrage ?3
p=&c;
p->show(); 23
return 0; } class A {protected: double x,y;
public:virtual void show(){cout <<
Ce extrage ?30 x+y << endl;}
A(double x=1, double
22 y=2){A::x=x;A::y=y;}};
class A {protected: double x,y;
public:virtual void show(){cout << class B: public A {protected: int x,y;
x+y << endl;} public:void show(){cout << x-y <<
endl;} Ce extrage codul ?
B(int x=3, int y=4){B::x=x;B::y=y;}}; a. cuvântul "necunoscut"
la citirea unui număr par
class C: public B {unsigned x,y; b. cuvântul "cunoscut" la
public: void show(){cout << x*y << citirea unui număr par
endl;} c. cuvântul "ne" la citirea unui
C(unsigned x=5, unsigned număr par
y=6){C::x=x;C::y=y;}}; d. cuvântul "ne" la citirea
unui număr impar
int main() e. cuvântul "necunoscut" la
{ A a, *p; B b; C c; citirea unui număr impar
(p=&a)->show(); f. cuvântul "cunoscut" la
return 0; } citirea unui număr impar
2) int z = 8, y;
Ce extrage ?3
for( y = 1; z++ < 8; ) z += y;
printf( "%d", z );
Ce extrage codul ? 9
3) int z = 8, y;
for( y = 1; y++ < 8; ) z += y;
printf( "%d", z );
Ce extrage codul ? 43
4) int x = 1;
for( ; ; ) { if( x++ == 3 ) break;
continue; }
1) unsigned n; printf( "%d", x );
scanf( "%d", &n ); Ce extrage codul ? 4
switch( n % 2 ) { 5) int x = 1;
case 0: printf( "ne" ); for( ; ; ) { if( x++ == 4 ) break;
case 1: printf( "cunoscut" ); }
continue; } d. când p2() şi p3() vor
printf( "%d", x ); returna valoarea 0
Ce extrage codul ? 5 e. când p1() sau p2() sau
6) unsigned x = -1; int y = 1; p3() va returna valoarea
if( y <= x ) printf( "B is true" ); 0
if( y == ( x = -1 ) ) printf( "C is f. când p1() sau p3() va
true"); returna valoarea 0
if( (int)x >= y ) printf( "A is true" ); g. când p1() sau p2() va
Ce extrage codul ? B is true returna valoarea 0
7) unsigned x = -1; int y = 10; h. când p3() va returna
if( y <= x ) printf( "A is true\t" ); valoarea 0
if( y == ( x = -10 ) ) printf( "B is
9)int p1(); int p2(); int p3(); int n
true\t" );
= 1;
if( (int)x >= y ) printf( "C is true\t"
while( n = p2() || p3() ) {
);
if( n ) n= p1(); }
Ce extrage codul ? A is true
Când se va termina ciclul ?
8) int p1(); int p2(); int p3(); int n
= 1; a. când p1() va returna valoarea 0
while( n ) { b. când p2() va returna valoarea 0
n = p1(); c. când p2() sau p3() va returna
if( n ) n = p2(); valoarea 0
if( n ) n= p3(); } d. când p3() va returna valoarea 0
Când se va termina ciclul ? e. când p1() sau p3() va returna
a. când p2() va returna valoarea 0
valoarea 0 f. când p2() şi p3() vor returna
b. când p1() va returna valoarea 0
valoarea 0 g. când p1() sau p2() va returna
c. când p2() sau p3() va valoarea 0
returna valoarea 0 h. când p1() sau p2() sau p3() va
returna valoarea 0 11) int a = 4, b = 5;
if( a = b ) b++; a++; a *= b;
Ce valoare are a ? 36
12) int x = 4, a = 2, b = 4, c = 8;
10)int p1(); int p2(); int p3(); int n if( x != b ) x = a; else x = c;
= 1; if( x != a ) c += b; else c +=a;
while( n = p2() ) { printf( "%d", c );
if( n ) n = p1(); Ce extrage codul ? 12
if( n ) n= p3(); } 13) int x = 4, a = 2, b = 4, c = 8;
Când se va termina ciclul ? if( x != b ) x = a; else x = c;
a. când p2() şi p3() vor if( x == a ) c += b; else c +=a;
returna valoarea 0 printf( "%d", c );
b. când p3() va returna Ce extrage codul ? 10
valoarea 0 14) int x = 1 / 2;
c. când p1() va returna if ( x ) printf( "%d", x ); else printf(
valoarea 0 "%d", x * 2 );
d. când p1() sau p2() sau p3()
Ce extrage codul ? 0
va returna valoarea 0
15) int x = 1 / 2;
e. când p1() sau p3() va if ( x ) printf( "%d", x ); else printf(
returna valoarea 0 "%d", x + 2 );
f. când p2() sau p3() va Ce extrage codul ? 2
returna valoarea 0 16) int x = 3 / 2;
g. când p2() va returna if ( x ) printf( "%d", x ); else printf(
valoarea 0 "%d", x + 2 );
h. când p1() sau p2() va Ce extrage codul ? 1
returna valoarea 0 17) for( ; ; ) continue;

De câte ori se va executa ciclul ?


a. 0 break; }
b. nu se poate determina printf( "%d", x );
c. infinit Ce extrage codul ? 1
d. 1
18) for ( ; (1 < 2 ) < ( 2 < 1 ) ; )
break;
22) int i = 5;
while( i > 0 ) { printf( "%d", --i ); }
De câte ori se va executa ciclul ?
while( i <= 5 ) { printf( "%d", i++
a. 0 ); }
b. infinit Ce extrage codul ?
c. 1 43210012345
d. nu se poate determina 23) int i = 5;
19) for ( ; (1 < 2 ) > ( 2 < 1 ) ; ) while( i > 1 ) { printf( "%d", --i ); }
break; while( i <= 4 ) { printf( "%d", i++
De câte ori se va executa ciclul ? ); }
Choose one answer. Ce extrage codul ?
a. 0 a. 4 3 2 1 1 2 3 4 5
b. infinit b. 5 4 3 2 1 0 1 2 3 4
c. nu se poate determina 5
d. 1 c. 5 4 3 2 1 1 2 3 4 5
20) int s = 0, i; d. 4 3 2 1 1 2 3 4
for( i = 1; i < 5; i++ ) { e. 4 3 2 1 0 1 2 3 4 5
if( ( i == 2 ) || ( i == 3 ) ) continue; 24) int i = 5;
s += i; } while( i > 1 ) { printf( "%d", --i ); }
Ce valoare are s ? 5 while( i < 5 ) { printf( "%d", i++ );
21) int x = 0; }
for( ; ; ) { if( x++ == 4 ) continue; Ce extrage codul ?
a. 4 3 2 1 1 2 3 4 if( n ) n= p3(); }
b. 4 3 2 1 1 2 3 4 5 Când se va termina ciclul ?
c. 5 4 3 2 1 1 2 3 4 5 a. când p1() sau p2() va returna
d. 5 4 3 2 1 0 1 2 3 4 5 valoarea 0
e. 4 3 2 1 0 1 2 3 4 5 b. când p1() sau p3() va returna
25) char s[99], i = 0; valoarea 0
for( gets( s ); s[i] == ' '; s[i] ) i++ ; c. când p1() va returna valoarea 0
printf( "%d", s[i] ); d. când p2() va returna valoarea 0
Ce extrage codul ? e. când p2() şi p3() vor returna
a. codul primului caracter valoarea 0
diferit de spaţiu al şirului citit f. când p1() sau p2() sau p3() va
s returna valoarea 0
b. şirul citit s g. când p3() va returna
c. codurile caracterelor şirului citit valoarea 0
s h. când p2() sau p3() va returna
d. codul primului caracter al valoarea 0
şirului citit s 27)char s[99] = "abracadabra", i
e. primul caracter al şirului citit s = 0, t;
f. primul caracter diferit de spaţiu for( gets( s ); i < ( t = strlen( s ) ); )
al şirului citit s {
g. codul ultimului caracter al goto( t - i, 5 );
şirului citit s printf( "%c", s[i++] ); }
Ce extrage codul ?
h. ultimul caracter al şirului citit s
a. şirul citit
26)int p1(); int p2(); int p3(); int n
= 1; b. eroare la execuţie
while( n = p3() ) { c. eroare la
if( n ) n = p2(); compilare
d. şirul citit se
afişează inversat 29)char s[66] = "abracadabra", i =
e. abracadabra 0, t;
f. arbadacarba for( gets( s ); i < ( t = strlen( s ) ); )
28)char s[66], i = 0; {
for( gets( s ); s[i] == ' '; s[i] ) i++ ; goto( t - i, 4 );
printf( "%d", s[i] ); printf( "%c", s[i++] ); }
Ce extrage codul ? Ce extrage codul ?
a. codul primului caracter a. şirul citit
diferit de spaţiu al şirului b. eroare la execuţie
citit s c. eroare la compilare
b. şirul citit s d. şirul citit se afişează
c. codurile caracterelor şirului inversat
citit s e. abracadabra
d. codul primului caracter al f. arbadacarba
şirului citit s 30)char s[66] = "abracadabra", i
e. primul caracter al şirului citit s = 0, t;
f. primul caracter diferit de spaţiu for( gets( s ); i < ( t = strlen( s ) ); )
al şirului citit s {
g. codul ultimului caracter al goto( t - i, 5 );
şirului citit s printf( "%c", s[i++] ); }
h. ultimul caracter al şirului citit s Ce extrage codul ?
a. eroare la execuţie
b. şirul citit se afişează
inversat
c. şirul citit
d. eroare la compilare
e. abracadabra
f. arbadacarba
31) int x = 1, y = 2, z = 3; Ce extrage codul ? INF
if( z >= y ) 34) int x = 1, y = 2, z = 3;
if( y <= z ) if( x >= y )
puts( "CIB" ); if( y <= z )
else puts( "CIB" );
if( x <= z ) else
puts( "INF" ); if( x <= z )
else puts( "INF" );
puts( "SPE" ); else
Ce extrage codul ? CIB puts( "SPE" );
32) int x = 1, y = 2, z = 3; Ce extrage codul ? (nimic)
if( x >= y ) 35) int x = 1, y = 2, z = 3;
if( x <= z ) if( z >= y )
puts( "CIB" ); if( y <= x )
else puts( "CIB" );
if( x <= z ) else if( z <= x )
puts( "INF" ); puts( "INF" );
else else puts( "SPE" );
puts( "SPE" ); Ce extrage codul ? SPE
Ce extrage codul ? (nimic) 36) void f( int x, int y ) {
33) int x = 1, y = 2, z = 3; int t; t = x; x = y; y = t; }
if( z >= y ) main() {
if( y <= x ) int a = 2, b = 7;
puts( "CIB" ); f( a, b );
else printf( "%d %d", a, b ); }
if( x <= z ) Ce extrage codul ? 2 7
puts( "INF" );
else
puts( "SPE" );
Care alternative trebuie aruncate
pentru a obţine un cod corect ?
37) void f( int x, int y ) { Choose one answer.
int t; t = x; x = y; y = t; } a. 4 5
main() { b. 2 4
int a = 7, b = 2; c. 5
f( a, b ); d. nici una, totul este
printf( "%d %d", a, b ); } corect
Ce extrage codul ? 7 2
e. 2 4 5
38) while( strlen( s ) > n ) s[n] =
'\0'; 40) switch( a ) {
Ce face codul ? case 1: a++; break;
case 2: ;
a. Extinde şirul s până la
case 3: a--; return;
lungimea n
case 4: ;
b. Atribuie valoarea 0 primelor n case 5: a += 1; exit( 0 ); }
elemente ale şirului s Care alternative trebuie aruncate
c. Scurtează şirul s până la pentru a obţine un cod corect ?
lungimea n a. 4 5
d. Atribuie valoarea 0 elementelor b. 5
şirului s care au codul mai mare
c. 2 4 5
ca n
d. 2 4
39) switch( a ) {
case 1: a++; break; e. nici una, totul este
case 2: ; corect
case 3: a--; return; 41) int x, z = 1;
case 4: ; for( x=0; x<5; x++ ) {
case 5: a += 1; continue;} z++;
if( x>3 ) break;
if( x<3 ) continue;
z++; } h. când p2() şi p3() vor returna
printf( "%d", z ); valoarea 0
Ce extrage codul ? 7 44) Care construcţie defineşte un
42) int x, z = 1; ciclu infinit ?
for( x=0; x<5; x++ ) { a. while( TRUE );
z++; b. for ( i=0; 1; ++i) ;
if( x>3 ) break; c. while();
if( x<4 ) continue; z++; }
d. while( 1 );
printf( "%d", z );
Ce extrage codul ? 6 e. for ( i=0; TRUE; ++i );
43) int p1(); int p2(); int p3(); f. for ( i=0; ; ++i );
int n = 1; g. do { } while( "?" );
while( n = p1() ) { h. for ( ; ; );
if( n ) n = p2();
if( n ) n= p3(); }
Când se va termina ciclul ? 45) char s[99] = "ASEM", i = 0;
a. când p3() va returna valoarea 0 for( ; i < strlen( s ); )
b. când p1() sau p2() va returna printf( "%c", s[i++] + 1 );
valoarea 0 Ce extrage codul ? BTFN
c. când p2() sau p3() va returna 46) char s[66] = "ASEM", i = 0;
valoarea 0 for( ; i < strlen( s ); )
d. când p1() sau p3() va returna printf( "%c", s[i++] + 2 );
valoarea 0 Ce extrage codul ? CUGO
47) char s[11] = "ASEM", i = 1;
e. când p2() va returna valoarea 0
for( ; i < strlen( s ); )
f. când p1() va returna printf( "%c", s[i++] + 1 );
valoarea 0 Ce extrage codul ? TFN
g. când p1() sau p2() sau p3() va 48) char s[22] = "ASEM", i = 1;
returna valoarea 0 for( ; i < strlen( s ); )
printf( "%c", s[i++] - 1 ); b. infinit
Ce extrage codul ? RDL c. nu se poate determina
50) int x = 100; d. 1
do { --x; } while( x > 50 ); 52) for( ; ( 1 < 2 ) > ( 2 < 1 ); )
printf( "%d", x ); continue;
Ce extrage codul ? 50 De câte ori se va executa ciclul ?
49) int p1(); int p2(); int p3(); int a. 0
n = 1;
b. 1
while( n = p2() && p3() ) {
if( n ) n= p1(); } c. nu se poate determina
Când se va termina ciclul ? d. infinit
a. când p2() sau p3() va 53) int y;
returna valoarea 0 for( y = 0; y < 3; y++ ) ;
b. când p2() va returna valoarea 0 printf( "%d ", y );
Ce extrage codul ? 3
c. când p1() sau p2() sau p3() va
54) int s = 0, i;
returna valoarea 0
for( i = 1; i < 7; i++ ) {
d. când p1() va returna valoarea 0 if( ( i == 2 ) || ( i == 3 ) )
e. când p3() va returna valoarea 0 continue; s += i; }
f. când p1() sau p3() va returna Ce valoare are s ? 16
valoarea 0 55) unsigned char c;
g. când p2() şi p3() vor returna for( c = 0; c < 256; c++ )
valoarea 0 printf( "%c - %d ", c, c++ );
h. când p1() sau p2() va returna Ce extrage codul ?
valoarea 0 a. Tabela codului ASCII extins
51) for( ; ( 1 < 2 ) < ( 2 < 1 ); ) b. Eroare la compilare
continue; c. O parte din tabela codului
De câte ori se va executa ciclul ? ASCII extins
a. 0 d. Fără sfârşit o parte din tabela
codului ASCII extins 60) int n = 1, m, r = 3;
e. Fără sfârşit tabela codului main() { printf( "%d", ( n + r ) * m
ASCII extins );
56) int x, z = 0; Ce extrage codul ?
for( x=0; x<5; x++ ) { z++; a. 8
if( x>3 ) continue; b. eroare la compilare
if( x>3 ) break; z++; } c. imprevizibil
printf( "%d", z ); d. 4
Ce extrage codul ? 9 e. 0
57) int x, z = 0; f. eroare la execuţie
for( x=0; x<5; x++ ) {z++; 61) int n = 1, m, r = 3;
if( x>3 ) continue; main() { int n = 3, m, r = 1; printf(
if( x<3 ) break; z++; } "%d", ( n + r ) * m );
printf( "%d", z ); Ce extrage codul ?
Ce extrage codul ? 1.
a. eroare la compilare
b. 4
c. eroare la execuţie
d. 8
58) int x, z = 0; e. imprevizibil
for( x = 0; x < 5; x++ ) { f. 0
z++; 62) i = 14;
if( x < 3 ) continue; if( i == ( 10 + 5 ) ) { i++; }
if( x > 3 ) break; z++; } Ce valoare are i ? 14
printf( "%d", z ); 63) i = 14;
Ce extrage codul ? 6 if( i = ( 10 + 5 ) ) { i++; }
59) int x = 3, c = 0; Ce valoare are i ? 16
while( ( x - 1 ) ) { ++c; x--; } 64) int x = 1;
Ce valoare are c ? 2 if( x = 15 % 5 ) printf( "3" ); else
printf( "5" ); 70) int x = 4, y = 2; char op = '-';
Ce extrage codul ? 5 switch( op ) {
65) int main() { default: x = 2;
print( x++ ); } case '+': x += y;
int x = 55; case '-': x -= y; }
void print( int x ) { Ce valoare are x ? 2
printf( "%d", --x ); }
Ce extrage codul ? 54
66) int main() {
print( x++ ); } int x = 5;
void print( int x ) {
printf( "%d", --x ); } 71) int f(); este prototipul unei
Ce extrage codul ? 4 funcţii.
67) int i, j, c = 0, m[3][4]; Câte argumente are funcţia ?
for( i = 0; i < 3; i++ ) a. număr constant necunoscut
for( j = 0; j < 4; j++ ) { b. 0
m[ i ][ j ] = c; ++c; } c. declaraţia prototipului
Ce valoare are m[2][3] ? 11 este greşită
68) int i, j, c = 0, m[4][4]; d. 1
for( i = 0; i < 4; i++ ) e. număr variabil
for( j = 0; j < 4; j++ ) { 72) int x = 1;
m[ i ][ j ] = c; ++c; } if( x = 17 % 5 ) printf( "3" ); else
Ce valoare are m[2][3] ? 11 printf( "5" );
69) int x = 4, y = 2; char op = '+'; Ce extrage codul ? 3
switch( op ) { 73) int x, z = 2;
default: x = 2; for( x=0; x<5; x++ ) {
case '+': x += y; z++;
case '-': x -= y; } if( x>3 ) break;
Ce valoare are x ? 4 if( x<3 ) continue;
z++; } x = a[1][1];
printf( "%d", z ); Ce valoare are x ? 3
Ce extrage codul ? 8 78) int i;
74) int x = 1; void increment( int i ){ ::i++; }
if( x = 51 % 5 ) printf( "3" ); else main() {
printf( "5" ); for( i=0; i<10; increment( i ) ){ }
Ce extrage codul ? 3 printf( "%d", i ); }
75) while( c = getch() != 'e' ) Ce extrage codul ? 10
printf( "%d", c ); 79) int f( void ); a. 0
Ce extrage codul ? este prototipul
b. declaraţia
Choose at least one answer. unei funcţii.
prototipului este
a. codurile caracterelor introduse Câte argumente
greşită
b. 0 sau 1 la introducerea oricărui are funcţia ?
c. 1
caracter
d. număr variabil
c. 1 la introducerea oricărui
caracter diferit de 'e' 80) int c = 0; int e. număr constant
main() { necunoscut
d. extrage fără sfârşit primul
caracter introdus while( 1 ) {if( c > 5 ) break; c++; }
{ int c = 0;
76) int a[2][2], b = 1, x, i, y;
while( 1 ) {if( c > 20 ) break; c++; }
for( i = 0; i < 2; i++ )
}
for( y = 0; y < 2; y++ )
printf( "%d", c ); }
a[i][y] = b++;
Ce extrage codul ? 6
x = a[1][1];
81) int x; for( x = 1; x < 4; x++ ) {
Ce valoare are x ? 4
switch( x ) {
77) int a[2][2], b = 0, x, i, y;
case 2: printf( "%d", x );
for( i = 0; i < 2; i++ )
case 0: printf( "%d", x );
for( y = 0; y < 2; y++ )
default: break;
a[i][y] = b++;
case 3: printf( "%d", x ); } } Ce printf( "%d", i );
extrage codul ? 223 Ce extrage codul ? 9
82) int x; 86) int i = 4;
for( x = 0; x < 4; x++ ) { switch( i ) {
switch( x ) { default: ;
case 2: printf( "%d", x ); case 3: i += 5; if( i == 8 ) {
case 0: printf( "%d", x ); i++; if( i == 9 ) break; i *= 2; } i -=
default: break; 4; break;
case 3: printf( "%d", x ); } } case 8: i += 5; break; }
Ce extrage codul ? 0223 printf( "%d", i );
Ce extrage codul ? 5
87) int a[4][2], b = 0, x, i, y;
for( i = 0; i < 4; i++ )
for( y = 0; y < 2; y++ )
a[i][y] = b++;
83) int a = 3, b = 4; x = a[1][1];
if( a == b ) b++; a++; a *= b; Ce valoare are x ? 3
Ce valoare primest a? 16 88)char a = 'a', b = 'b', c = 'c';
84) int a = 4, b = 4; b = c = getch();
if( a == b ) b++; a++; a *= b; switch( b ) {
Ce valoare are a ? 25 case 'b': printf( "%c", c ); break;
85) int i = 4; default: printf( "%c", a ); break;
switch( i ) { case 'c': printf( "%c", b ); }
default: ; Ce extrage codul ?
case 3: i += 4; if( i == 8 ) { a. c la citirea lui c
i++; if( i == 9 ) break; i *= 2; } i -= b. b la citirea unui caracter diferit
4; break; de caracterele a, c
case 8: i += 5; break; } c. caracterul citit
d. caracterul citit, dacă el e diferit e. funcţia nu returnează nici o
de caracterul a valoare
e. b la citirea lui b 91) int s = 0, i;
f. a la citirea lui a for( i = 2; i < 6; i++ ) {
g. a la citirea unui caracter if( ( i == 2 ) || ( i == 3 ) ) continue;
diferit de caracterele b, c s += i; }
h. c la citirea unui caracter diferit Ce valoare are s ? 9
de caracterele a, b 92) int x = 3;
89) int x, z = 2; if( x == 2 ); x = 0;
for( x=0; x<5; x++ ) { if( x == 3 ) x++;
z++; else x += 2;
if( x>3 ) break; Ce valoare are x ? 2
a. nu se poate if( x<3 ) 93) for( ; ; ) break; De câte ori se
determina continue; va executa ciclul?
b. 0 z++; }
c. 1 printf( "%d", z
d. infinit );
Ce extrage
codul ? 8
90) void f( int ); este prototipul
unei funcţii.
Care este tipul valorii returnate de 94) for( ; ; ); break;
funcţie ?
De câte ori se va executa ciclul ?
a. declaraţia prototipului este
greşită a. nu se poate
determina
b. int
b. 0
c. float
c. 1
d. double
d. infinit f(); f();
95) for( i = 0; i < n; i++ ) return 0; }
for( j = n - i; j < n; j++ ) Ce extrage codul ? 1112
a[ i ][ j ] = i + j + 1;
Care parte a matricei va fi 98) int x = 1;
inţializată ? for( ; x = 0; ) break;
a. sub diagonala principală De câte ori se va executa ciclul ?
b. diagonala principală 0
c. sub diagonala
secundară
d. diagonala secundară
e. deasupra diagonalei 99) int i;
secundare main() {
f. deasupra diagonalei while( i < 10 ) {
principale i++; }
96) int x = 0; printf( "%d", i );
for( ; x = 1; ) break; }
De câte ori se va executa ciclul ? Ce extrage codul
a. 1 ? d. 10
b. infinit
c. nu se poate 100) int x = 4, a = 2, b = 4, c = 8;
determina if( x == b ) x = a; else x = b;
d. 0 if( x != b ) c += b; else c +=a;
97) void f() { printf( "%d", c );
int x = 0; static int y = 0; Ce extrage codul ? 12
x++; y++;
printf( "%d %d ", x, y ); } 101) int z = 0, y;
int main() { for( y = 1; y++ < 8; ) z += y;
printf( "%d", z ); c. 1
Ce extrage codul ? 35 d. infinit
e. nu se poate determina
102) int x = 2, y = 5; char op = f. până la citirea primului
'*'; caracter ASCII
switch( op ) {
default: x = 3;
case '+': x += y;
case '-': x -= y; }
Ce valoare are x ? 3
105) int *f( int );
103) while( strlen( s ) > n ) s[n] = Ce reprezintă construcţia ?
0;
a. definiţia unei funcţii
Ce face codul ?
b. instrucţiunea este
a. Extinde şirul s până la lungimea n
greşită
b. Atribuie valoarea 0 primelor n
c. prototipul unei funcţii
elemente ale şirului s
d. declaraţiia unui tip nou
c. Atribuie valoarea 0 elementelor
şirului s care au codul mai mare ca n 106) int j = 3, x = 1, y = 1;
void f() {
d. Scurtează şirul s până la
int x = 0; static int y = 0;
lungimea n
x++; y++; }
int main() {
104) while( getche() == ' ' ); for( j = 0; y < 5; j++ ) {
De câte ori se va executa ciclul ? f(); x++; y++; }
a. până la acţionarea unei printf( "%d %d", x, y ); }
taste ce nu corespunde unui Ce extrage codul ? 55
caracter ASCII
b. 0 107) int i,j,c=0, m[3][4];
For (i=0;i<3;i++) do { --x; } while( x < 50 );
For (j=0;j<4;j++) { printf( "%d", x );
m[i][j]=c; ++c; Ce extrage codul ? 99
Ce valoare are m[2][3]? 11
108) While (getch()); 112) int x, z = 0;
De cite ori se va executa ciclul? for( x=0; x<5; x++ ) {
Pina la actionarea unei taste z++;
ce nu corespunde unui if( x>=2 ) continue;
character ASCII. if( x<=2 ) break;
z++; }
109) 1) int a=2; for ( ;1;) a++; printf( "%d", z );
2) int a=3; for ( ; ;) a++; Ce extrage codul ? 1
3) int a=3; for ( ;0;) a++;
4) int a=2; do a++; while (a-3); 113) char s[55] = "ASEM", i = 0;
5) int a=3; do a++; while (a-3); for( ; i < strlen( s ); )
In care cazuri variabila a va avea printf( "%c", s[i++] + 3 );
valoarea 3 dupa executia Ce extrage codul ? DUHP
codului?3); 4)
114) f( int ); este prototipul unei
110) void f() { funcţii.
Int x=0 static int y=0; Care este tipul valorii returnate de
x++;y++; funcţie ?
printf(“%d %d”,x,y); !declaraţia prototipului este
int main(){ greşită
f(); f();
return 0; } 115) int i, j, c = 0, m[4][3];
Ce extrage codul ? 1 1 1 2 for( i = 0; i < 4; i++ )
for( j = 0; j < 3; j++ ) {
111) int x = 100; m[ i ][ j ] = c; ++c; }
Ce valoare are m[2][2]? 8 7 int& f(int x) { return -x; }
Ce valoare are f(7)? -7
1 char * const s1 = "abc", *s2 =
"ABC"; 8 int *p = new int(10); *p = -10;
Care din următoarele atribuiri Ce valoare are p? -10
sunt corecte? 1,2
1) s1[0] = s2[0]; 9 int& f(int& a) { return a; } ... int
2) s1[0] = 'A'; a = 10;
3) s1 = s2; Ce returnează f(a)? 10

2 union { int a; float b; double c; 10 union { int a; float b; double


} u = {3.14}; c; } u = {3.14};
Ce valoare are u.a? imprevizibil Ce valoare are u.b? imprevizibil

3 Ce valoare are sizeof 'a' în C? 11 ... { int y = 10; { int x = -10; }


2 cout << x;}
Ce extrage? 10
4 Ce valoare are sizeof 'ab' în
C++? eroare sintactică 12 Ce tip are constanta 'ab' în
C? eroare sintactica
5 int& p = *new int(10); p = -10;
Ce valoare are p? -10 13 Ce valoare are sizeof 'ab' în
C? eroare sintactica
6 int a = 10;
int& ra; 14 ... { int x = 10; { int x = -10;
ra = a; cout << ::x; } }
Ce valoarea are ra? 10 Ce extrage? -10
15 f(); // declaraţie prototip 21 Ce tip are constanta 'ab' în
funcţie C++ C++? int
Ce tip returnează funcţia? int
22 int f(int x = 0, int y = 0) {
16 struct A { int B; ... } C; return x + y; }
Care expresie este corectă? C.B float f(int x = 0, int y = 1) { return
float(x)/y; }
17 Care este poziţia Ce returnează f(1,1)? eroare la
parametrilor impliciţi în lista de compilare
parametri ai unei funcţii?
oriunde în listă 23 int& f(int& a, int& b) { return
a + b; }
18 Ce valoare are sizeof 'a' în ... int a = 2, b = 8;
C++? 1 Ce returnează f(a,b)? nu se
poate determina
19 double f(); // declaraţie
prototip funcţie C++ 24 int x = -10; // var. globală
Citi parametri are functia? 0 { int x = 10; cout << ::x; }
Ce extrage? -10
20 const char *s1 = "abc", *s2 =
"ABC"; 25 Ce tip are constanta 'a' în C?
Care din următoarele atribuiri char
sunt corecte? 1,2
26 int& f(int a) { return a; } ... int
1) s1[0] = s2[0]; a = 10;
2) s1[0] = 'A'; Ce returnează f(a)? 10
3) s1 = s2;
27 struct A { int B; ... } *C;
Care expresie este corectă? C.B
2. union { int a; float b; double c; }
28 Ce tip are constanta 'a' în u = {3.14};
C++? int
Ce valoare are u.b ?
Alegeţi un răspuns.
a. imprevizibil
b. 0
c. eroare la compilare
d. 3.14
Puncte: 10
Puncte: 10
Ce valoare are sizeof 'ab' în C ? 3. int f(int x = 0, int y = 0) {
Alegeţi un răspuns. return x + y; }
a. 2 float f(int x = 0, int y = 1) {
b. 8 return float(x)/y; }
c. sizeof(int)
d. 1 Ce returnează f(1,1) ?
e. sizeof(long) Alegeţi un răspuns.
f. 4 a. 1
g. eroare b. imprevizibil
sintactică c. 2
Puncte: 10
d. eroare la compilare
Puncte: 10
4. struct A { int B; ... } C; d. B.A
e. A->B
Care expresie este corectă ?
f. B->A
Alegeţi un răspuns.
g. A.B
a. C->A
h. B->C
b. B.A
Puncte: 10
c. B->C
d. B.C
e. C->B 6. ... { int x = 10; { int x = -10; cout
f. A.B << ::x; } }
g. A->B
Ce extrage ?
h. A.C
i. C.A Alegeţi un răspuns.
j. C.B a. eroare la compilare
k. A->C b. -10
l. B->A c. imprevizibil
Puncte: 10 d. 10
Puncte: 10
5. struct A { int B; ... } *C;

Care expresie este corectă ? 7. const char *s1 = "abc", *s2 =


Alegeţi un răspuns. "ABC";
a. B.C
Care din următoarele atribuiri sunt
b. C.B corecte ?
c. C->B
1) s1[0] = s2[0];
2) s1[0] = 'A'; 9. Ce valoare are sizeof 'a' în C ?
3) s1 = s2; Alegeţi un răspuns.
a. 8
Alegeţi un răspuns. b. 2
a. 2 c. 4
b. 2 3 d. 97
c. 1 2 3 e. 1
d. 1 2 f. sizeof(int)
e. 1 3 g. eroare sintactică
f. nici una h. 65
g. 3 Puncte: 10
10. char * const s1 = "abc", *s2 =
h. 1 "ABC";
Puncte: 10
Care din următoarele atribuiri sunt
8. Care este poziţia parametrilor corecte ?
impliciţi în lista de parametri ai
unei funcţii ? 1) s1[0] = s2[0];`
Alegeţi un răspuns. 2) s1[0] = 'A';
a. oriunde în listă 3) s1 = s2;
b. ultimii în listă
c. primii în listă
Alegeţi un răspuns.
d. funcţiile nu pot avea parametri
a. 1 3
impliciţi
b. 3
Puncte: 10
c. 2 3
d. 1 2 3 13. int& f(int& a, int& b) { return a
e. nici una + b; }
... int a = 2, b = 8;
f. 2
g. 1 2 Ce returnează f(a,b) ?
h. 1 Alegeţi un răspuns.
Puncte: 10 a. eroare la compilare
b. 10
11. int x = -10; // var. globală c. nu se poate determina
{ int x = 10; cout << ::x; } Puncte: 10

Ce extrage ? 14. Ce valoare are sizeof 'a' în C++


?
Alegeţi un răspuns. Alegeţi un răspuns.
a. 10 a. 2
b. eroare la compilare b. 65
c. imprevizibil c. 8
d. -10 d. sizeof(int)
Puncte: 10 e. 4
f. 97
12 .Ce tip are constanta 'a' în C++ ?
Alegeţi un răspuns. g. 1
a. int h. eroare sintactică
b. char Puncte: 10
c. short 15.int& f(int& a) { return a; } ... int
Puncte: 10 a = 10;
Puncte: 10
Ce returnează f(a) ?
Alegeţi un răspuns. 18. double f(); // declaraţie prototip
a. nu se poate determina funcţie C++
b. 10
Câţi parametri are funcţia ?
c. eroare la compilare
Alegeţi un răspuns.
Puncte: 10
a. 1
b. 0
16. int& f(int x) { return -x; } c. eroare sintactică
d. nu se poate determina
Ce valoare are f(7) ? Puncte: 10
Alegeţi un răspuns.
a. eroare la 19. int *p = new int(10); *p = -10;
compilare
b. imprevizibil Ce valoare are p ?
c. 7
Alegeţi un răspuns.
d. -7
a. 10
Puncte: 10
b. adresa unde este stocată
17. Ce tip are constanta 'a' în C ? valoarea 10
Alegeţi un răspuns. c. -10
a. short d. adresa unde este stocată
b. char valoarea -10
c. int e. eroare la compilare
d. eroare sintactică Puncte: 10
22. int& p = *new int(10); p = -10;
20. f(); // declaraţie prototip funcţie
C++ Ce valoare are p ?

Ce tip returnează funcţia ? Alegeţi un răspuns.


Alegeţi un răspuns. a. -10
a. int b. adresa unde este stocată
b. eroare sintactică valoarea 10
c. void c. eroare la compilare
d. imprevizibil d. 10
Puncte: 10 e. adresa unde este stocată
valoarea -10
Puncte: 10
21. union { int a; float b; double c; }
u = {3.14}; 23. int a = 10;
int& ra;
Ce valoare are u.a ? ra = a;
Alegeţi un răspuns.
Ce valoarea are ra ?
a. 3 Alegeţi un răspuns.
b. imprevizibil a. 10
c. 3.14 b. eroare la
d. 0 compilare
e. eroare la compilare c. imprevizibil
Puncte: 10
24. Ce valoare are sizeof 'ab' în C++
?
Alegeţi un răspuns. d. eroare sintactică
a. sizeof(int) e. char
b. 1
c. sizeof(long)
27. { int y = 10; { int x = -10; } cout
d. 8
<< x;}
e. 4
f. eroare sintactică Ce extrage ?
g. 2
Alegeţi un răspuns.
Puncte: 10
a. 10
25. Ce tip are constanta 'ab' în C++ b. eroare la compilare
? c. -10
Alegeţi un răspuns. d. imprevizibil
a. long Puncte: 10
b. char
c. int 28. int& f(int a) { return a; } ... int a
d. short = 10;
e. eroare sintactică
Ce returnează f(a) ?
Puncte: 10 Alegeţi un răspuns.
a. nu se poate determina
26. Ce tip are constanta 'ab' în C ?
Alegeţi un răspuns. b. 10
a. long c. eroare la compilare
b. int
Testul 2
c. short
Puncte: 10
<< c;
29. int& f(int a) { return a; } ... int
a = 10; Ce extrage ?

Ce returnează f(a) ? Alegeţi un răspuns.


Alegeţi un răspuns. a. 20 10
a. nu se poate determina b. 10 20
b. 10 c. 20 12
c. eroare la compilare d. eroare
30. int s = 10, c = 20; e. 12 20
cout << setbase(8) << s << ' ' << c; f. 24 10
Puncte: 10
Ce extrage ?
Alegeţi un răspuns. 32. cout << dec << 12 << oct << 12
<< hex << 12;
a.
eroare Ce va afişa?
b. 20
10 Alegeţi un răspuns.
c. 24 a. 121212
12 b. 1214c
d. 12 c. 101214
24
e. 10
20 33. int s = 3, c = 4;
31. int s = 10, c = 20; cout << setprecision(1) <<
cout << setbase(8) << s << ' ' << dec double(s)/c;
Ce extrage ? 36. Cout << “ C++ are clase !”
<<’ \n ‘ << “ C++ are clase !” <<
Alegeţi un răspuns. “\n” << “ C++ are clase ! “ <<
a. eroare endl;
b. 0.75 Pe cite linii vom obtine acelasi
c. 0.8 mesaj ?
Puncte: 10
a. Vom obtine un mesaj de
eroare
34. int s = 2 > 1 << 2; b. 2
cout << s; c. 3
d. 0
Ce extrage ?
37. Care modificator defineşte
Alegeţi un răspuns. lăţimea câmpului de extragere a
a. eroare datelor cu cout ?
b. 1 a. Setbase()
c. 4 b. Setw()
c. Setf()
d. 0 d. Setprecision()
e. Setfill()
35. Fie sizeof(int) este 2 si cout <<
32323 + 23232; 38. #define SQR(x)*x*x
Ce extrage ? Ce valoare are 225/SQR(15) ?
a. Eroare la compilare a. 1
b. Un rezultat gresit b. Nici una din cele indicate
c. Imprevizibil c. 15
d. 55555 d. 225
c. C++
39. Char s[5] , c[3]; d. C++ is fine!
cin >> s >> c; e. Imprevizibil
cout << s << c;
la intrare avem limbajul C++ 42. Cout << setw(1) << 32767 <<
ce extrage ? setw(4) << 32767 << setw(7) <<
a. Limbajul 32767 << setw(10) << 32767;
b. Imprevizibil Cite numere egale vom obtine pe
c. Limbajul C++ ecran?
d. Limbajul C++ a. 3
e. Eroare la compilare b. 4
c. 0
40. Care modificator defineşte d. Vom obtine un mesaj de
numărul de semne yecimale eroare
pentru valorile flotante extrase e. 2
cu cout ?
a. Setf() 43. Int x; cin >> x;
b. Setprecision() Cum se numeste aici operatorul
c. Setw() “>>”
d. Setbase() a. Operator de extragere
e. Setfill() b. Operator de inserare
c. Deplasarea de biti la dreapta

41. La intrare avem : C++ is fine 44. Cout << “hello, C++!”;
! Cum se numeste aici operatorul
Ce obtinemla iesire ? “<<”?
Char s[22]; cin >> s; cout << s; a. Operator de inserare
a. ++ b. Operator de extragere
b. Eroare la compilare c. Deplasarea de biti la stinga
g. 3
45. Fie sizeof(int) este 4 si cout <<
32323 + 23232; 48. Care modificator defineşte
Ce extrage ? modul de aliniere pentru valorile
a. Eroare la compilare extrase cu cout ?
b. Un rezultat gresit a. Setw()
c. Imprevizibil b. Setf()
d. 55555 c. Setprecision()
d. Setfill()
46. Char msg[15]; e. Setbase()
Cin >> msg ;
Cout << msg;
La intrare avem mesajul “Hello !
C++!” 1)int *p = new int(10); *p = -10;
Ce va afisa ? Ce valoare are p ?
a. Nimic b. adresa unde este stocată
b. C++! valoarea 10
c. Hello !C++!
d. Hello const char *s1 = "abc", *s2 =
"ABC";
47. Int s =2; double c=3; 2)Care din următoarele atribuiri
Ce valoare are sizeof(2<3 ? s : c) sunt corecte ?
? 1) s1[0] = s2[0];
a. Sizeof(int) 2) s1[0] = 'A';
b. 8 3) s1 = s2; b. 3
c. 4
d. 1
3) .. { int x = 10; { int x = -10;
e. 2
cout << ::x; } }
f. Eroare
Ce extrage d. eroare la
compilare 11) Ce valoare are sizeof 'ab' în
C? f. eroare sintactică
4) Ce valoare are sizeof 'a' în C ?
e. 2 12) int& f(int& a) { return a; } ... int
a = 10;
5) int a = 10;
int& ra; Ce returnează f(a) ? c. 10
ra = a;
Ce valoarea are ra ? 13) Ce tip are constanta 'a' în
a. eroare la compilare C++ ? c. Char

6) double f(); // declaraţie 14) int& f(int& a, int& b) { return a


prototip funcţie C++ + b; }
Câţi parametri are funcţia ? ... int a = 2, b = 8;
a. 0 Ce returnează f(a,b) ?
a. eroare la compilare
7) Ce tip are constanta 'a' în C ?
d. Int 15) int f(int x = 0, int y = 0) {
return x + y; }
8) int& f(int x) { return -x; } float f(int x = 0, int y = 1) {
Ce valoare are f(7) ? return float(x)/y; }
d. eroare la compilare Ce returnează f(1,1) ?
d. eroare la compilare
9) Ce valoare are sizeof 'a' în 16) struct A { int B; ... } *C;
C++ ? g. 1 Care expresie este corectă ?
d. C->B
10) Ce tip are constanta 'ab' în C
? e. eroare sintactică
17) struct A { int B; ... } C; 1) s1[0] = s2[0];
Care expresie este corectă ? 2) s1[0] = 'A';
h. C.B 3) s1 = s2; e. 1 2

18) int& f(int a) { return a; } ... int a 23) union { int a; float b; double
= 10; c; } u = {3.14};
Ce returnează f(a) ? Ce valoare are u.b ?
a. 10 d. Imprevizibil

19 ) union { int a; float b; 24)Ce valoare are sizeof 'ab' în


double c; } u = {3.14}; C++ ? d. 4
Ce valoare are u.a ?
a. 3 25)int& p = *new int(10); p = -10;
Ce valoare are p ?
20) f(); // declaraţie prototip d. -10
funcţie C++
26)Ce tip are constanta 'ab' în
Ce tip returnează funcţia ? C++ ? c. Int
b. Int
21) Care este poziţia 27) int x = -10; // var. globală
parametrilor impliciţi în lista de { int x = 10; cout << ::x; }
parametri ai unei funcţii Ce extrage ?
d. -10
d. ultimii în listă
28)Ce tip are constanta 'a' în
22) char * const s1 = "abc", *s2 C++ ? c. char
= "ABC";
Care din următoarele atribuiri
sunt corecte ? TESTUL 2 :
1)Fie sizeof(int) este 2 şi )#define SQR(x) x*x
cout << 32323 + 23232; Ce valoare are 225/SQR(15) ?
c. un rezultat greşit c. 225

2)Care modificator defineşte 7)cout << dec << 12 << oct << 12 <<
lăţimea câmpului de extragere a hex << 12;
datelor cu cout ? Ce va afişa?
b. 1214c
d. setw()
3)Care modificator defineşte
numărul de semne zecimale 8)cout << setw(1) << 32767 <<
pentru valorile flotante extase setw(4) << 32767 << setw(7) <<
cu cout ? 32767 << setw(10) << 32767;
d. setprecision()
Câte numere egale vom obţine
4)int s = 10, c = 20; pe ecran? a. 2
cout << setbase(8) << s << ' ' <<
dec << c; 9)Fie sizeof(int) este 4 şi
Ce extrage ? cout << 32323 + 23232;
. 12 20 Ce extrage ?
c. 55555
5)char s[5], c[3];
cin >> s >> c; 10)cout << "Hello, C++!";
cout << s << c; Cum se numeşte aici operatorul
La intrare avem: Limbajul C++ "<<" ? a. Operator de
Ce extrage ? inserare
c. Imprevizibil 11)char msg[15];
cin >> msg;
cout << msg;
La intrare avem mesajul Cum se numeşte aici operatorul
"Hello!C++!" ">>" ? a. Operator de
Ce va afişa? extragere
b. Hello!C++!
17) int s = 10, c = 20;
12)Care modificator defineşte cout << setbase(8) << s << ' ' <<
modul de aliniere pentru valorile c; d. 12 24
extrase cu cout
18 )int s = 3, c = 4;
e. setf() cout << setprecision(1) <<
13)int s = 2 > 1 << 2; double(s)/c; a. 0.8
cout << s;
Ce extrage ? 19 )int s = 2; double c = 3;
d. 0 Ce valoare are sizeof( 2 < 3 ? s :
c)? d. 8
14)cout << "C++ are clase!" <<
'\n' << "C++ are clase!"<< "\n" << Testul-3_C++
"C++ are clase!" << endl; Pe 1 Cum pot fi accesaţi membrii
câte linii vom obţine acelaşi privaţi ai unei structuri ?
mesaj ? c. 3 c. Prin
funcţii membru publice
15)La intrare avem: C++ is fine!
Ce obţinem la ieşire ? 2 Care parte a definiţiei unei clase
char s[22]; cin >> s; cout << s; defineşte modul de implementare a
e. C++ unui TAD?

16) int x; cin >> x; a. Partea


privată
3 În C++ structura poate fi membru al 1 class my { int a;
unei clase public: void show_a(int a=15) {
Adevarat cout << this->a; }
4 Cum pot fi accesaţi membrii void get_a() { cout <<
privaţi ai unei clase? "a="; cin >> a; } };
a. Prin main() { int a=25;
funcţii my ob;
membru ob.get_a();
publice ob.show_a(); }
5 Care definiţii sunt corecte? b. Numărul introdus

a. struct S { int y; S *z; };

b. class A; struct E { int z;


A& x; };
2 class my { int a;
c. class E; struct A { int x; E
public: void get_a() { cout
y; };
<< "a="; cin >> a; }
void show_a(int a){
6 Ce este incapsularea? cout << a; } };
Modul de ascundere a main() { int a=25;
datelor şi funcţiilor în definiţia unei my ob;
clase prin protecţia lor ob.get_a();
7 Ce este o instanţă? ob.show_a(a); }
f. Un obiect de o a. 25
anumită clasă
8 Structura C++ are implicit toţi 3 class my { int a;
membrii public: void get_a() { cout
b. public << "a="; cin >> a; }
void show_a() {
cout << a; } }; Lipseşte răspunsul corect
main() { int a=25;
my ob; 6)class my { int a;
ob.get_a(); public: void get_a() { cout
ob.show_a(a); } << "a="; cin >> a; }
c. Mesaj de eroare void show_a(int a=15) {
cout << a; } };
4 class my { int a; main() { int a=25;
public: void get_a() { cout my ob;
<< "a="; cin >> a; } ob.get_a();
void show_a() { ob.show_a(); }
cout << a; } }; c. 15
main() { int a=25;
my ob; 7) class my { int a;
ob.get_a(); public: void get_a() { cout
ob.show_a(); } << "a="; cin >> a; }
d. Numărul introdus void show_a(int a) {
cout << a; } };
5 class my { int a; main() { int a=25;
public: void get_a() { cout << my ob;
"a="; cin >> a; } ob.get_a();
void show_a(int a=15) { int ob.show_a(15); }
a=35; cout << a; } }; a. 15
main() { int a=25;
my ob;
ob.get_a();
ob.show_a(45); }
e. Mesaj de eroare
my ob;
8 class my { int a; ob.get_a();
public: void get_a() { cout ob.show_a(); }
<< "a="; cin >> a; } b. Numărul introdus
void show_a() { cout << a;
} }; 11 class my { int a;
main() { int a=25; public: void get_a() { cout
my ob; << "a="; cin >> a; }
ob.get_a(); void show_a(int
ob.show_a(23); } a=15) { cout << a; } };
a. Mesaj de eroare main() { int a=25;
my ob;
9 class my { int a; ob.get_a();
public: void get.a() { cout ob.show_a(35); }
<< "a="; cin >> a; } c. 35
void show.a() { cout << a;
12 class my { int a;
} };
public: void get_a() { cout
main() { int a=25;
<< "a="; cin >> a; }
my ob;
void show_a(int
ob.get.a();
a=15) { cout << a; } };
ob.show.a(); }
main() { int a=25;
c. Mesaj de eroare
my ob;
ob.get_a();
10 class my { int a;
ob.show_a(); }
public: void show_a(int a=15)
c. 15 implicit
{ cout << my::a; }
void get_a() { cout <<
13 class my { int a;
"a="; cin >> a; } };
public: void show_a(int a=15)
main() { int a=25;
{ cout << my::a; } main() { n=new A; ... }
void get_a() { cout << b. n->c(10)
"a="; cin >> a; } }; c. m.b
main() { int a=25; d. d. m.c(10
my *ob; )
ob.get_a(); e. h. n->b
ob.show_a(); } f.
a. Mesaj de eroare 4 struct A { int b;
void c(int d) { b=d; }
1 struct a { int b; public: int e;
void c(void) { b=26; cout << b; void f(int g) { b=g; } } m;
} } d; e. m.f(10)
main() { d.b=16; cout << d.b; } d. m.b=10
b. 16 c. m.e=10

b. m.c(10)

2 struct A { int b; 5 struct A { int x; char g[57]; } w,


static int c; *s;
public: void d(int e) { b=e; }
}; c. w.g
int c=0;
A m, n; c. 2 1 d. s->g
1
e. s->x
3 struct A { int b;
void c(int d) { b=d; } h. w.x
public: int e; 6 struct A { int b;
void f(int g) { b=g; }} m, *n; void c(int d) { b=d; }
public: int e; main() { w=new A; ... }
void f(int g) { b=g; } } *m; e. 5 1 5 1
main() { m=new A; ... }
b. m->b=10 3 class S { int a,b;
public: S23() { a=2; b=3; } } x,y,z;
e. m->f(10) main() { z=x*y; }
c. Eroare la compilare
e. m->f(10)
4 class S { int a,b;
f. m->c(10) public: S23() { a=2; b=3; } } w;
6 struct S { int a,b; main() {cout << w.a+w.b; }
public: S23() { a=2; b=3; } e. Eroare la compilare
void show() { cout << a << ' ' << b; }
} w; 5 class a { int b;
main() { w.show(); } void c(void) { b=26; cout << b; } } d;
e. Eroare la compilare main() { d.b=16; cout << d.b; }

1 class A { char n[27]; } *w[5]; sc. Mesaj de eroare!


main() { for(int i = 0; i < 5; i++ )
w[i] = new A; ... }
g. w[1]->n[1]

f. w[1]->n

2 class A { int b;
void c(int d) { b=d; } Puncte: 10
public: int e; Ce valoare are sizeof 'ab' în C ?
void f(int g) { b=g; } } x, *w, t[3]; Alegeţi un răspuns.
a. 2 float f(int x = 0, int y = 1) {
return float(x)/y; }
b. 8
c. sizeof(int) Ce returnează f(1,1) ?
d. 1
Alegeţi un răspuns.
e. sizeof(long)
a. 1
f. 4
b. imprevizibil
g. eroare
sintactică c. 2
Puncte: 10 d. eroare la compilare
Puncte: 10

2. union { int a; float b; double c; } 4. struct A { int B; ... } C;


u = {3.14};
Care expresie este corectă ?
Ce valoare are u.b ? Alegeţi un răspuns.
Alegeţi un răspuns. a. C->A
a. imprevizibil b. B.A
b. 0 c. B->C
c. eroare la compilare d. B.C
d. 3.14 e. C->B
Puncte: 10 f. A.B
g. A->B
3. int f(int x = 0, int y = 0) { h. A.C
return x + y; } i. C.A
j. C.B Alegeţi un răspuns.
a. eroare la compilare
k. A->C
b. -10
l. B->A
Puncte: 10 c. imprevizibil
d. 10
5. struct A { int B; ... } *C; Puncte: 10

Care expresie este corectă ?


Alegeţi un răspuns. 7. const char *s1 = "abc", *s2 =
a. B.C "ABC";
b. C.B Care din următoarele atribuiri sunt
c. C->B corecte ?
d. B.A
1) s1[0] = s2[0];
e. A->B
2) s1[0] = 'A';
f. B->A 3) s1 = s2;
g. A.B
h. B->C Alegeţi un răspuns.
Puncte: 10 a. 2
b. 2 3
6. ... { int x = 10; { int x = -10; cout c. 1 2 3
<< ::x; } }
d. 1 2
Ce extrage ? e. 1 3
f. nici una
g. 3 h. 65
h. 1 Puncte: 10
Puncte: 10 10. char * const s1 = "abc", *s2 =
"ABC";
8. Care este poziţia parametrilor
impliciţi în lista de parametri ai Care din următoarele atribuiri sunt
unei funcţii ? corecte ?
Alegeţi un răspuns.
1) s1[0] = s2[0];`
a. oriunde în listă
2) s1[0] = 'A';
b. ultimii în listă 3) s1 = s2;
c. primii în listă
d. funcţiile nu pot avea Alegeţi un răspuns.
parametri impliciţi
a. 1 3
Puncte: 10
b. 3
9. Ce valoare are sizeof 'a' în C ? c. 2 3
Alegeţi un răspuns. d. 1 2 3
a. 8
e. nici una
b. 2
f. 2
c. 4
g. 1 2
d. 97
h. 1
e. 1 Puncte: 10
f. sizeof(int)
g. eroare sintactică
11. int x = -10; // var. globală a. eroare la compilare
{ int x = 10; cout << ::x; }
b. 10
Ce extrage ? c. nu se poate determina
Puncte: 10
Alegeţi un răspuns.
a. 10 14. Ce valoare are sizeof 'a' în C++
b. eroare la ?
compilare Alegeţi un răspuns.
c. imprevizibil a. 2
d. -10 b. 65
Puncte: 10 c. 8
d. sizeof(int)
12 .Ce tip are constanta 'a' în C++ ?
e. 4
Alegeţi un răspuns.
a. int f. 97
b. char g. 1
c. short h. eroare sintactică
Puncte: 10 Puncte: 10

13. int& f(int& a, int& b) { return a 15.int& f(int& a) { return a; } ... int
+ b; } a = 10;
... int a = 2, b = 8;
Ce returnează f(a) ?
Ce returnează f(a,b) ? Alegeţi un răspuns.
Alegeţi un răspuns. a. nu se poate determina
b. 10 18. double f(); // declaraţie prototip
funcţie C++
c. eroare la compilare
Puncte: 10 Câţi parametri are funcţia ?
Alegeţi un răspuns.
16. int& f(int x) { return -x; } a. 1
b. 0
Ce valoare are f(7) ? c. eroare sintactică
Alegeţi un răspuns. d. nu se poate determina
a. eroare la Puncte: 10
compilare
b. imprevizibil
19. int *p = new int(10); *p = -10;
c. 7
d. -7 Ce valoare are p ?
Puncte: 10
Alegeţi un răspuns.
17. Ce tip are constanta 'a' în C ? a. 10
Alegeţi un răspuns. b. adresa unde este stocată
a. short valoarea 10
b. char c. -10
c. int d. adresa unde este stocată
valoarea -10
d. eroare sintactică
e. eroare la compilare
Puncte: 10
Puncte: 10
20. f(); // declaraţie prototip funcţie 22. int& p = *new int(10); p = -10;
C++
Ce valoare are p ?
Ce tip returnează funcţia ?
Alegeţi un răspuns. Alegeţi un răspuns.
a. int a. -10
b. eroare sintactică b. adresa unde este stocată
valoarea 10
c. void
c. eroare la compilare
d. imprevizibil
d. 10
Puncte: 10
e. adresa unde este stocată
valoarea -10
21. union { int a; float b; double c; } Puncte: 10
u = {3.14};
23. int a = 10;
Ce valoare are u.a ? int& ra;
ra = a;
Alegeţi un răspuns.
a. 3 Ce valoarea are ra ?
b. imprevizibil Alegeţi un răspuns.
c. 3.14 a. 10
d. 0 b. eroare la
compilare
e. eroare la compilare
c. imprevizibil
Puncte: 10
24. Ce valoare are sizeof 'ab' în C++
?
Alegeţi un răspuns. c. short
a. sizeof(int) d. eroare sintactică
b. 1 e. char
c. sizeof(long)
d. 8
27. { int y = 10; { int x = -10; } cout
e. 4 << x;}
f. eroare sintactică
g. 2 Ce extrage ?
Puncte: 10 Alegeţi un răspuns.
a. 10
25. Ce tip are constanta 'ab' în C++
? b. eroare la compilare
Alegeţi un răspuns. c. -10
a. long d. imprevizibil
b. char Puncte: 10
c. int
28. int& f(int a) { return a; } ... int a
d. short
= 10;
e. eroare sintactică
Puncte: 10 Ce returnează f(a) ?
Alegeţi un răspuns.
26. Ce tip are constanta 'ab' în C ? a. nu se poate determina
Alegeţi un răspuns. b. 10
a. long
c. eroare la compilare
b. int
Testul 2 b. 10 20
Puncte: 10
c. 20 12
30. int s = 10, c = 20; d. eroare
cout << setbase(8) << s << ' ' << c; e. 12 20
f. 24 10
Ce extrage ?
Puncte: 10
Alegeţi un răspuns.
a. 32. cout << dec << 12 << oct << 12
eroare << hex << 12;
b. 20 Ce va afişa?
10
c. 24 Alegeţi un răspuns.
12 a. 121212
d. 12 b. 1214c
24
c. 101214
e. 10
20
31. int s = 10, c = 20; 33. int s = 3, c = 4;
cout << setbase(8) << s << ' ' << dec cout << setprecision(1) <<
<< c; double(s)/c;
Ce extrage ? Ce extrage ?
Alegeţi un răspuns. Alegeţi un răspuns.
a. 20 10 a. eroare
b. 0.75 “\n” << “ C++ are clase ! “ <<
endl;
c. 0.8
Pe cite linii vom obtine acelasi
Puncte: 10 mesaj ?

34. int s = 2 > 1 << 2; e. Vom obtine un mesaj de


cout << s; eroare
f. 2
Ce extrage ? g. 3
h. 0
Alegeţi un răspuns.
a. eroare 37. Care modificator defineşte
lăţimea câmpului de extragere a
b. 1 datelor cu cout ?
c. 4 f. Setbase()
d. 0 g. Setw()
h. Setf()
i. Setprecision()
35. Fie sizeof(int) este 2 si cout <<
j. Setfill()
32323 + 23232;
Ce extrage ?
38. #define SQR(x)*x*x
e. Eroare la compilare
Ce valoare are 225/SQR(15) ?
f. Un rezultat gresit
e. 1
g. Imprevizibil
f. Nici una din cele indicate
h. 55555
g. 15
h. 225
36. Cout << “ C++ are clase !”
<<’ \n ‘ << “ C++ are clase !” <<
39. Char s[5] , c[3];
cin >> s >> c;
cout << s << c;
la intrare avem limbajul C++ 42. Cout << setw(1) << 32767 <<
ce extrage ? setw(4) << 32767 << setw(7) <<
f. Limbajul 32767 << setw(10) << 32767;
g. Imprevizibil Cite numere egale vom obtine pe
h. LimbajulC++ ecran?
i. Limbajul C++ f. 3
j. Eroare la compilare g. 4
h. 0
40. Care modificator defineşte i. Vom obtine un mesaj de
numărul de semne yecimale eroare
pentru valorile flotante extrase j. 2
cu cout ?
f. Setf() 43. Int x; cin >> x;
g. Setprecision() Cum se numeste aici operatorul
h. Setw() “>>”
i. Setbase() d. Operator de extragere
j. Setfill() e. Operator de inserare
f. Deplasarea de biti la dreapta

41. La intrare avem : C++ is fine 44. Cout << “hello, C++!”;
! Cum se numeste aici operatorul
Ce obtinemla iesire ? “<<”?
Char s[22]; cin >> s; cout << s; d. Operator de inserare
f. ++ e. Operator de extragere
g. Eroare la compilare f. Deplasarea de biti la stinga
h. C++
i. C++ is fine! 45. Fie sizeof(int) este 4 si cout <<
j. Imprevizibil 32323 + 23232;
Ce extrage ? 48. Care modificator defineşte
e. Eroare la compilare modul de aliniere pentru valorile
f. Un rezultat gresit extrase cu cout ?
g. Imprevizibil f. Setw()
h. 55555 g. Setf()
h. Setprecision()
46. Char msg[15]; i. Setfill()
Cin >> msg ; j. Setbase()
Cout << msg;
La intrare avem mesajul “Hello ! cout << setw(1) << 32767 <<
C++!” setw(4) << 32767 << setw(7) <<
Ce va afisa ? 32767 << setw(10) << 32767;
e. Nimic Câte numere egale vom obţine
f. C++! pe ecran?
g. Hello !C++! Select one:
h. Hello a. 4
b. 3
47. Int s =2; double c=3; c. Vom obţine un mesaj de eroare
Ce valoare are sizeof(2<3 ? s : c) d. 2
? e. 0
h. Sizeof(int)
i. 8
j. 4
k. 1 cout << "C++ are clase!" << '\n'
l. 2 << "C++ are clase!"<< "\n" <<
m. Eroare "C++ are clase!" << endl;
n. 3 Pe câte linii vom obţine acelaşi
mesaj ?
Select one: a. eroare la compilare
a. Vom obţine un mesaj de eroare b. Limbajul
b. 0 c. imprevizibi
c. 2 d. LimbajulC++
d. 3 e. Limbajul C++

int s = 2; double c = 3;
Care modificator defineşte
modul de aliniere pentru valorile Ce valoare are sizeof( 2 < 3 ? s :
extrase cu cout ? c)?
Select one: Select one:
a. setprecision() a. 4
b. setw() b. eroare
c. setf() c. sizeof(int)
d. setfill() d. 1
e. setbase() e. 3
f. 8
g. 2

char s[5], c[3];


cin >> s >> c;
cout << s << c; int x; cin >> x;
Cum se numeşte aici operatorul
La intrare avem: Limbajul C++ ">>" ?
Ce extrage ? Select one:
Select one: a. Operator de extragere
b. Operator de inserare
c. Deplasare de biţi la dreapta
char msg[15];
cin >> msg;
cout << msg;
int s = 10, c = 20;
cout << setbase(8) << s << ' ' << La intrare avem mesajul
dec << c; "Hello!C++!"
Ce va afişa?
Ce extrage ? Select one:
a. Hello!
b. Nimic
Select one: c. Hello!C++!
a. 24 10 d. C++!
b. 20 12
c. 12 20
d. 10 20
e. eroare #define SQR(x) x*x
f. 20 10
Ce valoare are 225/SQR(15) ?
Select one:
cout << dec << 12 << oct << 12 a. 1
<< hex << 12; b. 15
Ce va afişa? c. nici una din cele indicate
Select one: d. 225
a. 1214c
b. 121212
c. 101214 cout << "Hello, C++!";
Cum se numeşte aici operatorul d. 10 20
"<<" ? e. 24 12
Select one:
a. Operator de inserare
b. Deplasare de biţi la stânga int s = 2 > 1 << 2;
c. Operator de extragere cout << s;

Ce extrage ?
int s = 3, c = 4;
cout << setprecision(1) <<
double(s)/c; Select one:
a. 0
Ce extrage ? b. 4
Select one: c. 1
a. 0.8 d. eroare
b. eroare
c. 0.75 Fie sizeof(int) este 2 şi

cout << 32323 + 23232;


int s = 10, c = 20;
cout << setbase(8) << s << ' ' << Ce extrage ?
c;

Ce extrage ? Select one:


Select one: a. eroare la compilare
a. eroare b. imprevizibil
b. 20 10 c. un rezultat greşit
c. 12 24 d. 55555
Care modificator defineşte
lăţimea câmpului de extragere a
Care modificator defineşte datelor cu cout ?
numărul de semne zecimale Select one:
pentru valorile flotante extase a. setw()
cu cout ? b. setbase()
Select one: c. setfill()
a. setfill() d. setprecision()
b. setw() e. setf()
c. setbase()
d. setprecision()
e. setf() Fie sizeof(int) este 4 şi

cout << 32323 + 23232;


La intrare avem: C++ is fine!
Ce obţinem la ieşire ? Ce extrage ?
Select one:
char s[22]; cin >> s; cout << s; a. un rezultat greşit
Select one: b. imprevizibil
a. ++ c. eroare la compilare
b. C++ d. 55555
c. imprevizibil
d. eroare la compilare
e. C++ is fine! Problema 1.
class A {protected: double x,y;
public:virtual void show(){cout <<
x+y << endl;}
A(double x=1, double
y=2){A::x=x;A::y=y;}}; endl;}
class B: public A {protected: int C(unsigned x=5, unsigned
x,y; y=6){C::x=x;C::y=y;}};
public:B(int x=3, int int main()
y=4){B::x=x;B::y=y;}}; { A a, *p; B b; C c;
class C: public B {unsigned x,y; p=&a;
public:C(unsigned x=5, unsigned p->show();
y=6){C::x=x;C::y=y;}}; return 0; }
int main() Ce extrage ?
{ A a, *p; B b; C c; Alegeţi un răspuns. b.
p=&c; compilation error
p->show();
return 0; } Problema 3
Ce extrage ? class A {protected: double x,y;
Alegeţi un răspuns. d. 3 virtual void show(){cout << x+y <<
endl;}
Problema 2 A(double x=1, double
class A {protected: double x,y; y=2){A::x=x;A::y=y;}};
virtual void show(){cout << x+y << class B: public A {protected: int
endl;} x,y;
public:A(double x=1, double public:void show(){cout << x-y <<
y=2){A::x=x;A::y=y;}}; endl;}
class B: public A {protected: int B(int x=3, int y=4){B::x=x;B::y=y;}};
x,y; class C: public B {unsigned x,y;
public:void show(){cout << x-y << public: void show(){cout << x*y <<
endl;} endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}}; C(unsigned x=5, unsigned
class C: public B {unsigned x,y; y=6){C::x=x;C::y=y;}};
public: void show(){cout << x*y << int main()
{ A a, *p; B b; C c; { A a, *p; B b; C c;
p=&a; (p=&a)->show();
p->show(); return 0; }
return 0; } Ce extrage ?
Ce extrage ? Alegeţi un răspuns d. 3
Alegeţi un răspuns. e.
compilation error Problema 5
class A {protected: double x,y;
public:virtual void show(){cout <<
x+y << endl;}
A(double x=1, double
y=2){A::x=x;A::y=y;}};
Problema 4 class B: public A {protected: int
class A {protected: double x,y; x,y;
public:virtual void show(){cout << public:B(int x=3, int
x+y << endl;} y=4){B::x=x;B::y=y;}};
A(double x=1, double class C: public B {unsigned x,y;
y=2){A::x=x;A::y=y;}}; public: void show(){cout << x*y <<
class B: public A {protected: int endl;}
x,y; C(unsigned x=5, unsigned
public:void show(){cout << x-y << y=6){C::x=x;C::y=y;}};
endl;} int main()
B(int x=3, int y=4){B::x=x;B::y=y;}}; { A a, *p; B b; C c;
class C: public B {unsigned x,y; p=&b;
public: void show(){cout << x*y << p->show();
endl;} return 0; }
C(unsigned x=5, unsigned Ce extrage ?
y=6){C::x=x;C::y=y;}}; Alegeţi un răspuns. b. 3
int main()
Problema 6 class f{public:virtual double
class A {protected: double x,y; s()=0;};
public:virtual void show(){cout << class r: public f {double a,b;
x+y << endl;} public:double s(){return a*b;}
A(double x=1, double r(double a=3, double b=4){this-
y=2){A::x=x;A::y=y;}}; >a=a;this->b=b;}};
class B: public A {protected: int class c: public f {double r;
x,y; public: double s(){return M_PI*r*r;}
public:void show(){cout << x-y << c(double r=0){c::r=r;}};
endl;} int main()
B(int x=3, int y=4){B::x=x;B::y=y;}}; { f *p=new f; r b; c d(1);
class C: public B {unsigned x,y; p=&d; cout << p->s() << endl;
public: void show(){cout << x*y << return 0; }
endl;} Ce extrage ?
C(unsigned x=5, unsigned Alegeţi un răspuns a.
y=6){C::x=x;C::y=y;}}; compilation error
int main()
{ A a, *p; B b; C c; Problema 8
(p=&b)->show(); class f{public:virtual double
return 0; } s()=0;};
Ce extrage ? class r: public f {double a,b;
Alegeţi un răspun. d. -1 public:double s(){return a*b;}
r(double a=3, double b=4){this-
>a=a;this->b=b;}};
class c: public f {double r;
public: double s(){return M_PI*r*r;}
c(double r=0){c::r=r;}};
int main()
Problema 7 { f *p=new f; r b; c d(1);
p=&b; cout << p->s() << endl;
return 0; }
Ce extrage ?
Alegeţi un răspuns. d.
compilation error

Problema 9
class A {protected: double x,y;
public:virtual void show(){cout << Problema 10
x+y << endl;} class A {protected: double x,y;
A(double x=1, double public:virtual void show(){cout <<
y=2){A::x=x;A::y=y;}}; x+y << endl;}
class B: public A {protected: int A(double x=1, double
x,y; y=2){A::x=x;A::y=y;}};
public:B(int x=3, int class B: public A {protected: int
y=4){B::x=x;B::y=y;}}; x,y;
class C: public B {unsigned x,y; public:void show(){cout << x-y <<
public: void show(){cout << x*y << endl;}
endl;} B(int x=3, int y=4){B::x=x;B::y=y;}};
C(unsigned x=5, unsigned class C: public B {unsigned x,y;
y=6){C::x=x;C::y=y;}}; public: void show(){cout << x*y <<
int main() endl;}
{ A a, *p; B b; C c; C(unsigned x=5, unsigned
(p=&b)->show(); y=6){C::x=x;C::y=y;}};
return 0; } int main()
Ce extrage ? { A a, *p; B b; C c;
Alegeţi un răspuns. e. 3 p=&b;
p->show();
return 0; } class B: public A {protected: int
Ce extrage ? x,y;
Alegeţi un răspuns. e. -1 void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
void show(){cout << x*y << endl;}
Problema 11 C(unsigned x=5, unsigned
class f{public:virtual double y=6){C::x=x;C::y=y;}};
s()=0;}; int main()
class r: public f {double a,b; { A a, *p; B b; C c;
public:double s(){return a*b;} p=&c;
r(double a=3, double b=4){this- p->show();
>a=a;this->b=b;}}; return 0; }
class c: public f {double r; Ce extrage ?
public: double s(){return M_PI*r*r;} Alegeţi un răspuns. d.
c(double r=0){c::r=r;}}; compilation error
int main()
{ f *p; r b; c d(1);
p=&b; cout << p->s() << endl;
return 0; } Problema 13
Ce extrage ? class A {protected: double x,y;
Alegeţi un răspuns. e. 12 public:virtual void show(){cout <<
x+y << endl;}
Problema 12 A(double x=1, double
class A {protected: double x,y; y=2){A::x=x;A::y=y;}};
virtual void show(){cout << x+y << class B: public A {protected: int
endl;} x,y;
A(double x=1, double public:void show(){cout << x-y <<
y=2){A::x=x;A::y=y;}}; endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}}; y=6){C::x=x;C::y=y;}};
class C: public B {unsigned x,y; int main()
public: void show(){cout << x*y << { A a, *p; B b; C c;
endl;} p->show();
C(unsigned x=5, unsigned return 0; }
y=6){C::x=x;C::y=y;}}; Ce extrage ?
int main() Alegeţi un răspuns. a.
{ A a, *p; B b; C c; compilation error
p=&a;
p->show(); Problema 15
return 0; } class A {protected: double x,y;
Ce extrage ? public:virtual void show(){cout <<
Alegeţi un răspuns. f. 3 x+y << endl;}
A(double x=1, double
Problema 14 y=2){A::x=x;A::y=y;}};
class A {protected: double x,y; class B: public A {protected: int
public:virtual void show(){cout << x,y;
x+y << endl;} public:void show(){cout << x-y <<
A(double x=1, double endl;}
y=2){A::x=x;A::y=y;}}; B(int x=3, int y=4){B::x=x;B::y=y;}};
class B: public A {protected: int class C: public B {unsigned x,y;
x,y; public:C(unsigned x=5, unsigned
public:void show(){cout << x-y << y=6){C::x=x;C::y=y;}};
endl;} int main()
B(int x=3, int y=4){B::x=x;B::y=y;}}; { A a, *p; B b; C c;
class C: public B {unsigned x,y; p=&c;
public: void show(){cout << x*y << p->show();
endl;} return 0; }
C(unsigned x=5, unsigned Ce extrage ?
Alegeţi un răspuns. b. -1

Problema 17
class A {protected: double x,y;
public:virtual void show(){cout <<
x+y << endl;}
Problema 16 A(double x=1, double
class A {protected: double x,y; y=2){A::x=x;A::y=y;}};
virtual void show(){cout << x+y << class B: public A {protected: int
endl;} x,y;
A(double x=1, double public:void show(){cout << x-y <<
y=2){A::x=x;A::y=y;}}; endl;}
class B: public A {protected: int B(int x=3, int y=4){B::x=x;B::y=y;}};
x,y; class C: public B {unsigned x,y;
void show(){cout << x-y << endl;} public: void show(){cout << x*y <<
B(int x=3, int y=4){B::x=x;B::y=y;}}; endl;}
class C: public B {unsigned x,y; C(unsigned x=5, unsigned
public: void show(){cout << x*y << y=6){C::x=x;C::y=y;}};
endl;} int main()
C(unsigned x=5, unsigned { A a, *p; B b; C c;
y=6){C::x=x;C::y=y;}}; p=&c;
int main() p->show();
{ A a, *p; B b; C c; return 0; }
p=&b; Ce extrage ?
p->show(); Alegeţi un răspuns b. 30
return 0; }
Ce extrage ? Problema 18
Alegeţi un răspuns. d. class A {protected: double x,y;
compilation error public:virtual void show(){cout <<
x+y << endl;} public: double s(){return M_PI*r*r;}
A(double x=1, double c(double r=0){c::r=r;}};
y=2){A::x=x;A::y=y;}}; int main()
class B: public A {protected: int { f *p; r b; c d(1);
x,y; p=&d; cout << p->s() << endl;
public:void show(){cout << x-y << return 0; }
endl;} Ce extrage ?
B(int x=3, int y=4){B::x=x;B::y=y;}}; Alegeţi un răspuns. e. 3.14159
class C: public B {unsigned x,y;
public:C(unsigned x=5, unsigned Problema 20
y=6){C::x=x;C::y=y;}}; class A {protected: double x,y;
int main() virtual void show(){cout << x+y <<
{ A a, *p; B b; C c; endl;}
(p=&c)->show(); public:A(double x=1, double
return 0; } y=2){A::x=x;A::y=y;}};
Ce extrage ? class B: public A {protected: int
Alegeţi un răspuns. c. -1 x,y;
void show(){cout << x-y << endl;}
public:B(int x=3, int
y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
Problema 19 void show(){cout << x*y << endl;}
class f{public:virtual double public: C(unsigned x=5, unsigned
s()=0;}; y=6){C::x=x;C::y=y;}};
class r: public f {double a,b; int main()
public:double s(){return a*b;} { A a, *p; B b; C c;
r(double a=3, double b=4){this- p=&c;
>a=a;this->b=b;}}; p->show();
class c: public f {double r;
return 0; }
Ce extrage ?
Alegeţi un răspuns. c.
compilation error

Problema 21 Problema 22
class A {protected: double x,y; class A {protected: double x,y;
public:virtual void show(){cout << virtual void show(){cout << x+y <<
x+y << endl;} endl;}
A(double x=1, double public:A(double x=1, double
y=2){A::x=x;A::y=y;}}; y=2){A::x=x;A::y=y;}};
class B: public A {protected: int class B: public A {protected: int
x,y; x,y;
public:void show(){cout << x-y << void show(){cout << x-y << endl;}
endl;} public:B(int x=3, int
B(int x=3, int y=4){B::x=x;B::y=y;}}; y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y; class C: public B {unsigned x,y;
public: void show(){cout << x*y << public: void show(){cout << x*y <<
endl;} endl;}
C(unsigned x=5, unsigned C(unsigned x=5, unsigned
y=6){C::x=x;C::y=y;}}; y=6){C::x=x;C::y=y;}};
int main() int main()
{ A a, *p; B b; C c; { A a, *p; B b; C c;
(p=&c)->show(); p=&b;
return 0; } p->show();
Ce extrage ? return 0; }
Alegeţi un răspuns. e. 30 Ce extrage ?
Alegeţi un răspuns. a.
compilation error
Ce valoare are sizeof 'a' în C++ ?
Problema 23 1
class A {protected: double x,y;
public:virtual void show(){cout << Ce tip are constanta 'ab' în C ?
x+y << endl;} eroare sintactică
A(double x=1, double
y=2){A::x=x;A::y=y;}}; Ce valoare are sizeof 'ab' în C++
class B: public A {protected: int ?
x,y; sizeof(int)
public:B(int x=3, int
y=4){B::x=x;B::y=y;}}; Ce tip are constanta 'ab' în C++ ?
class C: public B {unsigned x,y; Int
public:C(unsigned x=5, unsigned
y=6){C::x=x;C::y=y;}}; Ce valoare are sizeof 'ab' în C ?
int main() eroare sintactică
{ A a, *p; B b; C c;
(p=&c)->show(); Care este poziţia parametrilor
return 0; } impliciţi în lista de parametri ai
Ce extrage ? unei funcţii ?
Alegeţi un răspuns. b. 3 ultimii în listă
Ce tip are constanta 'a' în C ?
Int int a = 10;
int& ra;
Ce valoare are sizeof 'a' în C ? ra = a;
sizeof(int) Ce valoarea are ra ?
eroare la compilare
Ce tip are constanta 'a' în C++ ?
Char
int& f(int x) { return -x; } double f(); // declaraţie prototip
Ce valoare are f(7) ? funcţie C++
eroare la compilare Câţi parametri are funcţia ?
0
const char *s1 = "abc", *s2 =
"ABC";
Care din următoarele atribuiri ... { int x = 10; { int x = -10;
sunt corecte ? cout << ::x; } }
1) s1[0] = s2[0]; Ce extrage ?
2) s1[0] = 'A'; eroare la compilare
3) s1 = s2; int x = -10; // var. globală
3 { int x = 10; cout << ::x; }
Ce extrage ?
char * const s1 = "abc", *s2 = -10
"ABC";
Care din următoarele atribuiri ... { int y = 10; { int x = -10;
sunt corecte ? } cout << x;}
1) s1[0] = s2[0]; Ce extrage ?
2) s1[0] = 'A'; eroare la compilare
3) s1 = s2;
12 int *p = new int(10); *p = -10;
Ce valoare are p ?
f(); // declaraţie prototip funcţie adresa unde este stocată
C++ valoarea -10
Ce tip returnează funcţia ?
int int& p = *new int(10); p = -10;
Ce valoare are p ?
-10
imprevizibil
int& f(int& a) { return a; } ... int a =
10; union { int a; float b; double c; }
Ce returnează f(a) ? u = {3.14};
10 Ce valoare are u.a ?
3
int& f(int a) { return a; } ... int a =
10; struct A { int B; ... } C;
Ce returnează f(a) ? Care expresie este corectă ?
eroare la compilare C.B

int& f(int& a, int& b) { return a + struct A { int B; ... } *C;


b; } Care expresie este corectă ?
... int a = 2, b = 8; C->B
Ce returnează f(a,b) ?
eroare la compilare

int f(int x = 0, int y = 0) { return


x + y; } Fie sizeof(int) este 2 şi
float f(int x = 0, int y = 1) { cout << 32323 + 23232;
return float(x)/y; } Ce extrage ?
Ce returnează f(1,1) ? un rezultat greşit
eroare la compilare
Fie sizeof(int) este 4 şi
cout << 32323 + 23232;
union { int a; float b; double c; } Ce extrage ?
u = {3.14}; 55555
Ce valoare are u.b ?
La intrare avem: C++ is fine! double(s)/c;
Ce obţinem la ieşire ? Ce extrage ?
char s[22]; cin >> s; cout << s; 0.8
C++
int s = 2; double c = 3;
char s[5], c[3]; Ce valoare are sizeof( 2 < 3 ? s :
cin >> s >> c; c)?
cout << s << c; 8
La intrare avem: Limbajul C++
Ce extrage ? Care modificator defineşte
imprevizibil modul de aliniere pentru
valorile extrase cu cout ?
int s = 10, c = 20; setf()
cout << setbase(8) << s << ' ' <<
c; Care modificator defineşte
Ce extrage ? lăţimea câmpului de extragere a
12 24 datelor cu cout ?
setw()

int s = 10, c = 20; Care modificator defineşte


cout << setbase(8) << s << ' ' << numărul de semne zecimale
dec << c; pentru valorile flotante extase
Ce extrage ? cu cout ?
12 20 setprecision()

int s = 3, c = 4;
cout << setprecision(1) <<
cout << "C++ are clase!" << '\n'
cout << "Hello, C++!"; << "C++ are clase!"<< "\n" <<
"C++ are clase!" << endl;
Cum se numeşte aici operatorul
"<<" ? Pe câte linii vom obţine acelaşi
mesaj ?
Operator de inserare
3

cout << dec << 12 << oct << 12


<< hex << 12;

Ce va afişa?
cout << setw(1) << 32767 <<
1214c setw(4) << 32767 << setw(7) <<
32767 << setw(10) << 32767;

Câte numere egale vom obţine


char msg[15]; pe ecran?
cin >> msg;
cout << msg; 2
La intrare avem mesajul
"Hello!C++!"
Ce va afişa?
int x; cin >> x;
Hello!C++!
Cum se numeşte aici operatorul
">>" ?

Operator de extragere
c. Prin
funcţii membru publice

2 Care parte a definiţiei unei clase


#define SQR(x) x*x defineşte modul de implementare a
unui TAD?
Ce valoare are 225/SQR(15) ?
b. Partea
225 privată
3 În C++ structura poate fi membru al
unei clase
Adevarat
4 Cum pot fi accesaţi membrii
int s = 2 > 1 << 2; privaţi ai unei clase?
cout << s; g. Prin
funcţii
Ce extrage ? 0 2 > 1 << 2 membru
este echivalent cu 2 > (1 << 2) publice
5 Care definiţii sunt corecte?

a. struct S { int y; S *z; };

b. class A; struct E { int z;


A& x; };
Testul-3_C++ c. class E; struct A { int x; E
1 Cum pot fi accesaţi membrii y; };
privaţi ai unei structuri ?
6 Ce este incapsularea?
Modul de ascundere a main() { int a=25;
datelor şi funcţiilor în definiţia unei my ob;
clase prin protecţia lor ob.get_a();
7 Ce este o instanţă? ob.show_a(a); }
f. Un obiect de o a. 25
anumită clasă
8 Structura C++ are implicit toţi 3 class my { int a;
membrii public: void get_a() { cout
h. public << "a="; cin >> a; }
1 class my { int a; void show_a() {
public: void show_a(int a=15) { cout << a; } };
cout << this->a; } main() { int a=25;
void get_a() { cout << my ob;
"a="; cin >> a; } }; ob.get_a();
main() { int a=25; ob.show_a(a); }
my ob; c. Mesaj de eroare
ob.get_a();
ob.show_a(); } 4 class my { int a;
b. Numărul introdus public: void get_a() { cout
<< "a="; cin >> a; }
void show_a() {
cout << a; } };
main() { int a=25;
my ob;
2 class my { int a; ob.get_a();
public: void get_a() { cout ob.show_a(); }
<< "a="; cin >> a; } d. Numărul introdus
void show_a(int a){
cout << a; } };
5 class my { int a; main() { int a=25;
public: void get_a() { cout << my ob;
"a="; cin >> a; } ob.get_a();
void show_a(int a=15) { int ob.show_a(15); }
a=35; cout << a; } }; a. 15
main() { int a=25;
my ob;
ob.get_a();
ob.show_a(45); }
e. Mesaj de eroare

Lipseşte răspunsul corect 8 class my { int a;


public: void get_a() { cout
6)class my { int a; << "a="; cin >> a; }
public: void get_a() { cout void show_a() { cout << a;
<< "a="; cin >> a; } } };
void show_a(int a=15) { main() { int a=25;
cout << a; } }; my ob;
main() { int a=25; ob.get_a();
my ob; ob.show_a(23); }
ob.get_a(); a. Mesaj de eroare
ob.show_a(); }
c. 15 9 class my { int a;
public: void get.a() { cout
7) class my { int a; << "a="; cin >> a; }
public: void get_a() { cout void show.a() { cout << a;
<< "a="; cin >> a; } } };
void show_a(int a) { main() { int a=25;
cout << a; } }; my ob;
ob.get.a(); void show_a(int
ob.show.a(); } a=15) { cout << a; } };
c. Mesaj de eroare main() { int a=25;
my ob;
10 class my { int a; ob.get_a();
public: void show_a(int a=15) ob.show_a(); }
{ cout << my::a; } c. 15 implicit
void get_a() { cout <<
"a="; cin >> a; } }; 13 class my { int a;
main() { int a=25; public: void show_a(int a=15)
my ob; { cout << my::a; }
ob.get_a(); void get_a() { cout <<
ob.show_a(); } "a="; cin >> a; } };
b. Numărul introdus main() { int a=25;
my *ob;
11 class my { int a; ob.get_a();
public: void get_a() { cout ob.show_a(); }
<< "a="; cin >> a; } a. Mesaj de eroare
void show_a(int
a=15) { cout << a; } }; 1 struct a { int b;
main() { int a=25; void c(void) { b=26; cout << b;
my ob; } } d;
ob.get_a(); main() { d.b=16; cout << d.b; }
ob.show_a(35); } b. 16
c. 35
12 class my { int a;
public: void get_a() { cout
2 struct A { int b;
<< "a="; cin >> a; }
static int c;
public: void d(int e) { b=e; }
}; c. w.g
int c=0;
A m, n; c. 2 1 d. s->g
1
e. s->x
3 struct A { int b;
void c(int d) { b=d; } h. w.x
public: int e; 6 struct A { int b;
void f(int g) { b=g; }} m, *n; void c(int d) { b=d; }
main() { n=new A; ... } public: int e;
b. n->c(10) void f(int g) { b=g; } } *m;
i. m.b main() { m=new A; ... }
j. d. m.c(10 b. m->b=10
)
k. h. n->b e. m->f(10)
l. e. m->f(10)
4 struct A { int b;
void c(int d) { b=d; } f. m->c(10)
public: int e; 6 struct S { int a,b;
void f(int g) { b=g; } } m; public: S23() { a=2; b=3; }
e. m.f(10) void show() { cout << a << ' ' << b; }
d. m.b=10 } w;
c. m.e=10 main() { w.show(); }
e. Eroare la compilare
b. m.c(10)
1 class A { char n[27]; } *w[5];
5 struct A { int x; char g[57]; } w, main() { for(int i = 0; i < 5; i++ )
*s;
w[i] = new A; ... }
g. w[1]->n[1] 1.class my { int a;
f. w[1]->n public: my();
void show_a(); };
2 class A { int b; my::my() { cout << "a="; cin >> a;
void c(int d) { b=d; } a=25;}
public: int e; void my::show_a() { cout << a; }
void f(int g) { b=g; } } x, *w, t[3];
main() { w=new A; ... }
e. 5 1 5 1

3 class S { int a,b;


public: S23() { a=2; b=3; } } x,y,z;
main() { z=x*y; }
c. Eroare la compilare

4 class S { int a,b;


public: S23() { a=2; b=3; } } w;
main() {cout << w.a+w.b; }
e. Eroare la compilare

5 class a { int b;
void c(void) { b=26; cout << b; } } d;
main() { d.b=16; cout << d.b; }

sc. Mesaj de eroare!

Nota 9.73
Testul 4
main() { my ob;
int a=25;
ob.show_a(); }

Ce afişează? e. Lipseşte răspunsul


correct
2
class my { int a;
public: my(int a=5) { my::a=1; }
~my() { cout << " Aici destructorul!";
}
void show_a() { cout << " " << a; } };

void f(my c) { c.show_a(); }

main() { my a(3);
f(a); }

Ce afişează? a. Lipseşte răspunsul


corect (1 Aici destructorul !
Aici destructorul !)
3 ~my() { cout << "
class my { int a; Aici destructorul!"; }
public: my(int a=1) { void show_a() {
my::a=5; } cout << " " << a; } };
~my() { cout << " Aici
destructorul!"; } main() { my *p; p=new my(5);
void show_a() { cout << " p->show_a();
" << a; } }; p->~my(); }

void f(my& b) { b.show_a(); } Ce afişează? d. 3 Aici destructorul!

main() { my a(3); 6
f(a); } class my { int a;
Ce afişează? d. 5 Aici destructorul!! public: my(int a=5) {
my::a=1; }
4 ~my() { cout << " Aici
struct S { int a,b; destructorul!"; }
public: S() { a=2; b=3; } void show_a() { cout << "
void show() { cout << a << ' ' << b; } " << a; } };
} w;
main() { w.show(); } void f(my& b) { b.show_a(); }

Ce va afişa? d. 2 3 main() { my a(3);


f(a); }
5 Ce afişează? a. 1 Aici destructorul!
class my { int a;
public: my(int a=1) { 7
my::a=3; } class my { int a;
public: my(int a);
void show_a(); }; public: my(int a);
my::my(int a) { my::a=a; } my();
void my::show_a() { cout << a; } void show_a(); };
my::my(int a) { my::a=a; }
main() { my ob(15); my::my() { cout << "a="; cin >> a; }
int a=25; void my::show_a() { cout << a; }
ob.show_a();}
main() { my ob();
Ce afişează? d. 15 int a=25;
ob.show_a(); }

Ce afişează? d. Mesaj de eroare


8
class my { int a; 10
public: my(int a); class my { int a;
my(); public: my(int a=4) {
void show_a(); }; my::a=a; }
my::my(int a) { my::a=a; } my() { a=5; }
my::my() { cout << "a="; cin >> a; } void show_a() {
void my::show_a() { cout << a; } cout << " " << a; } };
main() { my a[4]={0,1,2,3,4};
main() { my& ob; for(int i=0; i<4; i++)
int a=25; a[i].show_a(); }
ob.show_a(); } Ce afişează? a. Mesaj de eroare

Ce afişează? d. Mesaj de eroare 11


class my { int a;
9 public: my(int a=1) {
class my { int a; my::a=2; }
void show_a() { my::my() { cout << "a="; cin >> a; }
cout << a; } }; void my::showa() { cout << a; }

main() { my ob(3); my& p=ob; main() { my ob;


p->show_a(); } int a=25;
ob.showa(); }
Ce afişează? b. Mesaj de eroare
Ce afişează?
a. Numărul inrodus
12
class my { int a; 14
public: my(int a=35) { class my { int a;
my::a=a; } public: my(int a=3) {
~my() { cout << " my::a=1; }
Aici destructorul!"; } ~my() { cout << " Aici
void show_a(); }; destructorul!"; }
void my::show_a() { cout << a; } void show_a() { cout << "
" << a; } };
main() { my ob;
int a=25; void f(my c) { c.show_a(); }
ob.show_a(); }
main() { my a(5);
Ce afişează? f(a); }
a. 35 Aici destructorul!
Ce afişează?
13 d. Lipseşte răspunsul corect
class my { int a;
public: my(); 15
void showa(); }; class my { int a;
public: my(int a=1) {
my::a=8; } 17
~my() { cout << " class my { int a;
Aici destructorul!"; } public: my(int a=1) {
void show_a() { my::a=5; }
cout << " " << a; } }; ~my() { cout << "
main() { my *p; p=new my(3); Aici destructorul!"; }
p->show_a(); void show_a() {
p->~my(); } cout << " " << a; } };
Ce afişează?
e. Lipseşte răspunsul corect main() { my *p; p=new my(3);
p->show_a();
p->~my(); }
16
class my { int a; Ce afişează?
public: my(int a=1) { my::a=3; } b. 5 Aici destructorul!
~my() { cout << " Aici destructorul!";
}
void show_a() { cout << " " << a; } }; 18
Puncte: 10
void f(my *b) { b->show_a(); } class my { int a;
public: my(int a=1) {
main() { my a(5); my::a=5; }
f(&a); } ~my() { cout << " Aici
destructorul!"; }
Ce afişează? void show_a() { cout << "
a 3 Aici destructorul! " << a; } };

void f(my *b) { b->show_a(); }


~my() { cout << "
main() { my a(3); Aici destructorul!"; }
f(&a); } void show_a() {
cout << " " << a; } };
Ce afişează?
g. 5 Aici destructorul! main() { my *p; p=new my[5];
for(int i=0; i<3; i++)
p[i].show_a(); }

19 Ce afişează?
class my { int a; g. Mesaj de eroare
public: my(int a);
void show_a(); }; 21
my::my(int a) { my::a=a; } class my { int a;
void my::show_a() { cout << a; } public: my(int a=1) {
my::a=2; }
main() { my ob(25); void show_a() {
int a=15; cout << a; } };
ob.show_a();}
main() { my ob(3); my& p=ob;
Ce afişează? p.show_a(); }

d. 25 Ce afişează?
a. 2

20 22
class my { int a; class my { int a;
public: my(int a) { public: my(int a) { my::a=5; }
my::a=3; } my() { a=1; }
~my() { cout << " Aici destructorul!"; class S { int a,b;
} public: S() { a=2; b=3; }
void show_a() { cout << " " << a; } }; } x,y,z;
main() { z=x*y; ... }
main() { my *p; p=new my[3]; Ce valoare are z?
for(int i=0; i<3; i++) b. Eroare la compilare
{ p[i].show_a();
p[i].~my(); } }
Ce afişează?
a. Lipseşte răspunsul corect 25
(1 Aici destructorul! 1 Aici class my { int a;
destructorul! 1 Aici destructorul!) public: my(int a=1) {
my::a=5; }
23 ~my() { cout << "
class my { int a; Aici destructorul!"; }
public: my(int a=4) { void show_a() {
my::a=a; } cout << " " << a; } };
my() { a=5; } main() { my *p; p=new my(3);
void show_a() { p->show_a(); }
cout << " " << a; } }; Ce afişează?
b. 5
main() { my a[4]={1,2,3,4};
for(int i=0; i<4; i++) 26
a[i].show_a(); } class my { int a;
public: my(int a);
Ce afişează? my();
d. 1 2 3 4 void show_a(); };
my::my(int a) { my::a=a; }
24 my::my() { cout << "a="; cin >> a; }
void my::show_a() { cout << a; } 28
class my { int a;
main() { my ob=my(); public: my(int a) {
int a=125; my::a=5; }
ob.show_a(); } my() { }
~my() { cout << "
Ce afişează? Aici destructorul!"; }
c. Numărul introdus void show_a() {
cout << " " << a; } };
27
class my { int a; main() { my *p; p=new my[3];
public: my(int a) { for(int i=0; i<3; i++)
my::a=5; } p[i].show_a(); }
my() { a=1; }
~my() { cout << " Ce afişează?
Aici destructorul!"; } f. Lipseşte răspunsul corect
void show_a() { (imprevizibil)
cout << " " << a; } };
29
main() { my *p; p=new my[3]; class my { int a;
for(int i=0; i<3; i++) public: my(int a);
{ p[i].show_a(); my();
p[i].~my(); } } void show_a(); };
my::my(int a) { my::a=a; }
Ce afişează? my::my() { cout << "a="; cin >> a; }
c. Lipseşte răspunsul corect void my::show_a() { cout << a; }
(1 Aici destructorul! 1 Aici
destructorul! 1 Aici destructorul!) main() { my ob;
int a=25;
ob.show_a(); } ob.show_a(); }

Ce afişează? Ce afişează?
c. Numărul introdus c. Numărul introdus

32
class my { int a;
30 public: my();
class S { int a,b; void show_a(); };
public: S() { a=2; b=3; } my::my() { cout << "a="; cin >> a; }
} w; void my::show_a() { cout << a; }
main() { cout << w.a+w.b; }
main() { my ob;
Ce va afişa? int a=25;
b. Eroare la compilare ob.show_a(); }

Ce afişează?
a. Numărul inrodus
31
class my { int a; 33
public: my(int a); class my { int a, b;
my(); public: my(int a=1, int b=2)
void show_a(); }; { my::a=a; my::b=6; }
my::my(int a) { my::a=a; } void show_a() {
my::my() { cout << "a="; cin >> a; } cout << " " << a << " " << b; } };
void my::show_a() { cout << a; }
main() { my a[2][3]={ my(1,2), my(),
main() { my ob=my(); 1, 2, my(3), my(3,4) };
int a=25; for(int i=0; i<2; i++)
{ for(int j=0; j<3; j++) main() { my *p; p=new my[3];
a[i][j].show_a(); for(int i=0; i<3; i++)
cout << endl; } } p[i].show_a(); }

Ce afişează? Ce afişează?
b. 1 6 1 6 1 6 2 6 3 6 3 6 (Scrie g. Mesaj de eroare
in 2 rinduri, poate sa fie rasp
gre6it)) 35
class my { int a;
public: my(int a);
my();
void show_a(); };
my::my(int a) { my::a=a; }
my::my() { cout << "a="; cin >> a; }
void my::show_a() { cout << a; }

main() { my ob(28);
int a=25;
ob.show_a(); }

Ce afişează?
d. Lipseşte răspunsul correct
34 (28)
class my { int a;
public: my(int a) { my::a=5; } 36
~my() { cout << " Aici destructorul!"; class my { int a;
} public: my( int a);
void show_a() { cout << " " << a; } }; void show_a(); };
my::my(int a=35) { my::a=a; }
void my::show_a() { cout << a; } int operator -(int b) {
return ( (a-b)%5 ); } };
main() { my ob(15);
int a=25; main() { my a;
ob.show_a(); } int c;
Ce afişează? c=-(3-a);
d. 15 cout << c; }

Ce afişează?
37
class my { int a; a. Mesaj de eroare
public: my(int a=1) { b. Restul impartirii (a-b)/5
my::a=2; } c. Restul impartirii (a-3)/5
void show_a() { d. Lipseşte răspunsul corect
cout << a; } }; e. Valoarea a-3
f. Valoarea a-b
main() { my ob(3), *p=&ob; g. Valoarea a-3 modulo 5
p->show_a(); } h. Valoarea a-b modulo 5
2
Ce afişează? class my { int a;
b. 2 public: my() { cout <<
"a="; cin >> a; }
Testul 5 void show_a() {
1 cout << a; }
class my { int a; int operator /(int b) {
public: my() { cout << return ( (a/b)%2 ); } };
"a="; cin >> a; }
void show_a() { main() { my a;
cout << a; } int c;
c=1/(3/a);
cout << c; }

Ce afişează?

a. Jumătate din câtul numerelor


a şi b
b. Câtul numerelor a şi 3 3
c. 0, dacă a este par class my { int a;
d. 1, când câtul numerelor a şi b public: my() { cout <<
este impar "a="; cin >> a; }
e. 0, când câtul numerelor a şi b void show_a() {
este par cout << a; }
f. Câtul numerelor a şi b int operator -(int b) {
g. 1, când câtul numerelor a şi 3 return ( (a-b)%5 ); } };
este impar
h. 0, când câtul numerelor a şi 3 main() { my a;
este par int c;
i. Mesaj de eroare c=a-3;
j. 1, dacă b este impar cout << c; }
k. 1, dacă a este impar
Ce afişează?

a. Restul impartirii (a-b)/5


b. Restul impartirii (a-3)/5
c. Lipseşte răspunsul corect
d. Valoarea a-3
e. Valoarea a-b
f. Valoarea a-b modulo 5
g. Valoarea a-3 modulo 5 i. 1, dacă produsul numerelor a
h. Mesaj de eroare şi 3 este impar
4 j. Produsul numerelor a şi b
Puncte: 10
class my { int a;
public: my() { cout << "a="; cin >> a;
}
void show_a() { cout << a; } 5
int operator *(int b) { return ( Puncte: 10
(a*b)%1 ); } }; class my { int a;
public: my() { cout <<
main() { my a; "a="; cin >> a; }
int c; void show_a() {
c=a*3; cout << a; }
cout << c; } int operator /(int b) {
return ( (a/b)%2 ); } };
Ce afişează?
main() { my a;
a. 0, dacă produsul numerelor int c;
a şi 3 este par c=a/3;
b. 0, dacă produsul numerelor cout << c; }
a şi b este par
c. 0, dacă a este par Ce afişează?
d. Mesaj de eroare
e. Jumătate din produsul a. Câtul numerelor a şi b
numerelor a şi b b. 1, când câtul numerelor a şi
f. 1, dacă a este impar 3 este impar
g. 1, dacă b este impar c. 0, dacă a este par
h. Produsul numerelor a şi 3 d. 1, dacă b este impar
e. 0, când câtul numerelor a şi b. Lipseşte răspunsul corect
3 este par c. Restul impartirii (a+3)/5
f. 1, dacă a este impar d. Restul impartirii (a+b)/5
g. Câtul numerelor a şi 3 e. Valoarea a+b
h. Jumătate din câtul numerelor f. Valoarea a+b modulo 5
a şi b g. Mesaj de eroare
i. Mesaj de eroare h. Valoarea a+3
j. 1, când câtul numerelor a şi
b este impar 7
k. 0, când câtul numerelor a şi Puncte: 10
b este par class my { int a;
public: my() { cout <<
"a="; cin >> a; }
6 class my { int a; void show_a() {
public: my() { cout << cout << a; }
"a="; cin >> a; } int operator +(int b)
void show_a() { { return ( (a+b)%3 ); } };
cout << a; } main() { my a;
int operator -(int b) { int c;
return ( (a-b)%5 ); } }; int& f(int& a) { return a; } ... int
a = 10;
main() { my a; cout << c; }
int c;
c=a- -3; Ce afişează?
cout << c; }
a. Valoarea a+b
Ce afişează? b. Restul impartirii (a+7)/3
c. Valoarea a+b modulo 3
a. Valoarea a+3 modulo 5 d. Valoarea a+7 modulo 3
e. Restul impartirii (a+b)/3 class my { int a;
f. Lipseşte răspunsul corect public: my() { cout << "a="; cin >> a;
g. Valoarea a+7 }
h. Mesaj de eroare void show_a() { cout << a; }
8 int operator +(int b) { return (
class my { int a; (a%1+b)%3 ); } };
public: my() { cout << main() { my a;
"a="; cin >> a; } int c;
void show_a() { c=a+7;
cout << a; } cout << c; }
int operator +(int b)
{ return ( (a+b)%3 ); } }; Ce afişează?
main() { my a;
int c; a. Valoarea a+7
c=a+7; b. Valoarea a+b
cout << c; } c. Mesaj de eroare
d. Restul impartirii (a+7)/3
Ce afişează? e. Restul impartirii (a+b)/3
f. Valoarea a+b modulo 3
a. Valoarea a+7 g. Valoarea a+7 modulo 3
b. Valoarea a+7 modulo 3 h. Lipseşte răspunsul correct
c. Valoarea a+b modulo 3 (1)
d. Restul impartirii (a+b)/3
e. Mesaj de eroare 10
f. Lipseşte răspunsul corect class my { int a;
g. Valoarea a+b public: my() { cout <<
h. Restul impartirii (a+7)/3 "a="; cin >> a; }
9 void show_a() {
Puncte: 10 cout << a; }
int operator *(int b)
{ return ( (a*b)%2 ); } }; class B: public A { int b;
void show(){ cout << a << endl; }
main() { my a; public:B(int x=5){b=x;}};
int c;
c=a*3; int main() {
cout << c; } B y(3); y.show();
return 0; }
Ce afişează?
Ce afişează ?
a. 1, dacă b este impar Alegeţi un răspuns. a. 5
b. Jumătate din produsul b. 7
numerelor a şi b c. compilation error
c. 0, dacă produsul numerelor d. 3
a şi 3 este par e. 0
d. Mesaj de eroare f. imprevizibil
e. 0, dacă a este par g. run time error
f. Produsul numerelor a şi 3
g. 1, dacă a este impar
h. 1, dacă produsul numerelor
a şi 3 este impar
i. Produsul numerelor a şi b
j. 0, dacă produsul numerelor
a şi b este par

Testul 6
1
class A { protected:int a;
public:A(int x=7){a=0;}};
2
class A { protected:int a;
public:A(int x=3){a=x;}};

class B: public A { int b;


public:void show(){ cout << a <<
endl; }
B(int x=5){b=x;}};

int main() {
B *p=new B(7);
p->show();
return 0; }

Ce extrage ?
Alegeţi un răspuns. a. 5
b. 3
c. imprevizibil
d. 0
e. run time error
f. compilation error
g. 7
3
class A { int a;
public:A(int x=3){a=x;}
protected:void show(){ cout << a <<
endl; }};
class B: private A { int b; class A { protected:int a;
public:B(int x=7){b=x;}}; public:A(int x=7){a=x;}};

int main() { class B: public A { protected:int b;


B y(5); y.show(); void show(){ cout << a << endl; }
return 0; } public:B(int x=3){b=0;}};

Ce extrage ? int main() {


Alegeţi un răspuns. a. B y(5); y.show();
imprevizibil return 0; }
b. 7
c. run time error Ce afişează ?
d. 5 Alegeţi un răspuns. a. run time
e. 0 error
f. 3 b. 7
g. compilation error c. 0
d. 3
e. compilation error
f. 5
g. imprevizibil
5
class A { int a;
public:A(int x=3){a=x;}
void show(){ cout << a << endl; }};

class B: public A { int b;


public:B(int x=5){b=x;}};

4 int main() {
B y(7); y.show(); d. 0
return 0; } e. compilation error
f. 7
Ce extrage ? g. imprevizibil
Alegeţi un răspuns. a. 3
b. 0 7
c. 5 class A { int a;
d. 7 public:A(int x=3){a=0;}
e. compilation error private:void show(){ cout << a <<
f. run time error endl; }};
g. imprevizibil
6 class B: protected A { int b;
public:B(int x=5){b=x;}};
class A { int a;
public:A(int x=5){a=x;} int main() {
private:void show(){ cout << a << B y(7); y.show();
endl; }}; return 0; }

class B: public A { int b; Ce extrage ?


public:B(int x=7){b=x;}}; Alegeţi un răspuns. a. 5
b. 3
int main() { c. 0
B y(3); y.show(); d. compilation error
return 0; } e. run time error
f. 7
Ce extrage ? g. imprevizibil
Alegeţi un răspuns. a. 5 8
b. 3 class A { public:int a;
c. run time error
public:void show(){ cout << a << void show(){ cout << a << endl; }};
endl; }
A(int x=3){a=x;}}; class B: protected A { int b;
public:B(int x=5){b=x;}};
class B: public A { protected:int b;
public:void show(){ cout << b << int main() {
endl; } B y(7); y.show();
B(int x=5){b=x;}}; return 0; }

class C: public B { int c; Ce extrage ?


public:void show(){ cout << a+b+c Alegeţi un răspuns. a. run time
<< endl; } error
C(int x=7){c=x;}}; b. imprevizibil
c. 5
int main() { d. 3
C w(9); e. compilation error
w.show(); f. 7
return 0; } g. 0

Ce afişează ? 10 class A { protected:int a;


Alegeţi un răspuns. a. public:A(int x=3){a=0;}};
compilation error
b. 15 class B: public A { int b;
c. run time error protected:void show(){ cout << a <<
d. 17 endl; }
public:B(int x=7){b=x;}};
9
class A { int a; int main() {
public:A(int x=3){a=x;} B *p=new B(5);
p->show(); C w(9);
return 0; } w.show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. a. run time Ce afişează ?
error Alegeţi un răspuns. a.
b. 0 compilation error
c. compilation error b. 15
d. imprevizibil c. run time error
e. 3 d. 17
f. 5 12
g. 7 class A { int a;
11 public:A(int x=7){a=x;}
class A { public:int a; protected:void show(){ cout << a
public:void show(){ cout << a << << endl; }};
endl; }
A(int x=5){a=x;}}; class B: public A { int b;
public:B(int x=5){b=x;}};
class B: private A { protected:int b;
public:void show(){ cout << b << int main() {
endl; } B y(3); y.show();
B(int x=7){b=0;}}; return 0; }
Ce extrage ?
class C: public B { int c; Alegeţi un răspuns. a. run time
public:void show(){ cout << a+b+c error
<< endl; } b. 5
C(int x=3){c=x;}}; c. 3
d. imprevizibil
int main() { e. 7
f. compilation error public:void show(){ cout << b <<
g. 0 endl; }
13 class A { protected: int a; B(int x=5){b=x;}};
public:A(int x=3){a=x;}};
class C: public B { int c;
class B: public A { int b; public:void show(){ cout << a+b+c
public:B(int x=5){b=x;} << endl; }
void show(){ cout << a << endl; }}; C(int x=9){c=x;}};

int main() { int main() {


B y(7); y.show(); C w(7);
return 0; } w.show();
Ce afişează ? return 0; }
Alegeţi un răspuns. a.
imprevizibil Ce afişează ?
b. run time error Alegeţi un răspuns. a. 15
c. 3 b. compilation error
d. 7 c. run time error
e. 5 d. 17
f. compilation error 15
g. 0 class A { int a; //(private)
14 public:A(int x=5){a=x;}};
class A { public:int a;
public:void show(){ cout << a << class B: public A { int b;
endl; } public:B(int x=3){b=0;}
A(int x=3){a=x;}}; void show(){ cout << a << endl; }};
int main() {
class B: protected A { int b; B y(7); y.show();
return 0; }
Ce afişează ? d. run time error
Alegeţi un răspuns. a. 0 e. 5
b. 5 f. 3
c. compilation error g. imprevizibil
d. imprevizibil
e. 7 17 class A { int a;
f. run time error public:A(int x=5){a=x;}
g. 3 void show(){ cout << a << endl; }};

class B: pivate A { int b;


public:B(int x=3){b=x;}};

16 class A { int a; int main() {


public:A(int x=7){a=x;} B y(7); y.show();
protected:void show(){ cout << a << return 0; }
endl; }};
Ce extrage ?
class B: protected A { int b; Alegeţi un răspuns. a.
public:B(int x=3){b=x;}}; imprevizibil
b. compilation error
int main() { c. 0
B y(5); y.show(); d. 7
return 0; } e. 5
f. 3
Ce extrage ? g. run time error
Alegeţi un răspuns. a. 18 class A { int a;
compilation error public:A(int x=3){a=x;}
b. 0 private:void show(){ cout << a <<
c. 7 endl; }};
class B: private A { int b;
public:B(int x=5){b=0;}};

int main() {
B y(7); y.show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. a.
imprevizibil
b. compilation error
c. run time error
d. 0
e. 7
f. 3
g. 5
Problema 1.
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public:C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&c;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. d. 3

Problema 2
class A {protected: double x,y;
virtual void show(){cout << x+y << endl;}
public:A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&a;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. b. compilation error

Problema 3
class A {protected: double x,y;
virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&a;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. e. compilation error

Problema 4
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
(p=&a)->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns d. 3

Problema 5
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&b;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. b. 3

Problema 6
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
(p=&b)->show();
return 0; }
Ce extrage ?
Alegeţi un răspun. d. -1

Problema 7
class f{public:virtual double s()=0;};
class r: public f {double a,b;
public:double s(){return a*b;}
r(double a=3, double b=4){this->a=a;this->b=b;}};
class c: public f {double r;
public: double s(){return M_PI*r*r;}
c(double r=0){c::r=r;}};
int main()
{ f *p=new f; r b; c d(1);
p=&d; cout << p->s() << endl;
return 0; }
Ce extrage ?
Alegeţi un răspuns a. compilation error

Problema 8
class f{public:virtual double s()=0;};
class r: public f {double a,b;
public:double s(){return a*b;}
r(double a=3, double b=4){this->a=a;this->b=b;}};
class c: public f {double r;
public: double s(){return M_PI*r*r;}
c(double r=0){c::r=r;}};
int main()
{ f *p=new f; r b; c d(1);
p=&b; cout << p->s() << endl;
return 0; }
Ce extrage ?
Alegeţi un răspuns. d. compilation error

Problema 9
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
(p=&b)->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. e. 3
Problema 10
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&b;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. e. -1

Problema 11
class f{public:virtual double s()=0;};
class r: public f {double a,b;
public:double s(){return a*b;}
r(double a=3, double b=4){this->a=a;this->b=b;}};
class c: public f {double r;
public: double s(){return M_PI*r*r;}
c(double r=0){c::r=r;}};
int main()
{ f *p; r b; c d(1);
p=&b; cout << p->s() << endl;
return 0; }
Ce extrage ?
Alegeţi un răspuns. e. 12

Problema 12
class A {protected: double x,y;
virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&c;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. d. compilation error

Problema 13
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&a;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. f. 3

Problema 14
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. a. compilation error

Problema 15
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public:C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&c;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. b. -1

Problema 16
class A {protected: double x,y;
virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&b;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. d. compilation error

Problema 17
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&c;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns b. 30

Problema 18
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public:C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
(p=&c)->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. c. -1

Problema 19
class f{public:virtual double s()=0;};
class r: public f {double a,b;
public:double s(){return a*b;}
r(double a=3, double b=4){this->a=a;this->b=b;}};
class c: public f {double r;
public: double s(){return M_PI*r*r;}
c(double r=0){c::r=r;}};
int main()
{ f *p; r b; c d(1);
p=&d; cout << p->s() << endl;
return 0; }
Ce extrage ?
Alegeţi un răspuns. e. 3.14159

Problema 20
class A {protected: double x,y;
virtual void show(){cout << x+y << endl;}
public:A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
void show(){cout << x-y << endl;}
public:B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
void show(){cout << x*y << endl;}
public: C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&c;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. c. compilation error

Problema 21
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:void show(){cout << x-y << endl;}
B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
(p=&c)->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. e. 30

Problema 22
class A {protected: double x,y;
virtual void show(){cout << x+y << endl;}
public:A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
void show(){cout << x-y << endl;}
public:B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public: void show(){cout << x*y << endl;}
C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
p=&b;
p->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. a. compilation error

Problema 23
class A {protected: double x,y;
public:virtual void show(){cout << x+y << endl;}
A(double x=1, double y=2){A::x=x;A::y=y;}};
class B: public A {protected: int x,y;
public:B(int x=3, int y=4){B::x=x;B::y=y;}};
class C: public B {unsigned x,y;
public:C(unsigned x=5, unsigned y=6){C::x=x;C::y=y;}};
int main()
{ A a, *p; B b; C c;
(p=&c)->show();
return 0; }
Ce extrage ?
Alegeţi un răspuns. b. 3

1. Folosind pointeri ,cititi un sir de nr intregi si aflati cel mai mic nr impar din sir
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])


{int s[255];
int min, n=0,i, err=0;
system ("cls");
printf ("Introdu numerele, dupa care orice litera:\n");
while (scanf("%d", s+n))
{ if (*(s+n)%2)min=*(s+n);
else err++;
n++;
}
for (i=0;i<n;i++)
{if(min>*(s+i)&&*(s+i)%2)min=*(s+i);
}
if(err==n) printf("\nSirul nu contine numere impare");
else printf("\nCel mai mic numar impar din sir este %d", min);
getch();
return 0;}

2. Fie un cuvant S ce incepe cu o consoana


* si contine cel putin o vocala.
* Aflati care litera din alfabet
* preceda vocala cu cod minim din cuvantul dat.
*/
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])


{char s[250], min= 'u';
unsigned short i, err=0;
system ("cls");
printf ("Introdu sirul de caractere:\n");
gets(s);
for (i=1;i<strlen(s); i++);
{if(s[i]=='A' ||s[i]=='E' ||s[i]=='I'|| s[i]=='O'||s[i]=='U'
||s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u');
{if((int)s[i]<(int)min)min=s[i];
else err++;}
{
if (err==strlen(s)-1)printf ("\Sirul introdus nu corespunde conditiilor problemei\n(contine vocale)");
else printf("\nVocala cu cod minim este %c",min);
getch();
return 0;}
}

5. Folosind pointeri, cititi un sir numeric


*si determinati de care numere are mai multe,
pare sau impare.

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])


{int s[255];
int pare=0, int impare=0, int n=0;
system ("cls");
printf("Introdu numerele dupa care orice litera:\n");
while(scanf("%d", s+n)){
if(*(s+n)%2)impare++;
else pare++;
n++;
}
if(pare>impare) printf ("Mai multe numere pare");
else if (pare<impare) printf ("Mai multe numere impare");
else printf("Cite numere pare, atitea si impare");
getch();
return 0;
}
6.Fie un cuvant M, adica un sir de caractere.
* Aflati cate litere diferite contine cuvantul M.
*/
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{int s[255];
int pare=0, int impare=0, int n=0;
system ("cls");
printf("Introdu numerele dupa care orice litera:\n");
while(scanf("%d", s+n)){
if(*(s+n)%2)impare++;
else pare++;
n++;
}
if(pare>impare) printf ("Mai multe numere pare");
else if (pare<impare) printf ("Mai multe numere impare");
else printf("Cite numere pare, atitea si impare");
getch(); return 0; }
3. Folosind pointeri, citit un sir numeric si determinati cite nr nu se impart la 7.

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])


{int s[255], saptefobice=0, n=0;
system ("cls");
printf("Introdu numerele, dupa care orice litera:\n");
while (scanf("%d",s+n)){
if (*(s+n)%7)saptefobice++;
n++;}
printf("%d numere din %d introduse nu se impart la 7", saptefobice, n);
getch();
return 0;
}
4. Folosind pointeri, aflati suma elementelor pare ale unui sir de nr intregi

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>

int main()
{int n, s=0, i, *pn, a[100];
system ("cls");
printf("Introduceti lungimea sirului:");
scanf("%d", &n);
pn=&n;
for (i=0; i<=*pn;i++){
printf("A[%d]=",i);
scanf("%d", (a+i));
}
for (i=2; i<=*pn; i+=2){
s+=*(a+i);
}
printf("Suma nr de pe pozitie para este=%d",s);
getch();
return 0; }

7. Fie un vector v. Aflati daca elementele lui formeaza un sir strict descrescator.

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{int s[100], n, i, m=1;
system ("cls");
printf("Introducdti lungimea sirului:\n");
scanf("%d", &n);
for(i=1; i<=n; i++) {
printf("S[%d]=",i);
scanf("%d", &s[i]);}
for(i=1; i<=n; i++){
if(s[i]>s[i+1])m++;}
if(m==n) printf("Sirul este strict descrescator");
else printf("sirul nu este strict descrescator");
getch();
return 0; }

8. Folosind pointeri, determinati elemental min dintr-un vector.

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])


{char s[70], min;
int n, i;
system ("cls");
printf("Introduceti sirul:");
scanf("%s", s);
n=strlen(s);
min=124;
for(i=0;i<n;i++){
if(*(s+i)<min)min=*(s+i);}
printf("Min este:%c:", min);
getch();
return 0;
}

9. Fie n multimi de nr intregi consecutive A1, A2, A3, …, An.


Aranjati aceste multimi in ordinea crescatoare dupa nr de elemente.

#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])


{int i,min[30],max[30],n,in,ax,j,k,s[20],p[20],temp,c,g;
printf ("Dati nr. de multimi intregi:",n);
scanf("%d",&n);
for (i=0;i<n;i++)
{printf("\nValorile %d multimi:\n",i+1);
printf("min:");
scanf("%d",&min[i]);
printf("max:");
scanf("%d",&max[i]);
if (max[i]<min[i]) {printf ("Multime imposibila\n"); i--;}
}
for (i=0;i<n;i++)
{ k=0;
for (j=min[i];j<=max[i];j++)
k++;
s[i]=k;
}
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (s[i]>s[j])
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}

for (c=0;c<n;c++)
{
for (i=0;i<n;i++)
{ k=0;
for (j=min[i];j<=max[i];j++)
k++;
if (s[c]==k)
{printf ("\n");for (g=min[i];g<=max[i];g++)
printf("%d",g);
}
}
}
getch();
return 0; }

10. Fie o matrice d*d. Afalti produsul scalar al primei coloane cu ultima coloana.
#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])


{ int m,i,j, v[50][50],ps=0;
printf("Dati m:");
scanf("%d",&m);
for(i=0;i<m;i++)
for(j=0;j<m;j++)
{ printf("v[%d][%d]=",i,j);
scanf("%d",&v[i][j]); }
printf("Matricea:\n");
for(i=0;i<m;i++)
{ for(j=0;j<m;j++)
printf("%d ",v[i][j]);
printf("\n"); }
for(i=0;i<m;i++)
ps+=v[i][m-1]*v[i][0];
printf("\nProdusul scalar este: %d",ps);
getch();
return 0;
}

11. Fie un vector Q. Aflati cite resturi diferite se vor obtine la impartirea elementelor lui Q la 11.

{int i,n,Q[30],H[30],k,j;
printf("n=");
scanf("%d",&n);
printf("dati elementele vectorului Q:");
for (i=0;i<n;i++)
scanf("%d",&Q[i]);
for (j=0;j<11;j++)
H[j]=0;
for (i=0;i<n;i++)
for (j=1;j<11;j++)
if ((Q[i]%11)==j) H[j]=j;
k=0;
for (j=0;j<11;j++)
if (H[j]>0) k++;
for (i=0;i<n;i++)
if ((Q[i]%11)==0){k++;break;}
printf("k = %d",k);
getch(); return 0; }

12. Fie un cuv. S, adica un sir de caractere. Aflati cite vocale diferite contine cuv S.

int _tmain(int argc, _TCHAR* argv[])


{char s[50], a[50]; int i,m,min,j,k=0,k2;
gets(s);
i=0;
m=0;
while(s[i]!='\0'){
if((s[i]=='a')||(s[i]=='e')||(s[i]=='o')||(s[i]=='i')
||(s[i]=='u')||(s[i]=='A')||(s[i]=='E')||(s[i]=='O')||(s[i]=='I')||(s[i]=='U'))
if(i==0)
{
a[m++]=s[i];
k++;
}
else
{
k2=0;
for(j=0;j<m;j++)
if(s[i]!=a[j])
k2++;
if(k2==m)
{
a[m++]=s[i];
k++;
}
}
i++;
}
printf("Cuvintul are %d vocale diferite ",k);
getch();
return 0;}

13. Fie un cuv. W, adica un sir de caractere. Aflati cite caractere din cuv W au codul divizibil cu 5.

int _tmain(int argc, _TCHAR* argv[])


{char W[50]; int a[50],i,m,k;
gets(W);
i=0;
while(W[i]!='\0'){
a[i]=W[i];
i++;}
m=i-1; k=0;
for (i=0;i<m;i++){printf("%d ",a[i]);
if (a[i]%5==0) k++; }
printf("k = %d",k);
getch();
return 0;
}

14. Folosind pointeri, aflati suma elementelor unui sir numeric.

{int sir[100], n = 0, i;
unsigned long suma = 0;
system ("cls");
printf("Introdu un sir de numere. Cand termini, introdu orice litera.\n");
while(scanf("%d",&sir[n])) n++;
printf("%d numere introduse:\n",n);
for(i=0;i<n;i++) {
printf("%d ",*(sir+i));
suma += *(sir+i);
}
printf("\nSuma elementelor sirului este %lu",suma);
getch();
return 0; }

15.Fie s un nr intreg, 10<s<1000. Aflati ultimile 2 cifre ale sumei 11 + 22 + 33 + … + ss.

{int p(int a, int b);


return ((a%100)*(b%100))%100;
}
int putere_2_cifre(int baza, int exp) {
int temp=1, i=0;
while(i<exp) {
i++;
temp = produs_2_cifre(temp,baza);
}
return temp;}
int r, suma=0, i=0;
int main() {
system ("cls");
printf("Introdu r (10<r<1000): ");
scanf("%d",&r);
while(r<=10||r>=1000) {
printf("r=%d nu este o valoare potrivita. Introdu alt numar: ",r);
scanf("%d",&r);
}
while(i<r) {
i++;
suma += putere_2_cifre(i,i);
if(suma>=100) suma = suma%100;
}
printf("\nultimile 2 cifre sunt %d",suma%100);
getch();
return 0;}

16. Folosind pointeri, aflaţi produsul elementelor impare ale unui şir de numere întregi.
{int sir[100], n = 0, i;
unsigned long produs = 1;
system ("cls");
printf("Introdu un sir de numere. Cand termini, introdu orice litera.\n");
while(scanf("%d",&sir[n])) n++;
printf("%d numere introduse:\n",n);
for(i=0;i<n;i++) {
printf("%d ",*(sir+i));
if(*(sir+i)%2 == 1) produs *= *(sir+i);
}
if(produs == 1) printf("\nSirul nu contine elemente impare");
else printf("\nProdusul elementelor impare este %lu",produs);
getch();
return 0; }
17. Folosind pointeri, determinaţi frecvenţa de apariţie a caracterelor într-un text introdus de la tastatură.

{char s[255],n;
int m=0;
unsigned short i;
int main();
system ("cls");
printf("Introdu sirul:\n");
gets(s);
printf("Introdu caracterul");
scanf("%c",&n);
for(i = 0; i < strlen(s); i ++) {
if(*(s+i)==n) m++; }
printf("\n numarul de aparitii a caracterului %d", m);
getch(); return 0; }

18. Fie un vector p. Aflaţi dacă elementele lui formează o progresie geometrică.
{int p[100],d=1,i=0,j;
system ("cls");
printf("Introduceti un sir numeric: ");
while( scanf("%d",&p[i])==1 ) i++;
for (j=--i; j>1; j--,i--)
{ if ( (p[i]-p[i-1])!=(p[i-1]-p[i-2]) ) d=0;}
printf("\n\nSirul introdus ");
if(!d) printf("nu ");
printf("formeaza o progresie aritmetica.");
getch();
return 0;
}
19. Folosind pointeri, convertiţi un şir de caractere, citit de la tastatură, într-un număr. Nu folosiţi funcţii
de tipul atoi().
{char s[255];
unsigned short max, i;
system ("cls");
printf("Introdu sirul:\n");
gets(s);
for(i = 1; i < strlen(s); i ++) {
printf("%d",(int)*(s+i));}
getch(); return 0; }

20.Fie un vector H. Aflaţi suma resturilor ce se obţin la împărţirea elementelor lui H la 7.


{ int r[200], n=0;
unsigned long suma=0;
system ("cls");
printf("Introdu cel mult 200 de elemente, apoi o litera:\n");
while(scanf("%d",&r[n]) && n<=200) {
if(r[n]%7 != 0) suma += r[n]%7;
n++;
}
printf("Suma este %lu",suma);
getch();
return 0; }

21.Folosind pointeri, aflaţi caracterul de cod minim într-un şir de caractere citit de la tastatură.

{char s[255];
unsigned short min, i;
system ("cls");
printf("Introdu sirul:\n");
gets(s);
min = *s;
for(i = 1; i < strlen(s); i ++) {
if((int)*(s+i)<(int)min) min = *(s+i);
}
printf("\nCaracterul cu cod minim este %c", min);
getch();
return 0; }

22. Folosind pointeri, citiţi un şir de caractere şi aflaţi primul caracter de cod par.

{char s[255],max;
unsigned short i;
system ("cls");
printf("Introdu sirul:\n");
gets(s);
for(i = 0; i < strlen(s); i ++) {
if((int)*(s+i)%2==0) {max = *(s+i);break;}
}
printf("\n primul Caracter cu cod par este %c", max);
getch();
return 0;
}

23. Fie un cuvânt Q, adică un şir de caractere. Aflaţi câte consoane conţine cuvântul Q.
{char s[255], min[26], maj[26];
unsigned short i, n=0;
system ("cls");
printf("Introdu sirul de caractere:\n");
gets(s);
n=strlen(s);
for(i=0;i<strlen(s);i++) {
if(s[i] == 'A' || s[i] == 'E' || s[i] == 'I' || s[i] == 'O' || s[i] == 'U'
|| s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u') n-=1;}
printf("\nSirul introdus contine %d consoane",n);
getch();
return 0; }

24. Folosind pointeri, citiţi un şir de caractere şi permutaţi caracterele de indice par cu cele de indice
impar: c[0] cu c[1], c[2] cu c[3], … .
{ int x[123], i=0, t, z;
system ("cls");
printf("Introdu numerele, dupa care tasteaza un caracter\n");
while(scanf("%d",x+i)) i++;
z=i;
for(i=1; i<z; i+=2) {
t=*(x+i);
*(x+i)=*(x+i-1);
*(x+i-1)=t;
}
printf("Rezultat:\n");
for(i=0; i<z; i++) printf("%d ", *(x+i));
getch();
return 0;
}

25. Fie o matrice n * m de caractere. Aflaţi numărul de caractere ce au codul par.


{char b[20][20],a[100];
int m,n,i,j,max,m1=0,k=0,k2,h;
printf("introdu dimensiunile matricii\n");
printf("numarul de linii= \n");
scanf("%d",&m);
printf("numarul de coloane= \n");
scanf("%d",&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
printf("b[%d][%d]=",i,j);
b[i][j]=getch();
printf("%c\n",b[i][j]);
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%c ",b[i][j]);
printf("\n");
}
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if ((i==0)&&(j==0))
{
if((int)b[i][j]%2==0){
a[m1++]=b[i][j];
k++;
}}
else{
k2=0;
for(h=0;h<m1;h++)
if((int)b[i][j]%2==0)
{
if(b[i][j]!=a[h])
k2++; }
if(k2==m1){
a[m1++]=b[i][j];
k++;} }
printf("\nCaractere cu cod par diferite:%d",k);
getch();
return 0;
}

26. Inversati un sir numeric fara a folosi variabile indexate. Folositi pointeri.
{char s[200], p;
int i=0, j;
system ("cls");
printf("Introdu sirul: ");
gets(s);
while (i<strlen(s)/2) {
j = strlen(s)-i-1;
p = *(s+i);
*(s+i) = *(s+j);
*(s+j) = p;
i++;
}
printf("Sirul e "); puts(s);
getch();
return 0; }

27. Sa se determine numarul de biti


necesari reprezentarii unui numar natural

{int a=1;
system ("cls");
printf("Numarul de biti necesari\nreprezentarii unui numar natural\neste %d",8*sizeof(a));
getch();
return 0;
}

28. Fie r un numar intreg, 10 < r < 1000.


Aflati penultima cifra a sumei
1^1 + 2^2 + 3^3 + ... + r^r.

{int produs_2_cifre(int a, int b);


return ((a%100)*(b%100))%100;
}
int putere_2_cifre(int baza, int exp) {
int temp=1, i=0;
while(i<exp) {
i++;
temp = produs_2_cifre(temp,baza);
}
return temp;
}
int r, suma=0, i=0;
system ("cls");
printf("Introdu r (10<r<1000): ");
scanf("%d",&r);
while(r<=10||r>=1000) {
printf("r=%d nu este o valoare potrivita. Introdu alt numar: ",r);
scanf("%d",&r);
}
while(i<r) {
i++;
suma += putere_2_cifre(i,i);
if(suma>=100) suma = suma%100;
}
printf("\nPenultima cifra este %d",suma/10);
getch();
return 0;
}
29. Folosind pointeri, aflati produsul elementelor pare
ale unui sir de numere intregi.
{int sir[100], n = 0, i;
unsigned long produs = 1;
system ("cls");
printf("Introdu un sir de numere. Cand termini, introdu orice litera.\n");
while(scanf("%d",&sir[n])) n++;
printf("%d numere introduse:\n",n);
for(i=0;i<n;i++) {
printf("%d ",*(sir+i));
if(*(sir+i)%2 == 0) produs *= *(sir+i);
}
if(produs == 1) printf("\nSirul nu contine elemente pare");
else printf("\nProdusul elementelor pare este %lu",produs);
getch();
return 0;}

30. Fie n multimi de numere naturale consecutiveA_1, A_2, A_3, ..., A_n.Aflati intersectia acestor multimi.
{int a[N_MAX][2], n, i, min, max;
system ("cls");
printf("Introdu numarul de multimi (max %d): ",N_MAX);
scanf("%d",&n);
while(n>N_MAX||n<1) {
printf("Valoarea introdusa nu este valida. Introdu alt numar: ");
scanf("%d",&n); }
for(i=0;i<n;i++) {
printf("A_%d incepe de la ",i); scanf("%d",&a[i][0]);
printf(" si se termina cu "); scanf("%d",&a[i][1]); }
system ("cls");
printf("Multimile introduse:\n");
max = a[0][0]; min = a[0][1];
for(i=0;i<n;i++) {
printf("[%4d .. %4d]\n",a[i][0],a[i][1]);
if(a[i][0] > max) max = a[i][0];
if(a[i][1] < min) min = a[i][1]; }
printf("\nIntersectia: ");
if(max > min) printf("multime vida");
else if(max == min) printf("{%d}", max);
else printf("[%4d .. %4d]", max, min);
getch(); return 0; }
31.Fie un cuvant S ce incepe cu o consoanasi contine cel putin o vocala.Aflati care litera din alfabet preceda vocala cu cod
minim din cuvantul dat.

{ char s[255], min='u';


unsigned short i, err=0;
system ("cls");
printf("Introdu sirul de caractere:\n");
gets(s);
for(i=1;i<strlen(s);i++) {
if(s[i] == 'A' || s[i] == 'E' || s[i] == 'I' || s[i] == 'O' || s[i] == 'U'
|| s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u') {
if((int)s[i]<(int)min) min=s[i];
}
else err++;
}
if(err==strlen(s)-1) printf("\nSirul introdus nu corespunde conditiilor problemei\n(nu contine vocale)");
else printf("\nVocala cu cod minim este %c",min);
getch();
return 0;
}

32. Fie o matrice m*m.Aflati produsul scalar al diagonalei principale cu diagonala secundara.

{ int a[99][99], m, i, j;
unsigned long produs = 0;
system ("cls");
printf("Introdu m (0<m<100): ");
scanf("%d",&m);
while(m<=0 || m>99) {
printf("Valoare invalida. Introdu alt numar: ");
scanf("%d",&m);
}
printf("Introdu elementele matricii:\n");
for(i=0;i<m;i++) {
for(j=0;j<m;j++) {
printf("A[%d][%d]=",i,j);
scanf("%d",&a[i][j]);} }
system ("cls");
printf("Matricea introdusa (%d*%d):\n",m,m);
for(i=0;i<m;i++) {
for(j=0;j<m;j++) {
printf("%5d",a[i][j]); }
printf("\n"); }
for(i=0;i<m;i++) {
produs += (a[i][i]*a[i][m-i-1]);
}
printf("\nProdusul scalar este %lu",produs);
getch();
return 0; }

33. Folosind pointeri, scrieti o functie care calculeaza lungimea unui sir de caractere introdus de la tastatura

{char s[200];
unsigned shortlen(char s[200]);
unsigned short i = 0;
while(*(s+i) != NULL) i++;
return i;
system ("cls");
printf("Introdu sirul de caractere:\n");
gets(s);
printf("\nLungimea sirului e %d",len(s));
getch();
return 0;
}

34.Fie x un vector coloana si y un vector linie cu acelasi numar de elemente. Aflati matricea A = x*y.

{int x[100], y[100], n, i, j;


system ("cls");
printf("Introduceti numarul de elemente (va fi comun pentru ambii vectori): ");
scanf("%d",&n);
while(n<1 || n>100) {
printf("Numarul trebuie sa fie pozitiv si sa nu depaseasca valoarea 100. Scrie alt numar: ");
scanf("%d",&n); }
printf("Introdu elementele vectorului-coloana:\n");
for(i=0;i<n;i++) {
printf("x[%d]=",i);
scanf("%d",&x[i]); }
printf("Introdu elementele vectorului-linie:\n");
for(i=0;i<n;i++) {
printf("y[%d]=",i);
scanf("%d",&y[i]); }
system ("cls");
printf("Matricile introduse:\n\n");
printf("x:\n");
for(i=0;i<n;i++) printf("%d ",x[i]);
printf("\ny:\n");
for(i=0;i<n;i++) printf("%d ",y[i]);
printf("\nMatricea rezultata:\n");
for(i=0;i<n;i++) {
for(j=0;j<n;j++) {
printf("%5d",x[i]*y[j]); }
printf("\n"); }
getch();
return 0; }
35.Folosind pointeri, aflati caracterul de cod maxim intr-un sir de caracterecitit de la tastatura.

{char s[255];
unsigned short max, i;
system ("cls");
printf("Introdu sirul:\n");
gets(s);
max = *s;
for(i = 1; i < strlen(s); i ++) {
if((int)*(s+i)>(int)max) max = *(s+i);
}
printf("\nCaracterul cu cod maxim este %c", max);
getch();
return 0;
}

36. Fie un vector R.Aflati suma tuturor elementelor care nu se impart la 3.

{int r[200], n=0;


unsigned long suma=0;
system ("cls");
printf("Introdu cel mult 200 de elemente, apoi o litera:\n");
while(scanf("%d",&r[n]) && n<=200) {
if(r[n]%3 != 0) suma += r[n];
n++;
}
printf("Suma este %lu",suma);
getch();
return 0;
}

Programul citeste numele si prenumele unei persoane ( cu gets() ), apoi afiseaza ( cu putchar() ) initialele respective pe un
rand, fiecare initiala fiind urmata de un punct, executa newline ( cu putchar( '\n' ) ), afiseaza ( cu puts() ) mesajul "Pentru a
continua actionati o tasta oarecare" si asteapta ( cu getch() ) actionarea unei taste.

#include
#include
void main(void)
{ char s[15], n[15];
gets(s);
gets(n);
clrscr();
putchar(s[0]);
putchar('.');
putchar(' ');
putchar(n[0]);
putchar('.');
putchar('\n');
puts("Pentru a continua actionati o tasta oarecare");
getch();
}

Programul afiseaza in zecimal, octal si hexazecimal constanta 12345 definita prin directiva #define.
#include
#include
#define a 12345
void main(void)
{clrscr();
printf("zecimal=%d\n",a);
printf("octal=%o\n",a);
printf("hexazecimal=%0x\n",a);
getch();
}

Programul afiseaza in zecimal, octal si hexazecimal constanta 123456789 definita prin directiva #define.

#include
#include
#define constanta 123456789l
void main(void)
{clrscr();
printf("zecimal=%ld\n",constanta);
printf("octal=%lo\n",constanta);
printf("hexazecimal=%0lx\n",constanta);
getch();
}

Programul citeste ( cu scanf() ) un caracter ASCII si apoi afiseaza ( cu printf() ) caracterul citit si codul lui.

#include
#include
void main(void)
{char a;
scanf("%c",&a);
printf("cod %d",a);
getch();
}

Programul citeste ( cu scanf() ) un numar intreg zecimal format din cel mult patru cifre si apoi afiseaza ( cu printf() ) numarul
citit in zecimal, octal si hexazecimal.

#include
#include
void main(void)
{ int a;
clrscr();
scanf ("%d",&a);
printf("zecimal %d\n",a);
printf("octal %o\n",a);
printf("hexazecimal %0x\n",a);
getch();
}

Programul determina cu operatorul sizeof si afiseaza cata memorie este rezervata pentru fiecare tip de date ( char, signed
char, unsigned char, short, signed short, unsigned short, int, signed int, unsigned int, long int, long signed int, long unsigned
int, float, double, long double ).

void main(void)
{
char c;
signed char sc;
unsigned char uc;
short sh;
signed short ssh;
unsigned short ush;
int i;
signed int si;
unsigned int ui;
long int li;
long signed int lsi;
long unsigned int lui;
float f;
double d;
long double ld;
printf("bytes memorie:\n");
printf("char %d\n", sizeof(c));
printf("signed char %d\n", sizeof(sc));
printf("unsigned char %d\n", sizeof(uc));
printf("short %d\n", sizeof(sh));
printf("signed short %d\n", sizeof(ssh));
printf("unsigned short %d\n", sizeof(ush));
printf("int %d\n", sizeof(i));
printf("signed int %d\n", sizeof(si));
printf("unsigned int %d\n", sizeof(ui));
printf("long int %d\n", sizeof(li));
printf("long signed int %d\n", sizeof(lsi));
printf("long unsigned int %d\n", sizeof(lui));
printf("float %d\n", sizeof(f));
printf("double %d\n", sizeof(d));
printf("long double %d\n", sizeof(ld));
getch();
}
Programul citeste valoarea unui unghi exprimata in grade, minute si secunde prin trei numere intregi g, m, s si afiseaza
valoarea unghiului in radiani si valoarea functiei sinus de unghiul respectiv.
Folositi functia sin( x ).

#include
#include
#include
#define PI 3.14159265358979
void main(void)
{ int g,m,s; double x;
clrscr();
printf("introduceti unghiul in grade\n",g,m,s);
scanf("%d %d %d",&g,&m,&s);
x=PI*(g+m/60+s/3600)/180;
printf("unghiul in radiani %lf\nsinusul unghiului %lf\n",x,sin(x));
getch();
}

Programul citeste un numar intreg nenegativ si apoi afiseaza numarul citit si radacina patrata din el.
Folositi functia sqrt(x).

#include
#include
#include
void main(void)
{unsigned x;
scanf("%u",&x);
printf("%u radical e %f",x,sqrt(x));
getch();
}

Programul citeste doua numere si apoi il afiseaza pe cel mai mare.


Folositi o expresie conditionala.

#include
#include
#include
void main(void)
{int a,b;
clrscr();
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
a=abs(a);
b=abs(b);
printf("modul mai mare %d",a>b?a:b);
getch();
}

PROGRAMARE IN LIMBAJUL C
CULEGERE DE PROBLEME

1. PROGRAME CU DATE NUMERICE (INSTRUCTIUNI SI OPERATII DE I/E)


2. PROGRAME CU VECTORI SI MATRICE
3. DEFINIREA SI UTILIZAREA DE FUNCTII
4. PROGRAME SI FUNCTII CU SIRURI DE CARACTERE
5. PROGRAME SI FUNCTII CU STRUCTURI
6. PROGRAME CU DATE ALOCATE DINAMIC

1. PROGRAME CU DATE NUMERICE


(UTILIZARE INSTRUCTIUNI SI FUNCTII DE I/E)

EXEMPLE DE PROGRAME

Exemple de afisare pe ecran si citire de la tastatura


E1.1 Afisarea unui text constant pe ecran.

#include <stdio.h>
void main () {
printf (" Text afisat pe ecran");
}

E1.2 Afisarea valorilor unor variabile intregi

#include <stdio.h>
void main () {
int a=2, b=-3;
printf ("%d %d \n", a,b);
// printf ("%i %i \n",a,b); // %i este identic cu %d
}

E1.3 Afisare text constant si valori variabile intregi

#include <stdio.h>
void main () {
int a=2, b=-3;
printf ("a= %d, b= %d \n", a,b);
}

E1.4 Citire si afisare numar intreg

#include <stdio.h>
void main () {
int n;
printf ("n= ");
scanf ("%d", &n);
printf ("s-a citit %d ", n);
}

E1.5 Citire si afisare numer intreg lung


#include <stdio.h>
void main () {
long a;
scanf ("%ld", &a);
printf ("s-a citit %ld ", a);
}

E1.6 Citire si afisare numar real

#include <stdio.h>
void main () {
float x;
printf ("x= ");
scanf ("%f", &x);
printf ("s-a citit %f ", x);
}

E1.7 Afisare rezultat functie de tip "double"

#include <stdio.h>
#include <math.h>
void main () {
printf (" sqrt(2)=%lf", sqrt(2));
}

E1.8 Afisare rezultat functie, dupa conversie la intreg.

#include <stdio.h>
#include <math.h>
void main () {
printf (" sqrt(25)=%d", (int) sqrt(25));
}

E1.9 Afisare cu o precizie dorita

#include <stdio.h>
#include <math.h>
void main () {
printf ("%6.0f", sqrt(25));
}

E1.10 Afisarea unor numere pe coloane de dimensiuni egale

#include <stdio.h>
void main () {
int a,b,c;
scanf ("%d%d%d",&a,&b,&c);
printf ("%6d%6d%6d \n",a,b,c);
}

E1.11 Afisare numere reale foarte mari sau foarte mici (cu exponent)

#include <stdio.h>
#include <math.h>
void main () {
double x,y ;
x=exp(20);
y=pow(10,10);
printf ("%e %e \n",x,y);
}

Exemple cu expresii si instructiuni de atribuire

E1.12 Calcul arie triunghi cu laturi date

#include <stdio.h>
#include <math.h>
void main () {
float a,b,c,p,s;
printf("Lungimi laturi:");
scanf ("%f%f%f",&a,&b,&c);
p=(a+b+c)/2;
s=sqrt(p*(p-a)*p-b)*(p-c));
printf ("%.2f \n", s); // cu 2 zecimale dupa virgula
}

E1.13 Calculul unghiuri dintr-un triunghi (in radiani)

#include <stdio.h>
#include <math.h>
void main () {
float a,b,c,ua,ub,uc;
printf("Lungimi laturi:");
scanf ("%f%f%f",&a,&b,&c);
ua = acos ( (b*b+c*c-a*a)/(2*b*c) );
ub = acos ( (a*a+c*c-b*b)/(2*a*c) );
uc = acos ( (b*b+a*a-c*c)/(2*a*b) );
printf ("%6.2f \n",ua+ub+uc); // PI=3.14
}

E1.14 Calcul lungime si panta segment dintre doua puncte date

#include <stdio.h>
#include <math.h>
#include <values.h>
void main () {
float x1,y1,x2,y2, d,u;
printf ("x1,y1: "); scanf("%f%f",&x1,&y1);
printf ("x2,y2: "); scanf("%f%f",&x2,&y2);
d= sqrt ( (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) );
if ( x2 != x1)
u = atan ((y2-y1)/(x2-x1));
else
u= MAXFLOAT; // verticala (panta infinita)
printf ("%e %e \n", d,u);
}
E1.15 Afisare cat si rest impartire intreaga numere cu semn.

#include <stdio.h>
void main () {
int a=7,b=2;
printf ("a=%d b= %d c=%d r=%d \n", a, b, a/b, a%b); // c=3 r=1
printf ("a=%d b= %d c=%d r=%d \n", -a, b, -a/b, -a%b); // c=-3 r=-1
printf ("a=%d b= %d c=%d r=%d \n", a, -b, a/-b, a%-b); // c=-3 r=1
printf ("a=%d b= %d c=%d r=%d \n", -a, -b, -a/-b, -a%-b); //c=3 r=-1
}

Exemple cu instructiuni "if" si "switch"

Directiva "include <stdio.h>" si altele necesare nu mai apar in toate


exemplele, dar trebuie adaugate pentru compilarea corecta a programelor.

E1.16 Verifica daca un caracter dat este o litera ( fie mare, fie mica)

void main ()
char ch;
ch= getchar();
if ( ch >='a' && ch <='z' || ch >='A' && ch <='Z' )
printf ("este litera \n");
else
printf (" nu este litera \n");
}

E1.17 Determinare maxim dintre trei numere intregi

void main () {
int a,b,c,max;
scanf ("%d%d%d",&a,&b,&c);
max=a;
if (max < b)
max=b;
if (max < c)
max=c;
printf("maxim este %d\n", max);
}

E1.18 Determinare tip triunghi cu laturi date

void main () {
int a,b,c;
printf ("laturi triunghi: ");
scanf("%i%i%i",&a,&b,&c);
if (a<b+c && b<a+c && c<a+b)
if (a==b && b==c)
printf ("echilateral \n");
else
if (a==b || a==c || b==c)
printf ("isoscel \n");
else
printf("oarecare \n");
else
printf ("imposibil \n");
}

E1.19 Verifica existenta unui fisier inainte de creare fisier

// verifica existenta fisier inainte de crearea lui


#include <stdio.h>
void main () {
FILE *f; char numef[100]; // nume fisier
char rasp; // raspuns la intrebare
puts (" Creare fisier nou ");
puts("Nume fisier:"); gets(numef);
f = fopen(numef,"r"); // cauta fisier (prin deschidere in citire)
if ( f ) { // daca exista fisier cu acest nume
printf ("Fisierul exista deja! Se sterge ? (d/n) ");
rasp= getchar(); // citeste raspuns
if ( rasp =='n' || rasp =='N')
return; // terminare program
}
f=fopen(numef,"w"); // deschide fisier ptr creare
fputs (numef,f); // scrie in fisier chiar numele sau
fclose(f);
}

E1.20 Determinare numar de zile dintr-o luna

void main () {
int zile, luna, an;
printf ("an:"); scanf("%d",&an);
printf("nr.luna (1-12): ");
scanf("%d",&luna);
switch (luna) {
case 2: if (an%4) zile=28;
else zile=29;
break;
case 4: case 6: case 9: case 11: zile=30; break;
default: zile=31; break;
}
printf ("luna %d are %d zile \n",luna,zile);
}

Exemple cu instructiuni "for", "while", "do"

E1.21 Citirea unui sir de numere, dupa citirea lungimii sirului.

#include <stdio.h>
#include <values.h>
// afisare valoare maxima dintr-un sir
void main () {
int n,i, a,amax;
printf("n="); scanf("%d",&n);
amax=-MAXINT; // cel mai mic intreg
for (i=0;i<n;i++) {
scanf("%d",&a);
if (amax < a)
amax=a;
}
printf("%d\n",amax);
}

E1.22 Citirea unui sir de numere terminat cu caracterul "End of File"


recunoscut de sistem ( Ctrl-Z in DOS si Windows).

#include <stdio.h>
// suma valorilor dintr-un sir de numere
void main () {
float a,sum;
sum=0;
while ( scanf("%f",&a) != EOF)
sum=sum+a;
printf("%f \n",sum);
}

E1.23 Citirea mai multor siruri de numere terminate fiecare cu un zero.


Sfarsitul datelor este marcat tot cu zero. Exemplu:
123045078900

#include <stdio.h>
// sume valori din mai multe siruri terminate cu zero
void main () {
float a,sum,m;
do {
m=sum=0; // m=lungime sir, sum = suma sir
do {
scanf("%f",&a); // un numar a dintr-un sir
if (a==0) break;
sum=sum+a; m++; // aduna a la suma si numara
} while (a);
if (m) // daca sir de lungime nenula
printf("%f \n",sum);
} while (m);
}

Obs. Situatia de mai sus apare la verificarea unor programe cu mai multe
seturi de date (memorate probabil intr-un fisier), printr-o singura rulare
a fiecarui program.

E1.24 Afisarea unui numar intreg fara semn in binar folosind extragerea
selectiva de biti cu o masca ce contine un singur bit 1.

void main () {
int n; // un intreg
printf("n= "); scanf("%d",&n);
unsigned int mask = 1<<15; // bitul 15 =1, ceilalti zero (128)
while (mask) {
printf ("%d", (mask & d) ? 1: 0);
mask >>= 1; // deplasare masca la dreapta cu un bit
}
printf("\n");
}

E1.25 Determina cel mai mare divizor comun a doi intregi (ineficient).

void main () {
int a,b,d;
printf ("a,b: "); scanf("%d%d",&a,&b);
d= a< b ? a : b; // d= minim(a,b);
while ( a%d || b%d ) // cat timp d nu este divizor comun
d=d-1;
printf ("cmmdc=%d\n",d);
}

E1.26 Determina cel mai mare divizor comun a doi intregi (alg. lui Euclid).
void main () {
int a,b,r;
printf ("a,b: "); scanf("%d%d",&a,&b);
while (r = a%b) {
a=b; b=r;
}
printf ("cmmdc= %d\n", b);
}

E1.27 Varianta cu "do-while" pentru algoritmul lui Euclid

void main () {
int a,b,r;
printf ("a,b: "); scanf("%d%d",&a,&b);
if ( a%b==0) {
printf ("%d \n",b);
return;
}
do {
r=a%b;
a=b; b=r;
} while (r);
printf("%d \n",a);
}

E1.28 Ciclu in ciclu. Numararea numerelor prime mai mici ca un intreg dat n.

#include <stdio.h>
main () {
int n,m,d,np ;
printf ("n= "); scanf ("%d",&n);
if (n < 4) {
printf ("%d\n",n); // primele 3 numere prime
return;
}
np=3; // vor fi cel putin 3 numere prime
for (m=5;m<=n;m=m+2) { // incearca numerele impare m
for (d=3;d<m;d=d+2) // cu toti divizorii posibili d
if (m % d ==0)
break;
if (d>=m) // daca m este prim
np++; // contor de numere prime
}
printf ("%d\n",np);
}

E1.29 Suma unei serii definite printr-o relatie de recurenta intre termeni.

// suma seriei Taylor pentru e^x cu precizie maxima permisa de "float"


void main () {
float x,y,t; int k;
scanf ("%f",&x);
y=0; // suma seriei
t=1; k=1; // t = termen curent
while ( t > 0) { // termenii scad cand creste k
y=y+t; // aduna termen la suma
t=t*x/k; // calcul termen urmator
k++; // rang termen
}
printf ("%15.6f %15.6f \n",y, exp(x));
}

// varianta cu instructiunea "for"


void main () {
float x,y,t; int k;
scanf ("%f",&x);
y=0; // suma seriei
for (k=1,t=1; t> 0; k++) {
y=y+t; // aduna termen la suma
t=t*x/k; // calcul termen urmator
}
printf ("%15.6f %15.6f \n",y, exp(x));
}

E1.30 Program care afiseaza un meniu de optiuni si trateaza fiecare optiune

#include <stdio.h>
#include <conio.h>
void main () {
int a,b;
char opt; // cod optiune (un caracter)
do {
// afisare meniu
clrscr(); // sterge ecran
printf ("\n\t A = Adunare \n\t S = Scadere \n\t M = inmultire");
printf("\n\t D = Impartire \n\t \n\t X = Iesire \n\n");
printf ("\t Optiune: ");
// citire si tratare optiune
fflush(stdin); opt=getchar();
if (opt=='x' || opt=='X') return;
printf ("\n\t Doi intregi: "); scanf("%d%d",&a,&b);
printf("\n\t Rezultat=");
switch (opt) {
case 'a': case 'A': printf (" %d", a+b); break;
case 's': case 'S': printf (" %d", a-b); break;
case 'm': case 'M': printf (" %d", a*b); break;
case 'd': case 'D': printf (" %d", a/b); break;
}
fflush(stdin); getchar();
} while (1);
}

E1.31 Afisarea in hexazecimal a octetilor din mai multe numere de tip "float"

void main () {
float f;
char *p; int i;
// afisare octeti in hexa (float)
for ( f=0; f<10;f=f+0.5) {
printf ("%6.2f\t",f); // afisare numar
p=(char*) &f; // adresa primului octet
for (i=0;i<sizeof(f);i++) // afisare octeti
printf("%02x ", *p++); // pe cate 2 cifre hexa, cu spatii intre ei
printf("\n");
}
}

PROBLEME PROPUSE

P1.1 Program care citeste coordonatele (x,y) ale unui punct din plan si
afiseaza numarul cadranului in care se afla (1,2,3,4). Se vor verifica
succesiv semnele valorilor x si y. S-ar putea folosi instructiunea "switch"?

P1.2 Program pentru calculul sumei a doua intervale de timp exprimate


in ore, minute si secunde, cu si fara instructiunea 'if'. (rezultatul este
exprimat tot in ore, minute, secunde). Exemplu :
h1:m1:s1 = 02:49:48 ; h2:m2:s2 = 10:17:35
rezultat = 13:07:23

P1.3 Program pentru calculul timpului scurs intre doua momente de timp
exprimate in ore, minute si secunde (cu si fara "if"). Exemplu :
h1:m1:s1 = 13:07:23 ; h2:m2:s2 = 02:49:48
rezultat = 10:17:35

P1.4 Program pentru determinarea celui mai mare intreg pentru care se mai
poate calcula corect factorialul sau, succesiv pentru tipurile "int",
"long", "float" si "double".
Indicatie: Se compara k!/k cu (k-1)! si daca difera se afiseaza k.

P1.5 Program care aduna valoarea x de n ori, ca "float" si ca "double", si


afiseaza sumele sx si sy. sx este de tip "float",iar sy de tip "double".
Se vor lua pe rƒnd :
x=0.1 n=100
x=0.01 n=1000
x=0.001 n=10000
Se vor afisa sumele partiale la fiecare n/10 termeni adunati, cu pauza
dupa fiecare 10 linii afisate ( pauza realizata cu functia "getchar").

P1.6 Program pentru calculul combinarilor de n luate cite m , pentru n=10


si m intre 1 si 10, prin doua metode :
(a) Folosind relatia de recurenta:
C(n,k) = C(n,k-1) * (n-k+1)/k ptr. k=1,m si C(n,0)=1
(b) Folosind relatia de calcul:
C(n,m) = n!/ (m!*(n-m)!)

P1.7 Program pentru afisarea echivalentului binar al unui numar natural


(intreg cu semn) dat. Exemple: 11=1011, 25 =1001, 23= 10111.
Algoritm: Se repeta impartirea la puteri descrescatoare ale lui 2, iar
caturile sunt cifrele binare. Restul impartirii devine noul deimpartit.
Varianta: se foloseste o masca binara cu un singur bit 1 (deplasat mereu
la dreapta), cu care se extrag biti succesivi din numar.

P1.8 Program pentru calculul si afisarea radacinii patrate a unor numere


folosind urmatoarea relatie de recurenta intre doua aproximatii succesive
r1 si r2 ale radacinii lui x : r2 = ( r1 + x/r1)/2 .
Aproximatia initiala r1 poate fi orice valoare ( se va lua r1=x/2).
Relatia de recurenta se aplica atata timp cat r1 este diferit de r2.
Se va afisa pentru verificare si rezultatul functiei sqrt(x), pentru
primele 20 de numere pare.

P1.9 Program pentru afisarea tuturor numerelor naturale de 2 cifre care


au cel putin 7 divizori nebanali (altii decit 1 si numarul respectiv).

P1.10 Program pentru afisarea numarului maxim de divizori ai unui numar


natural de n cifre ( n<=5 sau n<=10). Se va completa programul cu afisarea
celui mai mare (celui mai mic) numar cu numar maxim de divizori.

P1.11 Program pentru afisarea tuturor descompunerilor unui numar natural


dat prin sume de numere naturale consecutive. Exemplu:
15 = 1+2+3+4+5 = 4+5+6 = 7+ 8

P1.12 Program pentru afisarea numerelor perfecte mai mici ca o valoare data.
(Un numar perfect este un numar egal cu suma tuturor divizorilor sai).

P1.13 Program care calculeaza valoarea functiilor sin(x) si cos(x) ca suma a


seriei de puteri si afisare alaturi de rezultatul functiilor de biblioteca.
sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ...
cos(x) = 1 - x^2/2! + x^4/4! - x^6/6! + ...
Se vor insuma toti termenii mai mari ca zero in valoare absoluta.
Observati ce se afiseaza pentru valori mari ale lui x si de ce este necesara
reducerea unghiului x la o valoare mai mica ca 2*PI.

P1.14 Program care determina numarul de zerouri cu care se termina


produsul a n numere naturale date (fara a efectua produsul si fara vectori).
Indicatie: Numarul de zerouri terminale este dat de numarul produselor 2*5
din produsul celor n numere, deci de minimul dintre numarul de cifre 2 si
numarul de cifre 5 care apar in produs. Se vor aduna puterile lui 2 si lui 5
din fiecare numar dat si se determina minimul dintre ele.
Exemplu: n=3, a=15, b=12, c=25
nr cifre 2 = 0 + 2 + 0 = 2
nr cifre 5 = 1 + 0 + 2 = 3
min (2,3)=2 deci produsul a*b*c are 2 zerouri la sfirsit (este 4500)

P1.15 Program pentru descompunerea unui numar natural dat in factori primi.
Se vor afisa factorii primi si puterile (exponentii) lor.
Exemplu: 60 = 2^2 * 3 ^1 * 5^1

SOLUTII LA PROBLEME PROPUSE

// R1.1
// afisare pozitie punct fata de cele 4 cadrane
#include <stdio.h>
void main () {
float x,y;
printf("x,y : "); scanf("%f%f",&x,&y);
if (x==0 && y==0)
printf("In origine (0,0) \n");
else
if (x==0 || y==0)
printf("Pe una din axe \n");
else
if (x > 0 )
if (y > 0)
printf ("Cadranul I \n");
else
printf ("Cadranul IV \n");
else
if (y > 0)
printf ("Cadranul II \n");
else
printf ("Cadranul III \n");
}

// R1.2
void main () {
int h1,m1,s1, h2,m2,s2, h,m,s;
printf("timp1="); scanf("%d%d%d",&h1,&m1,&s1);
printf("timp2="); scanf("%d%d%d",&h2,&m2,&s2);
// adunare timpi (cu if)
s=s1+s2; m=h=0;
if (s >=60) {
s=s-60; m=1;
}
m=m1+m2+m;
if (m >=60) {
m=m-60; h=1;
}
h=h1+h2+h;

// afisare rezultat
printf ("%02d:%02d:%02d \n",h,m,s);
}

// R1.3

void main () {
int h1,m1,s1, h2,m2,s2, h,m,s;
long t1,t2,t; int r;
printf("timp1="); scanf("%d%d%d",&h1,&m1,&s1);
printf("timp2="); scanf("%d%d%d",&h2,&m2,&s2);
// scadere timpi (fara if)
t1= 3600L*h1 + 60*m1 + s1;
t2= 3600L*h2 + 60*m2 + s2;
t=t1-t2;
h= t/3600;
r=t%3600;
m=r/60;
s=r%60;
printf ("%02d:%02d:%02d \n",h,m,s);
}

// R1.4
// cel mai mare numar k pentru care se poate calcula k!
#include <stdio.h>
void main () {
int k;
double kf2,kf1=1; // sau: int, long, float
for (k=1;k<30;k++) {
kf2=kf1*k;
if (kf2/k !=kf1) {
printf ("%d ",k);
break;
}
else
kf1=kf2;
}
}

// R1.5
// erori la calcule cu numere reale
#include <stdio.h>
void main () {
float x, sx; double sy;
int i,k, n=100;
x=0.1;
for (k=0;k<3;k++) { // pentru 0.1, 0.01 si 0.001
sx=sy=0.;
for (i=1;i<=n;i++){
sx=sx+x;
sy=sy+(double)x;
if ( i % (n/10) ==0)
printf ("%f %lf \n", sx, sy);
}
n=n*10; x=x/10;
getchar();
}
}

// R1.6
// calcul combinari prin doua metode
#include <stdio.h>
void main () {
int k,n,m, c1, c2; long f1,f2,f3;
n=10;
for (f1=1,k=1;k<=n;k++)
f1=f1*k; // f1 = n!
for (m=1;m<=10;m++) {
// c1 prin metoda (a)
c1=1;
for (k=1;k<=m;k++)
c1=c1*(n-k+1)/k;
// c2 prin metoda (b)
for (f2=1,k=1;k<=m;k++)
f2=f2*k; // f2= m!
for (f3=1,k=1;k<=n-m;k++)
f3=f3*k; // f3 = (n-m)!
c2=f1/(f2*f3);
printf("%4d %8d %8d \n", m,c1,c2);
}
}

// R1.7
// cifrele binare sunt caturi ale impartirii prin puteri ale lui 2
void main () {
int n,d=1;
printf ("\n n= "); scanf("%i",&n);
while ( d <= n) // d = puterea lui 2 imediat inferioara lui n
d=d*2;
d=d/2;
while ( d>=1) {
printf ("%i", n/d); // catul este cifra binara
n=n%d; d=d/2; // continua cu restul impartirii
}
}

// afisare intreg in binar, cu extragere de biti succesivi


void main () {
int n;
printf ("\n n= "); scanf("%i",&n);
unsigned int mask = 1<<15; // bitul 14 =1, ceilalti zero
while (mask) {
printf ("%c", (mask & n) ? '1': '0');
mask >>= 1; // deplasare masca la dreapta cu un bit
}
}
// R1.8
// calcul radacina patrata prin aproximatii succesive
#include <stdio.h>
#include <math.h>
void main () {
float x, r1,r2;
for (x=2;x<41;x=x+2) { // ptr 20 de numere pare
r2=x/2.; // aproximatie initiala
do {
r1=r2; // aprox. noua r2 devine aprox. veche r1
r2= (r1+x/r1)/2.; // se calc. o noua aproximatie r2
} while ( r1 != r2); // cat timp difera la primele 6 zecimale
printf ("%f %f %f \n",x, r2, sqrt(x));
}
}

// R1.9
// numere de 2 cifre cu peste 6 divizori
void main () {
int nr,k,i,m;
nr=99;
printf ("\n");
// calcul numar de divizori
for (k=nr;k>=10;k--) { // incearca numere de 2 cifre k
m=0; // m=nr divizori ai lui k
for (i=2;i<k;i++)
if ( k % i == 0)
++m;
if ( m >= 7)
printf ("%d ",k);
}
}

// R1.10
// nr maxim de divizori ptr un numar de n cifre
void main () {
long n,n1,n2,m,max,k,i,nr1,nr2;
printf ("n= "); scanf ("%ld",&n);
n1=pow(10,n)-1; // nr maxim de n cifre
n2=pow(10,n-1); // nr minim de n cifre
max=1; // nr maxim divizori
for (k=n1;k>=n2;k--) { // ptr fiecare numar de n cifre
m=0; // nr divizori ai lui k
for (i=2;i<=k/2;i++) // incearca toti divizorii posibili
if ( k % i == 0)
++m; // m este nr de divizori ai lui k
if (m==max)
nr1=k; // nr1 este cel mai mic numar gasit
if ( max < m) {
max=m; nr2=k; // nr2 este cel mai mare numar gasit
}

}
printf ("%ld si %ld au %ld divizori \n", nr1, nr2, max);
}

// R1.11
// toate secventele de numere naturale consecutive
// a caror suma este egala cu n
main () {
int n,k,i,j,l,s;
printf("n= "); scanf ("%d",&n);
k= n/2+1; // pentru a nu se repeta secvente

for (i=1;i<k;i++) {
s=i; // inceput posibil de secventa
for (j=i+1;j<=k; j++) { // j = numere din secventa
s=s+j; // suma numerelor din secventa
if (s>=n)
break;
}
/* afisare numere Œntre i si j */
if (s==n) {
for (l=i;l<=j;l++)
printf ("%d ",l);
printf ("\n");
}
}
}

// R1.12
/* numere perfecte */
void main () {
int n,m,s,d ;
printf("n="); scanf("%d",&n);
for (m=2; m<=n ;m++) {
s=0;
for (d=1; d<m ; d++) {
if ( m % d==0)
s=s+d;
}
if (m==s)
printf ("\n %d", m);
}
}

// R1.13
// suma seriei Taylor pentru sin(x) si cos(x) cu precizie maxima
void main () {
float x,sx,cx,ts,tc; int k;
scanf ("%f",&x);
sx=cx=0; ts=x; tc=1; // ts, tc = termeni din seriile sin si cos
for (k=1; fabs(ts) > 0; k++) {
sx=sx+ts; // sx = suma seriei sinus
cx=cx+tc; // cx = suma seriei cosin
ts=-ts*x*x/(2*k*(2*k+1)); // termen urmator din seria sin
tc=-tc*x*x/(2*k*(2*k-1)); // termen urmator din seria cos
}
printf ("%15.6f %15.6f \n",sx, sin(x));
printf ("%15.6f %15.6f \n",cx, cos(x));
}

// R1.14
// Determina numarul de zerouri cu care se termina produsul
// a n numere naturale date (fara efectuare produs)
#include <stdio.h>
void main () {
int n,a,b,n2,n5,i ;
n2=n5=0; // numar de cifre 2 si 5 in produs
scanf ("%d",&n); // cite numere se citesc
for (i=0;i<n;i++) {
scanf ("%d",&a); // un numar natural
b=a;
while ( b%2==0) {
n2++; b=b/2;
}
while ( a%5 ==0) {
n5++; a=a/5;
}
}
if ( n2<n5)
printf ("%d\n",n2);
else
printf ("%d\n",n5);
}

// R1.15
/* descompunere in factori primi */
#include <stdio.h>
main () {
int n,m,k,p ;
printf ("n= "); scanf ("%d",&n);
m=n;
for (k=2; k<=n && m>1; k++) {
p=0; // putere a factorului k
while (m%k ==0) { // cat timp m se imparte prin k
p++; m=m/k; // numara impartiri si reduce pe m
}
if (p > 0) // daca m s-a impartit exact prin k
printf ("%d^%d*",k,p); // k este un factor prim, p este puterea sa
}
printf ("\b\n");
}

2. PROGRAME CU VECTORI SI MATRICE

EXEMPLE DE PROGRAME

E2.1 Citire-scriere vector cu numerotare componente de la zero

// Citirea si afisarea unui vector de numere intregi


#include <stdio.h>
void main () {
int a[100],n,i;
printf("n="); scanf("%d",&n); // dimensiune vector
printf ("%d numere intregi:\n",n);
// citire vector
for (i=0;i<n;i++)
scanf("%d",&a[i]);
// afisare vector
for (i=0;i<n;i++)
printf ("%d ",a[i]);
printf("\n");
}

E2.2 Vectori cu numerotare de la 1 a elementelor

// Citirea coordonatelor a n puncte din plan


// (x[1],y[1]),...(x[n],y[n])
#define M 100 // nr maxim de puncte
void main() {
float x[M+1],y[M+1]; // max 100 de puncte
int n,k;
printf("nr.puncte:"); scanf("%d",&n);
printf ("Coordonate puncte: \n");
for (i=1;i<=n;i++)
scanf ("%f%f",&x[i],&y[i]);
...
}

E2.3 Initializare partiala vector

// Generare vector cu primele n numere Fibonacci


#include <stdio.h>
void main () {

long fib[100]={1,1}; // celelalte elemente sunt zero


int n,i;
printf ("n="); scanf("%d",&n);
for (i=2; i<=n && fib[i]>0 ;i++)
fib[i]=fib[i-1]+fib[i-2];
for (i=0; i<=n;i++)
printf ("%ld ",fib[i]);
}

E2.4 Cautare secventiala intr-un vector (prima si ultima aparitie a


numarului cautat).

# include <stdio.h>
void main () {
int a[] ={ 3,5,2,6,8,1,7,4,2,4,5,3} ; // un sir de intregi
int n,i,i1,i2, b; // b= valoare cautata
// repeta citire b si cautare in a
n=sizeof(a)/sizeof(a[0]); //lungime vector initializat
while ( scanf("%d",&b) ==1) {
// cauta prima aparitie
i1=-1;
for (i=0; i<n && a[i] != b ;i++)
;
if (i<n)
i1=i;
// cauta ultima aparitie
i2=-1;
for (i=n-1; i>=0 && b!=a[i];i--)
;
if (i>=0)
i2=i;
// scrie rezultate
if ( i1<0 || i2<0)
printf ("%d negasit \n",b);
else
printf ("prima= %d, ultima=%d \n", i1,i2);
}
}

Obs. In expresia (i<n && b!=a[i]) ordinea celor 2 conditii este esentiala !

E2.5 Declarare si utilizare matrice

// Generare matrice unitate


#define M 20 // nr maxim de linii si de coloane
void main () {
float unit[M][M];
int i,j,n;
printf("nr.linii/coloane: "); scanf("%d",&n);
if (n > M) return;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (i !=j )
unit[i][j]=1;
else
unit[i][j]=0;
...
}

E2.6 Initializare matrice cu zerouri


// Generare matrice unitate
#define M 20 // nr maxim de linii si de coloane
void main () {
float u[M][M]={0};
int i,j,n;
printf("nr.linii/coloane: "); scanf("%d",&n);
for (i=0;i<n;i++)
u[i][i]=1;
...
}

E2.7 Citire-scriere matrice de reali

void main () {
int nl,nc,i,j; float a[20][20];
// citire matrice
printf("nr.linii: "); scanf("%d",&nl);
printf("nr.coloane: "); scanf("%d",&nc);
if (nl >20 || nc >20) {
printf("Eroare: dimensiuni > 20 \n"); return;
}
for (i=0;i<nl;i++)
for (j=0;j<nc;j++)
scnaf ("%f", &a[i][j]);
// afisare matrice
for (i=0;i<nl;i++) {
for (j=0;j<nc;j++)
printf ("%f ",a[i][j]);
printf ("\n");
}
}
PROBLEME PROPUSE

P2.1 Program care citeste un sir de note si calculeaza media notelor de


trecere ( >= 5) si ponderea notelor sub 5 in totalul notelor (procentual).

P2.2 Program care citeste un sir de note (intre 0 si 10) si calculeaza


procentul de note din fiecare valoare posibila ( se afiseaza 10 procente
a caror suma este 100).

P2.3 Program care citeste n numere reale X si m+1 numere intregi A si


afiseaza numarul de valori X situat in fiecare din cele m intervale
delimitate de valorile din A. Se verifica daca valorile A sunt introduse
in ordine crescatoare si in caz contrar programul se opreste.

P2.4 Program care citeste doi vectori neordonati de numere distincte si


verifica daca ei contin aceleasi numere, indiferent de ordine (fara
ordonarea lor). Se poate folosi programul scris si pentru vectori cu
elemente repetate diferit in cei doi vectori ? (Ex: {2,1,2,3}, {3,2,1,3})

P2.5 Program pentru interclasarea a doi vectori ordonati intr-un singur


vector ordonat, care se va afisa.
Exemplu de date : a={2,4,6,7}, b={1,3,9,11};
Rezultat: 1,2,3,4,6,7,9,11

P2.6 Program pentru citirea unui vector de intregi si extragerea


elementelor distincte intr-un al doilea vector, care se va afisa.

P2.7 Program pentru ordonarea unui vector de numere intregi prin metoda
bulelor: se compara elemente vecine din vector (a[i] si a[i+1] ) si, daca
este necesar, se schimba intre ele pentru ca a[i] <= a[i+1]. In general
sunt necesare mai multe treceri prin vector pentru ordonarea sa. Variante:
(a) Numarul de treceri este egal cu dimensiune vector minus 1.
(b) Se fac atatea treceri cate sunt necesare pentru ordonarea vectorului
(se memoreaza daca au fost necesare schimbari de elemente in vector si se
opreste repetarea cand nu a mai fost necesara nici o schimbare).
(c) O trecere prin vector se face de la prima la ultima pereche
(d) O trecere prin vector se face de la ultima pereche catre prima pereche

P2.8 Program de sortare prin selectie: se compara fiecare element cu


toate elementele urmatoare si se fac schimbarile necesare. Se repeta acest
proces pentru un numar de elemente care scade progresiv. In aceasta varianta
se aduce minimul in prima pozitie din (sub)vector si se mareste indicele
primului element la trecerea urmatoare.

P2.9 Program de sortare prin selectie: se compara fiecare element (pornind


cu ultimul) cu toate elementele precedente si se fac schimbarile necesare.
Se repeta acest proces pentru un numar de elemente care scade progresiv.
In aceasta varianta se aduce maximul in ultima pozitie din (sub)vector si
se scade indicele ultimului element la trecerea urmatoare.

P2.10 Program de sortare prin numarare : se compara fiecare element cu


toate celelalte din vector si se creeaza un vector auxiliar care contine
in pozitia k numarul elemente din vectorul a mai mici decat a[k].

P2.11 Program pentru calculul valorii unui polinom cu coeficienti dati, prin
mai multe metode cu urmatoarea numerotare a coeficientilor:
P(x) = c[0]*x^n + c[1]*x^(n-1) + ... + c[n-1]*x + c[n]
Datele initiale : x, n, c[0],..c[n]
(a) Ca suma de termeni calculati separat (cu functia "pow")
(b) Ca suma de termeni calculati unul din altul (fara ridicare la putere)
(c) Printr-o relatie de recurenta de forma P(x,k)=P(x,k-1)*x + c[k] si
P(x,0)=c[0].

P2.12 Program care calculeaza valoarea polinomului de interpolare Newton


cu coeficienti dati, ptr o valoare data xx :
P(xx) = c[0] + c[1]*(xx-x[1]) + c[2]*(xx-x[1])*(xx-x[2]) + ...
+ c[n]*(xx-x[1])*(xx-x[2])* ... *(xx-x[n])
Date: n, xx, Vectorul c, Vectorul x,
Obs. Produsele din fiecare termen se pot calcula unele din altele.

P2.13 Program pentru calculul normei pe linii a unei matrice de numere


reale. Norma este valoarea maxima dintre sumele valorilor absolute ale
elementelor din fiecare linie.
P2.14 Program pentru determinarea valorii minime dintre toate valorile
maxime pe liniile unei matrice de numere reale (punct in "sa").

P2.15 Program pentru afisarea celei mai lungi secvente ordonate de elemente
consecutive dintr-un vector dat. Exemplu de date: 5 3 6 2 4 6 8 4 1
Rezultat: 2 4 6 8
Sa se verifice programul si pentru un vector ordonat descrescator.

P2.16 Un graf (orientat sau neorientat) este reprezentat printr-o matrice


de adiacente "a", in care a[i][j]=1 daca exista muchie (arc) de la nodul
"i" la nodul "j" si a[i][j]=0 daca nu exista arcul (i,j). Program pentru
citirea numarului de varfuri dintr-un graf neorientat si listei de muchii
si afisarea varfului cu numar maxim de vecini (de arce incidente).

P2.17 Un graf orientat poate fi reprezentat prin doi vectori de noduri


" v" si "w", in care v[k]=i si w[k]=j daca exista muchie (arc) de la nodul
"i" la nodul "j". Program pentru citirea numarului de noduri din graf si
listei de arce si afisarea succesorilor si predecesorilor fiecarui nod.
Exemplu de date : 1 3 / 1 4 / 2 4 / 3 2 / 4 3 / 4 1 /
Liste de succesori: 1: 3,4 / 2: 4 / 3: 2 / 4: 3,1
Liste de predecesori: 1: 4 / 2: 3 / 3: 1,4 / 4: 1,2

P2.18 Program care citeste mai multe relatii de echivalenta intre


perechi de numere intregi si afiseaza clasele de echivalenta ce se pot
forma cu toate numerele citite. Exemplu de date:
36/57/25/13/16/48
Clasele de echivalenta sunt: {1,3,6}, {2,5,7}, {4,8}
Se va folosi o matrice patratica cu atatea linii si coloane cate numere
sunt in total. O linie corespunde unei clase de echivalente. Exemplu:
1 2 3 4 5 6 7 8
Clasa 1 1 0 1 0 0 1 0 0
Clasa 2 0 1 0 0 1 0 1 0
Clasa 3 0 0 0 1 0 0 0 1
P2.19 Program care citeste mai multe relatii de echivalenta intre
perechi de numere intregi si afiseaza clasele de echivalenta ce se pot
forma cu toate numerele citite. Exemplu de date:
36/57/25/13/16/48
Clasele de echivalenta sunt: {1,3,6}, {2,5,7}, {4,8}
Se vor folosi doi vectori: un vector cu elementele clasificate si un
vector cu numarul clasei de care apartine un element. Exemplu:
Elem. 1 2 3 4 5 6 7 8
Clasa 1 2 1 3 2 1 2 3
Obs. Clasele de echivalenta corespund unor grafuri neorientate conexe.

SOLUTII LA PROBLEME PROPUSE

// R2.1
// media studentilor integralisti si ponderea restantierilor
#include <stdio.h>
void main () {
int n, nota[200];
int i, m, s; // m =nr note > 5, s= suma note > 5
// citire date
n=0;
while ( scanf("%d", &nota[n]) != EOF)
++n;
// numarare si insumare note peste 5
m=s=0;
for (i=0;i<n;i++)
if ( nota[i] >= 5) {
++m; s=s+nota[i];
}
if ( m )
printf(" Medie integralisti= %5.2f \n", (float)s/m );
printf (" Procent restantieri= %5.2f % \n", 100.*(n-m)/n);
}
// R2.2
// statistica notelor unor elevi
#include <stdio.h>
void main () {
int n, nota[200], nn[11]; //nn[k] = numar note egale cu k
int i,j;
// citire note
n=0;
while ( scanf("%d", &nota[n]) != EOF)
++n;
// initializare contoare (sau la declarare)
for (j=1;j<11;j++)
nn[j]=0;
// numarare note din fiecare clasa
for (i=0;i<n;i++)
for (j=1;j<=10;j++)
if (nota[i] == j)
nn[j] ++;
// afisare procente
for (j=1;j<=10;j++)
printf ( "%5.2f %c note de %d \n", 100.*nn[j]/n, '%', j);
}

// R2.3
// clasifica n valori X in m intervale cu limitele A
#include <stdio.h>
void main () {
float x[500]; int a[100];
int nr[100]={0}; // init. vector nr
int n,m,i,j; float y;
// citire date
printf ("n="); scanf("%d",&n);
for (i=0;i<n;i++) {
scanf("%f",&y); x[i]=y; // ptr. Borland C 2.0
}
printf ("m="); scanf("%d",&m);
for (i=0;i<=m;i++)
scanf("%d",&a[i]);
// verifica daca vectorul a este ordonat
for (i=0;i< m;i++)
if (a[i] >= a[i+1] ) {
printf("limite neordonate \n");
return; // iesdire din main
}
// numara valorile din fiecare interval
for (i=0;i<n;i++)
for (j=0;j<=m;j++)
if ( x[i] > a[j] && x[i] <=a[j+1])
nr[j+1]++;
// afisare contoare
for (j=1;j<=m;j++)
printf ("%4d valori in intervalul %d \n", nr[j],j);
}

// R2.4
// comparatie de vectori neordonati
#include <stdio.h>
void main () {
int n, a[]={3,1,4,2,5}, b[]={1,5,3,2,4};
int egale, este, i,j;
egale=1; // presupunem ca sunt egali
n=sizeof(a)/sizeof(a[0]); // dimensiune vector a
for (i=0;i<n;i++) {
este = 0;
for (j=0;j<n;j++) // cauta pe a[i] in vectorul b
if (a[i] == b[j])
este =1; // daca a[i] este in b
if ( ! este ) {
egale=0; break; // daca a[i] nu este in b vectori diferiti
}

}
printf (egale ? "egale\n":"diferite\n");
}

Obs. Programul se simplifica daca se defineste o functie de cautare a


unui numar intr-un vector.

// R2.5
// interclasare vectori ordonati
void main () {
int a[100], b[100], c[200];
int na, nb, nc, ia, ib, ic, k;
// citire vectori si verificare ordonare
...
// interclasare
ia=ib=ic=1;
while ( ia <= na && ib <= nb) { // cat timp exista elem in a si in b
if ( a[ia] < b[ib] )
c[ic++]=a[ia++]; // scoate in c pe minim (a[i],b[j])
else
c[ic++]=b[ib++];
}
// copiaza in c elem. ramase in a sau in b
for (k=ia;k<=na;k++)
c[ic++]=a[k];
for (k=ib;k<=nb;k++)
c[ic++]=b[k];
nc=--ic; // dimensiune vector rezultat
// afisare vector rezultat
for (k=1;k<=nc;k++)
printf ("%d ",c[k]);
}

// R2.6
// extragere elemente distincte dintr-un vector
#include <stdio.h>
void main () {
int a[]={ 3,2,5,1,3,4,6,4,1,6,5}; // un vector de intregi
int b[100]; // aici se pun elementele distincte din a
int n,m,i,j, gasit;
n=sizeof(a)/sizeof(a[0]);
m=0; // dimensiune vector b
for (i=0;i<n;i++) {
// cauta pe a[i] in vectorul b
gasit=0;
for (j=0;j<m && ! gasit; j++)
if (a[i]==b[j])
gasit=1;
if (! gasit) {
b[m++] =a[i];
}
}
m=m-1; // dimensiune vector b
// scrie vector b
for (j=0;j<m;j++)
printf ("%3d",b[j]);
}

Obs. Programul se simplifica daca se defineste o functie de cautare a


unui numar intr-un vector.

// R2.7
// ordonare prin metoda bulelor (var. a)
#include <stdio.h>
void main () {
int a[300]; // un vector de intregi
int n,i,j, aux;
// citire vector
n=-1;
while (scanf("%d",&a[++n]) > 0) ; // repeta instr vida !
// repeta de n-1 ori
for (j=1;j<n;j++)
// compara n-1 perechi vecine
for (i=0;i<n-1;i++)
if ( a[i] > a[i+1] ) { // nu sunt in ordine
// schimba pe a[i] cu a[i+1]
aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;
}
// afisare vector ordonat
for (i=0;i<n;i++)
printf ("%4d",a[i]);
}

// ordonare prin metoda bulelor (var. b)


#include <stdio.h>
void main () {
int a[300]; // un vector de intregi
int n,i,j, aux, gata;
// citire vector
n=-1;
while (scanf("%d",&a[++n]) > 0) ; // repeta instr vida !
// repeta cat timp mai sunt schimbari
do {
gata =1;
// compara n-1 perechi vecine
for (i=0;i<n-1;i++)
if ( a[i] > a[i+1] ) { // nu sunt in ordine
// schimba pe a[i] cu a[i+1]
aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;
gata =0;
}
} while ( ! gata);
// afisare vector ordonat
for (i=0;i<n;i++)
printf ("%4d",a[i]);
}
// R2.8
// sortare prin selectie directa (aduce valori mici la inceput)
#include <stdio.h>
void main () {
int a[500]; // un vector de intregi
int n,i,j, aux;
// citire date
n=-1;
while (scanf("%d",&a[++n]) > 0) ; // repeta instr vida !
// ordonare
for (i=0;i<n-1;i++)
// se aduce minim dintre a[i+1]...a[n-1] in pozitia i
for (j=i+1;j<n;j++)
if ( a[j] < a[i] ) { //muta pe a[j] in pozitia i
aux = a[i]; a[i]=a[j]; a[j]=aux;
}
// scrie vector ordonat
for (i=0;i<n;i++)
printf ("%d ",a[i]);
}

// R2.9
// sortare prin selectie directa (aduce valori mari la sfarsit)
#include <stdio.h>
void main () {
int a[500]; // un vector de intregi
int n,i,j, aux;
// citire date
n=-1;
while (scanf("%d",&a[++n]) > 0) ; // repeta instr vida !
// ordonare
for (i=n-1;i>0;i--)
// se aduce maxim dintre a[i-1]...a[0] in pozitia i
for (j=0;j<i;j++)
if ( a[j] > a[i] ) { //muta pe a[j] in pozitia i
aux = a[i]; a[i]=a[j]; a[j]=aux;
}
// scrie vector ordonat
for (i=0;i<n;i++)
printf ("%d ",a[i]);
}

// R2.10
// sortare prin numarare
#include <stdio.h>
void main () {
int a[300], nr[300]; // un vector de intregi si un vector de contoare
int n,i,j;
// citire date
n=-1;
while (scanf("%d",&a[++n]) > 0) ; // repeta instr vida !
// creare vector nr pe baza vectorului a
for (i=0;i<n;i++) {
nr[i]=0;
for (j=0;j<n;j++)
if (a[i] > a[j])
nr[i]++; // nr[i] = cate elem. sunt <= a[i]
}
// afisare vector a pe baza lui nr
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (nr[j]==i)
printf ("%3d",a[j]);
}

// R2.11
// calcul valoare polinom cu coeficienti dati
#include <stdio.h>
#include <math.h>
void main () {
int c[]={ 2, -3, 1 }; // vector coeficienti polinom
int n,i; // n= nr coef. polinom
int x, y, px; // x=valoare ptr care se calculeaza polinom
n=sizeof(c)/sizeof(c[0]); // nr de coeficienti
while (scanf("%d",&x)==1) { // repeta ptr mai multe valori x
// metoda 1: ca suma de termeni calculati separat
y=c[n]; // suma initiala
for (i=0;i<n;i++)
y=y+ pow(x,n-1-i) *c[i];
printf ("%d ",y);
// metoda 2: termeni calculati prin recurenta
y=c[n-1]; px=1; // suma initiala
for (i=n-2;i>=0;i--) {
px=px*x; // puterea lui x (x^i)
y=y+ px*c[i];
}
printf ("%d ",y);
// metoda 3 : relatie de recurenta intre polinoame
y=0; // polinom de grad 0
for (i=0;i<n;i++)
y=y*x+c[i];
printf ("%d \n",y);
}
}

// R2.12
// valoare polinom de interp. Newton
#include <stdio.h>
void main () {
float xx,yy,p; int i,j,n;
float c[]= { 1,2,3,4,5}, x[]={0,2,4,6,8};
n=4;

xx=5;
// mai putin eficient
yy=c[0];
for (i=1;i<=n;i++) {
p=1;
for (j=1;j<=i;j++)
p=p*(xx-x[j]);
yy = yy + c[i]*p;
}
printf ("%f ",yy);
// mai eficient
yy=c[0];
p=1;
for (i=1;i<=n;i++) {
p=p*(xx-x[i]);
yy = yy + c[i]*p;
}
printf ("%f \n",yy);
}

// R2.13
// norma unei matrice (cu numerotare de la 1 ptr linii si col)
#include <math.h>
#include <stdio.h>
#define M 20 // dimensiuni maxime matrice
void main () {
int n=3,m=3; // n linii, m coloane
float a[M][M] = { {0,0,0,0}, {0,3,-6,2}, {0,1,4,-5}, {0,-7,3,6} };
int i,j; float s, smax;
smax=0;
for (i=1;i<=n;i++) {
s=0;
for (j=1;j<=m;j++)
s=s+ abs (a[i][j]);
if ( smax < s)
smax=s;
}
printf ("%f \n", smax);
}

// R2.14
// valoare in "sa" dintr-o matrice
// minim dintre val. maxime pe linii
#include <stdio.h>
#include <math.h>
#define M 20 // nr maxim de linii/coloane
void main () {
int n=3,m=3; // n linii, m coloane
float a[M][M] = { {0,0,0,0}, {0,3,-6,2}, {0,1,4,-5}, {0,-7,3,6} };
int i,j; float min, max;
min = 1e30;
for (i=1;i<=n;i++) {
max=a[i][1];
for (j=1;j<=m;j++)
if (max < a[i][j])
max=a[i][j];
if (min > max)
min =max;
}
printf ("%f \n", min);
}

// R2.15
// secventa ordonata de lungime maxima
#include <stdio.h>
void main () {
int a[100] = {5,3,6,7,2,4,6,8,4,1,9,0}; // un sir terminat cu zero
int i,j,imax,l, lmax; // imax,lmax = inceput si lungime secventa maxima
imax=i=0; lmax=0; // sau lmax=1
while (a[i]) { // repeta pana la sfarsit sir
j=i; // ultimul din secventa
while ( a[j+1] && a[j]<=a[j+1])
j++;
l= j-i+1; // lungime secventa intre i si j
if ( lmax<l) {
lmax=l; imax= i;
}
i=j+1; // continua cautarea din poz. j+1
}
printf ("\n %d \n", lmax); // lungime secventa
for (i=imax; i<imax+lmax;i++)
printf ("%d ", a[i]);
}

// R2.16
# include <stdio.h>
# define M 30 // nr. maxim noduri graf
void main () {
int n, nv, max ; // n=nr de noduri, nv=nr de vecini
int a[M][M] ; // matrice de adiacente graf
int i,j, imax ;
// citire date
printf (" nr. noduri: "); scanf ("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j] =0;
printf ("perechi de noduri adiacente: ");
while ( scanf("%d%d", &i,&j)> 0) {
a[i][j] = a[j][i]=1;
}
// determina nod cu nr maxim de vecini
max=0; imax=0; // nr maxim de vecini
for (i=1;i<=n;i++) { // ptr fiecare nod i
nv=0; // nr de vecini nod i
for (j=1;j<=n;j++) // ptr fiecare posibil vecin
if (a[i][j]) // daca muchie i-j atunci
++nv; // s-a mai gasit un vecin al lui i
if (max < nv) {
max=nv; imax=i;
} // retine nr maxim de vecini
}
// afisare nod cu nr maxim de vecini
printf ("Varful %d are %d vecini \n ", imax, max);
}

// R2.17
// graf reprezentat prin lista arcelor sale
#include <stdio.h>
# define M 30 // nr. maxim noduri graf
void main () {
int n,na ; // n=nr de noduri, na=nr de arce
int a[M], b[M] ; // vectori de noduri vecine
int i,j,k ;
// citire date
printf (" nr. noduri: "); scanf ("%d",&n);
printf ("perechi de noduri adiacente: \n");
na=0;
while ( scanf("%d%d", &i,&j)> 0) {
++na; // nr de arce in graf
a[na] = i; b[na]=j;
}
// afisare liste de succesori noduri
printf ("Liste de succesori:\n");
for (i=1; i<=n;i++) {
printf("%d : ",i);
for (j=1;j<=na;j++)
if (i==a[j])
printf ("%d ", b[j]);
printf("\n");
}
// afisare liste de predecesori noduri
printf ("Liste de predecesori:\n");
for (i=1; i<=n;i++) {
printf("%d : ",i);
for (j=1;j<=na;j++)
if (i==b[j])
printf ("%d ", a[j]);
printf("\n");
}
}
// R2.19

/* Program care citeste mai multe relatii de echivalenta intre


perechi de numere intregi si afiseaza clasele de echivalenta ce se pot
forma cu toate numerele citite.
Exemplu de date:
30 60 / 50 70 / 20 50 / 10 30 / 10 60 / 40 80
Clasele de echivalenta sunt: {10,30,60}, {20,50,70}, {40,80}
Se vor folosi doi vectori: un vector cu elementele clasificate si un
vector cu numarul clasei de care apartine un element. Exemplu:
Elem. 10 20 30 40 50 60 70 80
Clasa 1 2 1 3 2 1 2 3
*/

#include <stdio.h>
#define M 100 // numar maxim de elemente clasificate
// reunire clase ce contin valorile p si q
void unif (int cls[],int n,int p,int q) {
int i, cp=cls[p], cq=cls[q];
if (cp==cq) return ;
if (cp > cq){ // inlocuieste cp cu cq
for (i=1;i<=n;i++)
if (cls[i]==cp)
cls[i]=cq;
} else { // inlocuieste cq cu cp
for (i=1;i<=n;i++)
if (cls[i]==cq)
cls[i]=cp;
}
}
// determina indice in vector de valori
int indexOf (int val[],int n, int x) {
int i;
for (i=1;i<=n;i++)
if (x==val[i])
return i;
return -1;
}

void main () {
int val[M]={0}, cls[M]={0}; // valorile si clasele lor
int i,j,p,q,n,m,cl;
// citire relatii de echivalenta
cl=0; // numar clase curente
n=0;
while (scanf("%d%d",&p,&q) > 0) {
i=indexOf(val,n,p);
if (i < 0) {
val[++n]=p; i=n; cls[n]= ++cl;
}
j=indexOf(val,n,q);
if (j < 0) {
val[++n]=q; j=n; cls[n]= ++cl;
}
unif(cls,n,i,j);
}
// afisare clase
for (i=1;i<=cl;i++) {
m=0;
for (j=1;j<=n;j++)
if (cls[j]==i) {
printf("%d ",val[j]);
m++;
}
if (m)
printf("\n");
}
}

3. DEFINIREA SI UTILIZAREA DE FUNCTII

EXEMPLE DE PROGRAME

E3.1a Functie fara argumente si fara rezultat asociat numelui sau.

// Stergere ecran in mod text, prin defilare


#include <stdio.h>
// definire functie
void clear() {
int i;
for (i=0;i<24;i++) // ptr un ecran de 25 de linii
putchar('\n'); // sau printf ("\n");
}
// utilizare functie
void main () {
clear(); // sterge ecran
printf ("text in prima linie de jos \n");
}

Observatii:
- Functia "clrscr()" nu este standard in limbajul C, dupa cum nici fisierul
antet CONIO.H nu este standard (dar ele exista in Borland-C).
- Dupa stergere ecran cu "clrscr" cursorul este in prima linie de sus si
ecranul trece in mod pagina (implicit este in modul defilare).

E3.1b Aceeasi functie de la 3.1a, dar plasata dupa programul principal

#include <stdio.h>
void clear(); // declarare functie (prototip)
// utilizare functie
void main () {
clear(); printf ("text in linia de jos\n");
}
// definire functie (cu declaratie ca in C++)
void clear() {
for (int i=0;i<24;i++) // ptr un ecran de 25 de linii
putchar('\n'); // sau printf ("\n");
}

E3.2 Functie de tip "void" cu un argument

#include <stdio.h>
// Desenarea unei bare orizontale compuse din n caractere
void bar (int n) {
int i;
for (i=0;i<n;i++)
putchar('#');
putchar('\n');
}
// Desenare histograma pe baza unui vector de intregi
void main () {
int a[24]={5,10,15,10,5},n=5,k;
clear(); // sterge ecran
for (k=0;k<n;k++)
bar (a[k]); // desenare bara k de lungime a[k]
}

E3.3 Functie de tip "void" cu doua argumente de tipuri diferite

// Desenarea unei bare orizontale din n caractere ch


void bar1 (int n, char ch) {
int i;
for (i=0;i<n;i++)
putchar(ch);
putchar('\n');
}

E3.4 Functie de tip "void" cu argument de tip vector

// Desenare histograma pe baza unui vector de intregi


void hist (int a[], int n) {
int i;
for (i=0;i<n;i++)
bar(a[i]);
}

E3.5 Functie cu rezultat si argument de tip vector

// Determinare valoare minima dintr-un vector dat


float minim (float x[], int n) {
float xmin=x[0];
for (i=1;i<n;i++)
if ( xmin > x[i])
xmin=x[i];
return xmin;
}
// utilizare functie
void main () {
float t[]={3,7,1,2,8,4}, tmin;
printf ("%f \n", minim(t,6));
}

E3.6 Functie care verifica satisfacerea unei conditii

// Verifica daca un caracter dat este un spatiu alb


int isspace (char ch) {
return (ch==' ' || ch=='\n' || ch='\t'); // blanc,new line, tab
}

Obs.
- In C exista functii standard pentru verificarea tipului unui caracter dat
(isspace, isalpha,isdigit,...), declarate in CTYPE.H.

E3.7 Functie care verifica respectarea unei conditii de catre toate


elementele unui vector dat.

// Verifica daca un vector este ordonat crescator sau nu


int sorted (int a[], int n) {
int i;
for (i=0;i<n-1;i++)
if (a[i] > a[i+1])
return 0; // vector neordonat
return 1; // vector ordonat
}

E3.8 Functie cu doua rezultate (cu argumente de tip pointer)

// Determinare minim si maxim dintr-un vector


void minmax ( float x[],int n,float* pmin, float* pmax) {
float xmin,xmax; int i;
xmin=xmax=x[0];
for (i=1;i<n;i++) {
if (xmin > x[i])
xmin=x[i];
if (xmax=x[i])
xmax=x[i]);
}
*pmin=xmin; *pmax=xmax;
}
// utilizare functie
void main () {
float a[]={3,7,1,2,8,4};
float a1,a2;
minmax (a,6,&a1,&a2);
printf("%f %f \n",a1,a2);
}

Obs.: Este preferabila scrierea a doua functii separate care transmit prin
numele functiei valoarea minima sau maxima.

E3.9 Functie cu argument vector apelata pentru o linie dintr-o matrice

// Determinare valoare minima dintr-o matrice


float minim (float x[],int n); // prototip functie
void main () {
float a[30][30],am[30],min;
int i,nl,nc; //nl=nr.linii, nc=nr.coloane
... // citire date
min = minim (a[0],nc);
for (i=0;i<n;i++)
am[i]=minim(a[i],nc); // minim din fiecare linie
min= minim(am,nl); // cel mai mic minim din linii
...
}

E3.10 Functie cu argument matrice (cu numar impus de coloane)


// Generare matrice unitate
void matrunit (float u[][30], int n) {
int i,j;
for (i=0;i<n;i++) {
for (j=0;j<n;j++)
u[i][j]=0;
u[i,i]=1;
}
}
// afisare matrice patratica (cu 30 de coloane declarate)
void scrmatr (float a[][30], int n) {
int i,j;
for (i=0;i<n;i++) {
for (j=0;j<n;j++)

printf ("%4.0f",a[i][j]);
printf("\n");
}
}
// utilizare
void main () {
float x[30][30]; int n;
for (n=2;n<=10;n++) {
matrunit(x,n);
scrmatr(x,n);
getchar(); // asteapta tasta "Enter"
}
}

E3.11 Functie recursiva pentru ridicarea unui numar la o putere intreaga


pe baza relatiei de recurenta x^k = x * x^(k-1) si cu x^0=1

double power (double x, int n) {


if (n==0)
return 1. ;
return x * power(x,n-1);
}

E3.12 Functie recursiva pentru ridicarea unui numar la o putere intreaga


cu numar redus de inmultiri, pe baza relatiei de recurenta
x^k = x^(k/2) * x^(k/2) daca k este par si x^k= x * x^(k-1) daca k impar

double power (double x, int n) {


double y;
if (n==0)
return 1;
if ( n %2 ==0) {
y=power(x,n/2);
return ( y*y);
}
else
return (x * power (x,n-1));
}

PROBLEME PROPUSE

P3.1 Functie pentru determinarea numarului de cifre al unui numar dat (de
orice tip intreg). Program pentru citirea unui intreg n si afisarea a n
numere aleatoare intre 0 si n, cu determinare numar de coloane in functie
de valorile afisate. ( nr de coloane = 80/(nr.cifre+2) )
Se va utiliza functia "random" declarata in <math.h>

P3.2 Functie care verifica daca un numar dat este prim sau nu. Program
pentru afisarea descompunerilor numerelor pare mai mici ca un intreg dat
in sume de doua numere prime (Ipoteza lui Goldbach = orice numar par se
poate scrie ca suma a doua numere prime).

P3.3 Functie care primeste doi intregi a si b si determina alti doi


intregi k si c astfel ca a = c * b^k ( b este un divizor posibil al lui a,
k este ordinul de multiplicitate, c este numarul ramas dupa k impartiri
repetate a lui a prin b). Program pentru descompunerea unui numar dat in
factori primi (cu puterile lor) folosind functia. Exemplu:
360 = 2^3 * 3^2 * 5^1

P3.4 Functie care determina pozitia valorii maxime intr-un vector. Program
pentru ordonarea unui vector de numere prin determinarea repetata a valorii
maxime dintr-un vector si schimbarea cu ultimul element din vector.

P3.5 Functie care determina semnul unui numar intreg ("sign") si are
rezultat 0 (valoare zero), -1 (numar negativ) sau +1 (numar pozitiv).
Functie care determina numarul cadranului in care se afla un punct de
coordonate intregi date x,y; rezultatul este 0 daca punctul se afla pe
una din axe sau la intersectia axelor. Indicatie: Se face o selectie
("switch") dupa valoarea 3*sign(x)+sign(y). Program de verificare.

P3.6 Functie pentru cautare binara intr-un vector ordonat in doua moduri:
iterativ si recursiv. Cautarea binara se face prin compararea valorii
cautate cu valoarea din mijlocul vectorului cercetat si alegerea primei
sau ultimei jumatati din vector pentru pasul urmator, in functie de
rezultatul comparatiei. Procesul de injumatatire a vectorului se opreste
fie la gasirea valorii cautate, fie la reducerea dimensiunii pana la 1.
Functia primeste ca argumente valoarea cautata, adresa vectorului si
indicii (pozitiile) din vector intre care se cauta.

P3.7 Functii pentru operatii cu multimi de 256 intregi realizate printr-un


sir de 256 de biti (16 intregi fara semn sau 32 de octeti). Bitul k din
sir este 1 daca multimea contine elementul cu valoarea k si este zero
daca multimea nu contine valoarea k. Bitul k din sir se afla in bitul cu
numarul k%16 din intregul k/16 din vectorul de 16 intregi. Operatii
(functii): initializare multime vida, adaugare intreg la multime, verifica
apartenenta unui numar la o multime, afisare multime (intre acolade),
reuniune, intersectie si diferenta de multimi.
Program pentru verificarea acestor functii

P3.8 Functii pentru operatii cu multimi de numere intregi reprezentate


prin vectori neordonati de lungime fixa, in care elementele multimii sunt
grupate la inceputul vectorului, dupa care urmeaza zerouri. Operatii:
initializare multime vida, verificare apartenenta la o multime, adaugare
element la o multime (daca nu exista deja), afisare multime (intre acolade),
reuniune, intersectie si diferenta de multimi. Program pentru verificarea
acestor functii.

P3.9 Functie pentru determinarea divizorilor unui numar intreg dat.


Functie pentru calculul valorii unui polinom cu coeficienti intregi.
P(x)= a[0]*x^n+a[1]*x^(n-1)+ ... +a[n-1]*x + a[n]

Functie pentru determinarea coeficientilor polinomului cat ("b") al


impartirii unui polinom (dat prin coeficientii "a") prin (x-r). Se vor
folosi relatiile de recurenta urmatoare:
b[0]=a[0]; b[k]=a[k]+b[k-1]*r k=1,n-1
Program care determina si afiseaza radacinile unei ecuatii polinomiale
cu coeficienti intregi, aflate printre divizorii termenului liber; se
vor afisa divizorii (cu valori pozitive sau negative) care anuleaza
valoarea polinomului dat. exemplu: x^3+3x^2+2x+6 are ca radacina x=-3
(dar nu are radacinile 2,-2,3). Coeficientul puterii maxime a lui x va fi 1.

P3.10 Functie pentru calculul valorii polinomului de interpolare Lagrange


pentru o valoare data xx folosind relatia :
yy = Suma (y[k]*Prod((xx-x[i])/(x[k]-x[i]) )
Suma pentru k=1,n. Produs pentru i=1,n si i!=k
Program pentru citirea a 2 vectori x si y ce definesc o functie prin n
puncte si calculeaza valorile functiei la mijlocul intervalelor de pe
axa X prin interpolare Lagrange. Se vor afisa coordonatele celor n-1
puncte astfel determinate.

P3.11 Functie pentru inmultirea unui polinom cu coeficienti dati cu un


binom de forma (x+c). Program pentru calculul coeficientilor polinomului
care are ca radacini numerele intregi c[1],c[2],...c[n] (citite ca date
initiale). (Termenul liber trebuie sa fie egal cu produsul r[1]*r[2]*...,
iar coeficientul lui x^(n-1) sa fie egal cu suma r[1]+r[2]+...r[n])
Pentru c[1]=c[2]=..=c[n]=1 coeficientii afisati sunt coeficientii puterii
n a binomului (x+1)
P3.12 Functie recursiva pentru determinarea celui mai mare divizor comun
a 2 intregi, pe baza relatiei cmmdc(a,b) = cmmdc (b,a%b) daca a%b != 0
si cmmdc(a,b) =b daca a%b==0.

P3.13 Functie recursiva pentru afisare in binar a unui intreg primit ca


argument. Algoritm: echivalentul binar al lui m se obtine din echivalentul
binar al lui m/2 urmat de cifra binara m%2. Scrieti si o forma iterativa
pentru acest algoritm de impartiri succesive la 2 si afisare de resturi
in ordinea inversa obtinerii lor.

P3.14 Functie recursiva pentru cautarea secventiala intr-un vector a unei


valori date, cu rezultat pozitia in vector a numarului cautat sau -1 daca
negasit. Rezultatul cautarii intr-un vector a cu n elemente este fie
a[n-1] fie egal cu rezultatul cautarii in primele n-1 elemente (daca n>0).

P3.15 Functie pentru inmultirea a doua matrice patratice cu acelasi numar


de linii si coloane. Functie pentru ridicarea unei matrice patratice la
o putere intreaga, prin inmultiri repetate (folosind prima functie).
Program pentru verificare pe o matrice unitate.

P3.16 Functie care schimba intre ele doua linii i si j dintr-o matrice
patratica. Program care foloseste functia pentru a aduce pe diagonala
principala numai elemente nenule (daca este posibil). Se va afisa matricea
obtinuta prin schimbari de linii.

SOLUTII LA PROBLEME PROPUSE

// R3.1
// determinare nr de cifre la p.intreaga a unui nr. dat
int digits (double x) {
int nc=0; // x=fabsl(x);
while ( x >= 1.) {
++nc;
x=x/10.0;
}
return nc;
}
// varianta mai simpla ptr functia digits
int digits(double x) {
return (int)log10(x) + 1 ;
}
// afisare vector de numere cu tabelare automata
void main () {
int x[10000]; int i,n,m,nv,max;
printf("n="); scanf("%d",&n);
max=0;
// completare vector de n intregi
for ( i=0;i<n;i++) {
x[i]=random(n);
m=digits (x[i]);
if ( max <m) max=m;
}
// printf ("nr. max. cifre=%d \n",max);
// afisare vector
nv=80/(max+1); // nr. maxim de coloane
for ( i=0;i<n;i++) {
if (i%nv==0)
printf ("\n");
printf ("%*d",max+2,x[i]); // scrie x[i] pe max+2 pozitii
}
}

// R3.2
// verifica daca este numar prim
int prim ( int n) {
int d;
for (d=2; d<=n/2 ; d++)
if ( n%d==0)
return 0; // nu este prim
return 1; // este prim
}
// verif. ipotezei lui Goldbach
main () {
int n,m,k;
printf("n="); scanf("%d",&n);
for (m=2; m<=n; m=m+2)
// incearca numerele k si m-k daca prime
for (k=1; k<=m/2; k++)
if (prim(k) && prim (m-k))
printf (" %d =%d+%d \n",m,k,m-k);
}

// R3.3
// factorul de multiplicitate al lui b in a
int mult (int a, int b, int * c) {
int k=0;
while ( a %b ==0) {
a=a/b;
k++;
}
*c=a;
return k;
}
// descompunere in factori primi
void main () {
int n,n2, m,k,r;
printf("n="); scanf("%d",&n);
n2=n;
printf ("\n%d = 1 ",n);
for (m=2;m<n2;m++)
if( (k=mult(n,m,&r)) > 0) {
printf("* %d^%d ",m,k);
n=r;
}
printf("\n");
}
// varianta pentru functia "mult" (cu alt mod de folosire)
void mult (int a, int b, int * m, int *c) {
int k=0;
while ( a %b ==0) {
a=a/b;
k++;
}
*c=a; *m=k;
}

// R3.4
// determina pozitie maxim in vector de numere
int imax ( float x[], int n) {
int i, im=0; // im = indice maxim
for (i=1;i<n;i++)
if ( x[i] > x[im]) // x[im] este un maxim partial
im=i;
return im;
}
// ordonare vector
void sort ( float x[], int n) {
int im,k; float aux;
while ( n>1 ) {
im=imax(x,n);
// schimba x[im] cu x[n-1]
aux=x[im];
x[im]=x[n-1];
x[n-1]=aux;
n--; // scade dimensiune vector
}
}
// verificare
void main () {
float t[]= {5,2,9,1,4,6,2,8};
int i, n = sizeof(t)/sizeof(t[0]);
sort (t,n);
for (i=0;i<n;i++)
printf ("%.2f ",t[i]);

// R3.5
#include <stdio.h>
#include <math.h>
// semn numar algebric = -1 sau 1 sau 0
int sign (int x) {
if (x==0) return 0;
else return x/abs(x);
}
// determinare cadran
int cadran ( int x, int y) {
int k= 3*sign(x)+sign(y);
switch (k){
case -1: case 1: case 3: case -3: return 0; // pe axe
case 4: return 1;
case -2: return 2;
case -4: return 3;
case 2 : return 4;
}
}
// verificare functii
void main () {
int x,y, c;
do {
printf("x,y : "); scanf("%d%d",&x,&y);
c= cadran(x,y);
if (c==0)
printf ("Pe una din axe \n");
else
printf (" Cadranul %d \n", c);
} while (1);
}
// R3.6
// cautare binara, nerecursiva
int caut(int b,int a[],int i,int j) {
int m;
while (i <= j ) {
m=(i+j)/2; // mijloc vector
if (a[m]==b)
return m; // pozitia unde a fost gasit
else
if (a[m] < b)
i=m+1;
else
j=m-1;
}
return -1;
}

// cautare binara, recursiva


int caut(int b,int a[],int i,int j) {
int m;
if ( i > j)
return -1; /* neg†sit */
else {
m=(i+j)/2;
if (a[m]==b)
return m;
else if (b < a[m])
return caut (b,a,i,m-1);
else
return caut (b,a,m+1,j);
}
}

// R3.7
// operatii cu multimi de biti
#include <stdio.h>
#define DIM 16
typedef unsigned int Set[DIM];
// initializare multime vida
void init (Set m){
int i;
for(i=0;i<DIM;i++) m[i]=0;
}
// adauga la multimea m valoarea x
void add (Set m,int x){
int i,j;
i= x / 16;
j= x % 16;
m[i]= m[i] | (1<<j);
}
// reuniune de multimi ( c=a+b)
void or (Set a, Set b, Set c) {
int i;
for (i=0; i<DIM;i++)
c[i]=a[i] | b[i];
}
// intersectie de multimi (c=a&b)
void and (Set a, Set b, Set c) {
int i;
for (i=0; i<DIM;i++)
c[i]=a[i] & b[i];
}
// diferenta simetrica de multimi
void xor (Set a, Set b, Set c) {
int i;
for (i=0; i<DIM;i++)
c[i]=a[i] ^ b[i];
}
// diferenta de multimi (c=a-b)
void dif (Set a, Set b, Set c) {
Set t;
and (a,b,t);
xor (a,t,c);
}
// verifica aparteneta la multimea m a lui x
int is (Set m,int x){
int i,j;
i= x / 16;
j= x % 16;
return m[i] | (1<<j);
}
// afisarea multimii m
void print (Set m)
{ int j,i;
printf("{ ");
for(j=0;j<16;j++)
for (i=0;i<16;i++)
if(m[j] & (1<<i))
printf("%d,",i+16*j);
printf("\b }\n");
}
// verificarea unor functii
main() {
Set a,b,c,t,u,v;
int i;
init (a); init (b);
for (i=10;i<100;i=i+20)
add (a,i);
for (i=5;i<100;i+=15)
add(b,i);
or (a,b,c); print(c);
and (a,b,t); print (t);
xor (a,b,u); print (u);
dif (a,b,v); print (v);
}

// R3.8
// operatii cu multimi reprezentate prin vectori neordonati
#include <stdio.h>
#define M 256 // dimensiune maxima vectori (multimi)
// initializare multime vida
void init (int a[]) {
int i;
for (i=0;i<M;i++)
a[i]=0;
}
// test daca o valoare data apartine unei multimi
int contine (int a[], int x) {
int i;
for (i=0; i<M && a[i] > 0 ; i++)
if (x==a[i])
return 1; // x apartine lui a
return 0; // x nu apartine lui a
}
// dimensiunea (cardinalul) unei multimi
int dim (int a[]) {
int i, m=0;
for (i=0; i<M && a[i] > 0 ; i++)
m=m+1;
return m;
}
// adaugare element la o multime
void plus (int a[], int x) {
int k;
if (contine (a,x)) return ; // nimic daca exista deja
k=dim(a); // prima pozitie libera
a[k]=x; // adauga elem la multime
}
// eliminare valoare data dintr-o multime
void minus (int a[], int x) {
int i=0;
if ( ! contine (a,x)) return ; // nimic daca nu exista
while ( a[i] != x ) // cauta element de eliminat
i++;
while (a[i]) { // si muta la stinga urmatoarele elem.
a[i]=a[i+1]; i++;
}
}
// afisarea elementelor unei multimi
void scrie (int a[]) {
int i=0;
printf ("\n{ ");
while (a[i] !=0) {
printf ("%d ", a[i]);
i++;
}
printf (" } \n");
}
// reuniune de multimi
void plusm (int a[],int b[], int c[]) {
int i; int t[M];
init(t);
for (i=0; a[i]; i++)
plus (t, a[i]);
for (i=0; b[i]; i++)
plus (t,b[i]);
for (i=0;i<M;i++)
c[i]=t[i];
}
// intersectie de multimi
void inters (int a[],int b[], int c[]) {
int i; init(c);
for (i=0;i<M && a[i] >0 ; i++)
if ( contine (b, a[i]))
plus (c,a[i]);
}
// diferenta de multimi a-b
void minusm (int a[], int b[], int c[]) {
int i,k;
init(c);
for (i=0; i<M && a[i];i++)
if ( ! contine (b, a[i]) ) // elem. din a care nu sunt si in b
plus (c,a[i]);
}
// comparatie la egalitate multimi
int egal (int a[], int b[]) {
int i;
if ( dim(a) != dim(b) )
return 0;
if (continem (a,b))
return 1;
else
return 0;
}
// citire multime vector
int citmul (int a[]) {

int i=0;
init (a);
do { scanf("%d", &a[i++]);
} while (a[i-1]);
return i;
}
// verificare functii
void main () {
int a[M], b[M], c[M], d[M], e[M], f[M], r[M];
citmul(a); citmul(b);
scrie(a); scrie(b);
plusm (a,b,c); scrie (c);
inters (a,b,d); scrie (d);
minusm(a,b,e); minusm (b,a,f);
plusm(d,e,r); plusm(r,f,r);
if ( egal (c,r) )
printf ("corect \n");
else
printf ("incorect \n");
}

// R3.9
#include <stdio.h>
// calcul valoare polinom ptr un x dat
long valPol ( int c[], int n, int x) {
long s=0L; int i;
for (i=0;i<=n-1;i++)
s=s*x+c[i];
return s;
}
// vector cu divizorii unui intreg dat (pozitivi si negativi)
int div (int n, int d[]) {
int k,j=0;
if(n<0) n=-n; // sa nu apara rest=-0 !
for (k=1; k<=n; k++)
if (n%k==0) {
d[j++]=k; d[j++]=-k; // k si -k sunt divizori
}
return j;
}
// impartire polinom prin x-r
void impPol (int a[],int n, int b[], int r) {
int k; --n;
b[0]=a[0];
for (k=1;k<=n-1;k++)
b[k]=a[k]+b[k-1]*r;
}
// radacini intregi ec. polinomiala
void main () {
int x, a[100],b[100], d[20],i=0, n, m, nr;
printf("nr. coef.="); scanf ("%d",&n);
printf ("coef. polinom,in ordinea descrescatoare a puterilor lui x:\n");
for (i=0;i<=n-1;i++)
scanf("%d",&a[i]);
printf ("Radacini intregi: ");
do { // repeta cat e nevoie
m=div(a[n],d); // divizori termen liber
nr=0; // numar de radacini intregi gasite
// verifica daca fiecare divizor este radacina
for (i=0;i<m;i++) {
if (valPol(a,n,d[i])==0) {
printf ("%d ",d[i]);
impPol (a,n,b,d[i]);
n--; ++nr;
for (i=0;i<n;i++)
a[i]=b[i]; // coef. noii ecuatii polinomiale (cu grad n-1)
}
}
} while (nr>0);
// scrie coeficienti polinom fara radacini intregi
// return ;
if (n >1) {
printf ("\nEcuatia fara coef. intregi: \n");
for (i=0;i<=n-1;i++)
if ( a[i])
printf ("%d(x^%d) ",a[i],n-1-i);
printf("\n");
}
}

// R3.10
#include <stdio.h>
// Interpolare Lagrange
float lagrange ( float x[], float y[], int n, float xx) {
int i,k; float s=0,p;
for (k=1;k<=n;k++) {
p=1;
for (i=1;i<=n;i++)
if (i!=k)
p=p*(xx-x[i])/(x[k]-x[i]);
// aduna la suma
s=s+y[k]*p;
}
return s;
}
// program principal
void main () {
float x[100],y[100],xm[100],ym[100],xx,yy;
int n,i,j;
// citire date initiale
printf ("nr.puncte:"); scanf("%d",&n);
printf("coord. puncte:\n");
for (i=1;i<=n;i++) {
scanf ("%f%f",&xx,&yy);
x[i]=xx;y[i]=yy;
}
// creare vector de n-1 puncte prin interpolare
for (i=1;i<n;i++) {
xm[i]= (x[i]+x[i+1])/2;
ym[i]=lagrange(x,y,n,xm[i]);
}
for (i=1;i<=n-1;i++)
printf ("%f %f \n", xm[i],ym[i]);
}

// R3.11
#include <stdio.h>
// produs dintre un polinom si un binom
// (a[n]+a[n-1]*x+...+a[0]*x^n)(x+c) = b[n+1]+b[n]*x+...+b[0]*x^(n+1)
int prodpoli (int a[], int n, int c, int b[]) {
int i;
b[0]=a[0];
for (i=1;i<n+1;i++)
b[i]=a[i]+a[i-1]*c;
b[n+1]=a[n]*c;
return n+1;
}
// calcul produs (x+c[0])*(x+c[1])* ...(x+c[n-1])=b[n]+b[n-1]*x+...+b[0]*x^n
void produs (int c[], int n, int b[]) {
int i,j,d[100];
b[0]=1;
for (i=0;i<n;i++) {
prodpoli (b,i,c[i],d);
for (j=0;j<=i+1;j++)
b[j]=d[j];
printf ("\n");
}
}
// verificare functii
void main () {
int a[100],b[100],i,j,n;
printf ("\n n="); scanf ("%d",&n);
for (i=0;i<n;i++)
scanf("%d",&a[i]);
produs (a,n,b);
printf (" Rezultate:\n");
for (i=0;i<=n;i++)
printf("%4d",b[i]);
}

// R3.12
int cmmdc (int a,int b) {
if ( a%b==0)
return b;
return cmmdc( b,a%b);
}

// R3.13
// recursiv
void binar (int n) {
if (n>0) {
binar (n/2);
printf("%d", n%2);
}
else
printf("0");
}
// iterativ (cu vector)
void binar2 ( int n) {
int c[16],i;
// aduna resturi in vector
i=0;
while ( n>0) {
c[i++]=n%2;
n=n/2;
}
printf ("%d\n",i);
// scrie vector in ordine inversa
while (i>0)
printf ("%d",c[--i]);
}

// R3.14
// cautare secventiala recursiva intr-un vector
int lsearch (int a[], int n, int b) {
// cauta pe b in vectorul a de lungime n
if (n==0)
return -1; // negasit
if (b==a[n-1])
return n-1; // gasit in ultima pozitie
else
return lsearch(a,n-1,b); // cauta intr-un subvector mai mic
}

// R3.15
#include <stdio.h>
#define M 20 // dimensiuni matrice
typedef float num;
typedef num mat[M][M]; // definire tip "mat"
// generare matrice unitate
void matunit ( mat u,int n) {
int i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (i ==j)
u[i][j]=1;
else
u[i][j]=0;
}
// produs matrice patratice
void prodmat ( mat a, mat b, mat c,int n) {
int i,j,k;
mat t; // matr de lucru (ptr produs)
// t=a*b
for (i=0;i<n;i++)
for (j=0;j<n;j++) {
t[i][j]=0;
for (k=0;k<n;k++)
t[i][j] += a[i][k]*b[k][j];
}
// copiaza din t in c
for (i=0;i<n;i++)
for (j=0;j<n;j++)
c[i][j]=t[i][j];
}
// afisare matrice
void scrmat (mat a, int n) {
int i,j;
for (i=0;i<n;i++) {
for (j=0;j<n;j++)
printf ("%f ",a[i][j]);
printf ("\n");
}
}
// ridicare la putere matrice
void expmat (mat a,int n,int k, mat p) {
int i,j;
matunit (p,n); // initializare p cu matrice unitate
// inmultiri repetate
for (i=0;i<k;i++)
prodmat (p,a,p,n);
}
// verificare functii
void main () {
int n=3; // dimensiuni ptr teste
mat a={ {1,2,3},{4,5,6},{7,8,9}};
mat b,c ;
matunit(b,n);
prodmat (a,b,a,n);
scrmat (a,n);
// ridicare la putere matrice
expmat (a,n,2,c);
scrmat(c,n);
}

// R3.16
#include <stdio.h>
#define M 10 // nr maxim linii/coloane
typedef float mat[M][M];
// schimba intre ele doua linii dintr-o matrice patratica
void schimb ( mat a, int n, int i, int j) {
float aux;
int k;
for (k=1;k<=n;k++) {
aux=a[i][k];
a[i][k]=a[j][k];
a[j][k]=aux;
}
}
// aducere valori nenule pe diagonala unei matrice patratice
// rezultat 1 daca a reusit si 0 daca nu a reusit
int transf (mat a, int n) {
int i,j, gasit;
for (i=1;i<=n;i++) // ptr fiecare linie i
if (a[i][i] == 0) {
gasit=0;
// cauta pe coloana i in liniile i+1,..n o val. nenula
for (j=1;j<=n;j++)
if ( j != i && a[j][i]) {
gasit=1; schimb (a,n,i,j);
}
if (gasit) continue;
else return 0;
}
return 1;
}
// verificare functie
void main () {
mat a; int i,j,n; float x;
printf ("n= "); scanf("%d",&n);
printf ("Elem matrice, pe linii: \n");
for (i=1;i<=n;i++)
for (j=1;j<=n;j++) {
scanf("%f",&x); a[i][j]=x;
}
i=transf (a,n); // transforma matricea a
if (i==0) {
printf("Imposibil !\n");
return;
}
for (i=1;i<=n;i++) { // scrie matricea transformata
for (j=1;j<=n;j++)
printf("%f ",a[i][j]);
printf("\n");
}
}

4. PROGRAME SI FUNCTII CU SIRURI DE CARACTERE

EXEMPLE DE FUNCTII SI PROGRAME

E4.1 Program pentru citirea si afisarea unor linii la consola

#include <stdio.h>
void main () {
char linie[80]; // aici se citeste o linie
while ( gets (linie) != NULL)
puts(linie); // scrie linia citita
}

E4.2 Program pentru citirea unui text in memorie, cu pastrarea


caracterelor terminator de linie.

#include <stdio.h>
#include <string.h>
void main () {
char linie[80]; // aici se citeste o linie
char text[30000]={0}; // aici se memoreaza toate liniile
while ( gets (linie) != NULL) {
strcat (linie,"\n"); // "gets" elimina car. '\n'
strcat(text,linie); // adauga la text linia citita
}
puts(text); // afisare text citit, pe linii
}

Obs: O forma mai compacta pentru ciclul de citire, adaugare la text:

while ( gets (linie) != NULL)


strcat (text, strcat(linie,"\n"));

E4.3 Program pentru citirea de siruri separate prin spatii albe intre ele
(se pot introduce mai multe siruri intr-o linie):

#include <stdio.h>
#include <string.h>
void main () {
char word[30]; // lungime maxima cuvant=30
while (scanf("%s",word) !=EOF)
printf("%s(%d)\n",word,strlen(word)); // un cuvant si lungimea sa
}

Obs.: Toate programele de mai sus pot fi folosite cu fisiere text de


intrare si de iesire prin redirectarea fisierelor standard stdin si stdout.
E4.4 Functie pentru insertia unui caracter la o adresa dintr-un sir.
Functie pentru insertia unui sir s la o adresa data din alt sir d.

// insertie caracter intr-un sir


void chins (char *d, char ch) {
char *p;
for (p=d+strlen(d); p>=d;p--)
* (p+1) = *p;
*d = ch;
}
// insertie sir s la adresa d
void strins (char *d, char *s) {
char *p; int ls=strlen(s);
for (p=s+ls-1; p >=s;p--)
chins(d,*p);
}

E4.5 Functie echivalenta ca efect cu functia "strstr"

#include <stdio.h>
#include <string.h>
// cauta un sir in alt sir
char * strstr ( char * s1, char* s2) {
while ( strlen (s1) >= strlen(s2) )
if ( strncmp(s1,s2,strlen(s2)) ==0 )
return s1;
else
++ s1;
return NULL;
}
// verificare functie
void main () {
char s1[30], s2[30];
while ( scanf ("%s %s", s1,s2) != EOF)
printf ("%s\n",strstr(s1,s2));
}

E4.6 Functie echivalenta ca efect cu functia "strtok" :

//extrage din sir atomi separati prin caractere specificate


char *strtok (char * sir,char *separ) {
static char *p;
char * r;
if (sir) p=sir;
/* ignora separatori intre atomi */
while (strchr(separ,*p) && *p )
p++;
if (*p=='\0') return NULL;
r=p;
while (strchr(separ,*p)==NULL && *p)
p++;
if (p==r) return NULL;
else {
*p++='\0'; return r;
}
}

E4.7 Program pentru numararea liniilor si cuvintelor dintr-un fisier text,


al carui nume se da in linia de comanda. Cuvintele sunt siruri de orice
caractere separate intre ele prin (oricate) spatii albe. Se va folosi
functia de biblioteca "strtok".

#include <stdio.h>
#include <string.h>
// numarare linii si cuvinte dintr-un fisier text
void main ( int argc, char *argv[] ) {
char linie [200], *p, *sep="\t \r\n" ;
FILE * f;
int nl=0, nc=0; // nr linii, nr cuvinte
if (argc < 2) {
printf("Lipseste numele fisierului din comanda \n");
return;
}
if( (f = fopen (argv[1],"r")) == NULL) {
printf(" fisier negasit \n"); return ;
}
while ( fgets (linie,200,f) != NULL) {
nl++;
p=linie;
while ( (p= strtok (p,sep)) != NULL) {
++nc;
p=p+strlen(p)+1;
}
}
printf ("\n %d linii %d cuvinte",nl,nc); // si alte operatii cu linia citita
fclose(f);
}

E4.8 Program pentru numararea liniilor si cuvintelor dintr-un fisier text,


al carui nume se da in linia de comanda. Cuvintele sunt siruri de orice
caractere separate intre ele prin (oricate) spatii albe. Nu se vor folosi
functii pe siruri de caractere din <string.h>.

#include <stdio.h>
#include <ctype.h>
// numarare linii si cuvinte dintr-un fisier text
void main ( int argc, char *argv[] ) {
char linie [200], *p ; FILE * f;
int nl=0, nc=0; // nr linii, nr cuvinte
// aici se pot face verificari asupra datelor primite
f=fopen(argv[1],"r");
while ( fgets (linie,200,f) != NULL) {
nl++;
p=linie;
while (*p) {
while ( *p && isspace(*p) ) // ignora spatii dintre cuvinte
p++;
if (*p =='\0') // daca s-a terminat linia curenta
break; // citeste alta linie
nc ++;
while (*p && ! isspace(*p) ) // cauta sfarsit de cuvant
p++;
}
}
printf ("%d linii %d cuvinte",nl,nc); // si alte operatii cu linia citita
fclose(f);
}

E4.9 Program pentru citirea unui fisier de numere (reprezentate prin


siruri de caractere separate prin spatii albe) si crearea unui alt fisier
cu aceleasi numere ordonate crescator. Numele celor doua fisiere se dau in
linia de comanda.

// ordonare fisier de numere


#include <stdio.h>
#include <stdlib.h>
// compara doi intregi (ptr qsort)]
int intcmp (const void* a , const void * b) {
return *(int*)a - *(int*)b;
}
// program de ordonare fisier de numere
int main (int na, char ** arg) {
int num[1000]; // vector pentru numere citite din fisier
int n,i,j;
FILE * f1, * f2;
if (na < 3) {
printf ("Eroare! Utilizare corecta: nume infile outfile \n");
return -1;
}
// citire fisier de date
if ( (f1=fopen (arg[1],"rt"))==0) {
printf ("Eroare: Fisier de date negasit! \n");
return -2;
}
i=0;
while ( fscanf(f1,"%d",&num[i]) != EOF)
i++;
n=i; // lungime vector
// ordonare vector cu functia "qsort"
qsort (num,n,sizeof(int), intcmp);
// scrie vector ordonat in fisier
f2=fopen(arg[2],"wt");
for (i=0;i<n;i++)
fprintf(f2,"%d ",num[i]);
fclose(f2);
}

Obs: Nu era posibila ordonarea numerelor ca siruri de caractere (fara


conversie in binar), deoarece sirul "7" este superior sirului "123", dar
numarul 7 este inferior numarului 123.

E4.10 Program pentru citirea unui fisier text creat in Unix (in care fiecare
linie se termina cu un singur caracter '\n' ) si crearea unui alt fisier
cu acelasi continut, dar in care liniile se termina cu doua caractere: "\r\n".
In final se sterge fisierul initial si se schimba numele noului fisier in
numele fisierului initial. Functia "fputs" adauga caracterul '\r' inaintea
caracterului '\n'.

#include <stdio.h>
#include <string.h>
void main () {
char nume1[80], nume2[80]; // nume fisiere
char line[200]; // aici se citeste o linie
char *point ;
FILE * f1, * f2;
puts("Nume fisier text:"); gets(nume1);
if( (f1 = fopen (nume1,"r")) == NULL) {
printf(" fisier negasit \n"); return ;
}
strcpy(nume2,nume1);
point = strchr (nume2,'.');
if (point==0)
point=nume2+strlen(nume2);
strcpy(point+1,"$$$");
f2 =fopen (nume2,"w");
while ( fgets (line,200,f1) != 0)
fputs (line,f2);
if (fclose(f1)<0 || fclose(f2)<0) {
puts("Erori la fisiere \n"); return;
}
remove(nume1); rename(nume2,nume1); // schimba nume1.$$$ in nume1.*
}

PROBLEME PROPUSE

P4.1 Functii echivalente ca efect cu functiile de biblioteca strlen,


strcpy, strcat, strcmp, strchr, strrchr

P4.2 Functii echivalente ca efect cu functiile de biblioteca


strncpy, strncat, strncmp.

P4.3 Functie pentru eliminarea unui subsir de lungime data dintr-un sir
dat prin adresa sa (si terminat cu zero). Functie pentru inserarea
unui sir dat la o adresa dintr-un sir terminat cu zero.

P4.4 Program care inlocuieste toate aparitiile unui sir dat printr-un
alt sir (de lungime diferita), intr-un text aflat in memorie. Se pot folosi
functiile din programul anterior.

P4.5 Functie care primeste o data calendaristica ca un sir de forma


"DD-MM-YY" si produce un vector cu 3 intregi ce corespund numarului zilei
(DD), lunii(MM) si anului(YY). Se pot folosi functii de biblioteca
(sscanf, atoi, strtok, strchr etc.). Program ptr verificare functie.

P4.6 Program pentru numararea si afisarea cuvintelor separate prin spatii


albe (dintr-un text) in doua variante :
(a) folosind functia de biblioteca "strtok".
(b) folosind functia de biblioteca "sscanf"

P4.7 Sa se rescrie functia "strtok" astfel ca primul argument sa reprezinte


adresa din sir de unde incepe cautarea, la fiecare apel (fara variabila
statica). Se adauga un al treilea argument unde functia depune atomul
extras din text, iar rezultatul functiei este adresa urmatoare atomului
gasit. Sa se modifice si programul care foloseste functia modificata.

P4.8 Functie care extrage urmatorul sir de litere de la o adresa data


(se ignora caracterele dinainte care nu sunt litere). Rezultatul este
adresa imediat urmatoare sirului gasit sau NULL daca nu s-a gasit nici
un sir de litere.

P4.9 Program pentru citirea unui text sursa C in memorie si afisarea


frecventei de aparitie a urmatoarelor cuvinte cheie in text: if, for,
do, while, switch, break.

P4.10 Program pentru ordonarea unui fisier text dupa cuvantul numarul k
din fiecare linie (k=0,1,..n-1). Fiecare linie contine n cuvinte separate
prin spatii albe. Numele fisierului si intregul k se transmit prin linia de
comanda ( exemplu: sort linii 1).

P4.11 Program pentru afisarea frecventei de aparitie a cuvintelor folosite


de mai multe ori intr-un fisier text. Nu se vor afisa cuvintele folosite o
singura data.

P4.12 Program pentru citirea unui fisier text si crearea unui alt fisier text
cu linii de o lungime maxima impusa, fara a desparti cuvintele la trecerea de
pe o linie pe alta. Cuvintele sunt siruri separate prin unul sau mai multe
spatii albe.

P4.13 Program pentru citirea unui fisier text si scrierea unui alt fisier
(cu acelasi numar de linii) in care fiecare linie se termina cu un caracter
diferit de spatiu alb, prin inserarea de blancuri intre cuvinte cat mai
uniform posibil. In fisierul de iesire toate liniile au aceeasi lungime,
specificata in linia de comanda, dupa numele fisierului de intrare.
P4.14 Program pentru citirea unui fisier sursa C si afisarea textului
dupa eliminarea comentariilor din text. Se vor elimina ambele tipuri de
comentarii: cele care incep prin "//" si cele delimitate de "/*" si "*/".
Un comentariu nu poate contine nici un alt comentariu. Perechile de
caractere //,/* si */ intr-o constanta sir nu semnifica comentarii.

P4.15 Program care inlocuieste toate aparitiile unui sir dat printr-un
alt sir (de lungime diferita), intr-un fisier text. Se va crea un alt
fisier text (cu acelasi nume dar cu extensia "$$$"). In final se
schimba extensia fisierului initial in "BAK" si fisierul creat primeste
extensia fisierului initial.

P4.16 Program care citeste un fisier HTML si creeaza un fisier text (ASCII)
dupa eliminarea tuturor marcajelor din text. Un marcaj ("tag") incepe prin
caracterul '<' si se termina cu caracterul '>', poate contine oricite
caractere si se poate extinde pe mai multe linii. Programul va verifica daca
primele caractere diferite de blanc din fisierul de intrare sunt <HTML ...>
sau <!DOCTYPE HTML ...>.

SOLUTII LA PROBLEME PROPUSE

// R4.1
// lungime sir terminat cu zero
int strlen ( char * s) {
int len=0;
while (* s++)
++ len;
return len;
}
// copiaza sir la adresa d de la adresa s
char * strcpy ( char * d, char * s) {
char * dd =d; // ptr. rezultat ( d se modifica !)
while (*d++ = * s++)
;
return dd; // adresa d nemodificata
}
// concatenare sir s in prelungirea sirului d
char * strcat (char * d, char * s) {
char *dd = d; // ptr. return
while (*d ++) ; // pozitionare pe sfirsitul sirului d
--d; // inaintea terminatorului de sir
while ( *s)
*d++ = *s++;
return dd; // adresa sir rezultat
}
// cauta un caracter c intr-un sir d
char * strchr (char * d, char c) {
while (*d)
if ( c == *d)
return d;
else
++d;
return 0;
}
// cauta ultima aparitie a lui c in sirul d
char * strrchr (char * d, char c) {
char * dd=d;
d=d+ strlen(d);
while (d != dd)
if ( c == *d)
return d;
else
--d;
return 0;
}
// comparare de siruri
int strcmp ( char * s1, char * s2) {
do {
if (*s1 < *s2)
return -1;
if (*s1 > *s2)
return +1;
} while ( *s1++ && *s2++);
return 0; // siruri egale pe toata lungimea
}
// cauta sirul s in sirul d
char * strstr ( char *d, char * s) {
char *pd, *ps ;
while (*d) {
ps=s; pd=d;
while ( *ps)
if ( *ps != *pd)
break;
else {
++ps; ++pd;
}
if ( *ps == 0)
return d;
else
++d;
}
return 0;
}

// R4.2
// echivalenta cu "strncpy"
char * stcpy (char* d, char * s,int n) {
int i=0;
char * dd=d;
while (i < n && *s) {
*d++ = *s++;
i++;
}
*d=0; return dd;
}
// echivalenta cu "strncat"
char * stcat (char* d, char * s,int n) {
char * dd=d;
while (*d) // pozit. pe sfirsit sir d
++d;
while ( n > 0 && *s) {
*d++ = *s++;
n--;
}
*d=0; return dd;
}
// echivalenta cu "strncmp"
int stcmp ( char * d, char *s, int n) {
while ( n>0 && *d && *s && *d == *s ) {
n--; ++d; ++s;
}
if (n==0 || (*d==0 && *s==0) )
return 0; // siruri egale
else
if (*d < *s)
return -1;
else
return 1;
}

// R4.3
/* sterge n caractere de la adresa d */
void strdel (char *d, int n) {
strcpy (d, d+n);
}
// insertie sir s la adresa d
void strins (char *d, char *s) {
int ld=strlen(d), ls=strlen(s);
strcpy (d+ld+ls,d); // deplasare dreapta sir d
strcpy(d,s);
strcpy (d+ls, d+ld+ls);
}
// varianta de insertie sir
void strins (char *d, char *s) {
char aux[1024];
strcpy(aux,d);
strcpy(d,s);
strcat(d,aux);
}
// alta varianta de insertie sir s la adresa d
void strins (char *d, char *s) {
char * aux;
aux=strdup (d); // duplicare d la adresa aux
strcpy(d,s);
strcpy (d+strlen(s), aux);
free(aux); // eliberare memorie alocata de strdup
}

// R4.4
// inlocuieste in txt toate apritiile lui s1 prin s2
void main () {
char txt[200] = "un bit plus un bit nu fac un byte";
char s1[]="un", s2[]="one";
char *p;
p=strstr (txt,s1); // pozitia lui s1 Œn txt
while (p != NULL) {
strdel (p,strlen(s1)); // sterge pe s1 de la adresa p
strins(p,s2); // insereaza s2 la adresa p
p=strstr(p+strlen(s2),s1); // cauta alta aparitie a lui s1
}
puts (txt); // afisare text dupa inlocuire
}

// R4.5
// extragere subsiruri dintr-un sir (var.1)
void data (char * d, int r[3]) {
sscanf (d,"%d-%d-%d",&r[0],&r[1],&r[2]);
}
// extragere subsiruri dintr-un sir (var. 2)
void data (char *d, int r[]) {
char * sep="-";
r[0]=atoi (strtok(d,sep));
r[1]=atoi (strtok(0,sep));
r[2]=atoi (strtok(0,sep));
}
// verificare
void main () {
char d[]="25-12-1999";
int x[3];
data (d1,x);
printf ("\n %d %d %d ",x[0],x[1],x[2]);
}

// R4.6
// afisare si numarare cuvinte
// (a) cu "strtok"
main () {
char *linie ="unu doi \ntrei patru \n cinci sase sapte opt";
char * token; // adresa unui atom din text
char * sep=" \t\n";
int nt=0;
token= strtok (linie,sep);
while ( token != NULL) {
++nt;
printf ("%s \n", token);
token= strtok (0,sep);
}
printf ("%d atomi \n", nt);
}
// afisare si numarare cuvinte (atomi)
// (b) cu "sscanf"
main () {
char *linie ="unu doi \ntrei patru \n cinci sase sapte opt";
char * p, token[40]; // un atom din text
int nt=0;
p=linie;
while ( sscanf(p,"%s",token) > 0) {
++nt;
printf ("%s \n", token);
p= strstr(linie,token)+strlen(token);
}
printf ("%d atomi \n", nt);
}

// R4.7
char *strtok2 (char * sir,char *separ, char * tok) {
char *p, *r;
p=sir;
/* ignora separatori intre atomi */
while (strchr(separ,*p) && *p )
p++;
if (*p=='\0') return NULL;
r=p;
while (strchr(separ,*p)==NULL && *p)
p++;
if (p==r) return NULL;
else {
*p++='\0';
strcpy(tok,r); return p;
}
}
// afisare si numarare cuvinte (atomi)
main () {
char *linie ="unu, doi trei; patru cinci.sase. sapte opt";
char token[20], *p; // adresa unui atom din text
char * sep =" ,.; "; // lista de separatori intre atomi
int nt=0;
p=linie;
while ( p= strtok2 (p,sep,token)) {
++nt;
printf ("%s \n", token);
}
printf ("%d atomi \n", nt);
}
// R4.8
// extrage de la adresa adr un sir de litere la adresa rez
char * nextword ( char * adr, char * rez) {
while ( *adr && ! isalpha(*adr)) // ignora alte caractere
++adr;
while (*adr && isalpha(*adr)) // copiaza litere la adresa rez
*rez++=*adr++;
*rez=0; // terminator sir rezultat
if (*adr==0)
return NULL; // daca nu s-a gasit cuvant
else
return adr; // adresa urmatoare cuvantului gasit
}

// R4.9
// frecv de utilizare a unor cuvinte cheie
#include <stdio.h>
#include <string.h>
#include <ctype.h>
// cauta in tabel de cuv cheie
int keyw ( char * nume, char * kw[], int n ) {
int i;
for (i=0;i<n;i++)
if (strcmp(nume,kw[i])==0)
return i;
return -1;
}
// extrage de la adresa adr un cuvint la adresa rez
char * next ( char * adr, char * rez) {
while ( *adr && ! isalpha(*adr) )
++adr;
while (*adr && isalpha(*adr))
*rez++=*adr++;
*rez=0;
if (*adr==0)
return 0;
else
return adr; // adresa urmatoare cuvantului gasit
}

void main () {
FILE * f; char buf[128] ;
char * p, *r, w[20];
char* kw [5]={"do","for","if","while","break","switch"};
int nr[5]={0}; // nr de aparitii ptr fiecare cuvint
int k,lc,n=5; // lungime vectori kw si nr
printf ("nume fisier: "); scanf("%s",buf);
f=fopen (buf,"r");
if (f==NULL) {
printf("Fisierul %s nu exista \n",buf);
return;
}
while ( fgets(buf,128,f)!=0 ) {
p=buf;
while (r=next (p,w)) { // lungime cuvant urmator
printf("%s ",w);
k= keyw (w,kw,n);
if (k >=0)
nr[k]++;
p=r; // de aici continua cautarea
}
}
for (k=0;k<n;k++)
printf ("%8s = %d \n",kw[k],nr[k]);
}

// R4.10
// compara doua siruri dupa cuvantul k din sir (k=0,1,..)
int compar ( char * a, char * b, int k) {
char w1[80], w2[80];
while (k>=0) {
sscanf(a,"%s",w1); sscanf(b,"%s",w2);
a=strstr(a,w1)+strlen(w1);
b=strstr(b,w2)+strlen(w2);
k=k-1;
}
return strcmp(w1,w2);
}
// ordonare linii din fisier text dupa orice cuvant din linie
void main ( int argc, char * argv[]) {
FILE * f;
char line[132]; int k,n, gata; char * aux;
char * tlin[1000]; // vector de pointeri la linii (max 1000)
f= fopen(argv[1],"r"); // nume fisier in argv[1]
int nc = atoi(argv[2]); // numar cuvant in linie (0,1,..)
// citire fisier si creare vector de pointeri
k=0; // k= indice in vectorul tlin
while ( fgets (line,132,f) )
tlin[k++]=strdup(line);
n=k;
// ordonare vector de pointeri
do {
gata =1;
for (k=0;k<n-1;k++)
if ( compar(tlin[k],tlin[k+1],nc) > 0) {
aux=tlin[k+1]; tlin[k+1]=tlin[k]; tlin[k]=aux;
gata=0;
}
} while (!gata);
// afisare fisier ordonat
puts("");
for (k=0;k<n;k++)
printf("%s",tlin[k]);
}

// R4.11
typedef char word[30]; // un cuvint
// functie care cauta un sir intr-un vector de siruri
int caut ( word w, word t[], int n) {
int i;
for (i=0;i<n;i++)
if (strcmp(w,t[i])==0)
return i;
return -1;
}
// program principal
void main () {
FILE * f; char numef[50]; // nume fisier text
word cuv[300]; // tabel de cuvinte
int nr[300]={0}; int n,k,lc;
char linie[80], * adr, *sep=" \t\n";
puts("Nume fisier:"); gets(numef);
f=fopen(numef,"r"); //deschide fisier
n=0; // nr de cuvinte in vector
while ( fgets(linie,80,f) != 0) {
strcat(linie," ");
adr=strtok(linie,sep); // primul cuvant
// extrage cuvinte din linie
while ( adr ) {
k= caut (adr,cuv,n);
if (k >= 0) // daca exista deja in tabel
++nr[k];
else { // daca e prima aparitie
nr[n]=1;
strcpy(cuv[n],adr); // se introduce in tabel
++n; // si tabelul creste
}
adr=strtok(0,sep); // urmatorul cuvant
}
}
// afisare rezultate
for (k=0;k<n;k++)
if ( nr[k] > 1)
printf ("%s %d \n", cuv[k],nr[k]);
}

// R4.16
// conversie din HTML in text ASCII
#include <stdio.h>
#include <string.h>
void main () {
FILE *html, *text;
char hname[60], tname[60], hline[132], tline[132];
char * p, *p1, *p2;
int tag;
printf ("Fisier HTML: "); gets (hname);
strcpy(tname,hname);
p= strchr(tname,'.'); strcpy (p+1,"txt");
html=fopen(hname,"r"); text = fopen(tname,"w");
// verifica daca fisier HTML
fgets (hline,132,html);
p=hline;
while (*p ==' ') ++p;
if (strncmp(p,"<HTML>",6)!=0 && strncmp(p,"<!DOCTYPE HTML ",15)!=0) {
puts ("Nu este fisier HTML !");
return;
}
tag=0;
while ( fgets(hline,132,html) ) {
p1=hline; p2=tline;
// elimina marcaje HTML din linie
while (*p1) {
while ( *p1 && tag==0 && (*p1 !='<'))
*p2++=*p1++; // caractere exterioare marcajelor
if (*p1==0) break;
else
tag=1; // inceput marcaj
while (*p1 && tag && (*p1 !='>'))
p1++; // sir marcaj
if (*p1 =='>') {
tag=0; ++p1;
}
}
*p2=0;
fputs (tline,text);
}
fclose(text);
}

5. PROGRAME SI FUNCTII CU STRUCTURI

EXEMPLE DE PROGRAME SI FUNCTII

E5.1 Functii pentru operatii cu structuri (fara pointeri, cu rezultat


structura).

typedef struct {
float re, im;
} Complex;

// citire numar complex


Complex cit_cx () {
Complex c;
scanf ("%f %f", &c.re, &c.im);
return c;
}
// scriere numar complex
void scr_cx (Complex c) {
printf ("(%f,%f) ",c.re,c.im);
}
// adunare numere complexe (cu 2 argumente)
Complex plus_cx (Complex c1, Complex c2) {
Complex c3;
c3.re=c1.re+c2.re; c3.im=c1.im+c2.im;
return c3;
}
// verificare functii
main () {
Complex c1={3,4},c2, c3;
c2=cit_cx (); scr_cx(c2);
c3=ad_cx(c1,c2);
scr_cx(c3);
}

E5.2 Operatii cu structuri realizate prin functii "void" (cu pointeri)

typedef struct {
float re, im;
} Complex;

// citire numar complex


void cit_cx (Complex * px) {
Complex c;
scanf ("%f %f", &c.re, &c.im);
*px=c;
}
// adunare numere complexe
void ad_cx (Complex c1, Complex c2, Complex * pc3) {
Complex c3;
c3.re=c1.re+c2.re; c3.im=c1.im+c2.im;
*pc3=c3;
}

main () {
Complex c1={3,4},c2, c3;
cit_cx (&c2); scr_cx(c2);
ad_cx(c1,c2,&c3);
scr_cx(c3);
}

E5.3 Ordonare vector de structuri cu functie de comparare structuri

#include <stdio.h>
typedef struct { // o data calendaristica
int zi,luna,an;
} Date;
// comparare de date
int cmpdat ( Date d1, Date d2) {
int da,dl;
if ( da= (d1.an - d2.an)) return da; // < 0 sau > 0
if ( dl= (d1.luna - d2.luna)) return dl;
return d1.zi-d2.zi; // < 0, ==0, > 0
}
// ordonare vector de date
void sort (Date a[], int n) {
int i,j,gata; Date aux;
do {
gata=1;
for (i=0;i<n-1;i++)
if (cmpdat(a[i],a[i+1]) > 0 ) {
aux=a[i]; a[i]=a[i+1]; a[i+1]=aux;
gata=0;
}
} while ( ! gata);
}
// verificare
void main () {
Date d[30], dd; int n,i;
i=0;
while (scanf ("%d%d%d",&dd.zi,&dd.luna,&dd.an)!=EOF)
d[i++]=dd;
n=i;
sort(d,n);
for (i=0;i<n;i++)
printf("%d-%d-%d\n",d[i].zi,d[i].luna,d[i].an);
}

E5.4 Utilizare structuri pentru reducere numar de argumente la functii

// vectori reprezentati prin structuri


#include <stdio.h>
#define M 100
typedef struct sv {
int vec[M];
int dim;
} Vector;
// citire vector
Vector citvec ( ) {
int i,n; Vector v;
printf ("\n dimensiune vector: ");
scanf ("%d",&n); v.dim=n;
printf ("\n componente vector: \n");
for (i=0;i<n;i++)
scanf ("%d", &v.vec[i]);
return v;
}
// afisare vector
void scrvec (Vector v) {
int i;
for (i=0;i<v.dim;i++)
printf ("%d ",v.vec[i]);
printf ("\n");
}
// extrage elemente comune din doi vectori
Vector comun(Vector a, Vector b) {
Vector c; int i,j,k=0;
for (i=0;i<a.dim;i++)
for (j=0;j<b.dim;j++)
if (a.vec[i]==b.vec[j])
c.vec[k++]=a.vec[i];
c.dim=k;
return c;
}
// verificare functii
void main () {
Vector x,y,z ;
x=citvec ();
y=citvec ();
z=comun(x,y);
scrvec (z);
}

E5.5 Structuri cu continut variabil in timp (uniuni)

#include <stdio.h>
// numar de orice tip
struct number {
char tipn;
union {
int ival;
long lval;
float fval;
double dval;
} v;
};
typedef struct number Num;
// afisare numar

void write (Num n) {


switch (n.tipn) {
case 'I': printf ("%d ",n.v.ival);break;
case 'L': printf ("%ld ",n.v.lval);break;
case 'F': printf ("%f ",n.v.fval);break;
case 'D': printf ("%.15lf ",n.v.dval);break;
}
}
// citire numar
Num read (char tip) {
Num n;
n.tipn=tip;
switch (tip) {
case 'I': scanf ("%d", &n.v.ival);break;
case 'L': scanf ("%ld",&n.v.lval);break;
case 'F': scanf ("%f",&n.v.fval); break;
case 'D': scanf ("%lf",&n.v.dval); break;
}
return n;
}
// verificare functii
void main () {
Num a,b,c,d;
a = read('I'); b=read('L');
c = read('F'); d=read('D');
write(a); write(b); write(c); write(d);
}

Obs. Memorarea unor date de tipuri diferite la o aceeasi adresa se poate


realiza si fara tipul "union", folosind pointeri de tip "void *".

E5.6 Crearea si afisarea unui fisier de articole ce corespund unor structuri


din memorie (cu numele si mediile unor elevi).

// structura articole din fisier


typedef struct {
char nume[25];
float medie;
} Elev;
// creare - afisare fisier de articole
void main () {
FILE * f; Elev e;
char numef[80]; // aici se pune nume fisier
puts("Nume fisier:"); gets (numef);
// creare fisier
f=fopen(numef,"wb"); // creare de fisier binar
assert (f != NULL);
printf (" nume si medie ptr. fiecare student : \n\n");
while (scanf ("%s %f ",e.nume, &e.medie) != EOF)
fwrite(&e,sizeof(e),1,f);
fclose (f);
// listare fisier
f=fopen(numef,"rb"); // citire fisier binar
assert (f != NULL);
while (fread (&e,sizeof(e),1,f)==1)
printf ("%-25s %6.2f \n",e.nume, e.medie);
fclose (f);
}

E5.7 Cautarea si modificarea unor articole dintr-un fisier de articole.

// structura articole din fisier


typedef struct {
char nume[25];
float medie;
} Elev;
// adaugare articole la sfarsit de fisier
void adaugare (char * numef) {
FILE * f; Elev e;
f=fopen(numef,"ab"); assert (f != NULL);
printf (" nume si medie ptr. fiecare student : \n\n");
while (scanf ("%s %f ",e.nume, &e.medie) != EOF)
fwrite(&e,sizeof(e),1,f);
fclose (f);
}
// cautare si modificare articole
void modificare (char * numef) {
FILE * f; Elev e; char nume[25];
long pos; int eof;
f=fopen(numef,"rb+"); assert (f != NULL);
do {
printf ("Nume cautat: "); eof=scanf ("%s",nume);
if (eof==EOF) break;
// cauta "nume" in fisier
fseek(f,0,0); // repozitionare pe inceput de fisier
pos=-1L; // pozitia unde va fi sau nu gasit numele cautat
while (fread (&e,sizeof(e),1,f)==1)
if (strcmp (e.nume, nume)==0) {
pos= ftell(f)-sizeof(e);
break;
}
if ( pos < 0) break;
printf ("noua medie: "); scanf ("%f", &e.medie);
fseek (f,pos,0); // pozitionare pe inceput de articol gasit
fwrite(&e,sizeof(e),1,f); // rescrie articol modificat
} while (eof!=EOF);
fclose (f);
}
// actualizare fisier existent
void main () {
FILE * f; Elev e;
char c, numef[80]; // aici se pune nume fisier
puts("Nume fisier:"); gets (numef);
puts("Operatie (A=adaugare, M=modificare):");
c=getchar();
if (c=='a' || c=='A') adaugare(numef);
else
if (c=='m' || c=='M') modificare(numef);
}

PROBLEME PROPUSE

P5.1 Functii pentru inmultirea a doua numere complexe si pentru ridicarea


la o putere intreaga a unui numar complex prin inmultiri repetate. Program
pentru calculul valorii (complexe) a unui polinom de variabila complexa,
cu coeficienti numere complexe.

P5.2 Sa se defineasca o structura "Time" care grupeaza 3 intregi ce


reprezinta ora, minut si secunda pentru un moment (sau un interval) de timp.
Functii pentru citire, scriere si comparare de structuri "Time". Functia
de comparare dupa modelul functiei "strcmp". Program pentru verificarea
functiilor.

P5.3 Program pentru ordonarea cronologica a unor momente de timp si afisarea


listei ordonate, folosind functii din programul anterior.
P5.4 Sa se defineasca o structura "Punct" pentru un punct din plan ( cu
doua coordonate x,y de tip "float") si o structura "Poligon" pentru un
poligon definit prin numarul de varfuri si un vector de coordonate ale
varfurilor (de tip "Punct"). Functie pentru calculul distantei dintre
doua puncte din plan. Functie pentru calculul perimetrului unui poligon.
Program pentru calculul perimetrului unui triunghi si unui patrulater.

P5.5 Sa se defineasca o structura "Vector" pentru un vector alocat dinamic


si extensibil, care contine dimensiunea maxima si dimensiunea efectiva a
vectorului. Functii pentru initializarea unui vector, pentru adaugarea unui
element (cu extindere daca este necesara) si pentru afisarea unui vector de
tip "Vector". Tipul elementelor T este neprecizat si poate fi orice tip
predefinit sau definit de utilizator. Program care foloseste functiile.

P5.6 Sa se defineasca o structura "Per" pentru o pereche cuvant- numar


si o structura "Dic" pentru un dictionar ca vector de perechi "Per".
Program pentru afisarea frecventei de aparitie a unor cuvinte (citite de la
consola) si care foloseste un dictionar de cuvinte si numar de aparitii. Se
va defini si folosi o functie pentru cautarea unui cuvant in dictionar si
adaugarea unei perechi cuvant-numar la dictionar (daca cuvant negasit) sau
modificarea numarului de aparitii (daca cuvant gasit).

P5.7 Sa se defineasca o structura "Dic" pentru un dictionar compus din doi


vectori: un vector de cuvinte (siruri) si un vector de intregi, plus
dimensiunea lor comuna (vectori cu dimensiune fixa). Program pentru afisarea
frecventei de aparitie a unor cuvinte (citite de la consola) care foloseste
un dictionar de cuvinte si numar de aparitii. Se vor defini functii pentru
adaugarea unei prechi cuvant-numar la dictionar si respectiv pentru cautarea
unui cuvant in dictionar, cu rezultat numar de aparitii sau -1 daca negasit.

P5.8 Sa se defineasca un tip "Set" ca pointer la o structura ce reuneste


adresa, dimensiunea alocata si dimensiunea efectiva pentru un vector
alocat si realocat dinamic prin care se reprezinta o multime de numere
intregi. Multimea vida are dimensiunea zero. Functii pentru creare multime
vida, adaugare numar la multime, test apartenenta la multime, afisare
multime, comparatie la egalitate, reuniune, intersectie si diferenta de
multimi. Functiile au argumente de tip "Set". Program pentru verificarea
acestor functii.

P5.9 Sa se reuneasca operatiile cu fisierul de elevi din exemplele anterioare


intr-un singur program cu mai multe functii si un meniu de alegere a operatiei
afisat pe ecran dupa fiecare operatie. Optiuni meniu: creare, listare,
adaugare la sfarsit, modificare continut, terminare (iesire).

P5.10 Sa se defineasca o structura "Bon" pentru un bon de vanzare ce contine


numele unui produs (max 30 caractere), cantitatea (un intreg) si valoarea
unei vanzari (un numar neintreg). Program pentru urmatoarele operatii cu
acest fisier: adaugare la sfarsit fisier (cu creare daca nu exista), afisare
integrala fisier, afisare bonuri pentru un produs specificat, cu totalizare
valoare bonuri pe acel produs.

SOLUTII LA PROBLEME PROPUSE

// R5.1
// ... alte functii (citire, scriere, adunare)
// produs de numere complexe
void prod_cx (Complex a, Complex b, Complex* pc) {
Complex c;
c.re = a.re*b.re - a.im*b.im;
c.im = a.re*b.im + a.im*b.re;
*pc=c;
}
// ridicare complex la putere intreaga
void put_cx (Complex a, int n, Complex * pc) {
Complex c={1,0}; int k;
for (k=0;k<n;k++)
prod_cx (a,c, &c);
*pc=c;
}
// valoare polinom de variabila complexa
void pol_cx ( int n, Complex c[], Complex x, Complex* rez) {
int i; Complex sum=c[0], t;
for (i=1;i<=n;i++) {
put_cx(x,i,&t); // t=x^i
prod_cx (c[i],t, &t); // c[i]*x^i
plus_cx (sum,t,&sum); // aduna termen la suma
}
*rez=sum;
}
// verificare functii
void main () {
Complex a[30], x, c; int i,n;
printf("x="); cit_cx (&x);
printf("n="); scanf("%d",&n);
printf("Coeficienti: \n");
for (i=0;i<=n;i++)
cit_cx(&a[i]);
pol_cx(n,a,x,&c);
scr_cx(c);
}

// R5.2
#include <stdio.h>
// operatii cu momente de timp
typedef struct {
int ora,min,sec;
} Time;
// verifica daca timp plauzibil
int corect (Time t) {
if ( t.ora < 0 || t.ora > 23 ) return 0;
if ( t.min < 0 || t.min > 59 ) return 0;
if ( t.sec < 0 || t.sec > 59 ) return 0;
return 1; // plauzibil corect
}
// citire ora
Time rdtime () {
Time t;
do {
scanf ("%d%d%d", &t.ora, &t.min,&t.sec);
if ( ! corect (t))
printf ("Date gresite, repetati introducerea: \n");
else break;
} while (1);
return t;
}
// scrie ora
void wrtime ( Time t) {
printf ("%d:%d:%d \n", t.ora,t.min,t.sec);
}
// compara momente de timp
int cmptime (Time t1, Time t2) {
int h,m;
h=t1.ora-t2.ora;
m=t1.min-t2.min;
if (h) return h;
if (m) return m;
return t1.sec-t2.sec;
}
main () {
Time t1,t2;
do {
t1=rdtime(); wrtime(t1);
t2=rdtime(); wrtime(t2);
printf ("%d \n", cmptime(t1,t2));
} while (1);
}

// R5.4
// structuri in probleme geometrice : punct, poligon etc.
#include <stdio.h>
#include <math.h>
typedef double Real;
typedef struct { Real x,y;} Punct;
typedef struct { int nv; Punct v[50];} Poligon;
// lungime segment delimitat de doua puncte
Real lung (Punct a, Punct b) {
Real dx= b.x-a.x;
Real dy= b.y-a.y;
return sqrt ( dx*dx+dy*dy);

}
// calcul primetru poligon
Real perim ( Poligon p) {
int i,n; Real rez=0;
n=p.nv;
for (i=0;i<n-1;i++)
rez = rez + lung (p.v[i],p.v[i+1]);
return rez+lung(p.v[n-1],p.v[0]);
}
// verificare
void main () {
Poligon p;
int i,n;
printf("nr. varfuri:"); scanf ("%d",&n);
p.nv=n;
printf ("coord. varfuri:\n");
for (i=0;i<n;i++)
scanf("%lf%lf", &(p.v[i].x), & (p.v[i].y) );
printf ("%lf \n", perim(p));
}

// R5.5
#include <stdio.h>
#include <stdlib.h>
#define INCR 100 // cu cat creste vectorul
typedef int T; // tip componente vector
typedef struct vf {
T * vec; // adresa vector
int dim, dmax; // dimensiune curenta si maxima
} Vector;
// initializare vector
void initVec (Vector * v) {
v->vec= (T *) malloc (INCR*sizeof(T));
v->dmax=INCR;
v->dim=0;
}
// adaugare element la vector
void addVec ( Vector * v, T x) {
if (v->dim == v->dmax) {
v->dmax += INCR; /* extindere vector */
v->vec=(T*) realloc (v->vec, (v->dmax)*sizeof(T));
}
v->vec[v->dim]=x; v->dim ++;
}
// afisare vector
void printVec ( Vector v) {
void printT (T );
int i;
for (i=0; i< v.dim;i++)
printT ( v.vec[i]);
printf("\n");
}
// afisare valoare de tip T
void printT (T x) {
printf ("%d ",x);
}
// creare si afisare vector
void main() {
T x; Vector v;
initVec (&v);
while (scanf("%d",&x) != EOF)
addVec ( &v,x);
printVec (v);
}

// R5.6
// frecventa de aparitie a cuvintelor, cu vector de structuri
#include <stdio.h>
#include <string.h>
#define MAXL 16 // nr maxim de litere dintr-un cuvant
#define MAXW 1000 // nr. maxim de cuvinte}
typedef struct {
char id[MAXL]; // cuvant
int na ; // numar de aparitii
} Per; // pereche cuvint-numar
typedef struct {
int nc; // dimensiune vector
Per tc[MAXW] ; // tabel de cuvinte
} Dic;

void initDic (Dic * d) {


d->nc=0; // initial nici un cuvint
}

void printDic (Dic d) {


int i;
for (i=0;i< d.nc;i++)
printf ("%20s %3d \n",d.tc[i].id, d.tc[i].na);
}
// cautare/adaugare in dictionar
void addDic (Dic * d, char* w) {
int i=0;
// cauta cuvint in tabel
while ( i<d->nc && strcmp(w,d->tc[i].id) )
i++;
if (i >= d->nc) { //daca este un cuvint nou
strcpy (d->tc[d->nc].id, w); // adauga la sfirsit de tabel
d->tc[d->nc].na=1;
++ d->nc;
}
else // daca este o alta aparitie a unui cuvint
d->tc[i].na ++; // incrementare nr de aparitii
}
// creare si afisare dictionar
void main () {
char word[MAXL]; // un cuvint
Dic dic; // lista de cuvine
initDic( &dic);
while (scanf ("%s",word) > 0)
addDic ( &dic,word);
printDic (dic);
}

// R5.7
// dictionar ca structura cu doi vectori
#include <stdio.h>
#include <string.h>
#define MAXL 16 // nr maxim de litere dintr-un cuvant
#define MAXW 1000 // nr. maxim de cuvinte
typedef struct {
int n; // dimensiune vectori
char tc[MAXW][MAXL] ; // tabel de cuvinte
int tf[MAXW] ; // tabel frecventa de aparitie
} Dic;
// initializare
void initDic (Dic * d) {
d->n=0; // initial nici un cuvint
}
// afisare dictionar
void printDic (Dic d) {
int i;
for (i=0;i< d.n;i++)
printf ("%20s %4d \n",d.tc[i], d.tf[i]);
}
// pune pereche cheie-valoare in dictionar
void putDic (Dic * d, char* cuv, int n) {
int i=0;
// cauta cheia in dictionar
while ( i<d->n && strcmp(cuv,d->tc[i]))
i++;
if (i >= d->n) { //daca este un cuvint nou
strcpy (d->tc[d->n], cuv); // adauga la sfirsit de tabel
d->tf[d->n]=1; // prima aparitie
++ d->n;
}
else // cheie existenta
d->tf[i]=n;
}

// citire valoare asociata unei chei date


int getDic (Dic d, char * cuv) {
int i=0;
// cauta cheia in dictionar
while ( i< d.n && strcmp(cuv,d.tc[i]) )
i++;
if (i >= d.n) //daca negasita
return -1;
else
return d.tf[i]; // frecventa cuv
}
// creare si afisare ductionar
void main () {
char word[MAXL]; // un cuvint
int nr; // nr de aparitii
Dic dic; // lista de cuvine
initDic ( &dic);
while (scanf ("%s",word) > 0)
if ( (nr=getDic (dic,word)) >=0 ) // daca exista cuvantul
putDic (&dic,word,nr+1); // mareste contor aparitii
else
putDic (&dic,word,1); // daca nu exista
printDic (dic);
}

// R5.8
#include <stdio.h>
#include <stdlib.h>
#define M 10 // dimensiune initiala multime
typedef struct set {
int * val; // adresa vector de valori
int max, n; // numar maxim si numar efectiv de elemente
} * Set;

// initializare multime vida


void init (Set a) {
a->val = (int*) malloc (M*sizeof(int));
a->max=M; a->n=0;
}
// test daca o valoare data apartine unei multimi
int contine (Set a, int x) {
int i;
for (i=0; i< a->n ; i++)
if (x==a->val[i])
return 1; // x apartine lui a
return 0; // x nu apartine lui a
}
// adaugare element la o multime
void plus (Set a, int x) {
int k;
if (contine (a,x)) return ; // nimic daca exista deja
if ( a->n >= a->max ) { // vector plin
a->max += M; // creste dimensiune vector
a->val= (int*) realloc(a->val,a->max);
}
a->val[ a->n]=x; // adauga elem la multime
a->n ++; // creste numar de elemente din multime
}
// afisarea elementelor unei multimi
void scrie (Set a) {
int i=0;
printf ("\n{ ");
for (i=0;i<a->n;i++)
printf ("%d ", a->val[i]);
printf (" } \n");
}
// reuniune de multimi
void plusm (Set a, Set b, Set c) {
int i; init(c);
for (i=0; i<a->n; i++)
plus (c, a->val[i]);
for (i=0; i<b->n; i++)
plus (c, b->val[i]);
}
// intersectie de multimi
void inters (Set a, Set b, Set c) {
int i; init(c);
for (i=0;i< a->n ; i++)
if ( contine (b, a->val[i]))
plus (c,a->val[i]);
}
// diferenta de multimi a-b
void minusm (Set a, Set b, Set c) {
int i,k; init(c);
for (i=0; i< a->n; i++)
if ( ! contine (b, a->val[i]) ) // elem. din a care nu sunt si in b
plus (c,a->val[i]);
}
// citire valori si creare multime
void citmul (Set a) {
int x;
do {
scanf("%d",&x);
if (x==0) return;
plus(a,x);
} while (x);
}
// program principal
void main () {
struct set a, b, c, d, e ;
init(&a); citmul(&a); citmul(&b);
scrie(&a); scrie(&b);
plusm (&a,&b,&c); scrie (&c);
inters (&a,&b,&d); scrie (&d);
minusm(&a,&b,&e); scrie(&e);
}

// R5.10
#include <stdio.h>
#include <assert.h>
#include <string.h>
// structura articole fisier
typedef struct {
char nume[20];
int cant; long val;
} Bon;
// adaugare bonuri la sfarsit de fisier (si creare fisier)
void adaugare (char * numef) {
FILE * f; Bon b; char c;
f=fopen (numef,"rb");
if (f==NULL) {
printf ("Fisier inexistent . Creare fisier nou ? (d/n) ");
fflush(stdin); c=getchar();
if (c=='n' || c=='N')
return;
f=fopen(numef,"wb"); assert (f != NULL);
}
else
f=fopen (numef,"ab"); // pozitionare pe afarsit de fisier
puts ("Introducere bonuri si creare fisier \n");
printf (" nume, cantitate, valoare : \n\n");
while (scanf ("%s %d %ld ",b.nume, &b.cant, &b.val) != EOF)
fwrite(&b,sizeof(b),1,f);
fclose (f);
}
// afisarea tuturor bonurilor din fisier
void listare (char* numef) {
FILE * f; Bon b;
f=fopen(numef,"rb"); assert (f != NULL);
while (fread (&b,sizeof(b),1,f)==1)
printf ("%-20s %6d %12ld \n",b.nume, b.cant, b.val);
fclose (f);
}
// afisare si totalizare bonuri pentru un produs dat
void total (char * numef) {
FILE * f; Bon b;
char numep[20]; long sum=0;
f=fopen(numef,"rb"); assert (f != NULL);
puts("\n\n\n"); fflush(stdin);
printf("Nume produs: "); gets(numep);
while (fread (&b,sizeof(b),1,f)==1)
if (strcmp(numep,b.nume)==0) {
printf ("%-20s %6d %12ld \n",b.nume, b.cant, b.val);
sum =sum+ b.val;
}
printf (" Valoare totala = %ld\n", sum);
fclose (f);
}
// afisare meniu si tratare optiuni
void main () {
char opt [2];
char numef [30]; // nume fisier
printf("Nume fisier: "); scanf ("%s", numef);
// afisare repetata meniu
do {
printf (" a = adaugare bonuri la fisier \n");
printf (" l= afisare bonuri din fisier \n");
printf (" t = bonuri si total pe produs \n");
printf (" x = terminare program \n");
printf (" \n \n \n ");
// citire si interpretare comanda
scanf ("%1s",opt);
switch (opt[0]) {
case 'a' : adaugare (numef); break;
case 'l' : listare(numef); break;
case 't' : total(numef); break;
case 'x' : return;
}
getchar(); // pentru mentinere rezultate
} while ( opt[0] != 'x');
}

6. PROGRAME CU DATE ALOCATE DINAMIC

EXEMPLE DE PROGRAME

E6.1 Functie echivalenta cu functia de biblioteca "strdup"

#include <string.h>
#include <alloc.h>
// alocare memorie si copiere sir
char * strdup ( char * adr) {
int len=strlen(adr);
char * rez = (char*) malloc(len);
strcpy(rez,adr);
return adr;
}
// utilizare "strdup"
#include <stdio.h>
void main () {
char s[80], * d;
do {
if (gets(s)==0) break;
d= strdup(s);
puts(d);
} while (1);
}
E6.2 Vector alocat dinamic (cu dimensiune cunoscuta la eexecutie)

#include <stdio.h>
#include <stdlib.h>
void main () {
int n,i;
int * a; // adresa vector
printf("n="); scanf("%d",&n); // dimensiune vector
a=(int*) malloc (n*sizeof(int));
printf("componente vector: \n");
for (i=0;i<n;i++) // citire vector
scanf("%d", &a[i]);
for (i=0;i<n;i++) // afisare vector
printf("%d ", a[i]);
}

E6.3 Vector realocat dinamic (cu dimensiune necunoscuta)

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define INCR 4
void main() {
int n,i,m ;
float x, * v;
n=INCR; i=0;
v=(float *)malloc (n*sizeof(float));
while (scanf("%f",&x) !=EOF){
if (i == n) {
n= n+ INCR;
v=(float *) realloc (v,n*sizeof(float));
}
v[i++]=x;
}
m=i;
for (i=0;i<m;i++)
printf ("%.2f ",v[i]);
}

E6.4 Matrice alocata dinamic (cu dimensiuni cunoscute la executie)

#include <stdio.h>
#include <stdlib.h>
void main () {
int n,i,j;
int ** mat; // adresa matrice
// citire dimensiuni matrice
printf("n="); scanf("%d",&n);
// alocare memorie ptr matrice
mat=(int **) malloc (n*sizeof (int*));
for (i=0;i<n;i++)
mat[i] =(int*) calloc (n,sizeof (int));
// completare matrice
for (i=0;i<n;i++)
for (j=0;j<n;j++)
mat[i][j]= n*i+j+1;
// afisare matrice
for (i=0;i<n;i++) {
for (j=0;j<n;j++)
printf ("%6d ",mat[i][j]);
printf ("\n");
}
}

E6.5 Vector de pointeri la siruri alocate dinamic

/* Creare/ afisare vector de pointeri la siruri */


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// afisare siruri reunite Œn vector de pointeri


void printstr ( char * vp[], int n) {
int i;
for(i=0;i<n;i++)
printf ("%s\n",vp[i]);
}
// ordonare vector de pointeri la siruri
void sort ( char * vp[],int n) {
int i,j; char * tmp;
for (j=1;j<n;j++)
for (i=0;i<n-1;i++)
if ( strcmp (vp[i],vp[i+1])>0) {
tmp=vp[i]; vp[i]=vp[i+1];
vp[i+1]=tmp;
}
}
// citire siruri si creare vector de pointeri
int readstr (char * vp[]) {
int n=0; char * p, sir[80];
while ( scanf ("%s", sir) == 1) {
p= (char*) malloc (strlen(sir)+1);
strcpy( p,sir);
vp[n]=p; ++n;
}
return n;
}

void main () {
int n; char * vp[1000]; // vector de pointeri, cu dimens. fixa
n=readstr(vp); // citire siruri si creare vector
sort ( vp,n); // ordonare vector
printstr (vp,n); // afisare siruri
}

E6.6 Structuri alocate dinamic si legate prin pointeri (liste inlantuite)

// creare si afisare lista simplu inlantuita


#include <stdio.h>
#include <stdlib.h>
// definire tip nod de lista
typedef struct snod {
int val; // valoare nod
struct snod * leg; // legatura la nodul urmator
} nod;

void main () {
nod * list, *nou, *p; // lst = adresa primului nod
int x;
// citire numere si creare lista
list=NULL; // lista initial vida
while (scanf ("%d",&x) > 0) {
nou= (nod*) malloc(sizeof(nod)); // creare nod nou
nou->val=x;
nou->leg=list; list=nou; // adauga noul nod la inceputul listei
}
// afisare lista
p=list;
while ( p != NULL) { // cat timp mai sunt noduri in lista
printf ("%d ", p->val); // afisare valoare din nodul cu adresa p
p=p->leg; // avans la nodul urmator
}
}

PROBLEME PROPUSE

P6.1 Program care citeste mai multe linii de text de la tastatura si


le memoreaza intr-un vector de caractere alocat si realocat dinamic
(textul va fi terminat cu zero si va rezulta prin concatenare de linii).

P6.2 Program care citeste mai multe linii de text de la tastatura, aloca
dinamic memorie pentru fiecare linie si pune adresa liniei intr-un vector
de pointeri (vector alocat si realocat dinamic)

P6.3 Program pentru crearea si afisarea unei liste inlantuite de pointeri


la siruri alocate dinamic.

P6.4 Sa se scrie o functie pentru alocarea unor matrice patratice cu


dimensiuni date de reali (de tip "double"). Sa se scrie un program care
citeste si afiseaza valori in/din matricea astfel alocata (dimensiunea se

citeste in programul principal).

P6.5 Functii pentru operatii cu multimi realizate ca vectori de biti


alocati dinamic. Se va defini un tip "Set" ca pointer la o structura care
reuneste adresa si dimensiunea vectorului multime. Functii pentru afisare

multime, creare multime vida, adaugare numar la multime, copiere multime,


test de apartenenta, reuniune si intersectie de multimi. Valoarea k este
in multime daca este 1 bitul k%16 din intregul aflat in pozitia k/16 in
vector. Dimensiunea multimii (ca numar de biti) se da la creare multime
vida si nu mai poate creste prin adaugare de elemente.

P6.6 Functie pentru adunarea a doua numere intregi fara semn cu maxim 254
cifre zecimale, reprezentate prin vectori de cifre zecimale (cate o cifra
pe un octet), precedate de lungimea lor . Numerele pot avea lungimi diferite,
iar prima cifra este cea mai putin semnificativa (cifra unitatilor). Functii
pentru conversia din sir de caractere in numere reprezentate ca vectori de
cifre si pentru conversia inversa. Memoria se aloca dinamic pentru fiecare
sir de cifre. Program pentru verificarea functiilor prin citire, adunare
si afisare suma de intregi foarte lungi.
Exemplu de adunare: 567089 + 432 = 567521

P6.7 Functii pentru operatii cu liste inlantuite de numere: initializare


lista vida, adaugare la sfarsit de lista, afisare lista. Program pentru
creare si afisare lista folosind aceste functii.

P6.8 Functii pentru operatii cu liste ce contin la inceput un nod fara


date (element santinela creat la initializarea listei). Program pentru
crearea si afisarea unei liste de numere.

P6.9 Functie pentru adaugare la o lista ordonata de numere, cu pastrarea


ordinii. Program pentru crearea si afisarea unei liste ordonate de numere.

SOLUTII LA PROBLEME PROPUSE

// R6.5
#include <stdio.h>
#include <stdlib.h>
// definire tip Set
typedef struct {
unsigned int * bset;
int dim;
} * Set;
// initializare multime de n elemente
void init (Set m, int n){
m->dim = n/16+1; // nr de cuvinte in vector
m->bset = (unsigned int *) calloc (n/16+1, sizeof(int));
}
// adauga un element la multime
void addelem (Set m,int el){
int i,j;
i= el / 16;
j= el % 16;
m->bset[i]= m->bset[i] | (1<<j);
}
// adunare (reuniune) multimi
void add (Set a, Set b, Set c) {
int i;
if ( a->dim != b->dim)
return;
c->dim=a->dim;
c->bset = (unsigned int*)calloc (c->dim, sizeof(int));
for (i=0; i<c->dim;i++)
c->bset[i]=a->bset[i] | b->bset[i];
}
// intersectie de multimi
void inters (Set a, Set b, Set c) {
int i;
if ( a->dim != b->dim)
return;
c->dim=a->dim;
c->bset = (unsigned int*)calloc (c->dim, sizeof(int));
for (i=0; i<c->dim;i++)
c->bset[i]=a->bset[i] & b->bset[i];
}
// apartenenta la multime
int este(Set m,int el){
int i,j;
i= el / 16;
j= el % 16;
return m->bset[i]&(1<<j)? 1:0;
}
// nr de elemente in multime
int size ( Set m) {
int j,i,k=0;
for(j=0;j<m->dim;j++)
for (i=0;i<16;i++)
if(m->bset[j] & (1<<i))
k++;
return k;
}
// afisare multime
void printset(Set m) {
int j,i;
printf("{ ");
for(j=0;j<m->dim;j++)
for (i=0;i<16;i++)
if(m->bset[j] & (1<<i))
printf("%d,",i+16*j);
printf("\b }\n");
}
// copiere multime
void clone ( Set a, Set c) {
int i;
c->dim=a->dim;
c->bset = (unsigned int*)calloc (c->dim, sizeof(int));
for (i=0; i<c->dim;i++)
c->bset[i]=a->bset[i] ;
}
// verificare functii
void main() {
Set a,b,c,d; int i;
init (b,50); init (a,50);
addelem (a,3); addelem (a,13);
addelem (b,13); addelem(b,4);
printset(a); printf (" %d \n",size(a));
printset (b); printf (" %d \n",size(b));
add (a,b,c); printset (c);
clone (a,d); printset (d);
inters (a,b,d); printset (d);
printf ("%d \n", este (d,13));
printf ("%d \n", este (d,3));
}

// R6.6
// numere lungi ca sir de cifre bcd (o cifra pe octet)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef char* bcd;
// conversie din ascii in bcd
bcd asc_bcd (char a[]) {
char * b; // adresa rezultat conversie
int i,j,la =strlen(a); // ;lungime sir a
if (la >254) return NULL; // eroare
b= (char*) malloc(la+1); // aloca memorie pentru numarul bcd
b[0]=la;
j=la-1; // ultimul octet din a
for (i=1;i<=la;i++,j--)
b[i]=a[j]-'0';
return b;
}
// conversie din bcd in ascii
void bcd_asc (bcd b, char a[]) {
int i,j;
j=0;
for (i=b[0];i>0;i--,j++)
a[j]=b[i]+'0';
a[j]=0;
}
// adunare de numere bcd
bcd add_bcd (bcd b1, bcd b2) {
int i,s,t,l1,l2,l3,c1,c2;
char * b3;
l1=b1[0]; l2=b2[0];
l3= l1>l2?l1:l2;
b3 =(char*) malloc(l3+2);
t=0;
b3[0]=l3; // poate mai creste cu 1 !
for (i=1;i<=l3;i++) {
c1= i<=l1? b1[i]:0;
c2= i<=l2? b2[i]:0;
s=c1+c2+t;
t=s/10; // transport la rangul urmator
s=s%10; b3[i]=s;
}
if (t) { // transport de la ultimul rang;
b3[0]++;
b3[i]=1;
}
return b3;
}
// verificare functii
void main () {
char s[255],r[255]; bcd b1,b2,b3;
int i;
do {
scanf("%s",s);
b1=asc_bcd(s);
scanf("%s",s);
b2=asc_bcd(s);
b3=add_bcd (b1,b2);
bcd_asc (b3,r);
printf("%s\n",r);
} while (1);
}

1) Fie m un număr întreg, 10 < m < 1000. Aflaţi ultima 2) Fie r un număr întreg, 10 < r < 1000. Aflaţi penultima
cifră a sumei -1 + 2 - 3 + 4 -…+ m .
1 2 3 4 m
cifră a sumei -11 + 22 - 33 + 44-…+ rr.
#include<conio.h>
#include<conio.h> #include<stdio.h>
#include<stdio.h> #include<math.h>
#include<math.h> main()
main() { int m,i,x,y; float s;
{ scanf("%d",&m);s=0;
int m,i,x,y; float s; for(i=1;i<=m;i++)
scanf("%d",&m);s=0; s=s+pow((-1),i)*pow(i,i);
for(i=1;i<=m;i++) x=s; y=x/10;
s=s+pow((-1),i)*pow(i,i); x=y%10;
x=s; y=x%10; if (x<0) x*=-1;
if (y<0) y*=-1; printf( "%d", x);
printf( "%d", y); getch();}
getch();}
pentru n intre 10 si 1000 nu merge
#include<conio.h>
#include<stdio.h>
#include<math.h>
int p(int);
main(){
int n,i,k,s1,s2;
i=1;
printf("introduceti un nr 10<n<1000,n=");
scanf("%d",&n);
s1=0;
s2=0;
for(;i<=n;i++)
{
if(i%2==0) s1=s1+p(i);
else
s2=s2+p(i);
}
if(n%2==0)
{
if(s1>s2)
k=(s1-s2)-((s1-s2)/10)*10;
else
{
s1=10000+s1;
k=(s1-s2)-((s1-s2)/10)*10;
}
}
else
{
if(s2>s1) k=(s2-s1)-((s2-s1)/10)*10;
else
{
s2=10000+s2;
k=(s2-s1)-((s2-s1)/10)*10;
}
}
printf("ultima cifra a sumei -1+2*2-3*3*3... este:%d",k);
getch();
}
int p(int i)
{
int r,
k=1;
r=1;
for(;k<=i;k++)
{
r=r*i;
r=r-r/10*10;
}
return r;
}
3) Fie un cuvânt B ce conţine cel puţin o vocală. Aflaţi care 4) Fie s un număr întreg, 10 < s < 1000. Aflaţi ultimele 2
literă din alfabet urmează după vocala de cod minim din cifre ale sumei -11 + 22 - 33 + 44-…+ ss.
cuvântul dat.
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
#include<string.h> #include<math.h>
main() main()
{ {
char s[50];int i,m,a[50],min; int m,i,x,y,ul,pen; float s;
gets(s); scanf("%d",&m);s=0;
i=0; m=0; for(i=1;i<=m;i++)
while(s[i]!='\0'){ s=s+pow((-1),i)*pow(i,i);
if((s[i]=='a')||(s[i]=='e')||(s[i]=='o')||(s[i]=='i') x=s;
||(s[i]=='u')||(s[i]=='A')||(s[i]=='E')||(s[i]=='O')||(s[i]=='I')||(s[i]== ul=x%10;
'U')) y=x/10;
a[m++]=s[i]; i++;} pen=y%10;
min=a[0]; if (ul<0) ul*=-1;
for(i=0;i<m;i++) if (pen<0) pen*=-1;
if(min>a[i]) min=a[i]; printf( "%d , %d",pen,ul);
printf("Vocala cu codul minim in acest cuvint este %c, dupa ea getch();}
urmeaza litera %c ",min,min+1); pentru n intre 10 si 1000 nu merge
getch();}
5) Fie m un număr întreg, 10 < m < 1000. Aflaţi produsul 6) Fie n mulţimi de numere întregi consecutive A1, A2,
ultimelor 2 cifre ale sumei -1 + 2 - 3 + 4 -…+ m .
1 2 3 4 m
A3, ..., An. Aflaţi intersecţia acestor mulţimi.
#include<conio.h> #include <stdio.h>
#include<stdio.h> #include <conio.h>
#include<math.h> #include <string.h>
main() main()
{ {
int m,i,x,y,ul,pen; float s; int i,min[130],max[30],n,in,ax;
scanf("%d",&m);s=0;
for(i=1;i<=m;i++) printf ("Dati nr. de multimi intregi:",n);
s=s+pow((-1),i)*pow(i,i); scanf("%d",&n);
x=s;
ul=x%10; for (i=0;i<n;i++)
y=x/10; {
pen=y%10; printf("\nValorile %d multimi:\n",i+1);
if (ul<0) ul*=-1; printf("min:");
if (pen<0) pen*=-1; scanf("%d",&min[i]);
printf( "%d",pen*ul); printf("max:");
getch();} scanf("%d",&max[i]);
if (max[i]<min[i]) {printf ("Multime imposibila\n"); i--;}
pentru n intre 10 si 1000 nu merge }
in=min[0];
ax=max[0];
for (i=0;i<n;i++){
if (in<min[i]) in=min[i];
if (ax>max[i]) ax=max[i];
}
if (in>ax) printf("Intesectia multimilor este multimea vida");
else
{
printf("\nIntesectia multimelor este:");
for (i=in;i<ax;i++)
printf("%d",i);
}
getch();
}
7) Fie n mulţimi de numere întregi consecutive A1, A2, A3, 8) Fie n mulţimi de numere întregi consecutive A1, A2,
..., An. Aflaţi reuniunea acestor mulţimi. A3, ..., An. Verificaţi dacă aceste mulţimi sunt incluse una
în alta, adică A1 A2 A3 ... An.
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{
int i,min[130],max[30],n,in,ax,j,re[100],re2[100],z,l,k;

printf ("Dati nr. de multimi intregi:",n);


scanf("%d",&n);

for (i=0;i<n;i++)
{
printf("\nValorile %d multimi:\n",i+1);
printf("min:");
scanf("%d",&min[i]);
printf("max:");
scanf("%d",&max[i]);
if (max[i]<min[i]) {printf ("Multime imposibila\n"); i--;}
}

in=min[0];
ax=max[0];
for (i=0;i<n;i++)
{
if (in>min[i]) in=min[i];
if (ax<max[i]) ax=max[i];
}

if (in>ax) printf("Intesectia multimilor este multimea vida");


else
{
printf("\nIntesectia multimelor este:");
for (i=in;i<=ax;i++)
printf("%d",i);
}
getch();
}
9) Fie n mulţimi de numere întregi consecutive A1, A2, A3, 10) Fie o matrice m*m. Aflaţi produsul scalar al
..., An. Aranjaţi aceste mulţimi în ordinea crescătoare după diagonalei principale cu prima coloană.
numărul de elemente. #include<conio.h>
#include<string.h>
#include <stdio.h> #include<stdio.h>
#include <conio.h> main()
#include <string.h> { int m,i,j, v[50][50],ps=0;
main() printf("Dati m:");
{ scanf("%d",&m);
int i,min[30],max[30],n,in,ax,j,k,s[20],p[20],temp,c,g; for(i=0;i<m;i++)
for(j=0;j<m;j++)
printf ("Dati nr. de multimi intregi:",n); { printf("v[%d][%d]=",i,j);
scanf("%d",&n); scanf("%d",&v[i][j]); }
printf("Matricea:\n");
for (i=0;i<n;i++) for(i=0;i<m;i++)
{ { for(j=0;j<m;j++)
printf("\nValorile %d multimi:\n",i+1); printf("%d ",v[i][j]);
printf("min:"); printf("\n"); }
scanf("%d",&min[i]); for(i=0;i<m;i++)
printf("max:"); ps+=v[i][i]*v[i][0];
scanf("%d",&max[i]); printf("\nProdusul scalar este: %d",ps);
if (max[i]<min[i]) {printf ("Multime imposibila\n"); i--;} getch(); }
}
for (i=0;i<n;i++)
{ k=0;
for (j=min[i];j<=max[i];j++)
k++;
s[i]=k;
}

for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if (s[i]>s[j])
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
}

for (c=0;c<n;c++)
{
for (i=0;i<n;i++)
{ k=0;
for (j=min[i];j<=max[i];j++)
k++;
if (s[c]==k)
{printf ("\n");for (g=min[i];g<=max[i];g++)
printf("%d",g);
}
}

}
printf ("\n");
for (i=0;i<n;i++)
printf ("%d,",s[i]);

getch();
}

11) Fie o matrice y*y. Aflaţi produsul scalar al primei linii 12) Fie o matrice d*d. Aflaţi produsul scalar al primei
cu diagonala principală. coloane cu ultima coloană.
#include<conio.h> #include<conio.h>
#include<string.h> #include<string.h>
#include<stdio.h> #include<stdio.h>
main() main()
{ int m,i,j, v[50][50],ps=0; { int m,i,j, v[50][50],ps=0;
printf("Dati m:"); printf("Dati m:");
scanf("%d",&m); scanf("%d",&m);
for(i=0;i<m;i++) for(i=0;i<m;i++)
for(j=0;j<m;j++) for(j=0;j<m;j++)
{ printf("v[%d][%d]=",i,j); { printf("v[%d][%d]=",i,j);
scanf("%d",&v[i][j]); } scanf("%d",&v[i][j]); }
printf("Matricea:\n"); printf("Matricea:\n");
for(i=0;i<m;i++) for(i=0;i<m;i++)
{ for(j=0;j<m;j++) { for(j=0;j<m;j++)
printf("%d ",v[i][j]); printf("%d ",v[i][j]);
printf("\n"); } printf("\n"); }
for(i=0;i<m;i++) for(i=0;i<m;i++)
ps+=v[i][i]*v[0][i]; ps+=v[i][m-1]*v[i][0];
printf("\nProdusul scalar este: %d",ps); printf("\nProdusul scalar este: %d",ps);
getch(); } getch(); }
13) Fie o matrice s*s. Aflaţi produsul scalar al liniei 2 cu 14)Fie x un vector coloană şi y un vector linie cu acelaşi
linia 3. număr de elemente. Aflaţi matricea A = y * x.
#include<conio.h> #include<conio.h>
#include<string.h> #include<stdio.h>
#include<stdio.h> #include<math.h>
main() main()
{ int m,i,j, v[50][50],ps=0; {int x[50][1],y[1][50],i,n; long A;
printf("Dati m:"); printf("n=");
scanf("%d",&m); scanf("%d",&n);
while(1) printf("dati elementele vectorului coloana x");
{ if(m<3) for (i=0;i<n;i++)
{ printf("Produsul scalar a liniei 2 cu 3 nu poate fi calculat, scanf("%d",&x[i][0]);
matricea trebuie sa aiba\ncel putin 3*3:\n"); printf("dati elementele vectorului linie y");
scanf("%d",&m);} for (i=0;i<n;i++)
else scanf("%d",&y[0][i]);
break; } A=0;
for(i=0;i<m;i++) for (i=0;i<n;i++)
for(j=0;j<m;j++) A=A+x[i][0]*y[0][i];
{ printf("v[%d][%d]=",i,j); printf( "A=y*x=%ld", A);
scanf("%d",&v[i][j]); } getch();}
printf("Matricea:\n");
for(i=0;i<m;i++)
{ for(j=0;j<m;j++)
printf("%d ",v[i][j]);
printf("\n"); }
for(i=0;i<m;i++)
ps+=v[1][i]*v[2][i];
printf("\nProdusul scalar este: %d",ps);
getch(); }
15) Fie un vector Z. Aflaţi dacă elementele lui formează o 16) Fie un vector Q. Aflaţi dacă elementele lui formează
progresie aritmetică. o progresie geometrică.
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
#include<math.h> #include<math.h>
main() main()
{int Z[50],a,i,k,n; {int i,k,n;float Q[30],a;
printf("n="); printf("n=");
scanf("%d",&n); scanf("%d",&n);
printf("dati elementele vectorului Z"); printf("dati elementele vectorului Q");
for (i=0;i<n;i++) for (i=0;i<n;i++)
scanf("%d",&Z[i]); scanf("%f",&Q[i]);
a=Z[1]-Z[0]; a=Q[1]/Q[0];
k=2; k=2;
for (i=1;i<n;i++) for (i=1;i<n;i++)
if ((Z[i]+a)==Z[i+1]) k++; if ((Q[i]*a)==Q[i+1]) k++;
if (k==n) if (k==n)
printf( "Elementele vectorului Z formeaza o progresie printf( "Elementele vectorului Q formeaza o progresie
aritmetica"); geometrica");
else printf( "Elementele vectorului Z nu formeaza o progresie else printf( "Elementele vectorului Q nu formeaza o
aritmetica"); progresie geometrica");
getch();} getch();}
17) Fie un vector R. Aflaţi dacă elementele lui formează 18) Fie un vector R. Aflaţi suma tuturor elementelor
un şir strict screscător. care nu se împart la 37
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
#include<math.h> #include<math.h>
main() main()
{ {
int i,j,k,n,R[30],a;
int i,n,R[30],s;
printf("n=");
scanf("%d",&n); printf("n=");
printf("dati elementele vectorului R:"); scanf("%d",&n);
for (i=0;i<n;i++) printf("dati elementele vectorului R:");
scanf("%d",&R[i]); for (i=0;i<n;i++)
k=0; scanf("%d",&R[i]);
for (i=1;i<n;i++) s=0;
if (R[i]>R[i-1]) k++; for (i=0;i<n;i++)
if (k==n-1) if (R[i]%37) s+=R[i];
printf( "Elementele vectorului R formeaza un sir strict printf("s= %d",s);
crescator"); getch();
else printf( "Elementele vectorului R nu formeaza un sir strict
}
crescator");
getch(); }
19) Fie un vector V. Aflaţi produsul tuturor elementelor 20) Fie un vector H. Aflaţi suma resturilor ce se obţin la
care au restul 3 când sunt împărţite la 4. împărţirea elementelor lui H la 11.
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
#include<math.h> #include<math.h>
main() main()
{ {
int i,n,V[30],p; int i,n,H[30],s;
printf("n="); printf("n=");
scanf("%d",&n); scanf("%d",&n);
printf("dati elementele vectorului V:"); printf("dati elementele vectorului H:");
for (i=0;i<n;i++) for (i=0;i<n;i++)
scanf("%d",&V[i]); scanf("%d",&H[i]);
p=1; s=0;
for (i=0;i<n;i++) for (i=0;i<n;i++)
if (V[i]%4==3) p*=V[i]; s+=(H[i]%11);
printf("p= %d",p); printf("s = %d",s);
getch(); getch();
} }
21) Fie un vector Q. Aflaţi câte resturi diferite se vor 22) Fie un cuvânt S începe cu o consoană şi conţine cel
obţine la împărţirea elementelor lui Q la 11. puţin o vocală. Aflaţi care litera din alfabet precedă vocala
#include<conio.h> de cod minim din cuvântul dat.
#include<stdio.h> #include<conio.h>
#include<math.h> #include<stdio.h>
main() #include<string.h>
{ main()
int i,n,Q[30],H[30],k,j; {char s[50];int i,m,a[50],min;
printf("n="); gets(s);
scanf("%d",&n); i=0;
printf("dati elementele vectorului Q:"); m=0;
for (i=0;i<n;i++) while(s[i]!='\0'){
scanf("%d",&Q[i]); if((s[i]=='a')||(s[i]=='e')||(s[i]=='o')||(s[i]=='i')
for (j=0;j<11;j++)
H[j]=0; ||(s[i]=='u')||(s[i]=='A')||(s[i]=='E')||(s[i]=='O')||(s[i]=='I')||(s[i]=
for (i=0;i<n;i++) ='U'))
for (j=1;j<11;j++) a[m++]=s[i];
if ((Q[i]%11)==j) H[j]=j; i++;}
k=0; min=a[0];
for (j=0;j<11;j++) for(i=0;i<m;i++)
if (H[j]>0) k++; if(min>a[i]) min=a[i];
for (i=0;i<n;i++) if((min==65)||(min==97))
if ((Q[i]%11)==0){k++;break;} printf("litera care preceda vocala %c nu exista ",min);
printf("k = %d",k); else
getch(); printf("Vocala cu codul minim in acest cuvint este %c,
} inaintea ei este litera %c ",min,min-1);
getch(); }
23) Fie un cuvânt S, adică un şir de caractere. Aflaţi câte 24) Fie un cuvânt Q, adică un şir de caractere. Aflaţi
vocale diferite conţine cuvântul S. câte consoane diferite conţine cuvântul Q.
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
#include<string.h> #include<string.h>
main() main()
{char s[50], a[50]; int i,m,min,j,k=0,k2; {char s[50], a[50]; int i,m,min,j,k=0,k2;
gets(s); gets(s);
i=0; i=0;
m=0; m=0;
while(s[i]!='\0'){ while(s[i]!='\0'){
if((s[i]=='a')||(s[i]=='e')||(s[i]=='o')||(s[i]=='i') if((s[i]=='b')||(s[i]=='c')||(s[i]=='d')||(s[i]=='f')
||(s[i]=='u')||(s[i]=='A')||(s[i]=='E')||(s[i]=='O')||(s[i]=='I')||(s[i]== ||(s[i]=='g')||(s[i]=='h')||(s[i]=='j')||(s[i]=='l')||(s[i]=='k')||(s[i]=='
'U')) m')
if(i==0)
{ ||(s[i]=='n')||(s[i]=='p')||(s[i]=='q')||(s[i]=='r')||(s[i]=='s')||(s[i]=='
a[m++]=s[i]; t')
k++;
} ||(s[i]=='v')||(s[i]=='x')||(s[i]=='w')||(s[i]=='y')||(s[i]=='z')||(s[i]=
else ='B')
{
k2=0; ||(s[i]=='C')||(s[i]=='D')||(s[i]=='F')||(s[i]=='G')||(s[i]=='H')||(s[i]
for(j=0;j<m;j++) =='J')
if(s[i]!=a[j])
k2++; ||(s[i]=='L')||(s[i]=='M')||(s[i]=='N')||(s[i]=='P')||(s[i]=='Q')||(s[i]
if(k2==m) =='R')
{
a[m++]=s[i]; ||(s[i]=='S')||(s[i]=='T')||(s[i]=='V')||(s[i]=='X')||(s[i]=='W')||(s[i]
k++; =='Y')||(s[i]=='Z'))
} if(i==0)
} {
i++; a[m++]=s[i];
} k++;
printf("Cuvintul are %d vocale diferite ",k); }
getch(); else
} {
k2=0;
for(j=0;j<m;j++)
if(s[i]!=a[j])
k2++;
if(k2==m)
{
a[m++]=s[i];
k++;
}
}
i++;
}
printf("Cuvintul are %d consoane diferite ",k);
getch();
}
25) Fie un cuvânt W, adică un şir de caractere. Aflaţi câte 26) Fie un cuvânt M, adică un şir de caractere. Aflaţi
caractere din cuvântul W au codul divizibil cu 5. câte litere diferite conţine cuvântul M.
#include<conio.h> #include<conio.h>
#include<stdio.h> #include<stdio.h>
#include<string.h> #include<string.h>
main() main()
{char W[50]; int a[50],i,m,k; {char s[50], a[50]; int i,m,min,j,k=0,k2;
gets(W); gets(s);
i=0; i=0;
while(W[i]!='\0'){ m=0;
a[i]=W[i]; while(s[i]!='\0'){
i++;} if((s[i]=='b')||(s[i]=='c')||(s[i]=='d')||(s[i]=='f')
m=i-1; k=0;
for (i=0;i<m;i++){printf("%d",a[i]); ||(s[i]=='g')||(s[i]=='h')||(s[i]=='j')||(s[i]=='l')||(s[i]=='k')||(s[i]=='
if (a[i]%5==0) k++; } m')
printf("k = %d",k);
getch(); } ||(s[i]=='n')||(s[i]=='p')||(s[i]=='q')||(s[i]=='r')||(s[i]=='s')||(s[i]=='
t')

||(s[i]=='v')||(s[i]=='x')||(s[i]=='w')||(s[i]=='y')||(s[i]=='z')||(s[i]=
='B')

||(s[i]=='C')||(s[i]=='D')||(s[i]=='F')||(s[i]=='G')||(s[i]=='H')||(s[i]
=='J')

||(s[i]=='L')||(s[i]=='M')||(s[i]=='N')||(s[i]=='P')||(s[i]=='Q')||(s[i]
=='R')

||(s[i]=='S')||(s[i]=='T')||(s[i]=='V')||(s[i]=='X')||(s[i]=='W')||(s[i]
=='Y')
||(s[i]=='Y')||(s[i]=='a')||(s[i]=='e')||(s[i]=='o')||(s[i]=='i')

||(s[i]=='u')||(s[i]=='A')||(s[i]=='E')||(s[i]=='O')||(s[i]=='I')||(s[i]=
='U')
)
if(i==0)
{
a[m++]=s[i];
k++;
}
else
{
k2=0;
for(j=0;j<m;j++)
if(s[i]!=a[j])
k2++;
if(k2==m)
{
a[m++]=s[i];
k++;
}
}
i++;
}
printf("Cuvintul are %d litere diferite ",k);
getch();
}
27) Fie o matrice m * n de caractere. Aflaţi primul 28) Fie o matrice n * m de caractere. Aflaţi numărul de
caracter de cod maxim. caractere diferite ce au codul par.
main() main()
{ {
char b[20][20]; char b[20][20],a[100];
int m,n,i,j,max; int m,n,i,j,max,m1=0,k=0,k2,h;
scanf("%d",&m); scanf("%d",&m);
scanf("%d",&n); scanf("%d",&n);
for(i=0;i<m;i++) for(i=0;i<m;i++)
for(j=0;j<n;j++) for(j=0;j<n;j++)
{ {
printf("b[%d][%d]=",i,j); printf("b[%d][%d]=",i,j);
b[i][j]=getch(); b[i][j]=getch();
printf("%c\n",b[i][j]); printf("%c\n",b[i][j]);
} }
for(i=0;i<m;i++) for(i=0;i<m;i++)
{ {
for(j=0;j<n;j++) for(j=0;j<n;j++)
printf("%c ",b[i][j]); printf("%c ",b[i][j]);
printf("\n"); printf("\n");
} }
max=(int)b[0][0]; for(i=0;i<m;i++)
for(i=0;i<m;i++) for(j=0;j<n;j++)
for(j=0;j<n;j++) if ((i==0)&&(j==0))
if((int)b[i][j]>max) max=(int)b[i][j]; {
printf("\nCaracterul de cod maxim este:%c",max); if((int)b[i][j]%2==0)
getch(); {
} a[m1++]=b[i][j];
k++;
}
}
else
{
k2=0;
for(h=0;h<m1;h++)
if((int)b[i][j]%2==0)
{
if(b[i][j]!=a[h])
k2++;
}
if(k2==m1)
{
a[m1++]=b[i][j];
k++;
}
}
printf("\nCarcatre cu cod par diferite:%d",k);
getch();
}
29) Fie o matrice a * b de caractere. Aflaţi suma primelor 30) Fie o matrice v * w de caractere. Aflaţi cea mai mică
2 caractere de cod impar diferenţă a codurilor vocalelor din matrice.

main()
main() {
{ char b[20][20],a[20],aux;
char b[20][20],a[5],k=0; int m,n,i,j,k=0;
int m,n,i,j; scanf("%d",&m);
scanf("%d",&m); scanf("%d",&n);
scanf("%d",&n); for(i=0;i<m;i++)
for(i=0;i<m;i++) for(j=0;j<n;j++)
for(j=0;j<n;j++) {
{ printf("b[%d][%d]=",i,j);
printf("b[%d][%d]=",i,j); b[i][j]=getch();
b[i][j]=getch(); printf("%c\n",b[i][j]);
printf("%c\n",b[i][j]); }
} for(i=0;i<m;i++)
for(i=0;i<m;i++) {
{ for(j=0;j<n;j++)
for(j=0;j<n;j++) printf("%c ",b[i][j]);
printf("%c ",b[i][j]); printf("\n");
printf("\n"); }
} for(i=0;i<m;i++)
for(i=0;i<m;i++) for(j=0;j<n;j++)
for(j=0;j<n;j++) if((b[i][j]=='a')||(b[i][j]=='e')||(b[i][j]=='o')||(b[i][j]=='i')
if (k<=2) ||(b[i][j]=='u')||(b[i][j]=='A')||(b[i][j]=='E')||(b[i][j]=='O')||(b[i][j
if (b[i][j]%2) a[k++]=b[i][j]; ]=='I')||(b[i][j]=='U'))
else break; a[k++]=b[i][j];
printf("\nSuma primelor 2 carcatere de cod impar:%d", for(i=0;i<k-1;i++)
a[0]+a[1]); for(j=i+1;j<k;j++)
getch(); if((int)a[i]>(int)a[j])
} {
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
printf("Vocalele: ");
for(i=0;i<k;i++)
printf("%c, ",a[i]);
printf("\nCea mai mica diferenta de cod a vocalelor
este:%d",a[0]-a[k-1]);
getch();
}
31) Fie un cuvânt A. Aflaţi dacă literele lui au coduri 32) Fie un cuvânt C. Aflaţi dacă paritatea codurilor
ce formează un şir crescător literelor lui alterează, adică literele au codurile
cu paritatea: par, impar, par, impar, par, .... sau
#include<conio.h> invers.
#include<stdio.h>
#include<string.h> #include<conio.h>
main() #include<stdio.h>
{char s[50], a[50]; int i,m,min,j,k=0; #include<string.h>
gets(s); main()
i=0; {
m=0; char s[50], a[50]; int i,m,min,j,k=0;
while(s[i]!='\0') gets(s);
{ i=0;
a[m++]=s[i]; m=0;
i++; while(s[i]!='\0')
} {
k=0; a[m++]=s[i];
for (i=1;i<m;i++) i++;
if (a[i]>a[i-1]) k++; }
if (k==m-1) k=0;
for(i=0;i<m;i++)
printf( "Literele cuvintului A formeaza un sir crescator"); if ((!(a[i+1]%2)&&(a[i]%2))||((a[i+1]%2)&&!(a[i]%2)))
else printf( "Literele cuvintului A nu formeaza un sir k++;
crescator"); printf("%d\n",k);
getch(); if (k==m-1)
} printf( "Codurile literelelor cuvintului C altereaza");
else printf( "Codurile literelelor cuvintului C nu
altereaza");
getch();
}

//Laborator3
/*0. Extrage partea imaginara a unui numar complex*/
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <cstdlib>
#include <cmath>
#define PI 3.14159265358979
using namespace std;
class complex
int _tmain(int argc, _TCHAR* argv[])
{
private: double re;
double im;
public: void cit( );

}
void afis( );
void imaginar( )
{
cout << "Partea imaginara este: ";
cout << im << endl;
}
};
void complex::afis( )
{
cout << "Am introdus: ";
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z, *p;
p = new complex;
cout<<"Introducem partea reala si partea imaginara pentru primul numar"<<endl;
z.cit();
z.afis();
z.imaginar();
cout<<"\nIntroducem partea reala si partea imaginara pentru al doilea numar"<<endl;
p->cit();
p->afis();
p->imaginar();
delete p;

/*1. Adunarea a doua numere complexe


private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void add(complex& a, complex& b)
{
re=a.re+b.re;
im=a.im+b.im;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z, u, w;
cout << "Introducem partea reala si partea imaginara pentru primul numar\n";
z.cit();
cout << "Introducem partea reala si partea imaginara pentru al doilea numar\n";
u.cit();
cout << "Ati introdus numerele: " << endl;
z.afis(); u.afis();
cout << "Suma lor este: " << endl;
w.add(z,u); w.afis();*/
/*2. Scaderea a doua numere complexe
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void dif(complex& a, complex& b)
{
re=a.re-b.re;
im=a.im-b.im;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z, u, w;
cout<<"Introdu partea reala si partea imaginara pentru primul numar\n";
z.cit();
cout<<"\nIntrodu partea reala si partea imaginara pentru al doilea numar\n";
u.cit();
cout << "\nNumerele introduse sunt : " << endl<<endl;
z.afis();
u.afis();
cout << "\nDiferentsa lor este: " << endl<<endl;
w.dif(z,u);
w.afis();*/
/*3. Inmultirea a doua numere complexe
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void prod(complex& a, complex& b)
{
re=a.re*b.re-a.im*b.im;
im=a.im*b.re+a.re*b.im;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z, u, w;
cout<<"Introdu partea reala si partea imaginara pentru primul numar\n";
z.cit();
cout<<"\nIntrodu partea reala si partea imaginara pentru al doilea numar\n";
u.cit();
cout << "\n\Numerele introduse sunt: " << endl<<endl;
z.afis();
u.afis();
cout << "\nProdusul lor este: " << endl<<endl;
w.prod(z,u);
w.afis();*/
/*4.Impartirea a doua numere complexe
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void imp(complex& a, complex& b)
{ double c;
c=(b.re*b.re+b.im*b.im);
re=(a.re*b.re+a.im*b.im)/c ;
im=(a.im*b.re-a.re*b.im)/c;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z, u, w;
cout<<"Introdu partea real si partea imaginara pentru primul numar\n";
z.cit();
cout<<"\nIntrodu partea real si partea imaginara pentru al doilea numar\n";
u.cit();
cout << "\nNumerele introduse sunt : " << endl<<endl;
z.afis();
u.afis();
cout << "\nRezultatul impartsirei primului la al doilea este: " << endl<<endl;
w.imp(z,u);
w.afis();*/
/*5. Conjugata unui numar complex ( simetrie fata de axa Ox )
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void conj(complex& a)
{
re=a.re;
im=-a.im;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z, w;
cout<<"Introdu partea real si partea imaginara pentru numarul initial\n";
z.cit();
cout << "\nNumarul introdus este: " << endl<<endl;
z.afis();
cout << "\nConjugata numarului este: " << endl<<endl;
w.conj(z); w.afis();*/

/*6.Modulul unui număr complex


private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
double modul()
{return sqrt(re*re+im*im);
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z;
cout<<"Introdu partea real si partea imaginara pentru numar complex\n";
z.cit();
cout << "\nNumarul introdus este: " << endl<<endl;
z.afis();
cout << "\nModulul numarului complex este: " << z.modul()<<endl;*/

/*7. Schimbarea cu locul a părţii reale cu partea imaginară ( simetrie faţă de diagonala y = x )
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void simetric()
{ double q;
q=re;
re=im;
im=q;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z;
cout<<"Introdu partea real si partea imaginara pentru numar initsial\n";
z.cit();
cout << "\nNumerele intoduse sunt: " << endl<<endl;
z.afis();
cout << "\nNumar simetric fatsa de diagonala este: " << endl<<endl;
z.simetric();
z.afis();*/

/*7. Schimbarea cu locul a părţii reale cu partea imaginară ( simetrie faţă de diagonala y = x )
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void simetric()
{ double q;
q=re;
re=im;
im=q;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z;
cout<<"Introdu partea real si partea imaginara pentru numar initsial\n";
z.cit();
cout << "\nNumerele intoduse sunt: " << endl<<endl;
z.afis();
cout << "\nNumar simetric fatsa de diagonala este: " << endl<<endl;
z.simetric();
z.afis();*/

/* 8. Ridicarea la putere a unui numar complex, z^n , n=0,1,2,…


private: double x;
double y;
public: void cit( ){
cout << "RE= "; cin >> x;
cout << "IM= "; cin >> y;}
void afis( ){
cout << "Ati introdus: z= ";
cout << x << "+i*(" << y << ")" << endl;}
double darg(complex& a);
double mod(complex& a);};

double complex::darg(complex& a)
{ double ar;
if( (a.x >= 0) && (a.y == 0) ) return 0.0;
if( (a.x == 0) && (a.y >=0) ) return PI/2;
if( (a.x < 0) && (a.y == 0) ) return PI;
if( (a.x == 0) && (a.y < 0) ) return 3*PI/2;
ar=atan( a.y / a.x );
if( (a.x < 0) && (a.y != 0) ) return ar+PI;
if( (a.x > 0) && (a.y < 0) ) return ar+2*PI;
return ar;
}
double complex::mod(complex& a){
double r;
r= sqrt(a.x*a.x + a.y*a.y);

return r;}

int main()
{complex z,y;
double rn=1.0 , an;
int i,n;
cout << "Introduceti puterea la care trebuie ridicat numarul complex '>0' : "; cin >> n;

z.cit();
z.afis();
cout << endl << endl;
for (i=1; i<n; i++){
rn= rn*y.mod(z); }
an=y.darg(z)*n;
cout << "z^" << n << "=" << rn << "[ cos("<< an << ")"<< " + i*sin(" << an << ") ]";
cout << endl << endl; */

/*9. Ridicarea la putere a unui număr complex, z^n , n – întreg


private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void putere(int n)
{double x=re,y=im;
if (n!=0) {for (int i=1;i<abs(n);i++) { double p;
p=re*x-im*y;
im=re*y+x*im;
re=p;};}
else if(n==0) {if(re!=0&&im!=0)re=1;im=0;}
if (n<0) {double p;p=re/(re*re+im*im); im=im/(re*re+im*im);re=p;}
};
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}

int main( )
{
complex z; int n;
cout<<"Introdu partea reala si partea imaginara pentru numarul initsial\n";
z.cit();
cout<<"\nIntrodu puterea la care doresti sa ridici numarul complex"<<endl;
cin>>n;
cout << "\nNumarul introdus este: " << endl<<endl;
z.afis();
cout << "\nNumarul initsial ridicat la puterea "<<n<< " : " << endl<<endl;
z.putere(n);z.afis();*/
/*10. Radacina patrata dintr-un numar complex
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void rad2(complex& a, complex& b)
{ double delta;
delta=sqrt(16*re*re+16*im*im);
a.re=sqrt((4*re+delta)/8);
b.re=-a.re;
a.im=im/(2*a.re);
b.im=im/(2*b.re);
}
void nenul(int& o){
if ((re==0) && (im==0)) o=1;
else o=0;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z,u,w; int a;
cout<<"Introdu partea reala Si partea imaginara pentru numar initsial\n";
z.cit();
cout << "Numarul initsial este: " << endl;
z.afis();
z.nenul(a);
z.rad2(u,w);
if (a!=1){cout << "Radacinele patrate a nr intitsial sunt\n\n1. ";
u.afis();
cout << "\n\n2. ";
w.afis();}
else cout<<"Numarul dat nu admite radacini ";*/

/*11. Argumentul unui numar complex


private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
double arg()
{double a;
if( (re >= 0) && (im== 0) ) return 0.0;
if( (re == 0) && (im >=0) ) return pi/2;
if( (re < 0) && (im == 0) ) return pi;
if( (re == 0) && (im < 0) ) return 3*pi/2;
a=atan( im / re );
if( (re < 0) && (im != 0) ) return a+pi;
if( (re > 0) && (im < 0) ) return a+2*pi;
return a;
};
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z;
cout<<"Introdu partea reala Si partea imaginara pentru numarul complex\n";
z.cit();
cout << "\nNumarul introdus este : " << endl<<endl;
z.afis();
cout << "\nArgumentul numarului este: " << endl<<endl;
cout<<z.arg();*/

/* 12 Radacina de ordinul n dintr-un numar complex


private: double re;
double im;
public:
void cit( )
{
cout << "Introduceti numarul complex:" << endl;
cout << "re=";
cin >> re;
cout << "im=";
cin >> im;
}
void afis();
void pow_c(complex& a, int n);
};
void complex::afis( )
{
cout << fixed << setprecision(2) << re << "+i*(" << im << ")]" << endl << endl;
}
void complex::pow_c(complex& a, int n)
{
re=cos( (atan(a.im/a.re)+2*k*Pi) /n );
im=sin( (atan(a.im/a.re)+2*k*Pi) /n );
r=pow(sqrt(a.re*a.re+a.im*a.im),1./n);
}
int main( )
{
int n;
complex z,p;
z.cit();
cout << endl << "A=";
z.afis();
cout << "n=";
cin >> n;
complex &q= * new complex;
for(k=0;k<n;k++)
{ cout << "k=" << k << endl;
q.pow_c(z,n);
cout << "pow(A, 1/" << n << ") = " << r << "*[";
q.afis();
}*/

/*13. Trecerea de la forma algebrică a unui număr complex la forma lui trigonometrică
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
double arg()
{double a;
if( (re >= 0) && (im== 0) ) return 0.0;
if( (re == 0) && (im >=0) ) return pi/2;
if( (re < 0) && (im == 0) ) return pi;
if( (re == 0) && (im < 0) ) return 3*pi/2;
a=atan( im / re );
if( (re < 0) && (im != 0) ) return a+pi;
if( (re > 0) && (im < 0) ) return a+2*pi;
return a;
};
double modul()
{return sqrt(re*re+im*im);
};
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')' << endl;
}
int main( )
{
complex z;
cout<<"Introdu partea reala Si partea imaginara pentru numarul complex\n";
z.cit();
cout << "\nNumarul introdus este : " << endl<<endl;
z.afis();
cout << "\nForma trigonometrica acestui numar este: " << endl<<endl<<z.modul()<<"*(cos("<<z.arg()<<")+i*sin("<<z.arg()<<')'<<endl
;*/

/*14. Rezolvarea ecuaţiei a*z + b = 0 , unde a şi b sunt numere complexe date, iar z este numărul complex necunoscut, care
trebuie calculat.
private: double re;
double im;
public: void cit( )
{
cin >> re >> im;
}
void afis( );
void sol(complex& a, complex& b)
{ double c;
c=(b.re*b.re+b.im*b.im);
re=-(a.re*b.re+a.im*b.im)/c ;
im=-(a.im*b.re-a.re*b.im)/c;
}
};
void complex::afis( )
{
cout << re << "+i*(" << im << ')';
}
int main( )
{
complex z, u, w;
cout<<"Introdu elementele ecuatsiei a*z+b=0, daca a Si b sint numere complexe\n\n";
cout<<"Introdu partea reala Si partea imaginara pentru elementul a\n";
z.cit();
cout<<"\nIntrodu partea reala Si partea imaginara pentru elementul b\n";
u.cit();
cout << "\nAm primit ecuatsia : " << endl<<endl;
cout<<'('; z.afis();cout<<") * z + ("; u.afis();cout<<") = 0\n";
cout << "\nSolutsia ecuatsiei este: " << endl<<endl;
w.sol(u,z); w.afis();*/

/* 15 Calcularea determinantului de ordinul 2 cu elementele numere complexe:


, unde a, b, c, d sunt numere complexe
private: double re;
double im;
public: void cit()
{
cin >> re >> im;
}
void afis();
void kor()
{
cout << "Vycislenie polimera: "
cout <<
poly(
}
};
void complex::afis()
{
cout << re << "+i*(" << im << ')' << endl;
}

int main()
{
complex z;
z.cit();
cout << "Vy vveli cisla: " << endl;
z.afis();
cout << "Koreni stepeni iz n kompleksnogo cisla raven: " << endl;
z.kor();*/

/* 17 Rezolvarea ecuatiei patrate a*x^2 + b*x + c = 0 in multimea numerelor complexe


rivate: int a;
int b;
int c;
public: void cit( ){
cout << "a= "; cin >> a;
cout << "b= "; cin >> b;
cout << "c= "; cin >> c;}
void afis( ){
cout << "Ati introdus ecuatia: ";
cout << a << "x^2 + " << b << "x + " << c << "= 0" << endl;}
double det(complex& n);
};
double complex::det(complex& n){
double d, rd;
d=n.b*n.b-4*n.a*n.c;
if (d<0){ d=d*(-1);
rd=sqrt(d);
cout << "x1=( " << n.b*(-1) << " - " << rd << "*i ) / " << 2*n.a << endl;
cout << "x2=( " << n.b*(-1) << " + " << rd << "*i ) / " << 2*n.a << endl;
d=d*(-1); }
if (d==0){rd=sqrt(d);
cout << "x1 = x2 = " << n.b*(-1) << " / " << 2*n.a << endl;
}
if (d>0){
rd=sqrt(d);
cout << "x1=( " << n.b*(-1) << " - " << rd << " ) / " << 2*n.a << endl;
cout << "x2=( " << n.b*(-1) << " + " << rd << " ) / " << 2*n.a << endl;
} }
int main()
{complex z,y;
z.cit();
z.afis();
cout << endl << endl;
y.det(z) ;
cout << endl << endl; */
return 0;

}
Elemente de bază ale limbajului C
1.5 Exerciţii şi teste grilă
1. La compilare se sesizează :
a) erorile de sintaxă şi semantice
b) erorile de calcul
c) nerespectarea ordinii operaţiilor
din modelul matematic
d) furnizarea unor date eronate la
operaţia de citire

2. Delimitarea unui text între /* */ are rol de :


a) separare a subprogramelor in
interiorul unui program
b) a delimita instrucţiunile care
se execută cu prioritate
c) a permite utilizatorului să
introducă mesaje explicative
d) nu au nici o semnificaţie

3. Care din următoarele cuvinte nu reprezintă un


nume ?
a) a_X b) a1b2c3
c) 1abc d) _ABC

4. Care din următoarele instrucţiuni defineşte o


constantă MAXSIZE cu valoarea 80 ?
a) constant MAXSIZE=80;
b) #define MAXSIZE 80
c) #define MAXSIZE=80
d) constant MAXSIZE=80

5. Definirea corectă a unei constante simbolice


numită TRUE , care are valoarea 1 este :
a) int TRUE=1;
b) #define TRUE=1;
c) #define TRUE 1;
d) #define TRUE 1

6. Definirea corect a unei constante numită GST


cu valoarea .125 este :
a) #define GST 0.125
b) GST .125;
c) float GST=0.125;
d) #define GST .125

7. Care din numele de variabile de mai jos nu


este valid ?
a) go4it b) go_cart
c) 4season d) _what

8. Definiţi o constantă simbolică PI cu valoarea


3.14:
a) #define 3.14 PI;
b) #define float PI 3.14;
c) #define float PI=3.14;
d) #define PI 3.14
e) #define PI=3.14
Cap.2 Tipuri fundamentale de date
2.3 Exerciţii şi teste grilă
1. Care din următoarele nu este un tip de date în
C?
a) int b) numeric
c) float d) double

2. Tipul de date INT în C este reprezentat pe :


a) 2 octeţi b) 8 octeţi
c) 16 octeţi d) 32 octeţi

3. Tipul de date DOUBLE este reprezentat pe :


a) 8 biţi b) 16 biţi
c) 32 biţi d) 64 biţi

4. Tipul de date CHAR este reprezentat pe :


a) 4 biţi b) 8 biţi
c) 16 biţi d) 32 biţi

5. Care este valoarea maximă a unui tip de date


cu semn exprimat pe 8 biţi ?
a) (2 la puterea 8) minus 1
b) (2 la puterea 7) minus 1
c) 2 la puterea 16
d) (2 la puterea 16) minus 1

6. Ce tip de constantă este 27U ?


a) constantă integer universală
b) constantă short int
c) constantă unsigned integer
d) constantă character

7. Pentru fiecare dintre constantele aflate în


coloana A) alegeţi din coloana B) tipul său:
Coloana A) Coloana B)
A1) 5.0 B1) constantă intreagă
A2) 5 B2) constantă reală
A3) ‘5’ B3) const. hexazecimală
A4) 05 B4) constantă octală
A5) ”5” B5) constantă caracter
A6) 0x5 B6) constantă şir de
caractere
a) A1 B2, A2 B1, A3 B5, A4 B1,
A5 B6, A6 B3
b) A1 B2, A2 B1, A3 B5, A4 B4,
A5 B5, A6 B3
c) A1 B2, A2 B1, A3 B5, A4 B4,
A5 B6, A6 B3
d) A1 B2, A2 B1, A3 B5, A4 B4,
A5 B6, A6 eronată
e) A1 B2, A2 B1, A3 B5, A4 B1,
A5 B6, A6 eronată

8. Care dintre următoarele valori sunt constante


flotante scrise corect?
1) 2307.98 2) +54.3 3) –20.07
4) –198. 5) .13 6) 1.9 E4
7) +2.7E+3 8) 2.e+4
a) 1), 2), 3), 6), 7)
b) toate mai puţin 5)
c) toate
d) toate mai puţin b)
e) primele cinci

9. Care dintre valorile de mai jos sunt constante


întregi scrise corect?
a) 123 b) –17 c) +843
d) 0154 e) –67
10. Care dintre construcţiile de mai jos
reprezintă constante tip caracter?
1) ” ” 2) ’\’ 3) ’a’
4) ’ ” ’ 5) ’\\’ 6) ’\13’
7) ”a” 8) ’ ’
a) 2), 3) ,8) b) toate
c) toate mai puţin 5) si 6)
d) 2), 3), 4), 8)
e) 3), 4), 5). 6), 8)

11. Care dintre următoarele declaraţii de


variabile declară corect o variabilă x ce poate
memora valori reale?
a) float x; b) double x;
c) unsigned float x;
d) x:float; e) x:double;

12. Care dintre liniile de program de mai jos


realizează iniţializarea corectă a variabilei x la
declararea sa?
a) int x==2; b) x:int=2;
c) int x=2; d) int x 2;
e) x=2:int;

13. Care dintre variabile vor avea valori întregi


după execuţia secvenţei de program următoare?
int a=3, b, c;
float x=-11.23;
char d;
b=x; d=’A’; c=’M’-‘N’;
a) variabila x b) variabila c
c) variabila d d) variabila a
e) variabila b

14. Considerăm variabilele a, b, c, d şi e.


Alegeţi varianta corectă a declaraţiilor, astfel
încât atribuirile următoare să nu fie însoţite de
conversii care să modifice valorile atribuite.
a=3; b=8; c=2.1; d=-3.5; e=’B’;
a) float a,b,c.d; char e;
b) int a,b,c,d; char e;
c) int a,b,e; float c,d;
d) int a,b; float c,d; char e;
e) int c,d; float a,b; char e;

15. O declaratie de genul :


int i=7.3;
va avea urmatorul efect :
a) semnalarea unei erori din partea
compilatorului
b) va atribui lui i valoarea 7.3 şi
va semnala un avertisment din
partea compilatorului
c) va modifica tipul variabilei i
d) va atribui lui i valoarea 7

16. Declaraţia corectă pentru definirea unui


întreg numit suma este :
a) suma:integer; b) integer suma;
c) int suma; d) suma int;

17. Declaraţia corectă pentru definirea unei


variabile caracter numită litera este :
a) litera:=char; b) char litera;
c) litera: char;
d) character litera;

18. Definirea corectă a unei variabile numită


bani care poate fi utilizată pentru a memora
valori reale simplă precizie este :
a) bani: real; b) real bani;
c) float bani; d) bani float;

19. Definirea corectă a unei variabile întregi


numită total iniţializată cu zero este :
a) total: integer=0;
b) total=0, int;
c) int total=0;
d) int=0 , total;
20. Ce număr este echivalent cu –4e3 ?
a) –4000 b) –400
c) .004 d) .0004
Cap.3 Funcţii de intrare/ieşire standard
3.8 Exerciţii şi teste grilă
1. Să se determine ce tipăreşte următoarea
instrucţiune :
unsigned n=100;
printf("%04x",n);
a) 0100 b) 100
c) 0064 d) A10

2. Ce face secvenţa ?
float n=16;
printf("%x",n+1);
a) afişează numărul in baza 16
b) dă eroare de compilare deoarece
nu am folosit o variabilă la
scriere
c) chiar dacă nu este semnalată
nici o eroare la compilare, nu
se afişează valoarea dorită,
deoarece nu am folosit un
specificator de format adecvat

3. Fie declaraţiile :
int n;long double x;char s[100];
Care din secvenţele următoare sunt corecte
pentru citirea variabilelor ?
a) scanf("%i %s %lg",&n,&s,&x);
b) scanf("%d %s %Lg",&n,&s,&x);
c) scanf("%d %s %Lg",&n,s,&x);
d) scanf("%d %c %lf",&n,&s,&x);
e) scanf("%d %",&n,&s,&x);

4. Fie declaraţia : char s[20];


Care din secvenţele de mai jos citesc corect un
şir de caractere s ?
a) scanf("%c",s);
b) scanf("%c",&s);
c) scanf("%s",s);
d) scanf("%s",&s);
e) scanf("%",s);
f) scanf("",s);

5. Fie declaraţia : char str[80];


Care din următoarele secvenţe vor face citirea
unui şir de maxim 80 caractere care să nu
conţină caracterul “.” ?
a) scanf("%[.]s",str);
b) scanf("%[^.]s",str);
c) scanf("%80[^.]s",str);
d) scanf("%80[^.]c",str);
e) scanf("%80[.^]s",str);

6. Fie declaraţia : char s[100];


Care din următoarele secvenţe va face citirea
unui şir de caractere care să conţină numai
cifre?
a) scanf("%[0123456789]",s);
b) scanf("%s",s);
c) scanf("%[^0-9]s",s);
d) scanf("%[09]s",s);
e) scanf("%[0-9]s",s);
f) scanf("%['0'-'9']",s);
g) scanf("%['0'...'9']",s);

7. Cum putem introduce un număr x întreg de


maxim 4 cifre care să nu conţină cifra 0?
a) scanf(“%4d”,&x);
b) scanf(“%4[^0]s”,x);
c) scanf(“%04d”,&x);
d) scanf(“%d0”,&x);

8. Fie declaraţiile : int a, b, c;


şi apelul:
scanf("%2d%3d%4d",&a,&b,&c);
Care va fi valoarea variabilelor după introducere,
dacă la intrare se tastează 123456?
a) a=123 , b=345 , c=56
b) a=12 , b=345 , c=6
c) a=123456 , b=0 , c=0

9. Ce se întâmplă dacă se foloseşte secvenţa


următoare ?
int m, n;
scanf("%d,%d",&m,&n);
a) obţinem eroare la compilare
pentru că in interiorul
formatului s-a pus virgulă
b) nu apar erori la compilare;
deoarece in interiorul
formatului s-a pus virgulă, nu
se vor citi corect numerele
c) nu apar erori la compilare;
deoarece s-a pus virgulă,
numerele introduse trebuie
separate prin virgulă
d) nu apar erori la compilare;
pentru numerele introduse poate
fi folosită orice secvenţă
delimitatoare

10. Fie secvenţa următoare :


int a; char str[20];
scanf("%i", &a);
fflush(stdin);
gets(str);
Datele de intrare se introduc astfel :
100
abcd
Ce se întamplă dacă scoatem funcţia fflush din
secvenţa anterioară ?
a) este semnalată eroare la
compilare
b) nu se mai citeşte de pe linia a
doua şirul "abcd", acesta luand
valoarea ""(şir vid)
c) ambele date sunt citite corect,
numărul luand valoarea 100 iar
şirul valoarea "abcd"

11. Fie următoarele declaraţii de variabile:


int a; float x; char m;
Care dintre instrucţiunile de mai jos realizează
citirea corectă a variabilelor a,x şi m?
a) scanf(“%d %f %c”,&a,&x,&m);
b) scanf(“%d,%f,%c”,a,x,m);
c) scanf(“%f.%d.%c”,&a,&x,&m);
d) scanf(“a=%d,x=%f,c=
%c”,a,x,m);
e) scanf(“a=%d\nx=%f\nc=%c\n”,
&a,&x,&m);

12. Fie declaraţiile:


int a=34; float x=6.25;
Precizaţi care dintre instrucţiunile de afişare
următoare trebuie executată astfel încât să se
afişeze pe ecran rândul de mai jos:
34##:#6.250
unde prin “#” am simbolizat caracterul spaţiu.
a) printf(“\n%4d:%-10f”,a,x);
b) printf(“\n%-4d:%6.3f”,a,x);
c) printf(“\n%6d:%10f”,a,x);
d) printf(“\n%-d:%-.3f”,a,x);
e) printf(“\n%d:%f”,a,x);

13. Dacă de la tastatură se introduce caracterul


”a”, iar codurile literelor mici sunt succesive,
începând cu 97, ce afişează programul următor?
#include<stdio.h>
#include<conio.h>
void main()
{
char c, p;
p=getchar():
int n=p+259;
c=n;
putchar(c);
}
a) 356 b) ‘a’ c) ‘d’
b) 100 e) programul este
greşit

14. Care dintre secvenţele de mai jos nu conţin


erori şi afişează cuvintele „Program” şi „simplu”
unul sub altul (fiecare pe câte un rând) ?
a)
{
printf(“Program”);
printf(“\nsimplu”);
}
b)
{
printf(“Program\n”);
printf(“simplu”);
}
c)
{
printf(“Program\nsimplu”);
printf(“\n”);
}
d)
{
printf(“Program”);
printf(“simplu\n”);
}
e) nici unul dintre programele
anterioare

15. Funcţiile getchar(), getch() şi getche()


citesc de la tastatură un caracter. Ce deosebiri
există între cele trei funcţii ?
a) funcţiile getchar şi getche
realizează citire cu ecou, iar
getch citeşte caracterul fără
ecou
b) funcţia getchar citeşte
caracterul cu ecou, iar
funcţiile getche şi getch
realizează citirea fără ecou
c) funcţiile getchar şi getch
preiau caracterul numai după
apăsarea tastei ENTER
d) funcţiile getchar şi getche
preiau caracterul de indată ce a
fost tastat, fără să mai aştepte
„confirmarea” cu ENTER
e) toate cele trei funcţii au
prototipul in header-ul conio.h

16. char x=’A’;


putchar(x);
putchar(x+1);
Referindu-ne la codul de mai sus şi
presupunând că funcţia putchar ia ca argument
un întreg, ce vom avea la ieşire după execuţie ?
a) BA b) A66 c) AB
d) Se va genera o avertizare la
compilare şi execuţia nu este cea
aşteptată

17. Unde scrie funcţia printf() ?


a) stdout b) stdio
c) stdin d) stderr

18. C’s a
“fun” language!
Selectaţi codul care va produce ieşirea de mai
sus:
a) printf(“C’s a\”fun\”
language!\n”);
b) printf(“C’s a
\”fun\”language!”);
c) printf(“C’s a\n “fun”
language!\n”);
d) printf(“C’s
a\n \”fun\”
language!\n”);
19. short int x; /*presupunem că x este pe
16 biţi*/
Care este numărul maxim care poate fi tipărit
folosind printf(“%d\n”,x), presupunând că
x este declarat aşa cum am arătat mai sus ?
a) 127 b) 255
c) 32767 d) 65536

20. Fie secvenţa :


printf(“\n%10.0f”,x);
Pentru x=3.14159265 se va afişa :
a) 3 b) 3.14
c) 3.1415 d) 3.141593

21. Fie secvenţa :


printf(“\n.1E”,x);
Pentru x=123.672 se va afişa :
a) 1.2E+02 b) 1.236E+02
c) 123E+02 d) 1E+02

22. Fie secvenţa :


printf(“\n*%15.10S*”,x);
Pentru x=”program c++”, se va afişa :
a) * program c+* (5 spaţii
in faţă)
b) *program c++*
c) *program c*
d) * program c++* (4 spaţii
in faţă)

23. Fie secvenţa :


printf(“\n*%07d*”,x);
Pentru x=123, se va afişa :
a) *0000123* b) *123*
c) * 123* d) *123 *

24. Fie secvenţa :


printf(“\n%.4e”,x);
Pentru x=-123.5e20, se va afişa :
a) –1.2350e+22 b) –1.235e+22
c) –12.3500e+21 d) –1.2350e+20

25. Care este efectul apelului funcţiei


printf(“%x”,a), unde a este o variabilă de
tip întreg de valoare 0xAF5 :
a) 0xAF5 b) 5365 c)AF5
d) valoarea binară a variabilei a

26. Care este efectul următorului program :


#include <stdio.h>
#include <conio.h>
void main(void)
{
putchar(getche()-‘A’+’a’);
printf(“\n”);
}
a) citeşte şi afişează un caracter
b) citeşte o literă mare şi
afişează litera mică corespunzătoare
c) citeşte o literă mică şi
afişează litera mare corespunzătoare
d) citeşte un character

27. Se defineşte constanta simbolică SIR astfel:


#define SIR “EXAMEN ADMITERE”
Efectul apelului lui printf(“%-10.6s”,SIR)
este următorul :
a) EXAMEN ADMITERE
b) EXAMEN (4 spaţii in faţă)
c) EXAMEN (4 spaţii după)
d) EXAMEN ADM

28. Care este efectul apelului funcţiei


printf(“%o”,a) unde a este o variabilă de
tip întreg de valoare 0xAF5 :
a) 05365 b) 0xAF5
c) AF5 d) 5365

29. Se dă următorul program :


#include <stdio.h>
void main()
{
double x;
scanf(“%lf”,&x);
printf(“%e”,d);
}
Efectul acestui program este :
a) citeşte şi afişează un număr
real
b) citeşte un număr cu exponent şi
il afişează
c) citeşte un număr real şi
afişează valoarea sa cu
exponenţială
d) afişează un număr real
30. Care este efectul instrucţiunii
printf(“%u”,x) unde x este o variabilă de
tip întreg de valoare 0xAF25 :
a) –20669 b)
AF25
c) 44837 d) 0xAF25

31. Care este efectul apelului funcţiei


printf(“%x”,b) unde b este o variabilă de
tip întreg de valoare 0x12ABC :
a) 12AB b) 12ABC
c) 0x12ABC d) 2ABC

32. Care este efectul apelului functiei


printf(“%lx”,b) unde b este o variabilă de
tip întreg în dublă precizie de valoarea
0x12ABC :
a) 0x12ABC b) 12ABC
c) ABC d) 012ABC

33. Fie următorul program :


#include <stdio.h>
main()
{
int k;
scanf(“%d”,&k);
printf(“%x”,k);
} În urma lansării în execuţie a
programului,
valoarea lui k introdusă va fi 65. Care va fi
rezultatul afişat ?
a) 65 b) 41 c) 32 d) 60
34. Precizaţi care sunt valorile afişate, dacă se
vor citi în ordinea indicată valorile numerice 5 2
-3:
{ int a, b;
scanf(“%d%d%d”,&a,&b,&a);
printf(“%d”,a);
printf(“%d\n”,b);
printf(“%d”,a+b);
}
a) 5 2
7
b) –3 2
-1
c) 5 2 7
d) există erori de sintaxă

35. Care sunt valorile tipărite de programul


următor :
void main(void)
{ int a,b;
a=5; b=13;
printf(“%d+%2d=%2d”,a, b, a+b);
}
a) a+b=a+b b) 5+13=18
c) 5+13:2=18:2 d) a+b:2=a+b:2

36. Scrieţi o instrucţiune care afişează valoarea


variabilei întregi total :
a) printf(“%s\n”,’total’);
b) printf(“%d\n”,total);
c) printf(‘%s\n’,”total”);
d) printf total;

37. Scrieţi o instrucţiune care citeşte un caracter


şi-l memorează în variabila litera :
a) scanf(‘litera’);
b) scanf(“litera”);
c) scanf litera;
d) scanf(“%c”,&litera);

38. Scrieţi o instrucţiune care afişează valoarea


unei variabile de tip real small_value cu trei
zecimale exacte :
a) printf(‘small_value:3’);
b) printf(“%.3f\n”,small_value);
c) printf(“%s\n”,”small_value:3”
);
d) printf “%.3f”,small_
Cap.4 Operatorii limbajului C
4.13 Exerciţii şi teste grilă
1. Fie expresia a<b&&a<c. Să se verifice
afirmaţiile următoare :
a) expresia este incorectă
sintactic
b) este corectă şi este echivalentă
cu : (a<b)&&(a<c)
c) este corectă şi este echivalentă
cu expresia : a<(b&&a)<c

2. Să se verifice utilizarea căror operaţii este


permisă :
a) a-=b; b) -a=b;
c) -a=-b; d) a<<=2;
3. Fie o expresie care conţine operatori
aritmetici, relaţionali şi de atribuire şi nu conţine
paranteze. Să se precizeze, care va fi ordinea
de evaluare a operatorilor ?
a) de atribuire, relaţionali, aritmetici
b) aritmetici,relaţionali, de atribuire
c) de atribuire, aritmetici, relaţionali

4. Care din următoarele afirmaţii sunt


adevărate ?
a) operatorii pe biţi au ordinea de
evaluare inaintea operatorilor
logici
b) operatorii de atribuire compusă
au o precedenţa mai mică decat
operatorul de atribuire simplă
c) operatorii relaţionali au o
precedenţă mai mare decat
operatorii logici
d) toţi operatorii relaţionali au
acelaşi nivel de prioritate

5. Fie declaraţia : int i,x,y; Să se verifice


care expresii sunt corecte :
a) (i+1)++ b) i+++ 1 c) --x+y
d) ++i++ e) &x+1 f) &(x+1)
g) -x&1

7. Fie declaraţia : unsigned n;


Care din expresiile următoare determină octetul
inferior al variabilei n ?
a) n%256 b) n>>4 c) n & 0xFF
d) (n<<4)>>4 e) n>>8
f) (n<<8)>>8

10. Ce valoare vor avea variabilele x si y după


secvenţa de instrucţiuni ?
int x=7,y;
y=x<<=2;
a) 32 b) 28 c) 64

11. Să se determine care din următoarele


expresii sunt corecte :
a) z=x++==4||y--<5;
b) a=x==y==z;

13. Ce face următorul program ?


#include<stdio.h>
main()
{ int i,j;
scanf("%d% d" ,&i ,&j);
printf("\n i=%d , j=%d", i, j);
i=i-j , j=j+i , i=j-i;
printf("\n i=%d , j=%d", i, j);
}
a) realizează un calcul algebric
oarecare
b) adună valorile absolute ale lui
i şi j
c) interschimbă valorile variabilelor
i şi j

14. Care din cele trei expresii sunt echivalente


între ele ?
a) 1<<n+1; b) 1<<(n+1)
c) (1<<n)+1

19. double x=1/2.0+1/2;


printf(“x=%.2f\n”,x);
Ce se va tipări după execuţia codului de mai sus
?
a) x=0.00 b) x=0.25
c) x=0.50 d) x=0.75

20. Care va fi valoarea lui i după execuţia


următoarelor instrucţiuni :
i=4; i=i?18:2;
a) 4 b) 18
c) 2 d) 9

21. Se declară variabila


unsigned int a=0x3FF
Care este valoarea expresiei a>>3 ?
a) 3FF b) 0xBF
c) 0x7F d) 0x3FC

22. Se dau int a=0,b=1,c=2.Valoarea


variabilei cp din expresia:
cp=rez=a+b+c>c&&b*c<a+b*c este
:
a) 1 b) 0
c) 2 d) 1.5

23. Se dă variabila b=0xFF10 de tip unsigned


int şi expresia b>>3. Efectul acestei expresii
este :
a) 1FF2
b) valoarea binară a variabilei
b
c) 0xFF13 d) 0x1FE2

24. Se dau variabilele de tip întreg


a=0x125,b=0455,c=293,d=0xAF,x,y
şi expresia x=y=(a==b&a==c)^d. Variabilele x
si y au valoarea :
a) AF b) 0257
c) 10101111 d) 0xAF

25. Fie expresia de mai jos :


(x>-1) && !(x>1)||(x>=5)
Intervalul selectat este :
a) x (-1,1] [5, ∞)
b) x (-∞ ,-1) [1,∞ )
c) x (- ∞,-1) (1,5)
d) x [-1,1] [5,∞ )

26. Care este intervalul descris de expresia


logică de mai jos ?
(x<=-2)||(x>-1)&&!(x>=1)||(x>5)
a) x (-∞ , -2] (-1,1] [5, ∞ )
b) x (-∞ ,-2] [-1,1] (5, ∞ )
c) x (-∞ ,-2] (-1,1] [5, ∞ )
d) x (-∞ ,-2] (-1,1) (5, ∞ )
27. Care din următorii operatori relaţionali este
invalid ?
a) == b) <> c) < d) >

28. Care din următorii operatori are prioritatea


cea mai mică ?
a) == b) + c) – d) !

29. După execuţia secvenţei de cod, ce valoare


va avea variabila z ?
int z;
int x=5;
int y=-10;
z:=x--y;
a) –10 b) –5 c) 5 d) 15

30. Ce rezultat va produce operaţia :


0xB & 0x5
a) 0xE b) 0xF
c) 0x1 d) 0x8

31. Fie relaţia 4/5|3+4%5&3. Care este


rezultatul evaluării ei ?
a) 4 b) 3 c) 1 d) 1

32. Fie secvenţa de cod :


int x=1*2+4/4+3%5;
Valoarea lui x este :
a) se va genera eroare b) 3
c) 6 d) 5
33. Presupunând următoarea secvenţă de cod :
int a=5,b=2;
float c=a/b;
Care va fi valoarea lui c ?
a) 2.5 b) 2 c) 3 d) 1

34. Avem următorul program :


int main()
{ float x, y, z;
x=1.3; y=1.2; z=x%y;
return 0;
}
La sfârşitul programului variabila z va avea
valoarea :
a) 0.1 b) 0 c) 1
d) programul generează eroare la
compilare

35. Fie secvenţa :


double x,y;
…………….
x=9; y=3(x-10);
………..
Care afirmaţie este adevarată :
a) y=-3 b) y=3
c) eroare la compilare deoarece
lipseşte operator
d) eroare la compilare deoarece nu
se poate scădea un double

36. Urmăriţi secvenţa de mai jos şi precizaţi


valoarea variabilei y:
int a, b=3;
int x=2;
int z=2*b+x;
a) 2 b) 3 c) 4 d) 5
e) secvenţa este eronată

37. Ştiind că în conformitate cu standardul


ASCII literele mari au codurile succesive
începând cu 65, precizaţi care dintre variabilele
x, y, z şi u vor avea valoarea –2 la finele
execuţiei programului de mai jos.
void main()
{
int x=-3, y=1, z=2, u;
x++;
y+=2;
z-=1+sqrt(y+2); // radical
de ordin doi
u=’A’-‘C’;
}
a) x b) y c) z d) u e) nici una

38. Se consideră variabilele întregi x,y şi z, fiind


cunoscute valorile x=4 şi y=2. Care dintre
expresiile de mai jos are valoarea 0 ?
a) x+y>x%y+1 b) z=(x-y!=0)
c) x-2*y=0 d) !x
e) x && y

39. Ştiind că a, b, c, d, x sunt variabile reale cu


a<=b şi c<=d, scrieţi sub formă de expresie :
x [a, b] sau x [c, d].
a) (x>=a||x<=b)&&(x>=c||x<=d)
b)((x>=a)&&(x<=b))||((x>=c)&&(x<=d))
c) (!(x<a)&&!(x>b))||(!(x<c)&&!(x>d))
d) ((x>=a)||(x<=b))&&((x>=c)||
(x<=d))
e) (x>=a && x<=b) || (x>=c && x<=d)

40. Fie declaraţiile de variabile:


int x=4, z=13;
float z;
Care dintre instrucţiunile de mai jos nu atribuie
corect valoarea 8.5 variabilei z ?
a) z=(x+y)/2.;
b) z=((float)x+y)/2:
c) z=(x+y.)/2;
d) z=(x+y)/(float)2;
e) z=(float)(x+y)/2;

41. Ce afişează programul următor, dacă


valoarea citită de la tastatură este 2 ?
#include<stdio.h>
void main()
{
int x,y,z;
scanf(“%d”, &x);
y=--x;
y+=3;
z=x-2*y++;
printf(“%d”, z++);
}
a) –9 b) –8 c) –7
d) –6 e) –5
42. Fie trei variabile întregi a, b, x. Precizaţi care
dintre expresiile condiţionale de mai jos nu este
o transcriere corectă a enunţului: „dacă
numărul y este pozitiv, atunci x ia
valoarea lui a, în caz contrar x ia
valoarea lui b”.
a) x=(y>0) ? a : b;
b) x=y>0 ? b: a;
c) x=!y>0 ? b : a;
d) y>0 ? x=a :x=b;
e) !(y>0) ? x=b : x=a;

43. Ce valoare afişează programul următor ?


#include<stdio.h>
void main()
{
int x=5, y;
y=(sizeof(x-1)==sizeof(int)) ?
sizeof(‘x’) : sizeof(3);
printf(“%d”, y);
}
a) 3 b) 1 c) 2 d) 4
e) programul este eronat

44. Ce valori va afişa programul următor ?


#include<stdio.h>
void main()
{
int a=10, b=6, c=4, d;
d=(c=a-6, a=b%c, b+=a, a/2);
printf(“\n%d %d %d %d”,a,b,c,d);
}
a) 0 16 –6 5 b) 2 8 4 1
c) 4 2 8 1 d) –6 0 16 5
e) alte valori

45. Ce valoare afişează programul de mai jos ?


#include<stdio.h>
void main()
{
int a=3, b=2, n=4, x;
x=(a<<n) + (a&b) + (n|b);
printf(“%d”, x);
}
a) 2 b) 8 c) 51
d) 56 e) programul este greşit

46. Fie variabilele întregi a=1,b=2,c=3,d=4.


Care dintre construcţiile de mai jos sunt expresii
scrise corect, cu valoarea 0 ?
a) !d b) a+b<d c) a*b+c
d) a=b<c e) (a<b)!=(b<c)

47. Pentru care dintre seturile de valori ale


variabilelor x, y, z de mai jos expresia
(x<y)<((z!=x)<((z-y)<x) are valoarea 1?
a) x=3; y=5; z=4 b) x=4; y=3; z=4
c) x=3; y=4; z=3 d) x=5; y=4; z=3
e) x=5; y=5; z=5

48. Care dintre următoarele expresii au valoarea


1 dacă şi numai dacă valorile variabilelor întregi
x şi y sunt numere pare ?
a) x-y==2 b) x*y%4==0
c) (x+y)%2==0 d) y%x==2
e) (x%2==0)&&(y%2==0)

49. Care dintre următoarele expresii sunt


adevărate dacă şi numai dacă valorile
variabilelor x şi y sunt numere naturale
consecutive ?
a) x-y==1 b) (x==1)&&(y==2)
b) (x-y==1)&&(y-x==1)
c) y==x+1
e) (x-y==1)||(y-x==1)

50. Se consideră următoarele declaraţii de


variabile : int a,b,e; float c,d;. Care
dintre instrucţiunile de mai jos sunt incorecte ?
a) a=a*b; b) e=a<c;
c) –b=a+a/b; d) d=(a+b)/2;
e) c*d=a-b;

51. Fie variabilele x,y,z de tipul int, fiind


cunoscute valorile iniţiale x=3, y=5. Care
dintre instrucţiunile de mai jos trebuie executată
astfel încât, după execuţie, valoarea variabilei z
să fie 21 ?
a) z=2*x+3*y--; b) z=2*x+3*--y;
c) z=2*x--+3*y; d) z=2*--x+3*y;
e) z=2*x+3*y;

52. Fie trei variabile întregi a,b,x. Scrieţi cu


ajutorul unei expresii condiţionale enunţul „dacă
x nu aparţine [a,b] , atunci x ia
valoarea lui a, în caz contrar x ia
valoarea lui b”.
a) x=((x<a)||(x>b))? a : b;
b) x=(x<a||x>b)? a : b;
c) x=((x<a)&&(x>b))? a : b;
d) x=(x<a)||(x>b)? b : a;
e) (x<a)||(x>b))? (x=a) : (x=b);

53. Ştiind că în standardele ASCII caracterele


literă mare au codurile succesive începând cu
65, deduceţi ce valoare va afişa programul
următor.
#include<stdio.h>
void main()
{
int x,y,z,p; char m,n;
m=’C’; n=’A’;
x=m; y=2*m-n; z=3;
p=x<y?(y<z ? z:y):(z<x?x:z);
printf(“\n%d”, p);
}
a) 1 b) 3 c) 69 d) 67 e) 0

54. Ştiind că valorile de tipul int se memorează


pe 2 octeţi, iar cele de tipul float pe 4 octeţi, de
câte ori va afişa programul următor valoarea 2?
#include<stdio.h>
void main()
{
int x; char c;
x=’A’;
printf(“%d”, sizeof(x));
c=’A’;
printf(“%d”,sizeof(c));
printf(“%d”,sizeof(float)-2);
x=sizeof(int); x=++x/2;
printf(“%d”, x==2);
}
a) nici o data b) o data
c) de 2 ori d) de 3 ori
e) de 4 ori

55. Ce valori afişează programul următor ?


#include<stdio.h>
void main()
{
int x=10, y=6, m, n, p;
n=(m=x++, y++, p=x+y);
printf(“\n%d %d %d”,m n,p);
}
a) 10 18 16 b) 11 18 18
c) 10 18 18 d) 11 18 17
e) 10 18 17

56. Ce valoare putem introduce la citirea


variabilei y, astfel încât programul de mai jos să
tipărească 1 ?
#include<stdio.h>
void main()
{
int x=2, y, z;
scanf(“%d”, &y);
z=y+3*x++;
printf(“\n%d”,(z%2==0&&x>=1)?1:0);
}
a) 2 b) 3 c) 4
d) orice valoare pară
e) orice valoare impară

57. Fie variabilele a,b,c de tipul int, cu valorile


a=11, b=5, c=7. Care dintre expresiile de mai
jos are valoarea 1?
a) (a|~b)&1 b) (~a&b)|1
c) (a&~b)|1 d) (a&b)|~1
e) (~a|b)&1

58. Precizaţi valoarea pe care o va avea


variabila c în urma execuţiei programului de mai
jos:
#include<stdio.h>
void main()
{
char c=’d’;
int n=99;
c=n+1=c-1;
}
a) ‘d’ b)’c’ c) ‘b’
d) NULL e) atribuirea este
greşită

Cap.5 Instrucţiunile limbajului C


1. Care dintre următoarele secvenţe de
instrucţiuni atribuie variabilei reale x cea mai
mare dintre valorile variabilelor reale a şi b sau
valoarea lor comună, în cazul în care acestea
sunt egale ?
a) if(a<=b) x=b; else x=a;
b) if(a<=b) x=a; else x=b;
c) if(a==b) x=a; else if(b>a) x=b;
d) x=a; if(x<b) x=b;
e) nici una dintre secvenţele
anterioare

2. Fie variabilele a şi b, ambele de tipul int, ale


căror valori se presupun cunoscute. Scrieţi o
secvenţă de programul pentru enunţul : „dacă
numerele x şi z sunt ambele impare,
atunci tipăreşte valoarea 1”.
a) if((x%2!=0)&&(y%2!=0))
puchar(’1’);
b) if(x%2==0||y%2==0) putchar(‘1’);
c) if(x%2 && y%2) putchar(‘1’);
d) if(!(x%2==0||y%2==0))
putchar(‘1’);
e) if(!(x%2==0)&&!(y%2==0))
putchar(‘1’);

3. Ce va afişa programul următor, dacă de la


tastatură se introduc în ordine numerele 5, 7 şi
8?
#include<stdio.h>
void main()
{
int x,y,z,m;
scanf(“%d %d %d”,&x,&y,&z);
m=(x+y+z)/3;
switch(m) {
case 1,2,3,4:
{ printf(“Corigent”);
break; }
case 5,6:
{ printf(“Mediocru”);
break; }
case 7,8,9:
{ printf(“Bine”);
break; }
case 10:
{ printf(“Foarte bine”);
break; }
default:
printf(“Eroare”);
}
}
a) Corigent b) Mediocru
c) Satisfăcător d) Foarte bine
e) Eroare

4. Precizaţi ce se va afişa în urma execuţiei


secvenţei de program de mai jos pentru n=5
(s,n şi k sunt variabile întregi).
s=0; k=1;
while(k<=n)
{
s+=k;
k+=2;
}
printf(„s=%d”, s);
a) s=4 b) s=16 c) s=9
d) s=15 e)s=0
5. Care dintre secvenţele de program de mai jos
calculează corect factorialul numărului natural
n?
1) p=1; for(i=1; i<=n; i++) p=p*i;
2) p=1; i=1; while(i<=n) p=p*i++;
3) p=1; i=1;
do{ p*=i; i=i+1; }while(i<=n);
a) numai 1) b) numai 2)
c) numai 3) d) 1) şi 3)
e) toate

6. Care trebuie să fie valoarea variabilei întregi


m, astfel încât următoarea secvenţă de
program să afişeze exact un caracter ‘A’ ?
x=5;
do{
putchar(‘A’);
x++;
}while(x>m);
a) 12 b)5 c)6
d) 4 e)1

7. Se consideră secvenţa de program de mai


jos, în care toate variabilele sunt întregi. Pentru
n=3, care va fi valoarea variabilei p după
execuţia secvenţei ?
p=1;
for(i=1; i<=n; i++)
{ s=0;
for(j=1; j<=i; j++) s+=j;
p*=s;
}
a) 180 b) 18 c) 9
d) 216 e) 1

8. Precizaţi ce se va afişa în urma execuţiei


programului următor pentru x=179 ?
#include<stdio.h>
void main()
{
int c,s; long d,x;
scanf(„%ld”, &x);
d=x; s=0;
while(d)
{ c=d%10; s+=c; d=d/10; }
printf(„%d”, s);
}
a) 16 b) 18 c)17
d) 0 e) 971

9. Considerăm programul următor :


#include<stdio.h>
void main()
{
short int m,x;
m=-1;
while((scanf(“%d”,&x)==1)&& x)
if(x>m) m=x;
printf(“%d”, m);
}
Precizaţi ce valoare va afişa programul, dacă
şirul de numere citit de la tastatură este 2, 5,
-32000, 33000, 0.
a) –1 b) 0 c) 33000
d) 2 e) 5

10. Pentru ce valoare a variabilei m, secvenţa


de program de mai jos reprezintă o buclă infinită
?
int n=10, m;
do{
while(n>0) n--;
}while(n!=m);
a) 10
b) orice valoare diferită de 10
c) 0
d) orice valoare diferită de 0
e) orice valoare intreagă

11. Ce valoare va afişa programul următor


pentru n=12 ?
#include<stdio.h>
void main()
{
int i,n,s;
scanf(„%d”, &n);
for(s=0,i=2; i<n/2;
!(n%i)?s+=i++: i++);
printf(”%d”,s);
}
a) 0 b) 9 c) 12 d) 78
e) programul conţine erori

12. Dacă de la tastatură se introduc, în ordine,


numerele 2,7,3,8,5,5, ce valoare va afişa
secvenţa următoare ?
int a, b, nr=0;
do{
scanf(“%d %d”, &a, &b);
}while((b!=a) ? ++nr : 0);
printf(“%d”, nr);
a) 0 b) 1 c) 2
d) 3 e) 4

13. int i=0; int j=6;


if(i!=0) && (j/i!=1)
j=i; i+=4; j+=i;
Pentru codul de mai sus alegeţi comportamentul
corect :
a) va genera eroare la rulare
b) j=4 c) j=0 d) j=10

14.
A) for(exp1;exp2;exp3)
instructiune;
este echivalent cu
exp1;
while(exp2)
{ instructiune;
exp3;}
B) for( ;exp; ) instructiune;
este echivalent cu
while(exp) instructiune;
C) for( ; ; ) instructiune;
este echivalent cu
while(1) instructiune;
Care din echivalenţele de mai sus sunt eronate:
a) nici una b) A,B
c) B,C d) A,C

15. Fie secvenţa :


do{
scanf(“%c”,&c);
if (c>=’a’ && c<=’z’) i++;
} while(c!=EOF);
Care din următoarele afirmaţii este adevărată :
a) se numără cate caractere litere
mici sunt citite
b) se numără cate caractere sunt
citite
c) se numără cate caractere litere
mari sunt citite
d) nici una

16. Se dă o secvenţă de program în care toate


variabilele sunt de tip întreg. În urma execuţiei
programului ce conţine această secvenţă, ce
valori capătă variabilele d şi s ?
a=8;
b=c=1; d=s=0;
i=3;
do{
i++;
if(a>0)
if(b>1)
if(c>1) d=a;
else d=a+b;
else d=a+b+c;
s+=i+d;
} while(i>5);
a) d=8 s=12 b) d=9 s=12
c) d=10 s=13 d) d=10 s=14

17. Se consideră secvenţa de program :


void main(void)
{ int x=1;
float z, y=0.96;
x+=y; z=sqrt(x);
printf(“%f”,z);
}
Valoarea afişată este :
a) 1.46 b) 1.000000 c) 1
d) programul conţine erori de
sintaxă

18. Fie secvenţa de cod prezentată mai jos :


i=1;
while(n) i=i*(n--);
atunci aceasta :
a) calculează n!
b) calculează in
c) calculează ni
d) se ciclează la infinit

19. Fie secvenţa de cod prezentată mai jos :


i=1;
while(n--) i=i*2;
atunci aceasta :
a) calculează 2n b) calculează i2
c) calculează n2
d) se ciclează la infinit
20. Scrieţi o buclă care afişează secvenţa :
1
22
333
4444
55555
a) for(loop==1;loop<=5;looop++)
{
for(loop1==1;loop1<=loop;loop1++)
printf(“%d”,loop1);
printf(“\n”);
}
b) for(loop=1;loop<=5;loop++)
{ for(loop1=1;loop1<=loop;loop1+
+)
printf(“%d”,loop);
printf(“\n”);
}
c) for(loop=1;loop<=5;loop++)
{ for(loop1=1;loop1<=loop;loop1+
+)
printf(“%d”,loop1);
printf(“\n”);
}
d) for(loop=5;loop>0;loop--)
{ for(loop1=1;loop1<=loop;loop1+
+)
printf(“%d”,loop1);
printf(“\n”);
}
21. Referitor la secvenţa de cod de mai jos, ce
valoare va avea variabila contor după execuţia
ei ?
int x=3, contor=0;
while((x-1)) {
++ contor;
x--;
}
a) 0 b) 1 c) 2 d) 3

22. Ce realizează următoarea secvenţă :


scanf(“%d”,&x,&y,&z);
if(x<=y);
x=x+z;
y=y+z;
else z=x+y;
a) citeşte trei numere şi
calculează suma lor
b) citeşte trei numere şi
calculează produsul lor
c) este greşită
d) z devine minimul dintre x si y

23. Care secvenţă de program realizează o


repetiţie la infinit :
I) do while(1);
II) do while(0);
III) do while(i%1<2);
a) doar I b) doar II
c) doar III d) doar I şi III

24. Se dă codul :
int x=4, a=2;
int b=4, c=8;
if(x==b) x=a;
else x=b;
if(x!=b) c=c+b;
else c=c+a;
printf(“c=%d\n”,c);
Ce se va afişa după execuţia codului de mai sus
?
a) c=4 b) c=8 c) c=10 d) c=12

25. Se dă următoarea secvenţă de cod :


int i, j=0;
for(i=1;i<11;i+=2)
{ j++; if(i==7) break; }
Care va fi valoarea finală a lui j ?
a) 3 b) 4 c) 5 d) 7

26. Se dă următoarea secvenţă de cod :


int i, j, k; i=1; j=1; k=2;
while(i<6)
{ k=k+i;i++;
j=j+k;
if(k==3) j--;
else if(j==8) break;
}
printf(“%d--%d--%d”,i,j,k);
Ce va afişa codul de mai sus ?
a) 1—1—2 b) 2—3—3
c) 3—8—5 d) 4—16—8

27. Se dă codul :
int a=3, b=0;
while(a)
{ b=b++; a=b; }
Ce valoare va avea b ?
a) 1 b) 3 c) 0
d) nedefinită pentru că va fi o
buclă infinită

28. Fie secvenţa de cod :


#include<stdio.h>
void main(void)
{ int i,y,x=6;
y=x;
while(1)
{ y--; x=x*y;
if(y==0) break;
}
printf(“%d”,x);
}
Ce număr va fi afişat pe ecran la terminarea
execuţiei acestui cod ?
a) 720
b) programul va rula la infinit
c) 0 d) 6

29. Fie secvenţa de cod :


int x;
int y=1;
for(x=0;x<=30;x++)
{ y=y+1;
if(x<5) continue;
if(x>5) break;
y=y+x;
}
După execuţia codului anterior, ce valoare va
avea y ?
a) 486 b) 31 c) 13 d) 496

30. Fie următorul program :


int main()
{ int i;
for(i=1;i<65535;i++);
printf(“i=%d\n”,i);
}
a)valoarea afişată este i=65535
b)valoarea afişată este i=65534
c)valoarea afişată este i=32766
d)programul nu este corect deoarece
este depăşit domeniul de valori

31. În urma execuţiei secvenţei de program de


mai jos, pentru care dintre tripletele de valori ale
variabilelor a, b, c, date mai jos, se va afişa
valoarea 1?
x=1;
if(!(a<=b)||!(a<=c))
{ if(b>=c) printf(“%d\n”,-x); }
else
if(b<c) printf(“%d\n”,x);
a) a=3, b=2, c=4 b) a=2, b=3, c=4
c) a=4, b=3, c=2 d) a=2, b=4, c=3
e) a=4, b=2, c=3

32. Se consideră programul următor:


#include<stdio.h>
void main()
{
int a,b,c,d,i;
scanf(“%d %d”, &a, &b);
if(a>b)
{ c=a; a=b; b=c; }
d=0;
for(i=a;i<=b;i++)
if(i%2==0) d++;
printf(“%d”,d);
}
Ce valoare se afişează pentru a=33 şi b=18 ?
a) 8 b) 7 c) 0 d) 16 e) 33

33. Fie următorul program:


#include<stdio.h>
void main()
{
int x,y,m,n,a,b;
a=b=2; //(1)
m=(x=a+3,y=b-1,y++,y+x); //(2)
if(a&&x>y) printf(“%d”,m);//(3)
if(x-y>a&&x>y||!m) //(4)
putchar(‘1’);
else putchar(‘0’);
if((n=x>y)==0)||(--x==4)) //(5)
printf(“%d”,x--);
} În timpul execuţiei programului se pot spune
următoarele:
a) atribuirea din linia (1) este
eronată
b) instrucţiunea din linia (2) este
eronată
c) in urma execuţiei liniei (3) nu
se afişează nici o valoare
d) in urma execuţiei liniei (4) se
afişează valoarea 1
e) in urma execuţiei liniei (5) se
afişează valoarea 4

34. Dacă de la tastatură se introduce numărul


22, câte valori distincte va afişa programul
următor?
#include<stdio.h>
#include<math.h>
void main()
{
int x,n,i;
for(scanf(“%d”,&n),i=1;;x=sqrt(i),
printf(“%d”,x),i++)
if(i>n) break;
}
a) nici una
b) 1 c) 2 d) 3 e) 4

35.Precizaţi de câte ori se va afişa valoarea 1 în


timpul execuţiei programului următor, dacă
a=3,b=4 şi x=5.
#include<stdio.h>
void main()
{
int a,b,x;
scanf(”%d%d%d”,7a,&b,&x);
if(!((x<=a)&&(x>=b)))
putchar(’1’);
if(!(x<=a||x>=b))
putchar(’1’);
if(!(x<=a)&&!(x>=b))
putchar(’1’);
if(!(x<=a)||!(x>=b))
putchar(’1’);
}
a) nici o dată b) o dată
c) de două ori d) de trei ori
e) de patru ori

36. Dacă în timpul execuţiei programului de mai


jos n va primi valoarea 232213, care vor fi în
final valorile variabilelor f1, f2 şi f3 ?
#include<stdio.h>
void main()
{
long n;
unsigned int f1,f2,f3,c;
scanf(“%ld”,&n);
f1=f2=f3=0;
do{
c=n%10; n=n/10;
switch(c) {
case 1: { f1++; break; }
case 2: { f2++; break; }
case 3: { f3++; break; }
}
}while(n!=0);
printf(“%u %u %u”,f1,f2,f3);
}
a) f1=1,f2=1,f3=1 b) f1=1,f2=2,f3=2
c) f1=1,f2=2,f3=3 d) f1=2,f2=1,f3=3
e) f1=3,f2=2,f3=1

37.Pentru n=7, care dintre secvenţele de


program de mai jos trebuie executată astfel
încât, la finele execuţiei, valoarea variabilei p să
fie 48 ?
a) p=1; i=2;
while(i<=n) { p*=i;i+=2;}
b) p=1; i=1;
while(i<n/2){i++;p=p*(2*i+1); }
c) p=1; i=1;
while(i<=n/2) {p=p*(2*i);i++; }
d) p=1; i=0;
while(i<n) { i+=2;p*=i; }
e) nici una dintre secvenţele
anterioare

38. Precizaţi care dintre următoarele secvenţe


de instrucţiuni atribuie variabilei întregi x
valoarea n2, cu n număr natural.
a) x=1;
for(j=1;j<3;j++) x*=n;
b) x=1;
for(j=1;j<=n;j++) x*=2;
c) x=1; j=0;
while(j<2) x*=n; j++;
d) x=1; j=0;
do{ j++; x*=n;}while(j<2);
e) x=n*n;
39. Precizaţi care dintre următoarele secvenţe
de instrucţiuni atribuie variabilei întregi x
valoarea 10n, cu n număr natural.
a) x=10;
for(j=1;j<=n;j++)x*=i;
b) x=1;
for(j=n;j>0;j--) x*=10;
c) x=1; j=1;
do{ x*=10; j++; }while(j<n);
d) x=1; j=0;
while(j<=n) { j++; x*=i;}
e) nici una dintre variantele
anterioare

40. Deduceţi ce valoare se va afişa în urma


execuţiei secvenţei de program de mai jos,
dacă valorile variabilei x citite de la tastatură
sunt în ordine 3,2,4,3,5,10,20,0.
scanf(“%d”,&x);
nr=0;
do{
y=n;
scanf(“%d”,&x);
if(x==2*y) nr++;
}while(x!=0);
printf(“%d”,nr);
a) 0 b) 1 c) 2 d) 3 e) 4

41. Care dintre următoarele secvenţe de


înstrucţiuni atribuie variabilei întregi u valoarea
primei cifre a numărului natural reprezentat de
variabila x ?
a) u=x;
while(u>=10) u=u%10;
b) while(x>=10) x=x/10;
u=x;
c) u=x/10;
d) u=x%10;
e) nici una din variantele
anterioare

42. Care dintre următoarele secvenţe de


instrucţiuni atribuie variabilei întregi u valoarea
ultimei cifre a numărului natural reprezentat de
variabila x ?
a) while(x>=10) x=x/10; u=x;
b) u=x; while(u>=10) u=u%10;
c) u=x%10;
d) u=x/10;
e) toate variantele anterioare

43. Fie secvenţa de program următoare, în care


ok este o variabilă de tipul int, iar x este un
număr natural.
ok=0;
for(j=2;j<x;j++)
if(x%j==0) ok=1;
printf(“%d”,ok);
Secvenţa afişează 1 dacă:
a) numărul x are cel puţin un
divizor propriu
b) numărul x nu are nici-un
divizor propriu
c) toate numerele naturale mai
mici ca n, fără 0 şi 1, sunt
divizori proprii ai lui x
d) numărul x are cel mult un
divizor propriu
e) nici una dintre variantele de
mai sus

44. Se consideră secvenţele de program de mai


jos. Pentru n=4, precizaţi care dintre secvenţe
afişează, în urma execuţiei, şirul de numere:
1,2,2,3,3,3,4,4,4,4 .
a) for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
printf(“%2d”,j);
b) for(j=1;j<=n;j++)
for(k=1;k<=j;k++)
printf(“%2d”,j);
c) for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
printf(“%2d”,k);
d) for(j=1;j<=n;j++)
for(k=1;k<=j;k++)
printf(“%2d”,k);
e) for(k=1;k<=n; k++)
for(j=1;j<=n;j++)
printf(“%2d”,j);

45. Fie secvenţa de program următoare:


s=0;
for(j=3;j<=n;j+=3) s+=j;
Se dau mai jos cinci triplete de numere,
fiecare astfel de triplet reprezentând un set de
valori pentru variabila de intrare n. Care dintre
aceste triplete au proprietatea că pentru toate
cele trei valori ale lui n din triplet se obţine
aceeaşi valoare a lui s ?
a) (3,5,6) b) (6,7,8)
c) (10,11,12) d) (6,9,12)
e) (15,16,17)

46. Considerând că toate variabilele sunt întregi,


ce valoare se afişează după execuţia secvenţei
de mai jos ?
s=0;t=0;x=3;i=1;y=1;z=1;
do{
if(x>0)
if(y>1)
if(z>2) t=x;
else t=x+y;
else t=x+y+z;
s+=i+t; i++;
}while(i>7);
a) 1 b) 5 c) 6 d) 51 e) 63

47. Care dintre şirurile de valori date în


variantele de răspuns trebuie introduse de la
tastatură în timpul execuţiei programului
următor, astfel încât să se declanşeze un ciclu
infinit ?
#include<stdio.h>
void main()
{
int x,y;
while(scanf(“%d”,&x)==1 &&
scanf(“%d”,&y)==1 && (x||y))
do{
y--;
printf(“*%d *%d”,x,y);
}while(x!=y);
}
a) 2,7,3,8,0,0 b) 2,5,4,4,0,0
c) 1,3,6,2,0,0 d) 2,4,5,8,0,0
e) 0,0

48. Pentru programul următor, care dintre


afirmaţiile de mai jos sunt adevărate ?
#include<stdio.h>
void main()
{
int s,x;
for(s=0,x=1;0;s+=x,scanf(“%d”,x)
if(!x) break;
printf(“%d”,s);
}
a) dacă de la tastatură se
introduc, in ordine, numerele 2,3,4
şi 5, atunci programul va afişa
suma numerelor citite, adică 14
b) dacă prima valoare introdusă de
la tastatură este 0, atunci ciclul
se incheie şi se afişează valoarea
1
c) ciclul este eronat: nu se poate
face o citire in linia for
d) instrucţiunea if este eronată
e) din cauză că lipseşte expresia
care dă condiţia de continuare,
ciclul for se va executa la
infinit

49. Care dintre secvenţele de mai jos afişează


corect şirul cifrelor impare 97531 în această
ordine ?
a) for(j=9;j>=1;j--)
printf(“%d”,j--);
b) for(j=0;j<=9;j++)
printf(“%d”,9-j++);
c) for(j=9;j-->=1;)
printf(“%d%d”,j,j--);
d) j=10;
while(j--) printf(“%d”,--j);
e) j=1;
do{
printf(“%d”,10-j++);
}while(j<=9?j++:
Cap.6 Tablouri
1. Care dintre variantele de mai jos reprezintă o
declaraţie corectă a unui vector v cu 20 de
elemente numere întregi ?
a) v[20]:integer; b) v[20] int;
c) int v[20]; d) int :v[20];
e) integer v[20];

2. Câte erori conţine programul de mai jos?


void main()
{
int n,k;
int v[n];
n=4
for(k=0;k<n;k++) v[k]= =0;
}
a) 0 b) 1 c) 2
d) 3 e) 4

3. Care dintre secvenţele de program de mai jos


calculează corect suma primelor n elemente ale
unui vector s ?
a) s=0;
for(i=0;i<n;i++) s+=v[i];
b) s=0; i=0;
while(i<n)
{ s+=v[i]; i++;}
c) s=0; i=0;
do{
s+=v[i]; i++;
}while(i<n-1);
d) toate e) nici una

4. Deduceţi care vor fi elementele vectorului v


după execuţia secvenţei de program următoare:
int n,k,x,v[7]={5,14,-3,8,-1};
n=5; x=v[0];
for(k=1;k<n;k++) v[k-1]=v[k];
v[n-1]=x;
a) (-1,5,14,-3,8,0,0)
b) (14,-3,8,-1,0,0,5)
c) (14,-3,8,-1,5,0,0)
d) (0,0,5,-3,14,-1,8)
e) (0,0,-1,14,-3,8,5)
5. Câte elemente ale vectorului v vor avea
valoarea 9 după execuţia programului de mai
jos?
#include<stdio.h>
void main()
{
int v[]={0,1,2,0,4,5,6};
int i=0,x=9;
do{
v[i++]=x;
}while(i<6 && v[i]);
}
a) nici unul b) unul
c) două d) trei e) toate

6. Fie programul următor :


void main()
{
int i,j,m,n,p,a[10][10],b[6];
m=2; n=3; p=6; i=0;
while(i<p) b[i++]=i;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
a[i][j]=b[3*i+j];
} În urma execuţiei sunt posibile următoarele
situaţii:
a) programul nu funcţionează din
cauză că declaraţia matricei
este eronată
b) valorile vectorului b sunt
0,1,2,3,4,5
c) valorile vectorului b sunt
1,2,3,4,5,6
d) a[1][0] are valoarea 3
e) a[0][2] are valoarea 2

7. Se consideră o matrice a cu n linii*n coloane


şi un vector v cu n elemente. Precizaţi care vor
fi elementele vectorului v, după execuţia
secvenţei următoare:
int nr, n, i, j, x, b[20];
int a[3][3]={{7,1,7},{-7,7,0},
{2,4,11}};
n=3; x=7;
for(i=0;i<n;i++)
{ nr=0;
for(j=0;j<n;j++)
if(a[i][j]==x) nr++;
b[i]=nr;
}
a) nedefinite b) v=(0,0,0)
c) v=(1,2,3) d) v=(2,0,1)
e) v=(2,1,0)

8. Se consideră secvenţa de program


următoare, în care a este o matrice cu n linii*n
coloane şi elemente numere întregi, iar x este o
variabilă de tip întreg.
x=1;
for(i=1;i<=n-1;i++)
for(j=0;j<=i-1;j++)
if(a[i][j]!=0) x=0;
În urma execuţiei secvenţei, valoarea variabilei x
va fi 1 dacă:
a) deasupra diagonalei principale
există cel puţin un element egal
cu 0
b) toate elementele de deasupra
diagonalei principale sunt 0
c) toate elementele de sub
diagonala principală sunt
diferite de 0
d) toate elementele de sub
diagonala principală sunt 0
e) sub diagonala principală există
cel puţin un element diferit de
0

9. Fie următorul program:


#include<stdio.h>
void main()
{
int v[20], i, n, E;
scanf(“%d”, &n);
for(i=0;i<n;i++) v[i]=i%2 ?i:-i;
for(E=1,i=0;i<n; E*=v[i++]);
E++;
printf(“%d”,E);
} În urma execuţiei sale sunt posibile următoarele
situaţii:
a) expresia condiţională din primul
ciclu for este eronată din punct
de vedere sintactic
b) dacă variabila n primeşte prin
citire valoarea 6, atunci
elementele vectorului v vor fi,
in ordine (0,1,-2,3,-4,5)
c) prezenţa caracterului ”;” după
al doilea ciclu for constituie o
eroare
d) dacă variabila n primeşte prin
citire valoarea 5, atunci
programul afişează 32
e) programul funcţionează corect
pentru orice valoare intreagă a
lui n mai mică sau egală cu
MAXINT

10. Care dintre secvenţele de program de mai


jos afişează corect elementele v[0], ......v[n-1]
ale unui vector de întregi ?
a) i=0;
while(i<n)
{ printf(“%d”, v[i]); i++;}
b) i=0;
while(i<n)
{ i++; printf(“%d”, v[i]); }
c) i=0;
do{ i++;
printf(“%d”, v[i]);
}while(i<n);
d) i=0;
do{ printf(“%d”, v[i]);
i++
}while(i<n);
e) nici una
11. Care dintre secvenţele de mai jos afişează
corect produsul elementelor pare ale unui vector
v[0],.......,v[n-1] cu n elemente întregi ?
a) p=1;
for(j=1;j<=n;j++)
if(v[j]%2==) p=p*v[j];
b) p=1;
for(j=0;j<n;j++)
if(v[j]/2==0) p=p*v[j];
c) p=0;
for(j=0;j<n;j++)
if(v[j]%2!=0) p=p*v[j];
d) p=1;
for(j=0;j<n;j++)
if(v[j]%2==0) p*=v[j];
e) p=0;
for(j=0;j<n;j++)
if(v[j]%2==0) p*=v[j];

12. Care dintre afirmaţiile de mai jos sunt


adevărate pentru secvenţa de program
următoare ?
p=0;
for(k=1;k<6;k++)
if(v[k]>v[p]) p=k;
printf(“%d”, p);
a) secvenţa este corectă din punct
de vedere sintactic
b) ciclul for are cinci paşi
c) dacă elementele vectorului sunt
5,4,-11,9,-12,1,atunci programul
afişează valoarea 4
d) dacă elementele vectorului sunt
3,-2,8,6,11,4, atunci programul
afişează valoarea 4
e) indiferent care ar fi elementele
vectorului, secvenţa dată nu
poate afişa valoarea 0

13. Pentru secvenţa de program următoare,


precizaţi care dintre afirmaţiile de mai jos sunt
adevărate:
int j=0 , v[5]={1,1,1,1,1};
while(j<5&&v[j]&&!v[j])
{v[j]=0;j++;}
a) expresia din while este eronată
sintactic
b) declaraţia şi iniţializarea
vectorului sunt corecte
c) după execuţia secvenţei toate
elementele vectorului vor fi 1
d) după execuţia secvenţei toate
elementele vectorului vor fi 0
e) execuţia secvenţei va produce un
ciclu infinit

14. Precizaţi care va fi efectul secvenţei de


program următoare, în care v[0],.....,v[n-1] este
un vector cu n elemente întregi.
x=v[n-1];
for(k=n-1;k>0;k--) v[k]=v[k-1];
v[0]=x;
a) deplasează toate elementele
vectorului cu o poziţie la
dreapta
b) deplasează toate elementele
vectorului cu o poziţie la
stanga
c) şterge un element din vector
prin deplasarea celor aflate
inaintea lui
d) roteşte circular vectorul cu o
poziţie
e) nici una din variantele
anterioare

15. Fie secvenţa de program următoare, în care


v este un vector cu n elemente întregi, iar p este
o variabilă întreagă:
for(p=1,k=1;k<n;k++)
if(v[k]==v[k-1]) p=0;
printf(“%d”, p);
Secvenţa afişează 0 dacă:
a) toate elementele sunt distincte
două cate două
b) toate elementele sunt egale
c) există două elemente consecutive
distincte
d) există două elemente consecutive
egale
e) nici una din variantele de mai
sus

16. Ce valoare va fi afişată în urma execuţiei


programului următor?
#include<stdio.h>
void main()
{
int v[]={0,1,2,0,4,5,6};
int j=0,nr=0;
do{
if(j==v[j]) nr++;
}while(j<6&&v[j++]);
printf(“%d”,nr);
}
a) 0 b) 1 c) 3
d) 5
e) programul intră in buclă
infinită

17. Deduceţi care vor fi, în ordine, de la stânga


la dreapta, elementele nenule ale vectorului a la
sfârşitul execuţiei secvenţei de program
următoare:
int k, j=0;
int v[7]={0,2,7,3,4,8,5};
int a[7]={0,0,0,0,0,0,0};
for(k=0;k<7;k++)
if((v[k]%2==0)&&(k%2!=0))
{ a[j]=v[k]; j++; }
a) 2,4,8 b) 7,5 c) 2,8
d) 2,3,8 e) 7,3,5

18. Care parcurgere pe linii şi coloane a unei


matrici n*m este corectă ?
I) for(i=0;i<n;i++)
for(j=0;j<m;j++)
printf(“%d”,a[i][j]);
II) for(j=1;j<m;j++)
for(i=1;i<m;i++)
printf(“%d”,a[i][j]);
III) for(i=0;i<n;i++)
for(i=0;j<m;i++)
printf(“%d”,a[i][j]);
a) doar I b)doar II
c) doar I si II
d) doar I si III

19. Care din secvenţele de calcul a mediei unui


şir de n întregi este corectă ?
I) int i,n,s;
float med;
s=0;
for(i=0;i<n;i++) s+=a[i];
med=s/n;
II) int i,n,s;
float med;
for(i=0,s=0;i<n;i++) s+=a[i];
med=(float)s/n;
III) int i,n,;
float med, s;
s=0;
for(i=0;i<n;i++) s+=a[i];
med=s/n;
a) doar I b)doar II
c) doar III d) doar II şi III

20. Calculul mediei geometrice a unui şir de n


întregi este:
I) int i,n, pr;
float med;
for(pr=1,i=0;i<n;i++)
pr*=a[i];
med=sqrt(pr);
II) int i,n, pr;
float med;
for(pr=1,i=0;i<n;i++)
pr*=a[i];
med=pow(pr, 1/n);
III) int i,n, pr;
float med;
for(pr=1,i=0;i<n;i++)
pr*=a[i];
med=pow(pr, 1./n);
a) doar I b) doar II
c) doar III d) doar II şi III

21. Ce secvenţă calculează corect maximul unui


şir cu n valori?
I) for(max=0, i=0;i<n;i++;)
if(a[i]>max) max=a[i];
II) max=a[0];
for(i=0;i<n;i++)
if(a[i]>a[i++]) max=a[i];
III) max=a[0];
for(i=0;i<n;i++)
if(a[i]>max) max=a[i];
a) doar I b) doar II
c) doar III d) doar I şi II

22. Fie X[1..n] si Y[1..n] vectori de întregi. Care


va fi valoarea lui Y[n] după execuţia secvenţei:
Y[1]=x[1];
for (i=2;i<n;i++) y[i]=y[i-1]+x[i];
a) x[n]+x[n-1] b) x[n]
c) x[1]+x[2]+………..+x[n]
d) nici una din valorile indicate

23. Fie X[1..n] si Y[1..n] vectori de numere


reale. După execuţia secvenţei de program :
y[1]=-x[1];
for(i=2;i<n;i++) y[i]=y[i-1]*x[i];
elementul Y[n] exprimă :
a) x[1]*x[2]*……*x[n]
b) –x[1]*x[2]*….*x[n]
c) (-1)n x[1]*…..*x[n]
d) nici una din valorile indicate

24. Fie V[1..n] vector de intregi . Secvenţa de


program :
i=1;
for(i=1;i<=n/2;i++)
{ j=n-i;
aux=v[i]; v[i]=v[j];
v[j]=aux;
} are ca efect :
a) inversarea ordinii elementelor
in vector
b) inversarea ordinii tuturor
elementelor in vector numai cand
n este impar
c) inversarea ordinii tuturor
elementelor in vector numai cand
n este par
d) nici una din variantele indicate

25. Se consideră matricea pătratică A(mxm) .


Fie secvenţa de program :
x=a[0][m-1];
for(i=0;i<m;i++)
if x<a[i][m-i] x=a[i][m-i];
Variabila x calculată exprimă :
a) valoarea maximă de pe diagonala
principală
b) valoarea maximă de pe diagonala
secundară
c) valarea maximă din intreaga
matrice
d) altă valoare decat cele indicate

26. Fie matricea pătratică A(mxm) şi secvenţa


de program :
x=a[0][0];
for(i=0;i<m;i++)
{ if(x<a[i][i]) x=a[i][i];
if(x<a[i][m-i-1])
x=a[i][m-i-1];
}
Variabila x calculată reflectă :
a) valoarea cea mai mare de pe
diagonale
b) valoarea cea mai mare de pe
diagonala principală
c) valoarea cea mai mare de pe
diagonala secundară
d) altă valoare decat cele indicate
27. Fie matricea A(mxm) şi secvenţa de
program:
s=1;
for(i=0;i<m;i++)
for(j=0;j<i;j++) s*=a[i][j];
Valoarea calculată s reflectă :
a) produsul valorilor de sub
diagonala principală
b) produsul valorilor de pe
diagonala secundară
c) produsul valorilor din intreaga
matrice
d) altă valoare decat cele indicate

28. Fie o matrice A(nxn) citită de la tastatură .


Atunci secvenţa de cod :
i=0; m=a[0][0];
while(i<n) {
for(j=0;j<n;j++)
if(m<a[i][j]) m=a[i][j];
i++;
}
a) calculează elementul maxim m
dintre elementele matricii
b) calculează elementul minim m
dintre elementele matricii
c) se ciclează la infinit
d) numără elementele matricii care
sunt mai mari ca m

29. Fie secvenţa de cod de mai jos. Dacă


considerăm ca date de intrare tabloul V1 de
dimensiune n, atunci tabloul V0 va conţine :
for(i=0;i<n;i++) v0[n-i-1]=v1[i];
a) elementele lui V1 in ordine
inversă
b) o parte din elementele lui V1
c) numai elem. impare ale lui V1
d) algoritmul depune elementele lui
V1 in ordine inversă numai dacă n
este impar

30. Fie următoarea secvenţă de cod care


primeşte o matrice M pătratică de dimensiune n
la intrare :
p=1;
for(i=0;i<n;i++) p=p*m[i][i]-2;
atunci aceasta realizează :
a) produsul elementelor din matrice
b) produsul elementelor de pe
diagonala principală a matricii m
c) o prelucrare a elementelor de pe
diagonala principală a matricii m
d) se ciclează la infinit

31. Care este valoarea elementului tab[2][3]


după execuţia secvenţei de cod :
int i,j;
int ctr=0;
int tab[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{ tab[i][j]:=ctr; ++ctr; }
a) 7 b) 9 c) 11 d) 14

32. Ce face următoarea secvenţă ?


scanf(“%d”,&n);
for(i=0;i<n;i++) scanf(“%d”,&a[i]);
printf(“\n%d”,a[0]);
for(i=1;i<n;i++)
{ ex=0;
for(j=0;j<i;j++)
if(a[i]==a[j]) ex=1;
if(!ex) printf(“%d”,a[i]);
}
a) afişează numerele dintr-un şir
care sunt in mai multe exemplare
b) afişează numerele cu apariţie
singulară in şir
c) afişează numerele dintr-un şir
d) afişează numerele impare dintrun
şir

33. Ce realizează următoarea secvenţă de


program?
i=0;
do {
i++;
a[i]=nr%2;
nr/=2;
}while(nr);
n=i;
for(i=n;i>0;i--) printf(“%d”,a[i]);
a) convertirea b10->b2 a unui număr
fracţionar
b) convertirea b10->b2 a unui număr
intreg
c) convertirea b10->b3 a unui număr
intreg
d) convertirea b10->b2 a unui număr
intreg pozitiv

34. Se dă următoarea secvenţă de cod :


int y[5]={3,4,5,6,0};
Ce valoare conţine y[3] ?
a) 3 b) 5 c) 6
d) codul nu compilează pentru că nu
sunt destule valori

35. Se dă codul :
short testarray[4][3]=
{{1},{2,3},{4,5,6}};
printf(“%d\n”,sizeof(testarray));
Presupunând că tipul “short” este de lungime 2
octeţi, ce va afişa codul de mai sus ?
a) nu va compila pentru că nu sunt
daţi destui iniţializatori
b) 6 c) 12 d) 24

36. Fie secvenţa de cod :


int x,i,t;
int y[10]={3,6,9,5,7,2,8,10,0,3};
while(1)
{ x=0;
for(i=0;i<9;i++)
if (y[i]>y[i+1])
{ t=y[i];
y[i]=y[i+1];
y[i+1]=t;
x++;
}
if(x==0) break;
}
Cum va arăta vectorul după execuţia acestui
cod ?
a) programul va rula la infinit
b) {0,2,3,3,5,6,7,8,9,10}
b) {10,9,8,7,6,5,3,3,2,0}
c) {3,6,9,5,7,2,8,10,0,3}

37. Există greşeli în secvenţa de calculare a


mediei aritmetice?
#include<stdio.h>
#include<conio.h>
void main(void)
{ int a[30],i,n=20;
int s=0; float ma;
for(i=0;i<n;i++)
{ printf(“\na[%d]=”,i);
scanf(“%d”,&a[i]);
}
for(i=0;i<n;i++) s=s+a[i];
ma=s/n;
printf(“\nRezultatul=%f”,ma);
getch();
}
a) nu, secvenţa este corectă
b) da, deoarece nu au fost
citite toate elementele
tabloului
c) da, deoarece va fi afişată
doar partea intreagă a
rezultatului
d) da, deoarece nu au fost
citite corect toate elementele
vectorului

Cap.7 Pointeri
7. Fie declaraţia : int a[10][10];
Care din expresiile următoare sunt echivalente?
a) *a[i] b) **(a+i) c) *(*a+i)
d) a[0][i] e) a[i][0]

8. Este corectă secvenţa char*s;gets(s); ?

9. Explicaţi care din instrucţiuni sunt greşite în


secvenţa următoare :
char *s=”Test C”;
*s=”Ansi C”;
s=”Ansi C”;

10. Care dintre următoarele variante reprezintă


o declaraţie corectă a unei variabile x de tipul
“adresă a unei variabile întregi” ?
a) int x*; b) int *x; c)
int x;
d) int &x; e) int x&;

11. Se consideră declaraţia de variabile:


int m, *x,*y;
Care dintre următoarele atribuiri sunt corecte ?
a) x=m; b) *x=*m; c) *y=*x;
d) y=&m; e) y=x;

12. Fie declaraţiile de variabile:


int a=2,b; int *x,*y;
Precizaţi ce valori se vor afişa, în ordine, în
urma execuţiei secvenţei de program de mai jos:
x=&a; a=5; printf(“%d”, *x);
b=a-2; y=&b; b+=(*y)+4;
printf(“%d”, b);
*y=*x; printf(“%d”, *y);
if(x==y) putchar(‘1’);
else putchar(‘0’);
a) 2,10,2,1 b) 2,10,2,0 c) 5,7,5,0
d) 5,10,5,0 e) 5,10,5,1

13. Se consideră următoarea secvenţă de


program:
int *q,**p,a=5,b=3;
*p=&a; // (1)
q=*p; // (2)
b+=*(&(**p)); // (3)
printf(“%d %d”,*q,b);
Ce puteţi spune despre atribuirile (1), (2) şi (3)?
a) nici una dintre atribuiri nu
este corectă
b) numai atribuirea (1) este
`corectă
c) numai atribuirile (1) şi (2)
sunt corecte
d) toate sunt corecte şi secvenţa
afişează de două ori numărul 5
e) toate atribuirile sunt corecte
şi secvenţa afişează numerele 5
şi 8

14. Fie atribuirea : *y=&(*(&z)); Cum


trebuie scrise corect declaraţiile de variabile,
astfel încât atribuirea să fie corectă ?
a) int *y,z; b) int y,*z;
c) int y,**z d) int **y,z;
e) int **y,*z;

15. Care dintre instrucţiunile (I),(II),(III),(IV) din


programul următor sunt eronate? Precizaţi
valorile obţinute în cazul instrucţiunilor corecte.
#include<stdio.h>
void main()
{
const int x=3; int u,v;
x=4; // (I)
*(int*)&x=8; // (II)
u=x; // (III)
v=*(int*)&x; // (IV)
}
a) I b) II c) III
d) IV e) nici una

16. Alegeţi atribuirea corectă din programul de


mai jos:
void main()
{
int a; void *p;
p=(int*)&a; // (I)
p=&a; // (II)
p=(float*)&a; // (III)
p=&(int*)a; // (IV)
}
a) I b) II c) III
d) IV e) nici una

17. Fie declaraţiile de variabile:


int a=2,b,c=5; int *x,*y;
Precizaţi ce valori se vor afişa, în ordine, în
urma execuţiei secvenţei de program de mai
jos:
x=&c; a+=*x; printf(“%d”,a);
b=++a; y=&b; printf(“%d”,*y);
x=y; printf(“%d”,(*x)++;
a) 7,7,7 b) 7,8,9 c) 7,8,8
d) 7,7,8 e) 8,8,9

18. Fie un pointer x către întreg. Care dintre


instrucţiunile de ma jos realizează corect
alocarea dinamică a memoriei ?
a) x=(int)malloc(sizeof(int*));
b) x=(int*)malloc(sizeof(int*));
c) x=(int*)malloc(sizeof(int));
d) *x=(int*)malloc(sizeof(int));
e) *x=(int)malloc(sizeof(int*));

19. Fie următoarele declaraţii de variabile:


int **a,*b,c;
Care dintre expresiile de mai jos vor genera
eroare la execuţie?
a) a=&(&c); b) b=&(**a);
c) *a=&c; d) **a=&b;
e) *b=**a+c;

20. Considerăm declaraţia: int **p;


şi atribuirea p=&q; Alegeţi varianta potrivită
astfel încât atribuirea să aibă sens.
a) int q; b) int *q;
c) int ***q; d) int &q;
e) nici una

21. Precizaţi valoarea variabilei a ca urmare a


execuţiei programului următor:
void main()
{
int a; char b=1;
a=*(int*)&b;
}
a) 1 b) 97 c) neprecizată
d) nici una e) programul este
greşit

22. Precizaţi care dintre instrucţiunile de


atribuire de mai jos face ca x să primească
valoarea 0:
void main()
{
int a=1,b=2; float x;
x=a/ *&b; // (I)
x=(float) a/b; // (II)
}
a) I b) II c) ambele
d) nici una e) programul este
gresit

23. Care dintre instrucţiunile de tipărire vor afişa


aceeaşi valoare ?
#include<stdio.h>
void main()
{
int a=2,*p=&a;
printf(“%d\n”,*p+1);
printf(“%d\n”,*&p+1);
printf(“%d\n”,*(p+1));
printf(“%d\n”,*(&p+1));
}
a) prima şi a doua
b) a doua şi a treia
c) a doua şi a patra d) nici una
e) programul este eronat

24. În programul următor, care dintre cele patru


instrucţiuni va tipări valoarea 11?
#include<stdio.h>
void main()
{
const int x=2,y=3;
*(int*)&x=8;
*(int*)&y=9;
printf(„%d\n”,x+y);
printf(„%d\n”,*(int*)&x+y;
printf(„%d\n”,x+*(int*)&y;
printf(„%d\n”,*(int*)&x+
*(int*)&y;
}
a) prima b) a doua c) a treia
d) a patra e) nici una

25. Fie programul următor:


#include<stdio.h>
void main()
{
int m[9],i;
for(i=0;i<9;i++) m[i]=i;
while(i>0)
{ i--; *(m+i)=-i; }
}
Care dintre afirmaţiile de mai jos sunt adevărate
?
a) ambele cicluri sunt greşite
b) numai primul ciclu este corect
c) numai al doilea ciclu este
corect
d) ambele cicluri sunt corecte
e) in cele două cicluri,
elementele vectorului vor primi
valori egale in modul, dar de
semne opuse

26. Se consideră programul următor:


#include<stdio.h>
void main()
{
int a=5,b=-12,c=7,*v[3];
v[0]=&a; //(1)
printf(“%d\n”,*v[0]); //(2)
*(v+1)=&b; //(3)
printf(“%d\n”,*(*(v+1))); //(4)
2[v]=&c; //(5)
printf(“%d\n”,*v[2]); //(6)
}
a) declaraţia vectorului este eronată
b) atribuirile (1), (3) şi (5)
sunt toate corecte
c) atribuirea (1) este corectă, iar
(3) şi (5) sunt eronate
d) atribuirile (1) şi (3) sunt
corecte, iar (5) este eronată
e) programul este corect şi
afişează valorile 5, -12, 7

27. Ce va afişa programul următor?


#include<stdio.h>
void main()
{
int (*v)[3];
int u[]={10,11,12};
v=&u;
printf(“%d”,(*v)[1];
}
a) programul este eronat
b) o adresă de memorie oarecare,
fără nici-o semnificaţie
c) valoarea intreagă 11
d) adresa de memorie la care se
află valoarea intreagă 11
e) adresa incepand cu care se
găseşte vectorul v in memorie
28. Se consideră următoarea secvenţă de
program:
int a[9][11],i,j;
for(i=0;i<9;i++)
for(j=0;j<11;j++)
if(i==j) (*(a+i)) [j]=0;
else *(*(a+i)+j)=i*j;
Precizaţi care dintre afirmaţiile de mai jos sunt
false:
a) a[5][2] este 10
b) a[8][0] este 6
c) *(*(a+3)+3) este 0
d) programul conţine erori de
sintaxă
e) matricea a este simetrică faţă
de diagonala principal

29. Se consideră următoarele declaraţii de


variabile:
int q=6,d[3][4],(e[3])[4],v[4];
int *a[3][4],(*b)[3][4],
(*c[3])[4];
Care dintre atribuirile de mai jos sunt corecte?
a) d[0][2]=e[1][3];
b) a[2][3]=&q;
c) b=&d; d) c[2]=&v;
e) toate atribuirile anterioare

30. Precizaţi ce valoare va afişa programul


următor:
#include<stdio.h>
void main()
{
int a[20][20],i,j,n=4;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
*(*(a+i)+j)=(i>j)?
(j-i) : (j+i);
int m=10;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(m>(*(a+i))[j])
m=a[i][j];
printf(“%d”,m);
}
a) 10 b) 6 c) 3 d) –3
e) programul este eronat

31. Fie vectorul y cu patru elemente numere


întregi:
int y[4]={0,1,2,3};
Care dintre următoarele instrucţiuni declară şi
iniţializează corect un pointer ptr către vectorul
y?
a) int *(ptr[4])=&y;
b) int (ptr*)[4]=&y;
c) int (*ptr)[4]=&y;
d) int ptr*[4]=&y;
e) int *ptr[4]=&y;

32. Fie următorul program:


#include<stdio.h>
void main()
{
int u[4]={1,2,3,4},
v[4]={5,6,7,8},
w[4]={0,0,0,0}, i;
int (*x)[4]=&u, (*y)[4]=&v,
(*z)[4]=&w;
for(i=0;i<4;i++)
printf(“%3d”,(*z)[i]=
(*x)[i]+(*y)[i]);
}
Care dintre afirmaţiile de mai jos sunt
adevărate?
a) programul va afişa patru adrese
de memorie
b) programul va afişa, in ordine,
valorile 6,8,10,12
c) valoarea lui (*x)[2] este 3
d) valoarea lui (*y)[4] este 8
e) instrucţiunea de afişare din
ciclu este eronată, din cauza
folosirii operatorului de
atribuire in funcţia printf

33. Fie următorul program:


#include<stdio.h>
void main()
{
int x[4]={1,2,3},
y[4]={4,5,6,7},z[7];
int i,j;
for(i=0;i<4;i++)
*(z+i)=*(y+i);
for(j=0;j<3;j++)
*(z+i+j)=*(x+j);
for(i=0;i<7;i++)
printf(“%d”,*(z+i));
}
Care vor fi valorile afişate în urma execuţiei
sale?
a) 1,2,3,4,5,6,7 b) 7,6,5,4,3,2,1
c) 3,2,1,7,6,5,4 d) 4,5,6,7,1,2,3
e) programul este eronat

34. Fie secvenţa de instrucţiuni:


int x[]={10,20,30,40,50};
int*ptr=x;
printf(“%d\n”,*(ptr+2));
printf(“%d\n”,*(ptr)+2);
Ce se va tipări după executarea codului de mai
sus?
a) 30 30 b) 30 12
c) 12 12 d) 12 30

35. Fie secvenţa de instrucţiuni:


int *array[3];
int(*ptr)[]=array;
int x=2,y=3,z=4;
Având în vedere codul de mai sus, cum veţi
realiza atribuirea celui de al doilea pointer din
şirul “ptr” ca să pointeze la valoarea lui y ?
a) ptr[2]=&y;
b) (*ptr)[1]=y;
c) (*ptr)[1]=&y;
d) (*ptr)[2]=&y;
36. Fie următoarea declaraţie de variabile :
int *p; int x,y;
Atribuirea y=x+100; este echivalentă cu
secvenţa:
a) p=&x; y=*p+100;
b) y=*p+100; p=&x;
c) p=&y; y=*p+100;
d) p=&x; y=&p+100;

37. Fie următoarea declaraţie de variabile :


int *p; int x,y;
Atribuirea x=y; este echivalentă cu secvenţa :
a) p=&x; *p=y; b) p=&y; *p=x;
c) *p=x; p=&y; d) *p=y; p=&x;

38. Fie următoarea declaraţie de variabile :


int *p; int x,y;
Instrucţiunea x++; este echivalentă cu
secvenţa :
a) p=&x; (*p)++; b) p=*x; (&p)++;
c) p=&x; *(p++); d) p=&x; *p++;

39. Fie următoarea declaraţie de variabile :


int *p; int x,y; p=&x;
Atribuirea y=x*(x+1); este echivalentă cu
secvenţa :
a) y=*p*((*p)++); b) y=*p*(*p++);
c) y=*p**p++; d) y=(*p)*(*p++);

40. Fie următoarea declaraţie de variabile :


int *p; int x=100,y; p=&x;
În urma atribuirii y=*p*((*p)++); y va avea
valoarea :
a) 10100 b) 11000 c) 10001
d) 10000

41. Fie următoarea declaraţie de variabile :


int *p; int x=100, y; p=&x;
În urma atribuirii y=*p+((*p)++); y va avea
valoarea :
a) 201 b) 102 c) 200 d) 202

42. Fie secvenţa :


int t[5]={20,30,40,50,10};
int *p; int x;
Atribuirea x=t[3]; este echivalentă cu :
a) p=t; x=*(p+3);
b) p=&t[0]; x=*(p+2);
c) p=*t; x=*p+3;
d) p=t; x=*p+3;

43. Fie secvenţa :


int t[5]={20,30,40,50,10};
int *p; int x;
Atribuirea x=*(&t[0]+3); este echivalentă
cu :
a) x=t[3]; b) x=t[4];
c) x=*(&t[2]); d) x=*(t+4);

44. Se consideră secvenţa de program :


void main(void)
{ int *p, *q;
p=(int*)malloc(sizeof(int));
q=(int*)malloc(sizeof(int));
*p=5; *q=3; *p=*q;
if(p==q) *p+=1;
printf(“%d”,*p);
}
Care este valoarea afişată pentru p :
a) 5 b) 3 c)6 d)4

45. Se dă următoarea secventă de cod :


int a[5]={1,2,3,4,5};
int *aPtr;
aPtr=a;
printf(“element=%d\n”,*(aPtr+2));
Ce va afişa codul de mai sus după execuţie ?
a) element=1 b) element=2
c) element=3 d) element=4

46. Se dă codul:
int *ptr; int y[10];
int i;
for(i=0;i<10;i++) y[i]=i;
ptr=y; ptr+=8;
printf(“ptr=%d\n”, *ptr);
Ce se va afişa când codul este executat ?
a) ptr=0 b) ptr=9
c) ptr=7 d) ptr=8

Cap.8 Şiruri de caractere

1. În programul următor, care dintre secvenţele


de instrucţiuni (I), (II) realizează corect citirea
unui şir de caractere de la tastatură şi afişarea
acestuia ?
#include<stdio.h>
void main()
{
char s1[10],s2[10];
scanf(“%s”,s1);
printf(“s1=%s”,s1); //(I)
scanf(“%s”,&s2);
printf(“%s”,s2[10]); //(II)
}
a) numai (I) b) numai (II)
c) (I) şi (II) d) nici una

2. Analizaţi programul următor şi alegeţi


răspunsul corect:
#include<stdio.h>
void main()
{
char b[11],
a[11]=”abcdefghij”;
int i=0;
while(a[i]%2) b[i++]=a[i];
b[i]=0;
}
a) programul are erori
b) şirul b conţine numai caracterul
”a”
c) in urma execuţiei şirurile a şi
b concid
d) şirul b conţine numai
caracterele din şirul a ale căror
coduri ASCII sunt numere pare
e) şirul b conţine numai
caracterele de rang par din a (al
doilea, al patrulea etc.)

3. Fie programul următor:


#include<stdio.h>
#include<string.h>
void main()
{
char s1[10], s2[10],
s3[10]=”SB”;
gets(s1); gets(s2);
puts(s1+s2); // (1)
if(strlen(s1)<strlen(s2))
putchar(‘1’); // (2)
if(s1>s3) putchar(‘1’);
else putchar(‘0’); // (3)
}
Presupunem că, în timpul execuţiei programului,
se introduc de la tastatură şirurile
s1=”BR” şi s2=”122035”. Precizaţi dacă sunt
adevărate situaţiile de mai jos:
a) citirea de la tastatură este
eronată
b) instrucţiunea (1) va afişa
textul ”BR122035”
c) instrucţiunea (2) va afişa
valoarea 1
d) in linia (3) se compară şirurile
s1 şi s3 din punct de vedere
alfabetic
e) nici una dintre afirmaţiile
anterioare
4. Pentru programul următor precizaţi care dintre
afirmaţiile de mai jos sunt adevărate:
#include<stdio.h>
#include<string.h>
void main()
{
char s[10]=”-2B.2A5”;
int j,nr=0;
for(j=0;j<strlen(s);j++)
if(!(s[j]>=’0’&&
s[j]<=’9’))
{ s[j]=’0’; nr++; }
printf(“%d%s”,nr,s);
}
a) declararea şirului este corectă
b) in ciclul for sunt parcurse
corect caracterele şirului s
c) in ciclul for sunt inlocuite cu
“0” cifrele din s
d) condiţia din linia if este
eronată
e) programul afişează 40200205

5. Ne propunem să definim un vector care să


aibă două elemente, ambele de tip şir de
caractere. Fiecare şir trebuie să conţină două
caractere, primul ”ab”, iar al doilea ”cd”. Scrieţi
declaraţia corectă.
a) char a[2][3]={“ab”,“cd”};
b) char a[2][2]={“ab”,“cd”};
c) char a[3][2]={“ab”,“cd”};
d) char a[3][3]={“ab”,“cd”};
e) char a[][3]={“ab”,“cd”};

6. Care dintre variantele de mai jos reprezintă o


declaraţie corectă a unui şir de caractere?
a) char s[2]; b) char *s[20];
c) char *s; d) char s;
e) char s[];

7. Pentru programul următor, analizaţi


corectitudinea afirmaţiilor de mai jos:
#include<stdlib.h>
#include<stdio.h>
void main()
{
char s1[4],s2[4]; long x;
gets(s1); gets(s2);
if(strcmp(s1,s2)<0)
x=atol(s1);
else if(!strcmp(s1,s2)) x=0;
else x=atol(s2);
printf(“%ld”, x);
}
a) condiţiile din cele două linii
if sunt greşite
b) apelurile funcţiei atol sunt
corecte
c) dacă de la tastatură se introduc
şirurile ”98” şi ”123”, atunci
se va afişa 98
d) dacă de la tastatură se introduc
şirurile ”123” şi ”135”, atunci
programul va afişa şirul ”123”
e) dacă de la tastatură se introduc
şirurile ”ab” şi ”ac”, atunci se
va semnala un mesaj de eroare

8. Ştiind că, în conformitate cu standardul


ASCII, codurile literelor mari sunt succesive
începând cu 65, ce va afişa programul de mai
jos?
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
void main()
{
int x=20,e;
char s[15]=”ABC”,t[15],u[15];
e=s[1]+s[2];
itoa(e,t,10);
strcpy(u,t);
strcat(s,u);
puts(s);
}
a) nimic, şirul s fiind vid
b) ABC13 c) AB13 d) ABC133
e) ABC131

9. Ce şir de caractere va afişa secvenţa


următoare?
char *s=”abcdefg”,*ptr;
ptr=s; ptr+=4;
puts(ptr);
a) “fg” b) “efg” c) “defg”
d) “cdefg” e) secvenţa este
eronată

10. Ce va afişa programul următor?


#include<stdio.h>
void main()
{
char *a[3]={“abc”,“def”,
“ghi”};
char *p=&a[0][0];
printf(“%s%c%c”,a[1],a[2][1],
*(p+5));
}
a) abc d NULL b) abc d e
c) def h NULL d) def h e
e) programul va semnala eroare de
compilare

11. Ce va afişa cea de-a doua instrucţiune de


tipărire din programul de mai jos:
#include<stdio.h>
void main()
{
char a[12]=”abcdefghij”;
char *p=a; int j;
for(j=0;j<12;j++)
*(p+j)=a[j]^j;
printf(“%s\n”,p);
for(j=0;j<12;j++)
*(a+j)=p[j]^j;
printf(“%s”, p);
}
a) nimic b) textul ”abcdefghij”
c) textul ”jihgfedcba”
d) o succesiune de caractere
imprevizibilă
e) programul conţine erori

12. Care dintre instrucţiunile programului de


mai jos sunt eronate?
#include<stdio.h>
#include<string.h>
void main()
{
char a[10],b[10];int k; //(1)
scanf(“%s %s”,a,b); //(2)
k=strlen(a)/2; //(3)
a[k]=’*’; //(4)
printf(“%d”,strlen(a)<
strlen(b));//(5)
b=a; //(6)
}
a) declaraţia de variabile din
linia (1)
b) citirea şirurilor din linia (2)
c) atribuirile din liniile (3) şi
(4)
d) afişarea din linia (5)
e) atribuirea din linia (6)

13. Precizaţi ce şir de caractere se va afişa în


urma execuţiei programului următor:
#include<stdio.h>
#include<string.h>
void main()
{
char s[20]=”BorLanD C++ 3.1”;
int j;
for(j=0;j<strlen(s);j++)
if((s[j]>=’A’)&&
(s[j]<=’Z’))
s[j]-=(’A’-’a’);
puts(s);
}
a) ”BorLand C++ 3.1”
b) ”bORlAND c++ 3.1”
d) ”BORLAND C++ 3.1”
d) ”borland c++ 3.1”
e) ”Borland C++ 3.1”

14. Care dintre cele trei instrucţiuni printf de mai


jos tipăresc şirul ”bd”?
#include<stdio.h>
void main()
{
char s[6][3]={“ab”,“ac”,
“ad”,“bc”,“bd”,“cd”};
printf(“%c%c”,s[3][0],
s[2][1]);
printf(“%s”,s[3][0]+
s[2][1]);
printf(“%s”,s[5]);
}
a) toate b) numai prima
c) numai primele două
d) numai prima şi a treia
e) nici una

15. Ce va afişa programul de mai jos?


#include<stdio.h>
void main()
{
char s[10]=”AB6X92P3M”,
b[10];
int j=0,k=0;
while(s[j])
if(j%2) b[k]=s[j++];
b[k]=0; puts(b);
}
a) BX23 b) A69PM c) B
d) 3 e) nimic

16. Considerând declaraţiile:


char s[4]=”123”,t[4]; int x=123,y;
Care din expresiile de mai jos au valoarea 0?
a) atoi(s)!=x;
b) itoa(x,t,10)==s;
c) (y= =atoi(s))==x;
d) x= =(atoi(itoa(x,t,10)));
e) !strcmp(itoa(x,t,10),s);

17. Ce va afişa programul următor?


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
void main()
{
char s[12]=”6789”,t[12]=”6”,
u[12]=”89”;
long x=0;
strcat(t,u);
if(strcmp(s,t)) x=atol(t);
else x=atol(s);
if(strcmp(s,u)>0) x=atol(u);
printf(“%ld”, x);
}
a) 0 b) 6 c) 89
d) 689 e) 6789

18. Ce afişează programul următor?


#include<stdio.h>
void main()
{
char *s1=”EXEMPLU SIMPLU”,
*s2=”SIMPLU”;
printf(”\n%.8s%.6s”,s1,s2);
}
a) “EXEMPLU” b) “EXEMPLU SIMPLU”
c) “EXEMPLU SIMPLU SIMPLU”
d) “EXEMPLUSIMPLU” e) “SIMPLU”

19. Ce afişează programul următor?


#include<stdio.h>
void main()
{
char *s=”123456789”,*t,*u;
u=&s[4],s+=3,t=&s[1];
printf(”%d%d%d”,u==s,u==t,
s==t);
}
a) 000 b) 001 c) 010
d) 100 e) 111

20. Care dintre instrucţiunile (1),.....(5) de mai


jos sunt eronate?
#include<stdio.h>
#include<string.h>
void main()
{
char *s1,*s2,*s3;
int x;
s1=”test”; //(1)
scanf(“%s”,s2); //(2)
s3=&s1; //(3)
printf(“%s”,s1+s2); //(4)
x=strlen(*s2); //(5)
}
a) 2,3 ,4 b) 2,3,4,5 c) 4,5
d) 3,5 e) 3,4,5

21. Fie programul:


#include<stdio.h>
void main()
{
char *s,*t,*u;
int j,x;
gets(s);
for(x=0,j=0;s[j];t=&s[j],
u=t+1,u[0]==t[0]? x=1:0,j++);
printf(„%d”, x);
} În urma execuţiei programului, se va afişa
valoarea 0, dacă:
a) toate caracterele şirului s sunt
identice
b) in şirul s există cel puţin două
caractere succesive diferite
c) in şirul s există cel mult două
caractere succesive identice
d) in şirul s există cel puţin două
caractere succesive identice
e) in şirul s nu există două
caractere succesive identice

22. Considerăm următoarele noţiuni:


A)vector de doi pointeri către
caracter
B)pointer către şir de două
caractere
şi următoarele declaraţii de variabile:
I) char *a[2];
II) char (*b)[2];
Precizaţi corespondenţele corecte:
a) A) cu I) şi B) cu II)
b) A) cu II) şi B) cu I)
c) nu există corespondenţe
d) B) nu are corespondent
e) cele două declaraţii semnifică
acelaşi lucru

23. Ce afişează programul de mai jos?


#include<stdio.h>
void main()
{
char *s[5]={“012”,“345”,
“678”,“9AB”,“CDE”};
char *t,*u; int j;
t=&s[1][0];
printf(“%d”,(*(t+5)==s[2][1]));
u=&s[3][0]+1;
j=0;
while(u[j]) printf(“%c”,u[j++]);
}
a) 178 b) 1AB c) 078
d) 0AB e) 067

24. Ce afişează programul de mai jos?


#include<stdio.h>
#include<string.h>
void main()
{
char *s[10]={”10”,”00”,”10”,
”10”,”01”,”11”};
char *t=”10”;
int i=0,j=i-1;
while(s[i])
if(!strcmp(s[i++],t)) j=i;
printf(„%d”, j);
}
a) –1 b) 0 c) 1
d) 3 e) 4

25. Se dau următoarele declaraţii


A)char *a[4][6];
B)char (*b[4])[6];
C)char (*c)[4][6];
D)char ((*d)[4])[6];
şi următoarele noţiuni:
N1. vector de 4 elemente, fiecare element este
un pointer către un vector de 6 caractere
N2. pointer către matrice de caractere de 4 linii
şi 6 coloane
N3. pointer către vector cu 4 elemente, fiecare
fiind vector de 6 caractere
N4. matrice de 4 linii şi 6 coloane, fiecare
element este pointer către caracter
Precizaţi corespondenţa directă:
a) (A,N1), (B,N2), (C,N3), (D,N4)
b) (A,N4), (B,N1), (C,N2), (D,N3)
c) (A,N4), (B,N1), (C,N3), (D,N2)
d) (A,N2), (B,N3), (C,N4), (D,N1)

26. Câte erori conţine programul următor ?


void main()
{
char *(a[4][6]);
char b;
a[2][3]=*(b+2);
a[3][2]=&b+3;
*(4+a[2])=&b+1;
*a[1][3]=b+3;
}
a) nici una b) una c) două
d) trei e) patru

Cap.9 Structuri
1. Fie structura :
struct data {
int zi, luna , an;
} d, *dl;
Cum se accesează membrul “zi” ?
a) d.zi respectiv dl.zi
b) d->zi respectiv dl->zi
c) d->zi respectiv dl.zi
d) d.zi respectiv dl->zi

2. Fie structura :
struct data {
int zi, luna , an;
}*d;
Care este expresia logică a cărei valoare arată
că anul este sau nu bisect ?
a) an%4==0 && an%100!=0
b) d.an%4==0 && d.an%100!=0
c) d.an%4==0 && d.an%100!=0 ||
d.an%400==0
d) d->an%4==0 && d->an%100!=0 ||
d->an%400==0

3. Linia de cod care declară o variabilă structură


numită total de tip sample este :
a) type total: sample;
b) struct total;
c) struct sample total;
d) declare total as type sample;

4. Linia de cod care asignează valoarea 10


câmpului loop din structura total (de tip
sample), este :
a) loop=10;
b) total.loop=10;
c) sample.total.loop=10;
d) sample.loop=10;

5. Linia de cod care afişează valoarea câmpului


word din structura total (de tip sample), este :
a) printf(“%s”,total);
b) printf(“%s”,word);
c) printf(”%s”,total-word);
d) printf(“%s”,total.word);

6. Se dă urmatoarea secvenţă de cod :


struct computer {
int cpuSpeed;
char cpuType[10];
};
struct computer myComputer;
Referindu-ne la codul de mai sus, cum accesaţi
primul caracter din cpuType ?
a) char c=myComputer.cpuType(0);
b) char c=myComputer.cpuType;
c) char c=myComputer[0].cpuType;
d) char c=myComputer.cpuType[0];

7. Fie secvenţa :
typedef struct
{ long cust_id;
char custName[50];
double balance;
} CUSTOMER_REC;
CUSTOMER_REC customer[50];
int i;
/*mai jos in program*/
for(i=0;i<50;i++)
{
printf(“%s\n”,?????);
}
Ce ar trebui pus in locul ???? pentru a afişa
fiecare element custName în codul anterior :
a) customer[i]->custName;
b) customer.custName[i];
c) customer[i].custName;
d) customer->custName[i];

8. Fie declaraţia:
struct computer{
int cpuSpeed;
char cpuType[10];
} comp[]=
{
{400,”Pentium”} ,
{266,”PowerPC”} ,
{333,”Sparc”},
};
Se dă şirul de structuri de mai sus. Care dintre
următoarele expresii va evalua numărul
structurilor din şir (în cazul de faţă este 3)?
a) sizeof(*comp)/sizeof(comp)
b) sizeof(*comp)
c) sizeof(comp)
d) sizeof(comp)/sizeof(*comp)

Cap.10 Exploatarea fişierelor


1. Care dintre afirmaţiile de mai jos sunt
adevărate ?
a) instrucţiunea care deschide
fişierul ”nr.txt” pentru citire şi
returnează un pointer către
fişierul deschis este f=fopen(”r”,
”nr.txt”);
b) pentru a putea citi din fişier
folosim atribut ”r” la deschidere,
iar pentru a scrie in fişier il
deschidem cu atributul ”w”
c) pentru a testa dacă nu s-a ajuns
la sfarşitul fişierului referit de
pointerul f, vom scrie !feof(f)
d) pentru a inchide fişierul
referit de pointerul f vom scrie
close(f)
e) nici una dintre afirmaţiile de
mai sus nu este adevărată

2. Se consideră un fişier definit prin pointerul f,


şi care conţine următoarele valori pe primele
două rânduri :
4 7 2.5 -6.23
#8
Fie următoarele declaraţii de variabile:
FILE *f;
int x,y; float a,b,d; char c;
Care dintre secvenţele de instrucţiuni de mai jos
trebuie executate astfel încât toate variabilele
declarate să primească valori citite din fişierul
f?
a) fscanf(f,“%d %f %d %f\n”,&x,
&a,&y,&b);
fscanf(f,“%c %f”,&c,&d);
b) fscanf(f,“%d %d %f %f\n”,&x,
&y,&a,&b);
fscanf(f,“%c %f”,&c,&d);
c) fscanf(f,“%d %d %f %f\n”,&x,
&y,&b,&a);
fscanf(f,“%f %c”,&d,&c);
d) fscanf(“%f %f %d %d\n”,&b,&a,
&y,&x,f);
fsacnf(“%c %f”,&c,&d,f);
e) fscanf(“%d %f %d %f\n”,&x,&a,
&y,&d,f);
fscanf(“%f %c”,&d,&c,f);

3. În timpul execuţiei programului următor sunt


posibile următoarele situaţii :
#include<stdio.h>
void main()
{
FILE *f; int x=1,s=0;
f=fopen(“suma.txt”,“r”);
while(!feof(f) && x)
{ fscanf(f,“%d”,&x);
if(x%2) s+=x;
}
fclose(f);
printf(“\ns=%d”,s);
}
a) programul este corect sintactic
b) pentru a funcţiona citirea din
fişier, acesta trebuie deschis in
alt mod
c) programul va intra intr-un ciclu
infinit
d) dacă in fişier se găsesc, pe
acelaşi rand separate prin cate
un spaţiu, numerele 2 5 4 3
6 1 0 7, atunci programul va
afişa s=16
e) modul in care este inchis
fişierul nu corespunde cu modul
in care a fost deschis

4. Fie fişierul identificat prin descriptorul f, având


următorul conţinut:
5
234678
Care dintre secvenţele următoare de program
S1, S2, S3 poate fi executată, astfel încât, în
vectorul v să se citescă corect toate numerele
din fişier ?
//secventa S1
fscanf(f,“%d”,&n);
for(i=0;i<n;i++)
fscanf(f,“%d”,&v[i]);
//secventa S2
j=0;
while(!feof(f))
{ fscanf(f,“%d”,&v[j]); j++; }
n=j;
//secventa S3
j=0;
do{
fscanf(f,“%d”,&v[j]);j++;
}while(!feof(f));
n=j-1;
a) toate b) nici una
c) numai S1 şi S2 d) numai S2 şi S3
e) numai S1

5. Ce număr se va găsi pe al patrulea rând al


fişierului ”4.txt” după execuţia programului
următor ?
#include<stdio.h>
void main()
{
FILE *f;
f=fopen(”4.txt”,”w”);
int n=8,j=0,
v[8]={1,3,8,5,0,6,7,4};
while(v[j]%2) j++;
while(j<n)
if(v[j++])
fprintf(f,”%d\n”,v[j]);
fclose(f);
}
a) 5 b) 0 c) 6
d) 7 e) 4

6. Fie programul:
#include<stdio.h>
#include<math.h>
void main()
{
FILE *f,*g; int e;
char c1, c2;
f=fopen(“1.txt”,“r”);
g=fopen(“2.txt”,“r”);
e=1;
do{
c1=fgetc(f);
c2=fgetc(g);
if(c1!=c2) e=0;
}while(!(feof(f)||feof(g))
&&e);
if(e)
if(!(feof(f)&&feof(g)))e=0;
fclose(f); fclose(g);
printf(“%d”,e);
}
Programul de mai sus afişează valoarea 1 dacă:
a) cele două fişiere diferă prin
cel puţin un caracter
b) cele două fişiere sunt identice
c) in cele două fişiere există şi
caractere identice
d) cele două fişiere au acelaşi
număr de caractere
e) nici unul dintre cazurile de mai
sus

7. Precizaţi care va fi conţinutul fişierului g după


execuţia programului următor, dacă fişierul f
conţine pe fiecare linie o zi a săptămânii (luni,
…..,duminica) :
#include<stdio.h>
#include<math.h>
void main()
{
FILE *f,*g; int j=1;
char s[11],c1,c2;
f=fopen(“7.txt”,“r”);
g=fopen(“7_2.txt”,“w”);
while(j++<4) fgets(s,10,f);
fprintf(g,“%d ”,j-1);
fputs(s,g);
fclose(f); fclose(g);
}
a) 3 Miercuri b) 3 Joi
c) 4 Miercuri d) 4 Joi e) 5 Joi

8. Fie programul următor:


#include<stdio.h>
void main()
{
FILE *f,*g; int a,x,s;
f=fopen(“in.txt”,“r”);
g=fopen(“out.txt”,“w”);
scanf(“%d”,&a);
while(!feof(f))
{ s=0;
while(s<a && !feof(f))
{ fscanf(f,“%d”,&x);
s+=x; }
fprintf(g,“%d”,s);
}
fclose(f); fclose(g);
printf(“\n s=%d”,s);
}
Dacă de la tastatură se introduce valoarea 10,
iar conţinutul fişierului ”in.txt” este 4 6 3 2 6
15 1 (pe aceeaşi linie), câte numere va scrie
programul în fişierul ”out.txt” ?
a) nici unul b) unul c) două
d) trei e) patru

9. Câte numere se vor găsi în fişierul ”nr.txt”


după execuţia programului următor ?
#include<stdio.h>
void main()
{
int v[9]={0,1,0,0,2,3,0,4,5},
j;
FILE *f;
f=fopen(“nr.txt”,“w”);
j=0;
while(j<9)
{ while(v[j])
fprintf(f,“%3d”,v[j++];
fprintf(f,“%3d”,99);
j++;
}
fclose(f);
}
a) 4 b) 5 c) 8
d) 9 e) 10

10. Deduceţi ce valoare va afişa programul


următor, ştiind că în fişierul f se găsesc pe un
rând, separate prin spaţii, numerele 1 3 0 0 2
-3 0 -4 -1
#include<stdio.h>
#include<math.h>
void main()
{
FILE *f;
int s=1,j=0,a[20];
f=fopen(”nr.txt”,”r”);
while(!feof(f))
{ j++;
fscanf(f,”%d”,&a[j]);
if(a[j]) s*=abs(a[j]);
}
printf(”\n%d”,s); fclose(f);
}
a) 1 b) 72 c) –72
d) programul conţine erori de
sintaxă
e) nu se pot citi corect numerele
din fişier

11. Presupunând că toate liniile fişierului g


conţin cel mult 100 de caractere, care este
acţiunea programului următor ?
#include<stdio.h>
void main()
{
FILE *f,*g; char s[101];
f=fopen(“1.txt”,“a”);
g=fopen(“2.txt”,“r”);
while(!feof(g))
{ fgets(s,100,g);
fputs(s,f); }
fclose(f); fclose(g);
}
a) inlocuieşte conţinutul
fişierului g cu conţinutul
fişierului f
b) inlocuieşte conţinutul
fişierului f cu conţinutul
fişirului g
c) concatenează fişierul g la
sfarşitul fişierului f
d) concatenează fişierul f la
sfarşitul fişierului g
e) nici unul dintre cazurile
anterioare

12. Deduceţi ce valoare va afişa programul de


mai jos, dacă fişierul text are următorul conţinut:
33
123
456
789
#include<stdio.h>
void main()
{
FILE *f;
int i,j,m,n,s=0,a[20][20];
f=fopen(“c.txt”,“r”);
fscanf(f, “%d %d”,&m,&n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{ fscanf(f,“%d”,&a[i][j]);
if((i+j)%2) s+=a[i][j];
}
fclose(f); printf(“%d”,s);
}
a) 0 b) 8 c) 20
d) 25 e) programul este
eronat

13. Se dă fişierul identificat prin descriptorul f, cu


următorul conţinut:
33 1 -45 18 6
Ce instrucţiune trebuie scrisă în loc de “……..”
astfel încât programul următor să tipărească 85?
#include<stdio.h>
void main(()
{
FILE *f;
int x, y;
f=fopen(“v.txt”,“r”);
fseek(f,-6,2);
fscanf(f,%d”,&y);
………………………………
fscanf(f,“%d”,&x);
printf(“\n%d%d”,x,y);
fclose(f);
}
a) fseek(f,11,0); b)fseek(f,-2,2);
c) fseek(f,3,1); d)fseek(f,2,1);
e) fseek(f,-3,2);

14. Precizaţi ce nume se va găsi pe al cincilea


rând din fişierul ”p.txt” după execuţia
programului de mai jos:
#include<stdio.h>
#include<string.h>
void main()
{
FILE *f;
int i=0,j,k; char *aux;
char *a[9]={“Marius”,
“Claudiu”,“3rei-Sud-Est”,
“Daniel”,“Vasile”,“Dan”,
“Sinacdu”,“2Pac”};
while(a[i]) i++;
for(j=0;j<i-1;j++)
for(k=j+1;k<i;k++)
if(strcmp(a[j],a[k])>0)
{ aux=a[j];a[j]=a[k];
a[k]=aux;}
k=0; f=fopen(“p.txt”,“w”);
while(a[k])
fprintf(f,“%s\n”,a[k++]);
fclose(f);
}
a) 2Pac b) Claudiu c) Dan
d) Daniel e) Marius

15. Precizaţi care va fi conţinutul fişierului ”b.txt”


după execuţia programului următor, ştiind că
fişierul “a.txt” are următorul conţinut:
11 2 13 4 15 6 17 8 19
#include<stdio.h>
#include<math.h>
void main()
{
FILE *f,*g; int v[10];
f=fopen(“a.txt”,“r”);
g=fopen(“b.txt”,“w”);
fread(v,8,1,f);
fwrite(v,6,1,g);
fclose(f); fclose(g);
}
a) 11 2 13 4 15 6
b) 1 2 2 4 1 6
c) 11 2 13
d) 11 2 1
e) un alt conţinut decat cel
indicat

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