Test grila C++

download Test grila C++

of 38

description

Rezultate test grila C++ la Romano Americana Anul 2

Transcript of Test grila C++

1

1.1 Q: Fie Programul:

Void main() {}

A: a) correct, dar nu are nici un effect; (Pronu utilizaza nici o functie deci nu este necesara includerea vreunei librarii, functia returneaza void si are corpul vid)1.2 Q:Programul:

#include

Void main() {

Cout=s, cum nu este adevarata nu se va evalua expresia virgula din instructiunea if (anume y++, z+=2;)

- se trece deci la urmatoarea instructiune dupS if i anume x+=z; deci x va fi 10

- fiecare iteratie a instructiunii while evalueaza numai expresia k++;

- iesjrea din while se va face in momentul in care k>=x deci cslnd k va fi 10

- se executa apoi atribuirea compusa s+=k+x; adica s+=20, deci valoarea variabilei s va fi 26.)

3.20 Q:secventa

Int a=0, b=1, c=1, d=1, e=1, f=1;

.

A:c)1 1 2 2 1 2 (Operatorii && i || se evalueaza de la stanga la dreapta i se aplica optimizat, in sensul ca daca la un moment dat se cunoaste valoarea de adevar a intregii expresii, atunci restul nu se mai evalueaza.

- prima expresie va fi a++ && b++ i vom avea: se evalueaza a++; variabila a fiind 0, va fi echivalenta cu fals, dupa care a se incrementeaza; in acest moment putem ti valoarea logica a expresiei (i anume 0), motiv pentru care b++ nu se mai evalueaza - expresia finala este acum echivalenta cu 01[ C++ && d++1| e++.

- a doua expresie va fi 0 || C++, iar valoarea ei depinde de variabila c; cum aceasta este 1, expresia va avea valoarea adevarat (deci 1), iar c se incrementeaza -expresia finala este acum echivalenta cu 1 && d++1| e++.

- a treia expresie 1 && d++, depinde de valoarea lui d care este 1; astfel, expresia va avea valoarea adevarat (deci 1), iar d se incrementeaza - expresia finala este acum echivalenta cu 11| e++.

- fn acest moment se poate cunoaste valoarea logica a intregii expresii (i anume 1), motiv pentru care e++ nu se mai evalueaza; expresia fiind adevarata se va executa incrementarea din if a variabilei f.

Astfel, din cele 6 variabile: se incrementeaza a,c,d,f i raman nemodificate b,e. Deci secventa afiata va fi: 1 1 2 2 1 2.)

4.1 Q: char* s[]={ab, cd, ef}

A:d)3 x 4 = 12 octeti(s este un vector de pointeri; neavand o dimensiune declarata el va fi dimensionat dupa lista de initializatori: trei siruri de caractere. Cum un pointer ocupa 4 octeti, rezulta: 3 elemente (pointeri) x 4 octeti (un pointer), deci 12 octeti.)4.2 Q: declaratiile

Float a=2

Int *p=&a

A:d) eronate, p trebuie sa pointeze un int (Initializarea pointerului p cu adresa variabilei a de tip float este incorecta, pointerul trebuind incarcat cu o adresa de int.)4.3 Q: int * const p;

A:a)eronata, p fiind un pointer constant care nu a fost initializat (Declarata int * const p; defmeste intr-adevar un pointer constant, ceea ce implica faptul ca acesta nu va putea fi modificat ulterior, trebuind incarcat cu o adresa inca din momentul declararii. Declarafii de forma int *const p=new int; sau int * const p=&a; (unde a ar fi o variabila de tip int), definesc corect un pointer constant initializat.)4.4 Q:Daca p si q sunt 2 pointeri de int (int *p, *q;) iar p contine ..

A:c)0x12FF84 (Este permisa adunarea unui pointer cu un intreg, rezultand obtinerea unei adrese de memorie mai mare decat cea initials cu valoarea produsului dintre intregul respectiv si dimensiunea tipului pointat. Astfel, pentru expresia q-p+2, q va confine o adresa de memorie mai mare decat p cu 2*sizeof(int), adica 8 octeti. Asadar q va contine adresa 0xl2FF7C+8, deci 0xl2FF84.)

4.5 Q: int *p=new int (3);

A:c) alocarea unei zone de memorie ce contine un element de tipul int initializat cu valoarea 3 (Declaratia realizeaza alocarea unei zone de memorie ce confine un element de tipul int initializat cu valoarea 3 (adica *p are valoarea 3). Daca aveam int *p=new int [3]; ar fi insemnat alocarea unei zone de memorie ce contine 3 elemente de tipul int.)4.6 Q: int i=2, *p=&I;

Cout