Documente Academic
Documente Profesional
Documente Cultură
#include<stdio.h>
int main()
{
struct bits
{
int i:40;
}bit;
printf("%d\n", sizeof(bit));
return 0;
}
2.
What is the output of the program?
#include<stdio.h>
int main()
{
extern int fun(float);
int a;
a = fun(3.14);
printf("%d\n", a);
return 0;
}
int fun(int aa)
{
return (int)++aa;
}
RASPUNS: 2 erori
Compile Error
E.
3. Indicați afirmația corectă vă va permite să accesați elementele matricei utilizând "p" în următorul
program?
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i, j;
int(*p)[3];
p = (int(*)[3])malloc(3*sizeof(*p));
return 0;
}
RASPUNS CORECT C:
#include<stdio.h>
int main()
{
int i = 1;
switch(i)
{
printf("This is c program.");
case 1:
printf("Case1");
break;
case 2:
printf("Case2");
break;
}
return 0;
}
EXPLICATIE: SWICH (i) devine SWICH (1), apoi cazul 1: bloc este executat. Prin urmare, aceasta imprimă
"Case1".printf ("Acesta este un program c"); este ignorat de compilator.
INVATA : https://www.indiabix.com/c-programming/control-instructions/
int main()
{
struct byte
{
int one:1;
};
struct byte var = {1};
printf("%d\n", var.one);
return 0;
}
RASPUNS: -1
INVATA : https://www.indiabix.com/c-programming/structures-unions-enums/
int main()
{
float s=10, u=30, t=2, a;
a = 2*(s-u*t)/SQUARE(t);
printf("Result = %f", a);
return 0;
}
A. Result = -100.000000
EXPLICATIE : Funcția macro SQUARE (x) ,x * x calculează pătratul numărului dat "x". (Ex: 102)
Pasul 1: float s = 10, u = 30, t = 2, a; Aici variabilele s, u, t, a sunt declarate ca un tip de virgulă mobilă și
variabila s, u, t este inițializată la 10, 30, 2.
INVATA: https://www.indiabix.com/c-programming/c-preprocessor/
7.THE OUTPUT
#include<stdio.h>
#define MAN(x, y) ((x)>(y)) ? (x):(y);
int main()
{
int i=10, j=5, k=0;
k = MAN(++i, j++);
printf("%d, %d, %d\n", i, j, k);
return 0;
}
RASPUNS SI EXPLIC: RASPUNS A
macroul MAN (x, y) ((x)> (y))? (X y); returnează cel mai mare număr de numere date.
Pasul 1: int i = 10, j = 5, k = 0; Variabila i, j, k este declarată ca un tip întreg și inițializată la valoarea 10, 5,
respectiv 0.
=> k = 12
În pasul 2 de mai sus, valoarea variabilei i este incrementată cu 2, iar valoarea j variabilă este
incrementată cu 1.
Deoarece operatorul virgula a fost folosit în expresia i (1, 2, 3, 4, 5). Operatorul virgula are asociativitate
stânga-dreapta. Operandul stang este intotdeauna evaluat mai intai si rezultatul evaluarii este aruncat
inainte ca operandul drept sa fie evaluat. În această expresie 5 este cel mai mare operand drept, deci
după evaluarea expresiei (1, 2, 3, 4, 5) rezultatul este 5, care la adăugarea la i rezultă în 7.
Invata: https://www.indiabix.com/c-programming/expressions/
9. #include<stdio.h>
int main()
{
typedef int arr[5];
arr iarr = {1, 2, 3, 4, 5};
int i;
for(i=0; i<4; i++)
printf("%d,", iarr[i]);
return 0;
}
Raspuns: 1,2,3,4
10. Care dintre următoarele este ordinea corectă dacă apelați funcțiile din codul de mai jos?
Explicatie :
Aici, înmulțirea se va întâmpla înainte de adăugarea, dar în ce ordine se vor numi funcțiile este
nedefinită. Într-o expresie aritmetică, paranteza spune compilatorului operanții care merg cu operatorii
care nu forțează compilatorul să evalueze mai întâi totul în paranteză.
Invata: https://www.indiabix.com/c-programming/expressions/
11.
Which of the following are unary operators in C?
1. !
2. sizeof
3. ~
4. &&
Raspuns: 1,2,3
Operatori unari:
12. #include<stdio.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i && ++j && ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
return 0;
}
Step 1: int i=-3, j=2, k=0, m; here variable i, j, k, m are declared as an integer type and
variable i, j, k are initialized to -3, 2, 0 respectively.
Step 2: m = ++i && ++j && ++k;
becomes m = -2 && 3 && 1;
becomes m = TRUE && TRUE; Hence this statement becomes TRUE. So it returns '1'(one). Hence
m=1.
Step 3: printf("%d, %d, %d, %d\n", i, j, k, m); In the previous step the value of i,j,k are
increemented by '1'(one).
13. Assuming, integer is 2 byte, What will be the output of the program?
#include<stdio.h>
int main()
{
printf("%x\n", -2<<2);
return 0;
}
1's complement of 00000000 00000010 is 11111111 11111101 (Change all 0s to 1 and 1s to 0).
2's complement of 00000000 00000010 is 11111111 11111110 (Add 1 to 1's complement to obtain
the 2's complement value).
After left shifting it by 2 bits we obtain: 11111111 11111000, and it is equal to "fff8" in hexadecimal
system.
14. #include<stdio.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i || ++j && ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
return 0;
}
Pasul 1: int i = -3, j = 2, k = 0, m; aici variabilele i, j, k, m sunt declarate ca un tip întreg și variabilele i, j, k
sunt inițializate la -3, 2, respectiv 0.
Pasul 2: m = ++ i || ++ j && ++ k; aici (++ j && ++ k;) acest cod nu va fi executat deoarece ++ i are valoare
non-zero.
devine m = -2 || ++ j && ++ k;
devine m = TRUE || ++ j && ++ k; Prin urmare, această declarație devine TRUE. Deci se întoarce '1'
(unul). Prin urmare, m = 1.
Pasul 3: printf ("% d,% d,% d,% d \ n", i, j, k, m); În pasul anterior, valoarea variabilei "i" este
incrementată doar cu "1" (una). Variabila j, k nu este incrementată.
16. #include<stdio.h>
int main()
{
int x=12, y=7, z;
z = x!=4 || y == 2;
printf("z=%d\n", z);
return 0;
}
Pasul 1: int x = 12, y = 7, z; aici variabilele x, y și z sunt declarate ca întreg și variabilele x și y sunt
inițializate la 12, respectiv 7.
Pasul 2: z = x! = 4 || y == 2;
devine z = 12! = 4 || 7 == 2;
atunci z = (condiție adevărată) || (condiție falsă); Prin urmare, returnează 1. Deci, valoarea z = 1.
Pasul 3: printf ("z =% d \ n", z); Prin urmare, ieșirea programului este "z = 1".
17. #include<stdio.h>
int main()
{
static int a[20];
int i = 0;
a[i] = i ;
printf("%d, %d, %d\n", a[0], a[1], i);
return 0;
}
Step 1: static int a[20]; here variable a is declared as an integer type and static. If a
variable is declared as static and it will be automatically initialized to value '0'(zero).
Step 2: int i = 0; here vaiable i is declared as an integer type and initialized to '0'(zero).
Step 3: a[i] = i ; becomes a[0] = 0;
Step 4: printf("%d, %d, %d\n", a[0], a[1], i);
Here a[0] = 0, a[1] = 0(because all staic variables are initialized to '0') and i = 0.
Step 4: Hence the output is "0, 0, 0".
18. #include<stdio.h>
int main()
{
int i=4, j=-1, k=0, w, x, y, z;
w = i || j || k;
x = i && j && k;
y = i || j &&k;
z = i && j || k;
printf("%d, %d, %d, %d\n", w, x, y, z);
return 0;
}
19. #include<stdio.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i && ++j || ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
return 0;
}
Step 1: int i=-3, j=2, k=0, m; here variable i, j, k, m are declared as an integer type and
variable i, j, k are initialized to -3, 2, 0 respectively.
Step 2: m = ++i && ++j || ++k;
becomes m = (-2 && 3) || ++k;
becomes m = TRUE || ++k;.
(++k) is not executed because (-2 && 3) alone return TRUE.
Hence this statement becomes TRUE. So it returns '1'(one). Hence m=1.
Step 3: printf("%d, %d, %d, %d\n", i, j, k, m); In the previous step the value of i,j are
increemented by '1'(one).
Hence the output is "-2, 3, 0, 1".
20. #include<stdio.h>
int main()
{
int x=4, y, z;
y = --x;
z = x--;
printf("%d, %d, %d\n", x, y, z);
return 0;
}
Step 1: int x=4, y, z; here variable x, y, z are declared as an integer type and variable x is
initialized to 4.
Step 2: y = --x; becomes y = 3; because (--x) is pre-decrement operator.
Step 3: z = x--; becomes z = 3;. In the next step variable x becomes 2, because (x--) is post-
decrement operator.
Step 4: printf("%d, %d, %d\n", x, y, z); Hence it prints "2, 3, 3".
21. #include<stdio.h>
int main()
{
int a=100, b=200, c;
c = (a == 100 || b > 200);
printf("c=%d\n", c);
return 0;
}
22. #include<stdio.h>
int main()
{
int x=55;
printf("%d, %d, %d\n", x<=55, x=40, x>=10);
return 0;
}
Pasul 1: int x = 55; aici variabila x este declarată ca un tip întreg și inițializată la '55'.
Pasul 2: printf ("% d,% d,% d \ n", x <= 55, x = 40, x> = 10);
23.#include<stdio.h>
int main()
{
int i=2;
printf("%d, %d\n", ++i, ++i);
return 0;
}
Ordinea de evaluare a argumentelor transmise unui apel pentru funcții este nespecificată.
În TurboC, producția va fi de 4, 3.
În GCC, producția va fi de 4, 4.
Pasul 1: int k, num = 30; aici variabilele k și num sunt declarate ca un tip întreg și variabila num este
inițializată la '30'.
Etapa 2: k = (num> 5 (num <= 10 - 100: 200): 500); Această declarație nu afectează ieșirea programului.
Pentru că vom imprima variabila num în următoarea instrucțiune. Deci, noi sămânțăm această
declarație.
Pasul 3: printf ("% d \ n", num); Se imprimă valoarea variabilei num '30'
25.
#include<stdio.h>
int main()
{
printf("%x\n", -1>>1);
return 0;
26. #include<stdio.h>
int main()
{
printf("%x\n", -1<<3);
return 0;
}
int main()
{
printf("%x\n", -1<<3);
return 0;
}
A. ffff
B. fff8
C. 0
D. -1
Answer: Option B
Explanation:
The system will treat negative numbers in 2's complement method.
Example:
Assume the size of int is 2-bytes(16 bits). The integer value 1 is represented as given below:
Binary of 1: 00000000 00000001 (this is for positive value of 1)
So, the system will take 2's complement of '11111111 11111111' to the get the original negative
value back.
Example:
Since the left most bit is 1, it is a negative number. Then the value is
27. #include<stdio.h>
int main()
{
char c=48;
int i, mask=01;
for(i=1; i<=5; i++)
{
printf("%c", c|mask);
mask = mask<<1;
}
return 0;
}
Raspuns 12480
44.
int main()
{
char c=48;
int i, mask=01;
for(i=1; i<=5; i++)
{
printf("%c", c|mask);
mask = mask<<1;
}
return 0;
Here mask means unsigned int i.e no negative values....mask 01 means 32 bit value.it is
"00000000000000000000000000000001"
c=48 it is written as "00000000000000000000000000110000"
now "or" operation is performed then value becomes 49,
mask=mask<<1 means it shifts 1 to 1-bit before then it becomes
"000000000000000000000000000000010".now do o operation with 32digit binary bit of 48.
Now value becomes 50.again mask=mask<<1 "00000100"(last 8bits)similarly do till for loop
fails..then we get values as 49,50,52,56,48....the %c converts int to char thatmeans it prints the
ASCII values of these nunbers ASCII of 48=0,49=1,50=2......57=9..replace the values u get o/p
as 12480......