Вы находитесь на странице: 1из 9

Variante itemi subprograme

1. Alegeţi variantele corecte de răspuns, în cazul variabilelor locale:

a) Clasa de memorare la nivel de segment de stivă.


b) Durata de viaţă statică.
c) Vizibilitate la nivel de bloc.
d) Sunt iniţializate automat cu valoarea 0.

2. Alegeţi afirmaţiile adevărate:

a) La revenirea în blocul apelant, conţinutul variabilelor memorate în segmentul de stivă nu se


pierde.
b) Parametrii sunt transmişi prin referintă atunci când ne interesează ca la revenirea din
subprogram, variabila transmisă să reţină valoarea modificată îin timpul execuţiei
subprogramului.
c) Tipul parametrilor efectivi trebuie să coincidă cu tipul parametrilor formali.
d) La apel ordinea transmiterii parametrilor este aleasă aleator.

3. Se consideră funcţia:

int f(int n,int m)


{ while (n!=m)
{if (n>m) n=n-m;
else m=m-n;}
return n;}

Completaţi spaţiile goale:

a) Parametrii functiei sunt transmişi prin………………


b) Numele funcţiei este………………….
c) Antetul funcţiei este …………………………………………………......................................
d) Prototipul funcţiei se poate scrie astfel…………………………………………………………
e) Ce calculează funcția?.......................................................................................................
f) Care este apelul funcţiei pentru variabilele x şi z de tip întreg?...........................................
………………………………………………………………………………………………………
g) Care ar fi antetul funcţiei dacă parametrul n ar fi transmis prin referinţă?

4. Corectaţi greşelile care apar în următoarele secvenţe de instrucţiuni de program, ce constituie antetul sau
declaraţiile unor funcţii:
a) int alfa (int n; int m)
b) beta (int m)
c) void gama( int a, b)
d) void f (int n , int &x[20])
e) void delta( )
{……….. return k;}

5. Fie programul următor:

Dacă se citesc în această ordine valorile 12 şi


# include<iostream>
3 ce afişări se obţin în urma rulării
int x;
programului
void test(int a)
{int x=2;
{ int a, x;
cin>>x;
a=a+x;
cout<<a<<endl<<x<<endl;}
cout<<a<<endl<<x<<endl;}
int main( )
{ int b;
cin>>b;
test(b); cout<<x<<endl;
cout<<b;
return 1;}

6. Ce se va afişa în urma execuţiei următoarei secvenţe de program?


int a,b,c; void sb(int &b){cout<<a<<" "<<b<<" "<<c;}
int main()
{cout<<a<<" "<<b<<" "<<c; a=10; b=20; c=30;
sb(a); cout<<a<<" "<<b<<" "<<c;}
7. Ce se va afişa în urma execuţiei următoarei secvenţe de program?
float x; void sb(int x) {x=1;}
int main() {x=2.5; sb(x); cout<<x;}
8. Ce se va afişa în urma execuţiei următoarei secvenţe de program?
float x; void sb1(float &x) { cout<<x; x=1; cout<<x;}
int main() {x=2.5; sb1(x); cout<<x;}
9. Ce se va afişa în urma execuţiei următoarei secvenţe de program?
int x;
void sb1(int x) { x=10; cout<<x;}
void sb2(int x) { x=20; cout<<x;}
int main() {x=30; sb1(x); cout<<x; sb2(x); cout<<x;}
10. Ce se va afişa în urma execuţiei următoarei secvenţe de program?
int a,b;
int sb(int a) {int i=0; while (a!=0) {a/=10; i++;} cout<<<b; return 1;}
int main() {a=12345; b=sb(a); cout<<b;}

11. Ce se va afişa în urma execuţiei următoarei secvenţe de program?


int x;
void sb1(int x) { x=20; cout<<x;}
void sb2(int &x) { x=30; cout<<x;}
int main() {x=50; sb1(x); cout<<x; sb2(x); cout<<x;}
12. Ce se va afişa în urma execuţiei următoarei secvenţe de program?
int x;
void sb1(int); void sb2(int &);
int main() {x=50; sb1(x); cout<<x; sb2(x); cout<<x;}
void sb1(int x) { x=20; sb2(x);}
void sb2(int &x) { x=30; sb1(x);}
13. Ce se va afişa în urma execuţiei următoarei secvenţe de program?
int a,b;
void sb1(int x, int y) { x=x-y;y=y-x;}
void sb2(int x, int y) { a= sb1(x,y); b= sb1(y,x);}
int main() {a=1; b=2; sb1(a,b); cout<<a<<b; sb1(b,a); cout<<a<<b;}
14. Ce se va afişa în urma execuţiei următoarei secvenţe de program?
int sb(int a) { i=0; while (a!=0) {int i=10;a/2; i++;} return 1;}
int main() { sb(23);}

Adevărat sau Fals:


15. Antetul de funcţie int f(int x; int y); este corect.
16. Antetul de funcţie f(int x, int y) nu este corect.
17. Antetul de funcţie void f(int x[25], int &n) este corect.
18. Antetul de funcţie void f(int &x[25], int &n) este corect.
19. Antetul de funcţie int f(int x; int& y); este corect.
20. Antetul de funcţie void f(int &x; y); este corect.
21. La apelul unei funcţii, parametrii actuali sunt înlocuiţi cu parametrii formali.
22. Următorul program produce eroare la compilare? Dacă da precizați de ce.
int d(int a, int b){return sqrt(a*a+b*b);}
int main() { cout<<d(5,4);}
23. Următorul program produce eroare la compilare? Dacă da precizați de ce.
float mg(int x, int y, float & mg) {mg=sqrt(x*y); return sqrt(x*y);}
int main() {float x; cout<<x<<" "<<mg(3,4,x);}
24. Următorul program produce eroare la compilare? Dacă da precizați de ce.
int f(int x, int y) {for (int i=x;i<y;i++) if(i>x+1 && i<y-1) return i; return x+y;}
int main() {cout<<f(1,5);}
25. Următorul program produce eroare la compilare? Dacă da precizați de ce.
int f(int x=20, int y=10) {return x/y;} int main() {cout<<f(15,5);}
26. Următorul program produce eroare la compilare? Dacă da precizați de ce.
int f(int x, int y) {return x/y;} int main() {cout<<f(15);}

27. Următorul program produce eroare la compilare? Dacă da precizați de ce.


int f(int x=20, int y=10) {return x/y;} int main() {cout<<f();}
28. Următorul program produce eroare la compilare? Dacă da precizați de ce.
void f(int x=20, int y=10) {return x/y;} int main() {f(15,5);}
29. Următorul program produce eroare la compilare? Dacă da precizați de ce.
void f(int x, int y) {return x/y;} int main() {cout<<f(15,5);}
30. Următorul program produce eroare la compilare? Dacă da precizați de ce.
void f(int x=20, int y=10) {cout<<x<<" "<<y;} int main() {cout<<f(15,5);}

Alegeți:

31. Care dintre următoarele anteturi de subprogram este un antet corect pentru o funcţie reală cu parametru
întreg?
a. double f(long x); b. double f(float x) c. void f(int x) d. float f(int x);
32. Care dintre următoarele anteturi de subprogram sunt corecte?
a. int f(int x); b. f(int x, int y, char z) c. int f(int x,y) d. float f(int x; int y)
33. Funcţia m() are doi parametri reali şi furnizează cea mai mică valoare dintre cei doi parametri. Care
dintre următoarele instrucţiuni afişează cea mai mică valoare dintre a, b şi c?
a. cout<<m(a,b,c); b. cout<<m(m(a,b),m(b,c)); c. cout<<m(a,m(b,c)); d. cout<<m(m(a,b),c);
34. Se consideră că următoarea funcţie furnizează cel mai mare divizor comun a două numere transmise ca
parametru.
int cmmdc(int a, int b) {while (...) if (a>b) a-=b; else b-=a; return a;} Ce condiţie trebuie scrisă în
instrucţiunea while? a. a>b b. a!=b c. a==b d. a<b
35. Se consideră că următoarea funcţie testează dacă numărul transmis ca parametru este un număr prim.
int prim(int n)
{int i=3;
if (n%2) while (...)
if (n%i==0) return 0;
else i+=2;
else return 0;
return 1;}
Ce condiţie trebuie scrisă în instrucţiunea while? a. i<sqrt(n) b. i<n/2 c. i<=sqrt(n) d. i<= n/2
36. Pentru fiecare antet al subprogramului sb din coloana A, există în coloana B valorile care vor fi afişate
pe ecran. Alegeţi atribuirile corecte:
int a,b; void sb(...){int a; a=m; n+=a; m=n;} int main(){a=10; b=20; sb(a,b); cout<<a<<" "<<b<<" ";}

A B
A1. void sb(int m, int n) B1. 30,30
A2. void sb(int &m, int n) B2. 10,30
A3. void sb(int m, int &n) B3. 10,20
A4. void sb(int &m, int &n) B4. 30,20

a. A1 – B4; A2 – B1; A3 – B3; A4 – B2;


b. A1 – B3; A2 – B4; A3 – B2; A4 – B1;
c. A1 – B4; A2 – B1; A3 – B2; A4 – B3;
d. A1 – B1; A2 – B4; A3 – B2; A4 – B3;

37. Se consideră următorul program:


int a,b; void sb(int &a, int b){a++; b--; a++;}
int main() {a=5; b=10; sb(a,b); cout<<a<<" "b<<" "; a=10; b=20; sb(a,b); cout<<a<<" "b;}
Ce valori se vor afişa pe ecran?
a. 5,10,10,20 b. 5,9,10,19
c. 7,10,12,20 d. 7,9,12,19
38. Care dintre următoarele subprograme adună două valori întregi transmise ca parametri?
a. int s(int x, int y) {int z=x; z+=y; return z;}
b. void s(int x, int y, int &z) {z=x+y;}
c. int s(int &x, int &y) {s=y; s=s+x; }
d. void s(int x, int y) {int z=y+x; return z;}
39. Care dintre următoarele subprograme realizează interschimbarea valorilor a două numere întregi
transmise ca parametri?
a. void s(int x, int y) {int z=y; y=x; x=y;} b. void s(int x, int y) { x=y+x; x=y-x; y=y-x;}
c. void s(int &x, int &y) {x=x-y; y=x+y; x=y-x;} d. void s(int &x, int &y) { x=y+x; x=y-x; y=y-x;}
40. Subprogramul z1 are un parametru întreg şi returnează o valoare reală. Care este antetul corect al
subprogramului z1 ?
a. int z1(float n) b. float z1(int n) c. void z1(float n) d. void z1(float &n; float r)
41. Subprogramul intersch realizează interschimbarea valorilor a două variabile întregi transmise prin
intermediul parametrilor formali x şi y. Antetul subprogramului este:
a. int intersch(int &x, &y) b. void intersch(int x, int y)
c. void intersch(int &x, int &y) d. int intersch(int x)
42. Care dintre următoarele subprograme returnează cea mai mică valoare dintre două numere întregi
transmise ca parametri?
a. int m(int &x, int &y) {m=x; if(y<x) m=y; return m;}
b. void m(int &x, int &y) { if(y<x) m=y; else m=x;}
c. int m(int x, int y) {if(y<x) x=y; return x;}
d. int m(int x, int y) {if(y<x) return y; else return x;}

43. Subprogramul cifre calculează numărul i de cifre ale unui număr natural n transmis ca parametru şi
construieşte vectorul v format din cifrele lui n. Care este antetul corect al unui astfel de subprogram?
a. void cifre(long n, vector &v, int &i) b. void cifre(long n, int i, vector v)
c. void cifre(long n; vector v; int &i) d. void cifre(long &n; vector v; int i)
44. Dacă a este o variabilă globală şi la începutul subprogramului sub este definită o variabilă locală a,
atunci în instrucţiunea a=a+1 din subprogramul sub, a se referă la:
a. variabila globală a b. nu se poate defini a ca variabilă globală şi variabilă locală
c. variabila locală a d. unul la variabila locală, iar altul la variabila globală
45. Se presupune că este definită o funcţie min care primeşte două valori reale prin intermediul a doi
parametri şi returnează cea mai mică dintre cele două valori. Stabiliţi care dintre următoarele expresii
este egală cu cea mai mare dintre valorile reale a şi b.
a. min(a,b) – a – b b. a - min(a,b) + b - min(a,b) c. a + b - min(a,b) d. min(a,b)
46. Este definită o funcţie min care primeşte două valori reale prin intermediul a doi parametri şi returnează
cea mai mică dintre cele două valori. Stabiliţi care dintre următoarele expresii nu este egală cu cea mai
mică dintre valorile reale a, b şi c.
a. a + b + c - min(a,b) – min(a,c) b. min(min(a,b)),min(a,c)) c. min(min(a,b),c) d. min(a,min(b,c))
47. Este definită funcţia max care primeşte două valori întregi prin intermediul parametrilor formali a şi b
(primul fiind a şi al doilea b) şi returnează cea mai mare cifră din şirul infinit al zecimalelor raportului
a/b. Astfel, max(5,12)=6 deoarece 5/12= 0.41666…, iar max(1,8)=5 deoarece 1/8=0.125000… Stabiliţi
care dintre următoarele expresii este adevărată dacă şi numai dacă m este divizor al lui n.
a. max(n,m)<=0 b. max(m,n)==0 c. max(m,n)==0>0 d. max(n,m)!=0
48.
a) 214
b) 124
c) 113
d) 114

49.
50. Se ştie că există o variabilă globală v de tip vector şi că vectorul v este format numai din 0 şi 1. Ştiind că
subprogramul alăturat returnează numărul de componente nenule aflate pe primele n poziţii ale
vectorului v, stabiliţi ce este incorect în definiţia acestuia.
int f(int a) {int k=0; for (int i=0; i<n;i++) k+=v[i];}

a. funcția este definită incorect b. nu este corect antetul funcţiei


c. totul este corect d. este incorectă instrucţiunea for
51. În subprogramul de mai jos, i este:
void fa(unsigned int x) {unsigned int i; for (i=1;i<=n;i++) cout<<i<<" ";}

a. parametru de intrare b. variabilă globală


c. parametru de ieşire d. variabilă locală

52. Subprogramul scif returnează suma cifrelor unui număr natural transmis ca parametru. Stabiliţi valoarea
expresiei scif(scif(518) + scif(518)). a. 14 b. 10 c. 28 d. 1
53. Subprogramul alăturat z1
……………/*antet*/{a=a*10; return (int)a%10;} are un singur parametru real a. Ştiind că secvenţa
float x=4.25; cout<<x<<" "<<z1(x); afișează 4.25 2, stabiliți care este antetul corect al subprogramului
z1.
a. void z1(float &a) b. void z1(float a) c. int z1(float &a) d. int z1(float a)

54. Pentru valori strict pozitive ale parametrului a, funcţia f definită astfel:
int f(int a) {while (a%10>5) a/=10; return a>0;}
returnează valoarea 1 dacă şi numai dacă valoarea lui a este un număr natural care:
a. are ultima cifră mai mică sau egală cu 5 b. are cel puţin o cifră mai mică sau egală cu 5
c. are prima cifră mai mică sau egală cu 5 d. are cel mult o cifră mai mică sau egală cu 5
55. Pentru subprogramul int z1(float &a) {if (a<0) a=-a; a*=10; return (int)a%10;}, variabila întreagă x şi
variabila reală r=4.25, stabiliţi câte dintre secvenţele alăturate afişează valoarea 4.
x=z1(r); cout<<x+z1(r);
x=z1(r); cout<< z1(r) +x;
cout<< z1(r)+z1(r);
x=z1(r); cout<<x+x;
a. 4 b. 3 c. 2 d. 1
56. Pentru variabilele n, i şi j întregi, secvenţa alăturată {cin>>n; divi(n,i,j); cout<<i<<j;}afişează cel mai
mare şi cel mai mic divizor propriu al numărului natural neprim citit (1 şi n sunt divizori improprii).
Care este antetul corect pentru subprogramul divi?
a. int divi(int &n, int i, int j) b. int divi(int n, int &i, int &j)
c. void divi(int n, int i, int j) d. void divi(int n, int &i, int &j)
57. Este definită o funcţie smax care primeşte două valori întregi prin intermediul a doi parametri şi
returnează suma tuturor cifrelor celor două numere. De exemplu, smax(73,608) returnează 24. Stabiliţi
în ce mod se poate apela funcţia smax pentru a determina și afișa suma cifrelor unui număr întreg n.
a. cout<<smax(n,n); b. smax(n,0); c. cout<<smax(n,0); d. smax(n,n);

Вам также может понравиться