Sunteți pe pagina 1din 6

I.

Variante BAC 2008

1.

Subprogramul f returnează prin intermediul parametrului s a. void f(int n, int s)


suma cifrelor numărului natural n transmis ca parametru. b. void f(float n, int &s)
Care dintre următoarele variante este antetul corect al unui c. void f(int n, int &s)
astfel de subprogram?
d. void f(float n, float s)

2. Parametri utilizaţi la apelul unui subprogram, se numesc:


a. parametri b. parametri c. parametri d. parametri formali
actuali locali globali

3.
Care dintre următoarele reprezintă un antet corect folosit la void main()
definirea subprogramului P, astfel încât programul principal {int a=1,b=5;
alăturat să afişeze valorile 1 9? P(a,b);
cout<<a<<’ ’<<b;
/printf(“%d %d”,a,b);
}
a. void P (int a,int b)
b. int P (int a,int b)
c. int P (int &x,int y)
d. void P(int x,int &y)

4. Funcţia f cu parametrii x şi y determină numărul de numere întregi pare din intervalul [x,y],
(x<y). Care din următoarele expresii este adevărată pentru orice numere x şi y care nu au
aceiaşi paritate?
a. f(x,y)==y-x
b. f(x,y)==(y-x+1)/2
c. f(x,y)==(y-x)/2
d. f(x,y)==f(x,y+1)

5. Subprogramul S returnează în parametrii d şi m, cel mai mare divizor comun şi respectiv cel mai
mic multiplu comun a două numere întregi transmise prin parametrii a şi b. Antetul corect al
subprogramului S este:
a. int S(int a,int b,int d, int m)
Varianta b. void S(int a,int b,int &d,int &m)
C/C++ c. void S(int a,b,int &d,&m)
d. float S(int a,b)

6. Ştiind că funcţia cmmdc, cu doi parametri întregi a şi b, returnează valoarea celui mai mare
divizor comun al numerelor a şi b, stabiliţi care dintre următoarele variante atribuie variabilei m
valoarea celui mai mare divizor comun al numerelor a,b şi c.
a. m:=cmmdc(cmmdc(a,b),c) a. m=cmmdc(cmmdc(a,b),c);
b. m:=cmmdc(a,b)*c b. m=cmmdc(a,b)*c;
c. m:=cmmdc(a,b,c) c. m=cmmdc(a,b,c);
d. m:=cmmdc(a,b) div c d. m=cmmdc(a,b)/c;

7. Subprogramul maxim(x,y)returnează cea mai mare valoare dintre x şi y. Care dintre apelurile
următoare ale funcţiei maxim NU returnează valoarea absolută a numărului real x ?
a. maxim(x,0) b. maxim(x,maxim(-x,0))
c. maxim(x,-x) d. maxim(-x,maxim(x,0))
8. Subprogramul complement schimbă cifrele unui număr natural n, astfel încât fiecare cifră x devine egală cu
9-x. Care este antetul corect al unui astfel de subprogram?
a.void complement (long &n)
b. void complement (float n)
c. void complement (real &n)
d. void complement(long n)

9. Subprogramul cifmax(i) returnează cea mai mare cifră a numărului i. Stabiliţi valoarea expresiei:
cifmax(cifmax(173)+cifmax(18)):
a. 8 b. 7 c. 15 d. 5

10. Subprogramul nrcif(i) returnează numărul de cifre pe care le are numărul natural i. Stabiliţi
valoarea expresiei nrcif( nrcif(173) + nrcif(18) )
a. 5 b. 10 c. 2 d. 1

11. Subprogramul f are următorul antet: void f(int x[100], int i)

Care dintre următoarele apeluri este corect, ştiind că variabila a este declarată astfel: int a[100];
a. f(a,a[0]); b. f(a,a);
c. f(a[100],a[0]); d. f(a[100],a);

12. Subprogramul verif(i) returnează cea mai mică cifră a numărului i care apare de cel puţin
două ori în scrierea lui i sau valoarea -1 dacă numărul i este format din cifre distincte.
Stabiliţi valoarea expresiei verif(verif(275772) + verif(1929))
a. 1 b. 11 c. 0 d. 2

13. Subprogramul nrap(s,c) returnează numărul apariţiilor caracterului c în şirul s. Dacă a şi b sunt două
şiruri de caractere formate doar din litere mici ale alfabetului englez, cu ce expresie trebuie înlocuite
punctele de suspensie din secvenţa următoare astfel încât, după executarea ei, variabila de tip întreg
k să aibă valoarea 1 dacă mulţimea formată din literele distincte ale şirului a este egală cu mulţimea
formată din literele distincte ale şirului b sau valoarea 0 în caz contrar?
k=1;
for(c='a';c<='z';c++)
if(.....) k=0;

a. (nrap(a,c)>0 && nrap(b,c)==0) ||(nrap(b,c)>0 && nrap(a,c)==0)


Varianta b. nrap(a,c)>0 && nrap(b,c)==0
C/C++ nrap(a,c)==1 && nrap(b,c)==0
c.
d. nrap(a,c)>0 && nrap(b,c)==0 && nrap(b,c)>0 && nrap(a,c)==0

14. Subprogramul nrap(s,c) returnează numărul apariţiilor caracterului c în şirul s. Ştiind că şirul a
conţine doar litere mici ale alfabetului englez şi variabila c este de tip char, stabiliţi în care dintre
următoarele secvenţe de program i se atribuie variabilei k valoarea 1 dacă şi numai dacă şirul a
este format din litere mici distincte sau valoarea 0 în caz contrar.
a. k=1; c. for(c='a';c<='z';c++)
for(c='a';c<='z';c++) if(nrap(a,c)>=2)k=0;
if(nrap(a,c)>=2)k=0; else k=1;
b. k=0; d. k=1;
for(c='a';c<='z';c++) for(c='a';c<='z';c++)
if(nrap(a,c)<=1)k=1; if(nrap(a,c)==1)k=0;
15. Subprogramul dpm(n,m) returnează cel mai mare divizor prim al numărului natural n,
divizor mai mic sau egal cu m (2≤m≤n). Stabiliţi care dintre următoarele expresii este
adevărată dacă şi numai dacă numărul n este prim (n≥3):
a. dpm(n,n)==n
b. dpm(n,n-1)==2
c. dpm(n,n)==2
d. dpm(n,n/2)==n/2

16. Subprogramul invers(v,p,q) inversează ordinea elementelor din tabloul unidimensional v


aflate pe poziţiile p,p+1,…,q-1,q (se presupune că p<=q). Stabiliţi care dintre următoarele
secvenţe de program inversează doar ordinea elementelor v[p] şi v[q]:
a. invers(v,p,q); b. invers(v,p,q); invers(v,p+1,q+1);
invers(v,p-1,q+1);
c. invers(v,p,q); d. invers(v,p-1,q-1); invers(v,p,q);
invers(v,p+1,q-1);

17. Subprogramul divmax(n) returnează cel mai mare divizor prim al numărului n. De exemplu
divmax(13) returnează valoarea 13, iar divmax(28) returnează valoarea 7.
Stabiliţi valoarea expresiei: divmax(divmax(17)+divmax(51));
a. 17 b. 68 c. 2 d. 34

18. Ştiind că iniţial, variabilele întregi x şi y au valorile 12 şi aplic(x,x); cout<<","<<x<<","<<y;


/printf(",%d, %d",x,y);
respectiv 20, stabiliţi ce se va afişa în urma executării
secvenţei de instrucţiuni
void aplic(int x,int &y)
{ x+=3;y-=2;
cout<<x<<","<<y;
/printf("%d,%d",x,y); }
a. 13,13,13,13 b. 15,13,13,13 c. 15,10,10,20 d. 15,10,15,20

18. Antetul corect al unui subprogram care are ca parametri de intrare două numere întregi a, b şi returnează
prin parametrii M şi P, media aritmetică şi respectiv produsul celor două numere, este :
a. int calcul(int a, int b, int & P);
Varianta b. void calcul(int a, int b, float M, int P );
C/C++ c. void calcul(int a, int b, float &M, int &P );
d. float calcul(int a, int b);

19. Dacă iniţial a=3 şi b=7, ce se va executa în urma executării secvenţei de instrucţiuni:
void f(int &a,int b) f(b,b);
{ a=a-1;b=a+1; cout<<a<<b;
cout<<a; /printf("d",a); /printf("%d%d",a,b);
cout<<b; /printf("d",b);}
a. 6736 b. 6767 c. 6737 d. 2828

20. Funcţia numar(a), unde a este număr întreg, returnează cel mai mic întreg mai mare decât a,
dacă a are cifra unităţilor egală cu cifra zecilor sau cel mai mare întreg mai mic decât a în caz
contrar. Două valori x şi y pentru care funcţia număr returnează acelaşi rezultat sunt:
a. 155,156 b. 100,101 c. 12,11 d. 124,122
21. Subprogramul divizori(x,y) returnează numărul de divizori comuni a numerelor
a
naturale x şi y. Fracţia , cu a,b numere naturale şi b  0, este ireductibilă dacă este
b
satisfăcută condiţia:
a. divizori(a,b) == 0
Varianta b. divizori(a,b) / divizori(b,a) != 1
C/C++ c. divizori(a,divizori(b)) == 0
d. divizori(a,b) == 1

22. Subprogramul max(n) returnează cea mai mare cifră a numărului natural n. Pentru n
număr natural, format din 3 cifre, expresia
Varianta C/C++ max(n/10%10)+max(n%10)+max(n/100)

reprezintă:

a. Cifra unităţilor numărului n b. Cifra maximă a numărului n


c. Numărul cifrelor numărului n d. Suma cifrelor numărului n

23. Care succesiune de instrucţiuni este corectă, ştiind că se foloseşte subprogramul


Pascal cu antetul procedure f(a:integer,var b:integer), respectiv C/C++: void f(int a,
int &b)?
a. a=1; b=1; f(a,b);
b. b=1; f(b,1);
c. a=1; f(a,1);
d. a=1; b=1; cout<<f(a,b);
/ printf(”%d”,f(a,b));

24. Fie subprogramul f definit alăturat şi variabilele a şi b de tip integer/int , cu valorile a=1
şi b=2. Ce valori vor avea variabilele a şi b în urma apelului f(a,b+1)?
void f(int &x,int y)
{ x=x+y;
y=x-y; x=x-y;
}
a. a=2,b=1 b. a=3,b=2 c. a=1,b=2 d. a=2,b=2

25. Pentru a calcula aria unui triunghi cu lungimile laturilor memorate de variabilele reale
a, b şi c, se utilizează funcţia arie cu definiţia următoare.
float arie(float a,float b, float c)
{ float p;
p=(a+b+c)/2;
return sqrt(p*(p-a)*(p-b)*(p-c));
}
Care dintre următoarele instrucţiuni nu este corectă?
a. a=arie(a,b,c);
b. printf(”%f ”,arie(a,b,c)); /
cout<<arie(a,b,c);
c. if (arie(a,b,c)>10)
a=arie(a,b,c);
d. arie=arie(a,b,c);
26. Fie funcţia f definită mai jos:
int f(int &a, int &b)
{ while (a !=b)
if (a>b) a=a-b;
else b=b-a;
return a;}
Ce se afişează ca urmare a executării secvenţei următoare?
a=4; b=18;
printf(”%d”,f(a,b));
/cout<<f(a,b);
printf(”%d %d”,a,b);
/cout<<a<<b;
a. 2 2 2 b. 2 4 4 c. 4 18 2 d. 2 4 18

27. Subprogramul p realizează permutarea circulară a numerelor reţinute de parametri de tip int
x,y şi z cu o poziţie spre dreapta, noile valori fiind trasmise tot prin intermediul parametrilor.
De exemplu pentru x=1, y=2, z=3, în urma apelului p(x,y,z) obţinem x=3, y=1, z=2. Dacă
valorile iniţiale ale variabilelor de tip int x, y şi z sunt : x=1, y=2, z=3, atunci după executarea
apelurilor succesive : p(y,z,x); p(z,y,x); noile valori memorate de variabilele x, y, z vor fi:
a. 1,2,3 b. 3,1,2 c. 1,3,2 d. 3,2,1

28. Subprogramul med(a,b) returnează media aritmetică a numerelor reale primite prin
intermediul parametrilor a şi b. Pentru x,y,z şi t, variabile de tip real, selectaţi
instrucţiunea care atribuie variabilei x suma dintre media aritmetică a valorilor y şi z şi
media aritmetică a valorilor z şi t.
a. x=(y+z+t)/2;
b. x=med(med(y,z),t);
c. x=med(z,y)+med(y,t);
d. x=med(t,y)+z;

29. Subprogramul Sub are următorul antet: float Sub(float v[50],int n,int k)
Considerând următoarele declarări: float x[50],y,z; int a,b,c;

care variantă reprezinta o apelare corectă a subprogramului Sub?


a. z=Sub(x,a,b);
b. x=Sub(x,y,z);
c. x=Sub(x,a,b);
d. y=Sub(a,b,c);

30. În subprogramul alăturat, y este:

int f(float x)
{int y;
if(x>0)y=1;
else y=-1;
return y;
}
a. variabilă locală b. variabilă globală
c. parametru formal d. numele funcţiei
31. Ce se va afişa în urma executării programului alăturat?

void F(int &a, int b)


{ b = b + a; a = a * b;
printf("%d %d ",a,b);
/ cout<<a<<" "<<b<<" ";
}
void main()
{ int x = 5, y = 7;
F(x, y);
printf("%d %d", x, y);
/ cout<<x<<" "<<y;
}

a. 12 60 5 7 c. 60 12 60 7
b. 60 12 5 7 d. 60 12 60 12

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