Intrebari si raspunsuri pentru interviurile C

Va aducem de aceasta data un nou set de 7 intrebari centrate pe limbajul de programare C, care vor necesita un nivel mediu de cunostinte.

1) Ce va afisa urmatoarea portiune de cod ?
int main()
{
	int i=10;
	printf("%d ",i);
	printf("sizeof(i++) = %d ",sizeof(i++));
	printf("%d\n",i);
	return 0;
}





2) Ce va afisa urmatoarea portiune de cod ?
#define add(a,b) a+b
#define multiply(a,b) a*b

int main()
{
	int a=2,b=3,c=4;
	printf("%d\n",multiply(add(a,b),c));
	return 0;
}





3) Ce va afisa urmatoarea portiune de cod ?
#define T 1000
#define VAL 1000000

int main()
{
	int a = VAL * 3000;
	if (T > a)
		printf("passes condition\n");
	else
		printf("does not pass condition\n");

	return 0;
	
}




4) Ce va afisa urmatoarea portiune de cod ?
int main()
{

	int y = 100;
	int *p;
	p = malloc(sizeof(int));
	*p = 10;
	y = y/*p; /*dividing y by *p */;
	printf("y=%d\n",y);
	return 0;
}





5) Ce va afisa urmatoarea portiune de cod ?
int main()
{
	int i = 6,value;
	if ( (++i > 7) && (i++ < 8) )
		value=1;
	else
		value=2;

	printf("%d\n",i);
	return 0;
}





6) Ce va afisa urmatoarea portiune de cod ?
typedef union
{
int a;
char b;
} myUnion;

int main()
{
	printf("%d\n",sizeof(myUnion));
	return 0;
}





7) Ce va afisa urmatoarea portiune de cod, presupunand ca functia strupr face toate litere uppercase in string-ul primit ca parametru ?
typedef struct
{
		char *n;
		int age;
} nameAndAge;

int main()
{
		nameAndAge e1,e2;
		e1.n = malloc(10);
		e1.age = 21;
		strcpy(e1.n,"Vlad");
		
		e2 = e1;
		strcpy(e2.n,"Ionut");

		printf("%s\n", e1.n);
		return 0;
}







Asteptam sugestiile sau intrebarile dumneavoastra pe rubrica de comentarii.

Tags: , , , ,

V-a placut acest tutorial? Aveti anumite sugestii pentru urmatoarele tutoriale video? Lasati un comentariu! Feedback-ul vostru este foarte important pentru noi.

Pentru intrebari mai elaborate, cu caracter general, va rugam folositi forumul si in cel mai scurt timp veti primi un raspuns. Astfel ii vom ajuta si pe ceilalti sa invete din eventualele probleme.

5 comentarii la “Intrebari si raspunsuri pentru interviurile C”

  1. Mirela says:

    La intrebarea 2.. nu e (a+b)*c? adica 20

  2. Ionut
    says:

    Buna Mirela,

    In prima faza a compilarii (preprocesarea) compilatorul inlocuieste directivele de preprocesare din fisierul sursa C; in cazul de fata directivele de preprocesare care ne intereseaza sunt ‘#define‘:
    - prima inlocuire: multiply(add(a,b),c) => add(a,b)*c
    - a 2-a inlocuire: add(a,b)*c => a+b*c

    In faza de preprocesare nu se face nici o operatie, pur si simplu se inlocuiesc directivele respective. In cazul de fata rezultand expresia: a+b*c = 14

    Mai multe detalii despre fazele compilarii poti afla aici: http://itassistant.org/diverse/utilizarea-sistemelor-de-operare/utilizarea-sistemelor-de-operare-11.html

  3. Mirela says:

    multumesc!

  4. paul says:

    Iata ce afiseaza programul de la prima intrebare:

    10 sizeof(i++) = 2 11

    Numarul de octeti ocupat de un int este dependent de masina pe care se ruleaza programul.
    sizeof nu este o functie ci un operator, dar incrementarea se realizeaza.

    Va rog sa corectati raspunsul.

  5. Ionut
    says:

    Salut Paul,

    Compilatorul nu are nevoie sa stie valoarea lui i ci doar tipul acestuia, deci expresia (i++) nu va fi evaluata.

    Aici ai un pasaj din standardul C99:


    The “sizeof” operator yields the size (in bytes) of its
    operand, which may be an expression or the parenthesized
    name of a type.
    [...]
    The size is determined from the type of the operand.
    The result is an integer. If the type of the operand
    is a variable length array type, the operand is evaluated;
    otherwise, the operand is not evaluated and the result is
    an integer constant.

    In legatura cu numarul de octeti pe care este stocat un int ai dreptate, acesta este dependent de masina: 2 sau 4 octeti. Raspunsul perfect corect la aceasta intrebare ar fi:

    10 sizeof(i++) = 2 (sau 4) 11