Programming
Question 1 
#include <stdio.h>
int counter = 0;
int calc (int a, int b) {
int c;
counter++;
if (b==3) return (a*a*a) ;
else {
c = calc (a, b/3) ;
return (c*c*c) ;
}
}
int main () {
calc (4, 81);
printf ("%d", counter) ;
}
The output of this program is ______.
4  
5  
6  
7 
Question 2 
Consider the following C program.
#include <stdio.h> struct Outnode { char x, y, z ; }; int main () { struct Outnode p = {'1', '0', 'a'+2} ; struct Outnode *q = &p ; printf ("%c, %c", *((char*)q+1), *((char*)q+2)) ; return 0 ; }
The output of this program is
0, c  
0, a+2  
‘0’, ‘a+2’  
‘0’, ‘c’ 
The x variable here stores a character ‘c’ in it.
Because +2 will increment ascii value of a from 92 to 95.
Hence the structure p contains 3 character values and they are ‘1’, ‘0’, and ‘c’.
q is a pointer pointing to structure p.
Hence q is pointing to ‘1’, q+1 pointing to ‘0’ and q+2 pointing to ‘c’.
Option d cannot be correct, as though they are characters, printf will not print them in single quotes.
Question 3 
Consider the following C program:
#include<stdio.h> void fun1(char *s1, char *s2) { char *tmp; tmp = s1; s1 = s2; s2 = tmp; } void fun2(char **s2, char **s2) { char *tmp; tmp = *s1; *s1 = *s2; *s2 = tmp; } int main () { char *str1 = "Hi", *str2 = "Bye"; fun1(str1, str2); printf("%s %s", str1, str2); fun2(&str1, &str2); printf("%s %s", str1, str2); return 0; }
The output of the program above is
Hi Bye Bye Hi  
Hi Bye Hi Bye  
Bye Hi Hi Bye  
Bye Hi Bye Hi 
Hence, any change in the formal parameters are NOT reflected in actual parameters.
Hence, str1 points at “hi” and str2 points at “bye”.
The second call to the function ‘func2(&str1, &str2);’ is call by reference.
Hence, any change in formal parameters are reflected in actual parameters.
Hence, str1 now points at “bye” and str2 points at “hi”.
Hence answer is “hi bye bye hi”.
Question 4 
Consider the following C code. Assume that unsigned long int type length is 64 bits.
unsigned long int fun(unsigned long int n) { unsigned long int i, j, j=0, sum = 0; for (i = n; i > 1; i = i/2) j++; for ( ; j > 1; j = j/2) sum++; return sum; }
The value returned when we call fun with the input 2^{40} is
4  
5  
6  
40 
Next for loop will divide j value (which is 40) by 2, each time until j>1.
j loop starts:
j=40 & sum=1
j=20 & sum=2
j=10 & sum=3
j=5 & sum=4
j=2 & sum=5
j=1 & break
So, sum = 5.
Question 5 
Consider the following program written in pseudocode. Assume that x and y are integers.
Count (x, y) { if (y != 1) { if (x != 1) { print("*") ; Count (x/2, y) ; } else { y = y  1 ; Count (1024, y) ; } } }
The number of times that the print statement is executed by the call Count(1024, 1024) is ______.
10230  
10231  
10232  
10233 
int count=0;
Count(x,y){
if(y!=1){
if(x!=1){
printf("*");
count = count +1;
Count(x/2,y);
}
else{
y=y1;
Count(1024,y);
}
}
}
void main()
{
Count(1024,1024);
printf("\n%d\n",count);
}
Count ( ) is called recursively for every (y = 1023) & for every y, Count ( ) is called (x = 10) times = 1023 × 10 = 10230
Question 6 
Consider the following C code:
#include <stdio.h> int *assignval(int *x, int val) { *x = val; return x; } void main ( ) { int *x = malloc(sizeof(int)); if(NULL == x) return; x = assignval(x, 0); if(x) { x = (int *)malloc(size of(int)); if(NULL == x) return; x = assignval(x, 10); } printf("%dn", *x); free(x); }
The code suffers from which one of the following problems:
compiler error as the return of malloc is not typecast approximately  
compiler error because the comparison should be made as x==NULL and not as shown  
compiles successfully but execution may result in dangling pointer  
compiles successfully but execution may result in memory leak 
In C++, we need to perform type casting, but in C Implicit type casting is done automatically, so there is no compile time error, it prints10 as output.
Option B:
NULL means address 0, if (a == 0) or (0 == a) no problem, though we can neglect this, as it prints 10.
Option C:
x points to a valid memory location. Dangling Pointer means if it points to a memory location which is freed/ deleted.
int*ptr = (int*)malloc(sizeof(int));
free(ptr); //ptr becomes a dangling pointer
ptr = NULL; //Removing Dangling pointers condition
Option D:
x is assigned to some memory location
int*x = malloc(sizeof(int));
→ (int*)malloc(sizeof(int)) again assigns some other location to x, previous memory location is lost because no new reference to that location, resulting in Memory Leak.
Hence, Option D.
Question 7 
Consider the following two functions.
void fun1(int n) { void fun2(int n) { if(n == 0) return; if(n == 0) return; printf("%d", n); printf("%d", n); fun2(n  2); fun1(++n); printf("%d", n); printf("%d", n); } }
The output printed when fun1(5) is called is
53423122233445  
53423120112233  
53423122132435  
53423120213243 
In fun2, we increment (pre) the value of n, but in fun1, we are not modifying the value.
Hence increment in value in recursion (back).
Hence, 5 3 4 2 3 1 2 2 2 3 3 4 4 5.
Question 8 
Consider the C functions foo and bar given below:
int foo(int val) { int x = 0; while (val>0) { x = x + foo(val); } return val; } int bar(int val) { int x = 0; while (val>0) { x = x + bar(val1); } return val; }
Invocations of foo(3) and bar(3) will result in:
Return of 6 and 6 respectively.  
Infinite loop and abnormal termination respectively.  
Abnormal termination and infinite loop respectively.  
Both terminating abnormally. 
{
x = x + foo(val);
}
In this case foo(val) is same as foo(val) & val ;
Because the recursive function call is made without changing the passing argument and there is no Base condition which can stop it.
It goes on calling with the same value ‘val’ & the system will run out of memory and hits the segmentation fault or will be terminated abnormally.
The loop will not make any difference here.
while(val>0)
{
x = x + bar(val1);
}
bar(3) calls bar(2)
bar(2) calls bar(1)
bar(1) calls bar(0) ⇾ Here bar(0) will return 0.
bar(1) calls bar(0)
bar(1) calls bar(0)……..
This will continue.
Here is a problem of infinite loop but not abrupt termination.
Some compilers will forcefully preempt the execution.
Question 9 
Consider the following C program.
#include <stdio.h> #include <string.h> void printlength (char*s, char*t) { unsigned int c = 0; int len = ((strlen(s)  strlen(t)) > c) ? strlen(s):strlen(t); printf("%d\n", len); } void main () { char*x = "abc"; char*y = "defgh"; printlength(x,y); }
Recall that strlen is defined in string.h as returning a value of type size_t, which is an unsigned int. The output of the program is _________.
3  
4  
5  
6 
{
char*x = "abc";
char*y = "defgh";
printlength(x,y);
}
printlength(char*3, char*t)
{
unsigned int c = 0;
int len = ((strlen(s)  strlen(t))> c) ? strlen(s) : strlen(t);
printf("%d", len);
}
Here strlen(s)  strlen(t) = 3  5 = 2
But in C programming, when we do operations with two unsigned integers, result is also unsigned. (strlen returns size_t which is unsigned in most of the systems).
So this result '2' is treated as unsigned and its value is INT_MAX2.
Now the comparison is in between large number & another unsigned number c, which is 0.
So the comparison returns TRUE here.
Hence (strlen(s)  strlen(t))>0 will return TRUE, on executing, the conditional operator will return strlen(s)
⇒ strlen(abc) = 3
Question 10 
The output of executing the following C program is __________.
#include<stdio.h> int total (int v) { static int count=0; while(v) { count += v&1; v ≫= 1; } return count; } void main() { static int x = 0; int i = 5; for(; 1> 0; i) { x = x + total(i); } printf("%d\n", x); }
23  
24  
25  
26 
Question 11 
Match the following:
P→(ii), Q→(iv), R→(i), S→(iii)  
P→(ii), Q→(i), R→(iv), S→(iii)  
P→(ii), Q→(iv), R→(iii), S→(i)  
P→(iii), Q→(iv), R→(i), S→(ii) 
⇾ A variable located in Data Section of memory
P→(ii), Q→(iv), R→(i), S→(iii)
Question 12 
Consider the following function implemented in C:
void printxy (int x, int y) { int *ptr; x = 0; ptr = &x; y = *ptr; *ptr = 1; printf("%d,%d",x,y); }
The output of invoking printxy(1, 1) is
0, 0  
0, 1  
1, 0  
1, 1 
{
int *ptr;
x = 0;
ptr = &x;
y = *ptr;
*ptr = 1;
}
printxy (1, 1)
Question 13 
Consider the C program fragment below which is meant to divide x and y using repeated subtractions. The variables x, y, q and r are all unsigned int.
while (r >= y) { r = r  y; q = q + 1; }
Which of the following conditions on the variables x, y, q and r before the execution of the fragment will ensure that the loop terminates in a state satisfying the condition x == (y*q + r)?
(q == r) && (r == 0)  
(x > 0) && (r == x) && (y > 0)  
(q == 0) && (r == x) && (y > 0)  
(q == 0) && (y > 0) 
x, y, q, r are unsigned integers.
while (r >= y)
{
r = r – y;
q = q + 1;
}
Loop terminates in a state satisfying the condition
x == (y * q + r)
y ⇒ Dividend = Divisor * Quotient + Remainder
So, to divide a number with repeated subtractions, the Quotient should be initialized to 0 and it must be incremented for every subtraction.
So initially q=0 which represents
x = 0 + r ⇒ x = r
and y must be a positive value (>0).
Question 14 
Consider the following snippet of a C program. Assume that swap(&x, &y) exchanges the contents of x and y.
int main () { int array[] = {3, 5, 1, 4, 6, 2}; int done = 0; int i; while (done == 0) { done = 1; for (i=0; i<=4; i++) { if (array[i] < array[i+1]) { swap (&array[i], &array[i+1]); done = 0; } } for (i=5; i>=1; i) { if (array[i] > array[i1]) { swap(&array[i], &array[i1]); done=0; } } } printf("%d", array[3]); }
The output of the program is ___________.
3  
4  
5  
6 
(1) ⇒ 1st for i = 0 <= 4
a[0] < a[1] ≃ 3<5 so perform swapping
done =
(1) ⇒ no swap (3, 1)
(2) ⇾ perform swap (1, 4)
(1) ⇒ perform swap (1, 6)
(1) ⇒ perform swap (1, 2)
(1) ⇒ (done is still 0)
for i = 5 >= 1 a[5] > a[4] ≃ 1>2 – false. So, no swapping to be done
(2) ⇾ no swap (6, 2)
(3) ⇾ swap (4, 6)
(1) ⇒ Swap (3, 6)
(1) ⇒ Swap (5, 6)
⇒ Done is still 0. So while loop executes again.
(1) ⇾ no swap (6, 5)
done = 1
(2) ⇾ No swap (5, 3)
(3) ⇾Swap (3, 4)
So, array [3] = 3
Question 15 
Consider the following C program:
#include <stdio.h> int main() { int m = 10; int n, n1; n = ++m; n1 = m++; n; n1; n = n1; printf("%d",n); return 0; }
The output of the program is _______.
0  
1  
2  
3 
Question 16 
Consider the following C program.
#include<stdio.h> #include<string.h> int main () { char* c = "GATECSIT2017"; char* p = c; printf("%d", (int) strlen (c + 2[p]  6[p]  1)); return 0; }
The output of the program is __________.
1  
2  
4  
6 
char * P = C;
(int) strlen (C + 2[P] – 6[P] – 1)
C + 2[P]  6[P] – 1
∵2[P] ≃ P[2]
100 + P[2] – P[6] – 1
100 + T – I – 1
100 + 84 – 73 – 1
ASCII values: T – 84, I – 73
100 + 11 – 1
= 110
(int) strlen (110)
strlen (17) ≃ 2
Question 17 
Consider the following C program.
void f(int, short); void main () { int i = 100; short s = 12; short *p = &s; __________ ; // call to f() }
Which one of the following expressions, when placed in the blank above, will NOT result in a type checking error?
f(s, *s)  
i = f(i, s)  
f(i, *s)  
f(i, *p) 
short s = 12;
short *p = &s;
_______ // call to f ( ) :: (void f(int,short);)
It is clearly mentioned the return type of f is void.
By doing option elimination
(A) & (C) can be eliminated as s is short variable and not a pointer variable.
(B) i = f(i, s) is false because f’s return type is void, but here shown as int.
(D) f(i, *p)
i = 100
*p = 12
Hence TRUE
Question 18 
Consider the following C program.
#include<stdio.h> void mystery(int *ptra, int *ptrb) { int *temp; temp = ptrb; ptrb = ptra; ptra = temp; } int main() { int a=2016, b=0, c=4, d=42; mystery(&a, &b); if (a < c) mystery(&c, &a); mystery(&a, &d); printf("%d\n", a); }
The output of the program is ________.
2016  
2017  
2018  
2019 
For the first mystery (&a, &b);
temp = ptr b
ptr b = ptr a
ptr a = temp
If (a
Hence, a = 2016 will be printed.
Question 19 
The following function computes the maximum value contained in an integer array p[] of size n (n >= 1).
int max(int *p, int n) { int a=0, b=n1; while (__________) { if (p[a] <= p[b]) {a = a+1;} else {b = b1;} } return p[a]; }
The missing loop condition is
a != n  
b != 0  
b > (a + 1)  
b != a 
{
int arr [ ] = {3, 2, 1, 5, 4};
int n = sizeof(arr) / sizeof (arr[0]);
printf (max(arr, 5));
}
int max (int *p, int n)
{
int a = 0, b = n – 1;
(while (a!=b))
{
if (p[a] <= p[b])
{
a = a + 1;
}
else
{
b =b – 1;
}
}
return p[a];
}
The function computes the maximum value contained in an integer array p[ ] of size n (n >= 1).
If a = = b, means both are at same location & comparison ends.
Question 20 
What will be the output of the following C program?
void count(int n) { static int d=1; printf("%d ", n); printf("%d ", d); d++; if(n>1) count(n1); printf("%d ", d); } void main() { count(3); }
3 1 2 2 1 3 4 4 4  
3 1 2 1 1 1 2 2 2  
3 1 2 2 1 3 4  
3 1 2 1 1 1 2 
Count (3)
static int d = 1
It prints 3, 1
d++; //d = 2
n>1, count(2)
prints 2, 2
d++; // d = 3
n>1, count(1)
prints 1, 3 → Here n = 1, so condition failed & printf (last statement) executes thrice & prints d
d++; //d=4 value as 4. For three function calls, static value retains.
∴ 312213444
Question 21 
What will be the output of the following pseudocode when parameters are passed by reference and dynamic scoping is assumed?
a=3; void n(x) {x = x * a; print(x);} void m(y) {a = 1; a = y  a; n(a); print(a);} void main() {m(a);}
6, 2  
6, 6  
4, 2  
4, 4 
First m(a) is implemented, as there are no local variables in main ( ), it takes global a = 3;
m(3) is passed to m(y).
a = 1
a = 3 – 1 = 2
n(2) is passed to n(x).
Since it is dynamic scoping
x = 2 * 2 = 4 (a takes the value of its calling function not the global one).
The local x is now replaced in m(y) also.
Hence, it prints 4,4.
And we know it prints 6, 2 if static scoping is used.
It is by default in C programming.
Question 22 
The value printed by the following program is __________.
void f(int* p, int m) { m = m + 5; *p = *p + m; return; } void main() { int i=5, j=10; f(&i, j); printf("%d", i+j); }
30  
31  
32  
33 
P is a pointer stores the address of i, & m is the formal parameter of j.
Now, m = m + 5;
*p = *p + m;
Hence, i + j will be 20 + 10 = 30.
Question 23 
The following function computes X^{Y} for positive integers X and Y.
int exp (int X, int Y) { int res = 1, a = X, b = Y; while ( b != 0 ){ if ( b%2 == 0) { a = a*a; b = b/2; } else { res = res*a; b = b1; } } return res; }
Which one of the following conditions is TRUE before every iteration of the loop?
X^{Y} = a^{b}  
(res * a)^{Y} = (res * X)^{b}  
X^{Y} = res * a^{b}  
X^{Y} = (res * a)^{b} 
{
int res = 1, a = X, b = Y;
while (b != 0)
{
if (b%2 == 0)
{
a = a*a;
b = b/2;
}
else
{
res = res*a;
b = b – 1;
}
}
return res;
}
From that explanation part you can understand the exponent operation, but to check the conditions, first while iteration is enough.
x = 2, y = 3, res = 2, a = 2, b = 2.
Only (C) satisfies these values.
x^{y} = res * a^{b}
2^{3} = 2 * 2^{2} = 8
Explanation:
Will compute for smaller values.
Let X = 2, Y = 3, res = 1
while (3 != 0)
{
if(3%2 == 0)  False
else
{
res = 1*2 = 2;
b = 3 – 1 = 2;
}
For options elimination, consider
return res = 2 (but it is out of while loop so repeat while)
__________
while (2 != 0)
{
if (2%2 == 0)  True
{
a = 2*2 = 4
b = 2/2 = 1
}
__________
repeat while
while (1 != 0)
{
if (1%2 == 0)  False
else
{
res = 2 * 4 = 8
b = 1 – 1 = 0
}
__________
while (0 != 0)  False
return res = 8 (2^{3})
Question 24 
Consider the following program:
int f(int *p, int n) { if (n <= 1) return 0; else return max (f(p+1,n1),p[0]p[1]); } int main() { int a[] = {3,5,2,6,4}; printf("%d", f(a,5)); }Note: max(x,y) returns the maximum of x and y.
The value printed by this program is __________.
3  
4  
5  
6 
f(a, 5) ⇒ f(100, 5)
Question 25 
The output of the following C program is __________.
void f1 (int a, int b) { int c; c=a; a=b; b=c; } void f2 (int *a, int *b) { int c; c=*a; *a=*b;*b=c; } int main() { int a=4, b=5, c=6; f1(a, b); f2(&b, &c); printf (“%d”, cab); return 0; }
5  
6  
7  
8 
But f_{2} will swap the value of 'b' and 'c' because f_{2} is call by reference. So finally the value of
a=4
b=6
c=5
So, answer will be
c  a  b
5  4  6 = 5
Question 26 
What is the output of the following C code? Assume that the address of x is 2000 (in decimal) and an integer requires four bytes of memory.
int main() { unsigned int x[4][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}}; printf("%u, %u, %u", x+3, *(x+3), *(x+2)+3); }
2036, 2036, 2036  
2012, 4, 2204  
2036, 10, 10  
2012, 4, 6 
⇒ x [4] [3] can represents that x is a 2dimensional array.
⇒ x+3 = (Address of x) + 3 * 4 * 3 [3×4×3 is inner dimention]
= 2000 + 36
= 2036
⇒ *(x+3) also returns the address i.e., 2036.
The '*' represents 1  D but x is starting at 2036.
⇒ *(x+3)+3 = *(Address of x + 2 * 3 * 4) + 3
= *(2000 + 24) +3
= *(2024) + 3 ['*' will change from 2D to 1D]
= 2024 + 3 * 4
= 2024 + 12
= 2036
Question 27 
Consider the following pseudo code, where x and y are positive integers.
begin q := 0 r := x while r >= y do begin r := r – y q := q + 1 end end
The post condition that needs to be satisfied after the program terminates is
{r = qx+y ∧ r  
{x = qy+r ∧ r  
{y = qx+r ∧ 0  
{q+1 
⇒ x = qy + r
Question 28 
Consider the following C program segment.
while (first <= last) { if (array [middle] < search) first = middle +1; else if (array [middle] == search) found = True; else last = middle – 1; middle = (first + last)/2; } if (first < last) not Present = True;
The cyclomatic complexity of the program segment is __________.
5  
6  
7  
8 
Question 29 
Consider the following C function.
int fun1 (int n) { int i, j, k, p, q = 0; for (i = 1; i<n; ++i) { p = 0; for (j = n; j > 1; j = j/2) ++p; for (k = 1; k < p; k = k*2) ++q; } return q; }
Which one of the following most closely approximates the return value of the function fun1?
n^{3}  
n(log n)^{2}  
nlog n  
nlog (log n) 
for (j=n; j>1; j=j/2)  p = O(log n) ++p;
for (k=1; k
++q;
}
∴ The return value of the function fun1,
q = n log p
= n log log n
Question 30 
Consider the following function written the C programming language.
void foo(char *a) { if(*a && *a != ' ') { foo(a+1); putchar(*a); } }
The output of the above function on input "ABCD EFGH" is
ABCD EFGH  
ABCD  
HGFE DCBA  
DCBA 
if condition fails
& returns controls
∴ DCBA will be pointed
Question 31 
Consider the following C functions
int fun(int n) { int x = 1, k; if(n == 1) return x; for(k = 1; k < n; ++k) x = x + fun(k) * fun(n  k); return x; }
The return value of fun(5) is _______.
51  
52  
53  
54 
f(n) = 1; if n = 1
Question 32 
Consider the C program below.
#includeint *A, stkTop; int stkFunc (int opcode, int val) { static int size=0, stkTop=0; switch (opcode) { case 1: size = val; break; case 0: if (stkTop < size ) A[stkTop++]=val; break; default: if (stkTop) return A[stkTop]; } return 1; } int main() { int B[20]; A=B; stkTop = 1; stkFunc (1, 10); stkFunc (0, 5); stkFunc (0, 10); printf ("%dn", stkFunc(1, 0)+ stkFunc(1, 0)); }
The value printed by the above program is ___________
2  
2  
1  
15 
When next time stkFunc (0,5) is called then, inside Switch(opcode), the control will go to Case0, where A[0] = 5 and stkTop = 0+1 = 1.
When next time stkFunc (0,10) is called then, inside Switch (opcode), the control will go to Case '0', where A[1] = 10 and stkTop = 1+1 = 2.
When next time stkFunc(1,0) is called from inside the printf statement, then inside Switch(opcode), the control will go to default and stkTop = 21 = 1 and value of A[1] will get returned, i.e., 10.
When next time stkFunc(1,0) is called from inside the printf statement, then inside Switch(opcode), the control will go to default and stkTop = 11 = 0 and value of A[0] will get returned, i.e., 5.
Finally the two values 10 & 5 will be added and printed.
Question 33 
Consider the following C program segment.
# includeint main( ) { char s1[7] = "1234", *p; p = s1 + 2; *p = '0' ; printf ("%s", s1); }
What will be printed by the program?
12  
120400  
1204  
1034 
p now points to third element in s1, i.e., '3'.
*p = '0', will make value of '3' as '0' in s1. And finally s1 will become 1204.
Question 34 
Consider the following recursive C function. If get(6) function is being called in main() then how many times will the get() function be invoked before returning to the main()?
void get (int n){ if (n < 1) return; get(n1); get(n3); printf("%d", n); }
15  
25  
35  
45 
Question 35 
Consider the following C program.
# include int main( ) { static int a[] = {10, 20, 30, 40, 50}; static int *p[] = {a, a+3, a+4, a+1, a+2}; int **ptr = p; ptr++; printf("%d%d", ptr  p, **ptr}; }
The output of the program is _________.
140  
150  
160  
170 
**ptr = 40
∴ printf (“%d%d”, p + r – p, p + r) will print 140.
Question 36 
Consider the following C program:
# includeint main( ) { int i, j, k = 0; j = 2 * 3 / 4 + 2.0 / 5 + 8 / 5; k = j; for (i = 0; i < 5; i++) { switch(i + k) { case 1: case 2: printf("n%d", i + k); case 3: printf("n%d", i + k); default: printf("n%d", i + k); } } return 0; }
The number of times printf statement is executed is __________.
10  
11  
12  
13 
= 6 / 4+2.0 / 5+1;
= 1 + 0.4 + 1
= 2.4
But since j is integer,
j=2
Now,
k = k  (j)
k = 0  (1) = 1
When i=0, i+k = 1,
printf executed 1 time
When i=1, i+k = 0,
printf executed 1 time
When i=2, i+k = 1,
printf executed 3 times
When i=3, i+k = 2,
printf executed 3 times
When i=4, i+k = 3,
printf executed 2 times
∴ Total no. of times printf executed is,
1 + 1 + 3 + 3 + 2 = 10
Question 37 
Consider the following C program. The output of the program is __________.
# includeint f1(void); int f2(void); int f3(void); int x = 10; int main() { int x = 1; x += f1() + f2() + f3() + f2(); pirntf("%d", x); return 0; } int f1() { int x = 25; x++; return x; } int f2( ) { static int x = 50; x++; return x; } int f3( ) { x *= 10; return x; }
230  
240  
250  
260 
f1( ) = 25 + 1 = 26
f2( ) = 50 + 1 = 51
f3( ) = 10 × 10 = 100
f2( ) = 51 × 1 = 52 (Since here x is static variable so old value retains)
∴ x = 1+26+51+100+52 = 230
Question 38 
Consider the following program in C language:
#includemain() { int i; int *pi = &i; scanf("%d", pi); printf("%dn", i+5); }
Which one of the following statements is TRUE?
Compilation fails.  
Execution results in a runtime error.  
On execution, the value printed is 5 more than the address of variable i.  
On execution, the value printed is 5 more than the integer value entered. 
int *pi = &i; // pi is a pointer which stores the address of i.
scanf (pi); // pi = &i (we rewrite the garbage value with our values) say x = 2
printf (i+5); // i+5 = x+5 = 2+5 = 7
Hence on execution, the value printed is 5 more than the integer value entered.
Question 39 
Consider the function func shown below:
int func(int num) { int count = 0; while (num) { count++; num >>= 1; } return (count); }
The value returned by func(435)is __________.
9  
10  
11  
12 
Shift left of 1, which means the number gets doubled.
In program, shift right of 1 is given, means every time we enter the loop the number will get halved, and the value of count will get incremented by 1. And when the value of num will become zero then the while loop will get terminated. So,
num = 435/2 = 217/2 = 108/2 = 54/2 = 27/2= 13/2 = 6/2 = 3/2 = 1/2 = 0
Count = 9
So, the value count that will get returned is 9.
Question 40 
Suppose n and p are unsigned int variables in a C program. We wish to set p to ^{n}C_{3}. If n is large, which one of the following statements is most likely to set p correctly?
p = n * (n1) * (n2) / 6;  
p = n * (n1) / 2 * (n2) / 3;  
p = n * (n1) / 3 * (n2) / 2;  
p = n * (n1) * (n2) / 6.0; 
From the options n*(n1)*(n2) will go out of range. So eliminate A & D.
n*(n1) is always an even number. So subexpression n(n1)/2 also an even number.
n*(n1)/ 2*(n2), gives a number which is a multiple of 3. So dividing with 3 will not have any loss. Hence B is option.
Question 41 
Consider the following function
double f(double x){ if (abs(x*x  3) < 0.01) return x; else return f(x/2 + 1.5/x); }
Give a value q (to 2 decimals) such that f(q) will return q:_____.
1.73  
1.74  
1.75  
1.76 
x^{2}  3 < 0.01 will become True.
So, x^{2}  3 < 0.01
x^{2}  3 < 0.01
x^{2} < 3.01
x < 1.732
Hence, x = 1.73.
Question 42 
Consider the C function given below.
int f(int j) { static int i = 50; int k; if (i == j) { printf(“something”); k = f(i); return 0; } else return 0; }
Which one of the following is TRUE?
The function returns 0 for all values of j.  
The function prints the string something for all values of j.  
The function returns 0 when j = 50.  
The function will exhaust the runtime stack or run into an infinite loop when j = 50. 
int f(int j)
{
static int i = 50;
int k;
if (i == j) // This will be True.
{
printf ("Something");
k = f(i); // Again called f(i) with value of i as 50. So, the function will run into infinite loop.
return 0;
}
else return 0;
}
Question 43 
Let A be a square matrix of size n x n. Consider the following program. What is the expected output?
C = 100 for i = 1 to n do for j = 1 to n do { Temp = A[i][j] + C A[i][j] = A[j][i] A[j][i] = Temp  C } for i = 1 to n do for j = 1 to n do Output(A[i][j]);
The matrix A itself  
Transpose of the matrix A  
Adding 100 to the upper diagonal elements and subtracting 100 from lower diagonal elements of A  
None of the above 
For first row iteration, it get swapped and becomes
For second row iteration, it comes to the original position
=A
So, it is the same matrix A.
Question 44 
The minimum number of arithmetic operations required to evaluate the polynomial P(X) = X^{5} + 4X^{3} + 6X + 5 for a given value of X, using only one temporary variable is ________.
7  
8  
9  
10 
P(X) = x^{5}+4x^{3}+6x+5
= x(x^{4}+4x^{2}+6)+5
= x(x(x^{3}+4x)+6)+5
= x(x(x(x^{2}+4))+6)+5
= x(x(x(x(x)+4))+6)+5
4 multiplications & 3 additions.
4 + 3 = 7
Question 45 
Consider the following function:
int unknown(int n) { int i, j, k = 0; for (i = n/2; i <= n; i++) for (j = 2; j <= n; j = j * 2) k = k + n/2; return k; }
Θ(n^{2})  
Θ(n^{2} log n)  
Θ(n^{3})  
Θ(n^{3} logn) 
So, the total number of times loop runs is (n/2 logn).
So, the final k value will be n/2*(n/2 logn) = O(n^{2}logn)
= (n/2+1).n/2 ∙log n
= (n^{2}log n)
Question 46 
Consider the following languages.
 L_{1} = {0^{p}1^{q}0^{r}p,q,r≥0}
L_{2} = {0^{p}1^{q}0^{r}p,q,r≥0, p≠r}
Which one of the following statements is FALSE?
L_{2} is contextfree.  
L_{1}∩ L_{2} is contextfree.  
Complement of L_{2} is recursive.  
Complement of L_{1} is contextfree but not regular. 
Intersection of a regular language with a context free language is context free language (by closure properties of regular language) So L_{1}∩ L_{2} is contextfree.
L_{2} is CFL and CFL is not closed under complementation so we have to assume L_{2} as CSL (since every CFL is CSL) and CSL is closed under complement so Complement of L_{2} must be CSL and every CSL is recursive so Complement of L_{2} is recursive.
Since L_{1} is regular and regular language is closed under complement so complement of L_{1} must be regular and hence the statement Complement of L_{1} is contextfree but not regular is a false statement.
Question 47 
The procedure given below is required to find and replace certain characters inside an input character string supplied in array A. The characters to be replaced are supplied in array oldc, while their respective replacement characters are supplied in array newc. Array A has a fixed length of five characters, while arrays oldc and newc contain three characters each. However, the procedure is flawed
void find_and_replace(char *A, char *oldc, char *newc) { for (int i = 0; i < 5; i++) for (int j = 0; j < 3; j++) if (A[i] == oldc[j]) A[i] = newc[j]; }
The procedure is tested with the following four test cases
(1) oldc = "abc", newc = "dab" (2) oldc = "cde", newc = "bcd" (3) oldc = "bca", newc = "cda" (4) oldc = "abc", newc = "bac"
If array A is made to hold the string “abcde”, which of the above four sest cases will be successful in exposing the flaw in this procedure?
None  
2 only  
3 and 4 only  
4 only 
1, 2 works fine, 3, 4 carries flaw.
Question 48 
What will be the output of the following C program segment?
char inchar = 'A'; switch (inchar) { case 'A' : printf ("choice A n") ; case 'B' : printf ("choice B ") ; case 'C' : case 'D' : case 'E' : default: printf ("No Choice") ; }
No Choice  
Choice A  
Program gives no output as it is erroneous 
So,
→ Choice A
→ Choice B. No choice. Is the output.
Question 49 
Consider the following C program
int a, b, c = 0; void prtFun (void); int main () { static int a = 1; /* line 1 */ prtFun(); a += 1; prtFun(); printf ( "n %d %d " , a, b) ; } void prtFun (void) { static int a = 2; /* line 2 */ int b = 1; a += ++b; printf (" n %d %d " , a, b); }
What output will be generated by the given code segment?
Hence
4 2
6 2
2 0
Question 50 
Consider the following C program
int a, b, c = 0; void prtFun (void); int main () { static int a = 1; /* line 1 */ prtFun(); a += 1; prtFun(); printf ( "n %d %d " , a, b) ; } void prtFun (void) { static int a = 2; /* line 2 */ int b = 1; a += ++b; printf (" n %d %d " , a, b); }
What output will be generated by the given code segment if:
 Line 1 is replaced by auto int a = 1;
Line 2 is replaced by register int a = 2;
Line 2 replaced by register int a=2;
In main there will be no change if it is static or auto because of a+=1 the auto variable a is updated to 2 from 1.
In prtfun ( ), register makes a difference.
For first print statement a is updated to 4 & prints 4, 2.
But now it is not a static variable to retain the value of a to 4. So it becomes 2, when second function call takes place & prints 4, 2 again. There is no change in b, it acts like a local variable.
Hence,
4 2
4 2
2 0.
Question 51 
What does the following fragment of Cprogram print?
char c[] = "GATE2011"; char *p =c; printf("%s", p + p[3]  p[1]) ;
GATE2011  
E2011  
2011  
011 
p[3]  p[1] = 4, and p+4 will be pointing to the fifth position in the array 'c'. So printf starts printing from 2 and prints 2011.
Question 52 
Consider the following recursive C function that takes two arguments.
unsigned int foo(unsigned int n, unsigned int r) { if(n>0) return ((n%r) + foo(n/r,r)); else return 0; }
What is the return value of the function foo when it is called as foo(513,2)?
9  
8  
5  
2 
∴ 1+0+0+0+0+0+0+0+0+1+0 = 2
Question 53 
Consider the following recursive C function that takes two arguments
unsigned int foo(unsigned int n, unsigned int r) { if (n > 0) return (n%r + foo (n/r, r )); else return 0; }
What is the return value of the function foo when it is called as foo(345, 10) ?
345  
12  
5  
3 
∴ 5+4+3+0 = 12
Question 54 
What does the following program print?
#include void f(int *p, int *q) { p = q; *p = 2; } int i = 0, j = 1; int main() { f(&i, &j); printf("%d %d n", i, j); getchar(); return 0; }
2 2  
2 1  
0 1  
0 2 
Both pointers points to j = 1
now *p = 2
where j is updated with value 2.
printf (i, j) i = 0, j = 2
Question 55 
What is the value printed by the following C program
#includeint f(int *a, int n) { if(n <= 0) return 0; else if(*a % 2 == 0) return *a + f(a+1, n1); else return *a  f(a+1, n1); } int main() { int a[] = {12, 7, 13, 4, 11, 6}; printf("%d", f(a, 6)); getchar(); return 0; }
9  
5  
15  
19 
if (n <= 0)
return 0;
else if (*a % 2 = = 0)
return *a + f(a+1, n1);
else
return *a – f(a+1, n1);
⇒ 12+(7(13(4+(11(6)))))
⇒ 12+(7(13(4+5)))
⇒ 12+7(4)
⇒ 12+3
⇒ 15
Question 56 
Consider the program below:
#includeint fun(int n, int *f_p) { int t, f; if (n <= 1) { *f_p = 1; return 1; } t = fun(n 1,f_p); f = t+ * f_p; *f_p = t; return f; } int main() { int x = 15; printf (" %d n", fun(5, &x)); return 0; }
The value printed is:
6  
8  
14  
15 
printf(fun(5,&x));
The code is implemented using Tail Recursion.
fun(5,15)
↓
fun(4,15)
↓
fun(3,15)
↓
fun(2,15)
↓
fun(1,15)
→ First we will trace fun(1,15) which returns 1.
→ Then trace fun(2,15) using fun(1,15) value, it returns 2.
→ Then fun(3,15), it returns 3≃(1+2)
→ Then fun(4,15), it returns 5=(2+3)
→ Then fun(5,15), it returns 8=(3+5)
If you call fun(6,15) then it will return 13=(5+8)
Here fun(n,*x)≃fun(n1,&x)+fun(n2,&x), where fun(n1,&x) is storing in variable ‘t’ & fun(n2,&x) is storing in variable x(*fp).
∴ The program is nth Fibonacci number.
Question 57 
Which combination of the integer variables x, y and z makes the variable a get the value 4 in the following expression?
a = (x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z)
x = 3, y = 4, z = 2  
x = 6, y = 5, z = 3  
x = 6, y = 3, z = 5  
x = 5, y = 4, z = 5 
→ We can directly eliminate the options B & C, because none of the variable can assign a value 4.
→ Given explanation is
a = (x>y)?((x>z)?x:z):((y>z)?y:z)
Option A:
x=3; y=4; z=2
a=(3>4)? ⇒ No
Then evaluate second expression ⇒ (4>2)?Yes
⇒a=y
a=4 (True)
Option D:
x=5; y=4; z=5
a=(5>4) ⇒ Yes
Then evaluate first expression ⇒ (5>5)? No
⇒ a=z ⇒ a=5 (Not true)
⇒ Answer is Option A.
Question 58 
What is printed by the following C program?
int f(int x, int *py, int **ppz) void main() { { int y, z; int c, *b, **a; **ppz += 1; z = **ppz; c = 4; b = &c; a = &b; *py += 2; y = *py; printf("%d",f(c,b,a)); x += 3; } return x + y + z; }
18  
19  
21  
22 
f(c,&c,&(&c)) = f(4,4,4)
c is 4, b is a pointer pointing address of a, a is a pointer to pointer of c. Hence both b and c are pointing to same memory address i.e., a.
Hence whatever increment operation happens in f, it happens/ reflects on same value i.e., a.
**ppz+=1;
z=**ppz; //z=5
These steps update it to 5 and stored in z.
*py+=2; //changes c to 7, x is unchanged.
y=*py; //y=7
It updates to 7 and stored in y.
x+=3 //x is incremented by 3.
returns x+y+z = 7+7+5 = 19
Question 59 
Choose the correct option to fill ?1 and ?2 so that the program below prints an input string in reverse order. Assume that the input string is terminated by a newline character.
void reverse(void) { int c; if(?1)reverse(); ?2 } int main(){ printf("Enter Text"); printf("n"); reverse();printf("n") ; }
?1 is (getchar( ) != ’\n’) ?2 is getchar(c);  
?1 is (c = getchar( ) ) != ’\n’) ?2 is getchar(c);  
?1 is (c != ’\n’) ?2 is putchar(c);  
?1 is ((c = getchar()) != ’\n’) ?2 is putchar(c); 
{
int c;
if(?1) reverse( );
?2
}
main( )
{
printf(“Enter Text”);
printf(“\n”);
reverse( );
printf(“\n”);
}
We can simply eliminate A & B for ?2.
& Hence
?1 is ((c=getchar( )) != ‘\n’)
?2 is putchar(c);
Question 60 
Consider the following C program
int f1 (int n) { if(n == 0n == 1) return n; else return (2*f1(n1)+3*f1(n2)); } int f2 (int n) { int i; int X[N], Y[N], Z[N]; X[0]=Y[0]=Z[0]=0; X[1]=1; Y[1]=2; Z[1]=3; for(i=2; i<=n; i++) { X[i] = Y[i1] + Z[i2]; Y[i] = 2*X[i]; Z[i] = 3*X[i]; } return X[n]; }
f1(8) and f2(8) return the values
1661 and 1640  
59 and 59  
1640 and 1640  
1640 and 1661 
f1(2) = 2*f1(1) + 3*f1(0) = 2
f1(3) = 2*f1(2) + 3*f1(1) = 2*2 + 3*1 = 7
f1(4) = 2*f1(3) + 3*f1(2) = 2*7 + 3*2 = 20
f1(5) = 2*f1(4) + 3*f1(3) = 2*20 + 3*7 = 40 + 21 = 61
We can skip after this as the only remaining choice is (C).
f1(6) = 2*f1(5) + 3*f1(4) = 2*61 + 3*20 = 122 + 60 = 182
f1(7) = 2*f1(6) + 3*f1(5) = 2*182 + 3*61 = 364 + 183 = 547
f1(8) = 2*f1(7) + 3*f1(6) = 2*547 + 3*182 = 1094 + 546 = 1640
Question 61 
Consider the following C function:
#includeint f(int n) { static int r = 0; if (n <= 0) return 1; if (n > 3) { r = n; return f(n2)+2; } return f(n1)+r; } int main() { printf("%d", f(5)); }
What is the value of f(5)?
5  
7  
9  
18 
f(5) = f(3) + 2
f(3) = f(2) + 5 (where r is static and value of r=5)
f(2) = f(1) + 5
f(1) = f(0) + 5
f(0) = 1
⟹ f(5) = 1+5+5+5+2 = 18
Question 62 
Consider the following code written in a passbyreference language like FORTRAN and these statements about the code.
subroutine swap(ix,iy) it = ix L1 : ix = iy L2 : iy = it end ia = 3 ib = 8 call swap (ia, 1b+5) print *, ia, ib end
S1: The compiler will generate code to allocate a temporary nameless cell, initialize it to 13, and pass the address of the cell swap S2: On execution the code will generate a runtime error on line L1 S3: On execution the code will generate a runtime error on line L2 S4: The program will print 13 and 8 S5: The program will print 13 and 2
Exactly the following set of statement(s) is correct:
S1 and S2  
S1 and S4  
S3  
S1 and S5 
Swap (8, 13)
⇒ ia will returns value with 13.
⇒ ib is unchanged, because here we using pass by reference value.
➝ Temporary nameless is initialized to 13.
➝ There is No runtime error.
Question 63 
Consider this C code to swap two integers and these five statements after it:
void swap(int *px, int *py) { *px = *px  *py; *py = *px + *py; *px = *py  *px; }
S1: will generate a compilation error S2: may generate a segmentation fault at runtime depending on the arguments passed S3: correctly implements the swap procedure for all input pointers referring to integers stored in memory locations accessible to the process S4: implements the swap procedure correctly for some but not all valid input pointers S5: may add or subtract integers and pointers.
S1  
S2 and S3  
S2 and S4  
S2 and S5 
We may get the segmentation fault if the pointer values are constant (i.e., px or py) (or) (px or py) are points to a memory location is invalid.
S4:
Swap procedure can be implemented correctly but not for all input pointers because arithmetic overflow may occur based on input values.
Question 64 
What does the following Cstatement declare?
int ( * f) (int * ) ;
A function that takes an integer pointer as argument and returns an integer.  
A function that takes an integer as argument and returns an integer pointer.  
A pointer to a function that takes an integer pointer as argument and returns an integer.  
A function that takes an integer pointer as argument and returns a function pointer. 
→ A pointer to a function which takes integer as a pointer and return an integer value.
Question 65 
A common property of logic programming languages and functional languages is:
both are procedural languages  
both are based on λcalculus  
both are declarative  
both use Hornclauses 
Question 66 
Which one of the following are essential features of an objectoriented programming language?
 (i) Abstraction and encapsulation
(ii) Strictlytypedness
(iii) Typesafe property coupled with subtype rule
(iv) Polymorphism in the presence of inheritance
(i) and (ii) only  
(i) and (iv) only  
(i), (ii) and (iv) only  
(i), (iii) and (iv) only 
Question 67 
Consider the following Cprogram:
void foo(int n, int sum) { int k = 0, j = 0; if (n == 0) return; k = n % 10; j = n / 10; sum = sum + k; foo(j, sum); printf ("%d,", k); } int main () { int a = 2048, sum = 0; foo(a, sum); printf ("%d\n", sum); }
What does the above program print?
8, 4, 0, 2, 14
 
8, 4, 0, 2, 0  
2, 0, 4, 8, 14  
2, 0, 4, 8, 0 
⇒ foo (a, sum) = foo (2048,0)
⇒ n == 2048
⇒ k = n%10 = 2048%10 = 8
⇒ j = n/10 = 2048/10 = 204
Sum = Sum+k = 0+8 = 8
foo(j, sum) = foo(204, 8)
⇒ n=204
k = n%10 = 204%10 = 4
j = n/10 = 204/10 = 20
sum = sum+k = 12+0 = 12
foo(j, sum) =foo(2,12)
⇒ n=2
k = n%10 = 2%10 = 2
j = n/10 = 2/10 = 0
sum = 14
foo(0,14) ⇒ n==0
printf("%d", k) ⇒ k = 2, 0, 4, 8
After foo( ) statement one more printf statement is there then if print 0 after all digits of n.
2, 0, 4, 8, 0.
Question 68 
Consider the following Cprogram:
double foo (double); /* Line 1 */ int main() { double da, db; // input da db = foo(da); } double foo(double a) { return a; }
The above code compiled without any error or warning. If Line 1 is deleted, the above code will show:
no compile warning or error  
some compilerwarnings not leading to unintended results  
some compilerwarnings due to typemismatch eventually leading to unintended results  
compiler errors 
Question 69 
Consider the following C function.
void swap (int a, int b) { int temp; temp = a; a = b; b = temp; }
In order to exchange the values of two variables x and y.
call swap (x, y)
 
call swap (&x, &y)
 
swap (x,y) cannot be used as it does not return any value
 
swap (x,y) cannot be used as the parameters are passed by value

Here parameters passed by value in C then there is no change in the values.
Option B:
Here values are not swap.
Here parameters are passed by address in C.
Option C:
It is false. Return value is not valid for exchanging the variables.
Option D:
It is correct.
We cannot use swap(x,y) because parameters are passed by value.
Only exchanging the values (or) variables are passing their address and then modify the content with the help of dereferencing operator(*).
Question 70 
Consider the following C function:
int f(int n) { static int i = 1; if (n >= 5) return n; n = n+i; i++; return f(n); }
The value returned by f(1) is
5  
6  
7
 
8 
The value return by f(1) = 7
Question 71 
Consider the following program fragment for reversing the digits in a given integer to obtain a new integer. Let n = d_{1}d_{2}…d_{m}.
int n, rev; rev = 0; while (n > 0) { rev = rev*10 + n%10; n = n/10; }
The loop invariant condition at the end of the ith iteration is:
n = d_{1}d_{2}…d_{mi} and rev = d_{m}d_{m1}…d_{mi+1}
 
n = d_{mi+1}…d_{m1}d_{m} or rev = d_{mi}…d_{2}d_{1}
 
n ≠ rev  
n = d_{1}d_{2}…d_{m} and rev = d_{m}…d_{2}d_{1} 
Question 72 
Consider the following C program segment:
char p[20]; char *s = "string"; int length = strlen(s); int i; for (i = 0; i < length; i++) p[i] = s[length — i]; printf("%s",p);
The output of the program is
gnirts  
string
 
gnirt  
no output is printed 
P[0] = S[71] = S[6] = \0.
In P[ ], the first character is '\0'. Then it will results a empty string. If P[0] become '\0', then it doesn't consider about next values in sequence.
Question 73 
It is desired to design an objectoriented employee record system for a company. Each employee has a name, unique id and salary. Employees belong to different categories and their salary is determined by their category. The functions to get Name, getld and compute salary are required. Given the class hierarchy below, possible locations for these functions are:
 (i) getld is implemented in the superclass
(ii) getld is implemented in the subclass
(iii) getName is an abstract function in the superclass
(iv) getName is implemented in the superclass
(v) getName is implemented in the subclass
(vi) getSalary is an abstract function in the superclass
(vii) getSalary is implemented in the superclass
(viii) getSalary is implemented in the subclass
Choose the best design
(i), (iv), (vi), (viii)  
(i), (iv), (vii)  
(i), (iii), (v), (vi), (viii)  
(ii), (v), (viii) 
Question 74 
Consider the following C program
main() { int x, y, m, n; scanf ("%d %d", &x, &y); /* Assume x > 0 and y > 0 */ m = x; n = y; while (m! = n) { if (m > n) m = m  n; else n = n  m; } print f ("% d", n); }
The program computes
x + y using repeated subtraction  
x mod y using repeated subtraction  
the greatest common divisor of x and y  
the least common multiple of x and y 
Question 75 
Choose the best matching between the programming styles in Group 1 and their characteristics in Group 2.
Group1 Group2 P. Functional 1. Commandbased, procedural Q. Logic 2. Imperative, abstract data type R. Objectoriented 3. Sideeffect free, declarative, expression evaluation S. Imperative 4. Declarative, clausal representation, theorem proving
P  2, Q  3, R  4, S  1  
P  4, Q  3, R  2, S  1  
P  3, Q  4, R  1, S  2  
P  3, Q  4, R  2, S  1 
Q) Logic is also declarative but involves theorem proving.
R) Object oriented is imperative statement based and have abstract data types.
S) Imperative programs are made giving commands and follow definite procedure.
Question 76 
Consider the following logic program P
A(x) < B(x, y), C(y) < B(x,x)
Which of the following first order sentences is equivalent to P?
(∀x) [(∃y) [B(x,y) ∧ C(y)] ⇒ A(x)] ∧ ¬(∃x)[B(x,x)]  
(∀x) [(∀y) [B(x,y) ∧ C(y)] ⇒ A(x)] ∧ ¬(∃x)[B(x,x)]  
(∀x) [(∃y) [B(x,y) ∧ C(y)] ⇒ A(x)] ∨ ¬(∃x)[B(x,x)]  
(∀x) [(∀y) [B(x,y) ∧ C(y)] ⇒ A(x)] ∧ (∃x)[B(x,x)] 
Question 77 
The following program fragment is written in a programming language that allows variables and does not allow nested declarations of functions.
global int i = 100, j = 5; void P(x) { int i = 10; print(x + 10); i = 200; j = 20; print(x); } main() { P(i + j); }
If the programming language uses static scoping and call by need parameter passing mechanism, the values printed by the above program are
115, 220  
25, 220  
25, 15  
115, 105 
P(100+5) = P(105)
→void P(105)
{
int i=10;
print (x+10); ⇒ 105+10=115 prints
i=200;
j = 20;
print (x); ⇒ x=105 prints
}
115, 105 prints
Question 78 
The following program fragment is written in a programming language that allows variables and does not allow nested declarations of functions.
global int i = 100, j = 5; void P(x) { int i = 10; print(x + 10); i = 200; j = 20; print(x); } main() { P(i + j); }
If the programming language uses dynamic scoping and call by name parameter passing mechanism, the values printed by the above program are:
115, 220  
25, 220  
25, 15  
115, 105 
In void P(x)
{ int i = 10;
print(x + 10); ⇒ 105+10 = 115 prints
print (x); ⇒ print x=220;
Question 79 
Consider the following class definitions in a hypothetical Object Oriented language that supports inheritance and uses dynamic binding. The language should not be assumed to be either Java or C++, though the syntax is similar.
Class P { void f(int i) { print(i); } } Class Q subclass of P { void f(int i) { print(2*i); } }
Now consider the following program fragment:
Px = new Q(); Qy = new Q(); Pz = new Q(); x.f(1); ((P)y).f(1); z.f(1);
Here ((P)y) denotes a typecast of y to P. The output produced by executing the above program fragment will be
1 2 1  
2 1 1  
2 1 2  
2 2 2 
Note: The given question is not in the present syllabus
Question 80 
In the following C program fragment, j, k n and TwoLog_n are interger variables, and A is an array of integers. The variable n is initialized to an integer ≥3, and TwoLog_n is initialized to the value of 2*⌈log_{2}(n)⌉
for (k = 3; k < = n; k++) A[k] = 0; for (k = 2; k < = TwoLog_n; k++) for (j = k + 1; j < = n; j++) A[j] = A[j]  (j%k); for (j = 3; j < = n; j++) if (!A[j]) printf("%d", j);
The set of numbers printed by this program fragment is
{mm ≤ n, (∃i)[m=i!]}  
{mm ≤ n, (∃i)[m=i^{2}]}  
{mm ≤ n, m is prime}
 
{ } 
Now Trace the code,
for (k=3; k<=n; k++)
A[k]=0; // A[3]=0
A[4]=0
for (k=2; k<=Two log_n; k++)
for(j=k+1; j<=n; j++)
A[j] = A[j] // (j%k); // A[3] = 0 // I=1
A[4] = 0 // I=1
for (j=3; j<=n; j++)
if (!A[j]) printf("%d", j);
// if (!1) means if (0), so printf will never execute
Hence, Option (D) is the answer.
Question 81 
Consider the C program shown below.
#include#define print(x) printf("%d", x) int x; void Q(int z) { z += x; print(z); } void P(int *y) { int x = *y + 2; Q(x); *y = x  1; print(x); } main(void) { x = 5; P(&x); print(x); }
The output of this program is
12 7 6
 
22 12 11  
14 6 6  
7 6 6 
p(&x) it goes to P( ) function
y=5
x=5+2=7;
Q(x)
z=7
z=7+5=12(Print+z→I)
comes to P( )
*y=71=6
x=7(Print x→II)
comes to main ( ),
print x=*y=6 (print x→III)
Output: 12 7 6
Question 82 
In the C language
At most one activation record exists between the current activation record and the activation record for the main  
The number of activation records between the current activation record and the activation record for the main depends on the actual function calling sequence.  
The visibility of global variables depends on the actual function calling sequence.  
Recursion requires the activation record for the recursive function to be saved on a different stack before the recursive fraction can be called. 
Question 83 
What is printed by the print statements in the program P1 assuming call by reference parameter passing?
Program P1() { x = 10; y = 3; func1(y,x,x); print x; print y; } func1(x,y,z) { y = y+4; z = x+y+z; }
10, 3  
31, 3  
27, 7  
None of the above 
And variable y and z of func1 points to address of variable x.
Therefore, y = y+4 ⇒ y = 10+4 = 14
and z = x+y+z ⇒ z = 14+14+3 = 31
z will be stored back in k.
Hence, x=31 and y will remain as it is (y=3).
Hence, answer is (B).
Question 84 
Consider the following program
Program P2 var n: int: procedure W(var x: int) begin x=x+1; print x; end procedure D begin var n: int; n=3; W(n); End begin //beginP2 n=10; D; end
If the language has dynamic scoping and parameters are passed by reference, what will be printed by the program?
10  
11  
3  
None of the above 
W(n)=W(3)
Procedure W(var x; int)
begin
x = x+1 = 3+1 = 4
Print x → Print x=4
end
Question 85 
Consider the following C program:
void abc(char*s) { if(s[0]==’\0’)return; abc(s+1); abc(s+1); printf(“%c”,s[0]); } main() { abc(“123”) }
(a) What will be the output of the program?
(b) If abc(s) is called with a nullterminated string s of length n characters (not
counting the null (‘\0’) character), how many characters will be printed by abc(s)?
Theory Explanation is given below. 
Question 86 
The following C declarations
struct node { int i; float j; }; struct node *s[10];
define s to be
An array, each element of which is a pointer to a structure of type node  
A structure of 2 fields, each field being a pointer to an array of 10 elements  
A structure of 3 fields: an integer, a float, and an array of 10 elements  
An array, each element of which is a structure of type node 
Question 87 
The most appropriate matching for the following pairs
X: m=malloc(5); m= NULL; 1: using dangling pointers Y: free(n); n>value=5; 2: using uninitialized pointers Z: char *p; *p = ’a’; 3. lost memory
is:
X – 1 Y – 3 Z – 2  
X – 2 Y – 1 Z – 3  
X – 3 Y – 2 Z – 1  
X – 3 Y – 1 Z – 2 
Y → n is pointer to invalid memory, a making it as a dangling pointer.
Z → p is not initialized.
p = malloc (size of(char))p = malloc (size of(char)); should have been used before assigning 'aa' to ∗p.
Question 88 
Aliasing in the context of programming languages refers to
multiple variables having the same memory location  
multiple variables having the same value  
multiple variables having the same identifier  
multiple uses of the same variable 
Question 89 
Consider the following C declaration
struct { short s [5] union { float y; long z; } u; } t;
Assume that objects of the type short, float and long occupy 2 bytes, 4 bytes and 8 bytes, respectively. The memory requirement for variable t, ignoring alignment considerations, is
22 bytes  
14 bytes  
18 bytes  
10 bytes 
max[float, long] = max [4, 8] = 8
Total = short[5] + max[float,long] = 10 + 8 = 18
Question 90 
The value of j at the end of the execution of the following C program.
int incr(int i) { static int count = 0; count = count + i; return (count); } main() { int i,j; for (i = 0; i <= 4; i++) j = incr(i); }
is
10  
4  
6  
7 
i=1; count=1
i=2; count=3
i=3; count=6
i=4; count=10
It return count value is 10.
Question 91 
Consider the following program is pseudoPascal syntax.
program main; var x: integer; procedure Q [z:integer); begin z: z + x; writeln(z) end; procedure P (y:integer); var x: integer; begin x: y + 2; Q(x); writeln(x) end; begin x:=5; P(x); Q(x); writeln(x) end.
What is the output of the program, when
(a) The parameter passing mechanism is callbyvalue and the scope rule is static scooping?
(b) The parameter passing mechanism is callbyreference and the scope rule is dynamic scooping?
Theory Explanation is given below. 
Question 92 
Given the programming constructs (i) assignment (ii) for loops where the loop parameter cannot be changed within the loop (iii) ifthenelse (iv) forward go to (v) arbitrary go to (vi) nonrecursive procedure call (vii) recursive procedure/function call (viii) repeat loop, which constructs will you not include in a programming language such that it should be possible to program the terminates (i.e., halting) function in the same programming language.
(ii), (iii), (iv)  
(v), (vii), (viii)  
(vi), (vii), (viii)  
(iii), (vii), (viii) 
Question 93 
Consider the following C function definition.
int Trial (int a, int b, int c) { if ((a >= b) && (c < b) return b; else if (a >= b) return Trial(a, c, b); else return Trial(b, a, c); }
The function Trial:
Finds the maximum of a, b, and c  
Finds the minimum of a, b and c  
Finds the middle number of a, b, c  
None of the above 
Question 94 
Suppose we have a function HALTS which when applied to any arbitrary function f and its arguments will say TRUE if function f terminates for those arguments and FALSE otherwise. Example, Given the following function definition.
FACTORIAL (N) = IF(N=0) THEN 1 ELSE N*FACTORIAL (N1)
Then HALTS(FACTORIAL 4) = TRUE and HATS(FACTORIAL  5) = FALSE
Let us define the function FUNNY(f) = IF HALTS(ff) THEN not(ff) ELSE TRUE
(a) Show that FUNNY terminates for all functions f.
(b) Use (a) to prove (by contradiction) that it is not possible to have a function like HALTS which for arbitrary functions and inputs says whether it will terminate on that input or not.
Theory Explanation. 
Question 95 
What will be the output of the following program assuming that parameter passing is
 (i) call by value
(ii) call by reference
(iii) call by copy restore
procedure P{x, y, z}; begin y:y+1; z: x+x end; begin a:= b:= 3; P(a+b, a, a); Print(a) end.
Theory Explanation. 
Question 96 
Consider the following pascal program skeleton:
program sort(...);var a,x,...; procedure readarray; var i,....; begin ...:=a... end; procedure exchange(...); begin ...:=a... ...:=x... end; procedure qsort(...); var k,v,...; function partition (...)...; var i,j,...; begin ...:=a... ...:=v... end; begin . . end; begin . . end;
Assume that at a given point in time during program execution, following procedures are active: sort, qsort(1,9), qsort(1.3), partition(1,3), exchange(1,3).
Show snapshots of the runtime stack with access links after each of the activations.
Theory Explanation. 
Question 97 
What value would the following function return for the input x=95?
Function fun (x:integer):integer; Begin If x > 100 then fun = x  10 Else fun = fun(fun(x + 11)) End;
89  
90  
91  
92 
fun(95) = fun(fun(106))
= fun(96)
= fun(fun(107))
= fun(97)
= fun(fun(108))
= fun(98)
= fun(fun(109))
= fun(99)
= fun(110)
= fun(100)
= fun(fun(111))
= fun(101)
= 91
Question 98 
What is the result of the following program?
program sideeffect (input, output); var x, result: integer; function f (var x:integer):integer; begin x:x+1;f:=x; end; begin x:=5; result:=f(x)*f(x); writeln(result); end;
5  
25  
36  
42 
If it is call by value then answer is 36.
Question 99 
Given the following Pascallike program segment
Procedure A; x,y: integer; Procedure B; x,z: real S1 end B; Procedure C; i: integer; S2 end C; end A;
The variables accessible in S1 and S2 are
x or A, y, x of B and z in S1 and x of B, y and i in S2  
x or B, y and z in S1 and x of B, i and z in S2  
x or B, z and y in S1 and x of A, i and y in S2  
None of the above 
Question 100 
In the following Pascal program segment, what is the value of X after the execution of the program segment?
X:=10; Y:=20;
If X > Y then if X < 0 then X:=abs(X) else X:=2*X;
10  
20  
10  
None 
X = 10
Question 101 
Which of the following strings can definitely be said to be tokens without looking at the next input character while compiling a Pascal program?
I. begin II. program III. <>
I  
II  
III  
All of the above 
Question 102 
Assume that X and Y are nonzero positive integers. What does the following Pascal program segment do?
while X <>Y do if X > Y then X := X – Y else Y := Y – X; write(X);
Computes the LCM of two numbers  
Divides the larger number by the smaller number  
Computes the GCD of two numbers  
None of the above 
1^{st} pass : X=3 and Y=2
2^{nd} pass : X=1 and Y=2
3^{rd} pass : X=1 and Y=1
Write(X), which writes 1. Which is nothing but GCD of 3 & 5.
Question 103 
What is the value of X printed by the following program?
program COMPUTE (input, output); var X:integer; procedure FIND (X:real); begin X:=sqrt(X); end; begin X:=2 Find(X) Writeln(X) end
2  
√2  
Run time error  
None of the above 
X in the procedure FIND is a local variable. No change will be reflected in global variable X.
Question 104 
A variant record in Pascal is defined by
type varirec = record number : integer; case (var1,var2) of var1: (x,y : integer); var2: (p.q.: real) end end
Suppose an array of 100 records was declared on a machine which uses 4 bytes for an integer and 8 bytes for a real. How much space would the compiler have to reserve for the array?
2800  
2400  
2000  
1200 
Question 105 
Consider the following high level program segment. Give the contents of the memory locations for variables W, X, Y and Z after the execution of the program segment. The values of the variables A and B are 5 CH and 92H, respectively. Also indicate error conditions if any.
var A, B, W, X, Y :unsigned byte; Z :unsigned integer, (each integer is represented by two bytes) begin X :=A+B Y :=abs(bAb); W :=AB Z :=A*B End;
Theory Explanation. 
Question 106 
(a) Consider the following Pascal function where A and B are nonzero positive integers. What is the value of GET(3,2)?
function GET(A,B:integer);integer; begin if B = 0 then GET:=1 else if A < B then GET:=0 else GET:=GET(A1,B)+GET(A1,B1) end ;
(b) The Pascal procedure given for computing the transpose of an N × N (N>1) matrix A of integers has an error. Find the error and correct it.
Assume that the following declaration are made in the main program
const MAXSIZE=20; type INTARR=array [1.,MAXSIZE,1..MAXSIZE] of integer; Procedure TRANSPOSE (var A: INTARR; N : integer); var I, J, TMP, integer; begin for I:=1 to NO – 1 do for J:=1 to N do begin TMP: = A[I,J]; A[I,J]:=A[J,I]; A(J,I):=TMP end end;
Theory Explanation. 
Question 107 
(a) Using the scope rules of Pascal determine the declaration that apply to each occurrence of the names A and B in the following program segment.
procedure T(U, V, X, Y: integer); var A: record A, B : integer end; B: record B, A : integer end; begin with A do begin A:=4; B:=V end; with B do begin A:=X; B:=Y end end;
(b) Find the lexical errors in the following Pascal statement:
if A > 1, then B = 2.5A else read (C);
Theory Explanation. 
Question 108 
The following is an incomplete Pascal function to convert a given decimal integer (in the range 8 to +7) into a binary integer in 2’s complement representation. Determine the expression A, B, C that complete program.
function TWOSCOMP (N:integer):integer; var RAM, EXPONENT:integer; BINARY :integer; begin if(N>=8) and (N<=+7) then begin if N<0 then N : = A; BINARY:=0; EXPONENT:=1; while N<>0 do begin REM:=N mod 2; BINARY:=BINARY + B*EXPONENT; EXPONENT:=EXPONENT*10; N := C end TWOSCOMP:=BINARY end end;
Theory Explanation. 
Question 109 
What function of x, n is computed by this program?
Function what (x, n:integer): integer: Var value : integer; begin value:=1 if n>0 then begin if n mod 2 = 1 then value:=value*x; value:=value*what(x*x, n div 2); end; what:value end;
Theory Explanation. 
Question 110 
Consider the program below:
Program main; var r:integer; procedure two; begin write (r) end; procedure one; var r:integer; begin r:=5 two; end begin r:=2; two; one; two; end.
What is printed by the above program if
(i) Static scoping is assumed for all variables;
(ii) Dynamic scoping is assumed for all variables.
Give reasons for your answer.
Theory Explanation. 
Question 111 
An array a contains n integers in nondecreasing order, A[1] ≤ A[2] ≤ ... ≤ A[n]. Describe, using Pascal like pseudo code, a linear time algorithm to find i, j, such that A[i] + A[j] = a given integer M, if such i, j exist.
Theory Explanation. 
Question 112 
(a) Draw a precedence graph for the following sequential code. The statements are numbered from S_{1} to S_{6}
S_{1} read n S_{2} i:=1 S_{3} if i>n goto next S_{4} a(i):=i+1 S_{5} i:=i+1 S_{6} next : Write a(i)
(b) Can this graph be converted to a concurrent program using parbeginparend construct only?
Theory Explanation. 
Question 113 
Consider the following C functions.
int fun1 (int n) { int fun2 (int n) { static int i = 0; static int i = 0; if (n > 0) { if (n > 0) { ++i; i = i + fun1 (n); fun1 (n1); fun2 (n1); } } return (i); return (i); } }
The return value of fun2 (5) is _______.
55 
int fun1(int n) {
printf("fun1 call\n");
static int i = 0;
if(n>0){
++i;
printf("fun1(%d1)\n",n);
fun1(n1);
}
printf("fun1(%d)= %d\n",n, i);
return(i);
}
int fun2(int n) {
printf("\n******* fun2 call ********\n");
static int i = 0;
if(n>0){
printf("%d + fun1(%d)\n", i,n);
i=i+fun1(n);
fun2(n1);
}
printf("fun2(%d)= %d\n",n, i);
return(i);
}
void main()
{
printf("final = %d\n", fun2(5));
}
Check step by step hand run of the code to understand the recursion:
******* fun2 call ********
0 + fun1(5)
fun1 call
fun1(51)
fun1 call
fun1(41)
fun1 call
fun1(31)
fun1 call
fun1(21)
fun1 call
fun1(11)
fun1 call
fun1(0)= 5
fun1(1)= 5
fun1(2)= 5
fun1(3)= 5
fun1(4)= 5
fun1(5)= 5
******* fun2 call ********
5 + fun1(4)
fun1 call
fun1(41)
fun1 call
fun1(31)
fun1 call
fun1(21)
fun1 call
fun1(11)
fun1 call
fun1(0)= 9
fun1(1)= 9
fun1(2)= 9
fun1(3)= 9
fun1(4)= 9
******* fun2 call ********
14 + fun1(3)
fun1 call
fun1(31)
fun1 call
fun1(21)
fun1 call
fun1(11)
fun1 call
fun1(0)= 12
fun1(1)= 12
fun1(2)= 12
fun1(3)= 12
******* fun2 call ********
26 + fun1(2)
fun1 call
fun1(21)
fun1 call
fun1(11)
fun1 call
fun1(0)= 14
fun1(1)= 14
fun1(2)= 14
******* fun2 call ********
40 + fun1(1)
fun1 call
fun1(11)
fun1 call
fun1(0)= 15
fun1(1)= 15
******* fun2 call ********
fun2(0)= 55
fun2(1)= 55
fun2(2)= 55
fun2(3)= 55
fun2(4)= 55
fun2(5)= 55
final = 55
Question 114 
int tob (int b, int* arr) {
int i;
for (i=0; b>0; i++) {
if (b%2) arr [i] = 1;
else arr [i] = 0;
b = b/2;
}
return (i);
}
int pp (int a, int b) {
int arr [20];
int i, tot = 1, ex, len;
ex = a;
len = tob (b,arr);
for (i=0; i
tot = tot * ex;
ex = ex * ex;
}
return (tot);
}
The value returned by pp(3,4) is ________.
81 
a=3,b=4
tot=1
ex=a=3
len=tob(b,arr) which is 3
[
tob(4,arr)==>
b=4
b%2 =4%2=0 Condition is false then arr[0]=0
=> b=b/2 =4/2 =2
b=2
b%2 =2%2=0 condition is false then arr[1]=0
=>b=b/2=2/2=1
b=1
then b%2=1%2 condition is true then arr[2]=1
=>b=b/2=1/2=0
The i value is 3 [length is 3]
]
i=0,
arr[0] ==1 condition is false
ex=3*3=9
i=1
arr[1]==1 condition is false
then
ex=9*9=81
i=2
then arr[2]==1 condition is true
tot=tot*ex=1*81=81
ex=81*81
Finally it returns tot value which 81.
Question 115 
Program PARAM (input, output); var m, n : integer; procedure P (var, x, y : integer); var m : integer; begin m : = 1; x : = y + 1 end; procedure Q (x:integer; vary : integer); begin x:=y+1; end; begin m:=0; P(m,m); write (m); n:=0; Q(n*1,n); write (n) end
The value of m, output by the program PARAM is:
1, because m is a local variable in P  
0, because m is the actual parameter that corresponds to the formal parameter in p
 
0, because both x and y are just reference to m, and y has the value 0  
1, because both x and y are just references to m which gets modified in procedure P  
none of the above 
Question 116 
Program PARAM (input, output); var m, n : integer; procedure P (var, x, y : integer); var m : integer; begin m : = 1; x : = y + 1 end; procedure Q (x:integer; vary : integer); begin x:=y+1; end; begin m:=0; P(m,m); write (m); n:=0; Q(n*1,n); write (n) end
The value of n, output by the program PARAM is:
0, because n is the actual parameter corresponding to x in procedure Q.  
0, because n is the actual parameter to y in procedure Q.  
1, because n is the actual parameter corresponding to x in procedure Q.  
1, because n is the actual parameter corresponding to y in procedure Q.  
none of the above 
Question 117 
Program PARAM (input, output); var m, n : integer; procedure P (var, x, y : integer); var m : integer; begin m : = 1; x : = y + 1 end; procedure Q (x:integer; vary : integer); begin x:=y+1; end; begin m:=0; P(m,m); write (m); n:=0; Q(n*1,n); write (n) end
What is the scope of m declared in the main program?
PARAM, P, Q  
PARAM, P  
PARAM, Q  
P, Q  
none of the above 
Question 118 
What does the following code do?
var a, b : integer; begin a:=a+b; b:=ab; a:=ab end;
exchanges a and b  
doubles a and stores in b  
doubles b and stores in a  
leaves a and b unchanged  
none of the above 
Let us consider a=5; b=2
a := a+b = 5+2 = 7
b := ab = 72 = 5
a := ab = 75 = 2
O/P: a=2; b=5
Question 119 
The following Pascal program segments finds the largest number in a twodimensional integer array A[0...n1,0...n1] using a single loop. Fill up the boxes to complete the program and write against in your answer book. Assume that max is a variable to store the largest value and i,j are the indices to the array.
begin max:= , i:=0,j:=0; while do begin if A[i,j]>max then max:=A[i,j] if then j:=j+1 else begin j:=0; i:= end end end.
Theory Explanation. 
Question 120 
(a) What type of parameter passing mechanism (callbyvalue, callbyreference, callbyname, orbyvalue result) is the following sequence of actions truing to implement for a procedure call P(A[i]) where P(i:integer) is a procedure and A is an integer array?
1. Create a new local variable, say z. 2. Assign to z the value of A[i]. 3. Execute the body of P using z for A[i] 4. Set A[i] to z.
Is the implementation correct? Explain and correct it if necessary. You are supposed to make only small changes.
(b) Show the activation records and the display structure just after the procedures called at lines marked x and y have started their execution. Be sure to indicate which of the two procedures named A you are referring to.
Program Test; Procedure A; Procedure B; Procedure A; …… end a; begin y:A; end B; begin B; end A; begin x:A; end Test.
Theory Explanation. 
Question 121 
Consider the following PASCAL program segment:
if i mode 2 = 0 then while i > = 0 do begin i:=i div 2; if i mod 2 < > 0 do then i:=i – 1 else i:=i – 2 end
An appropriate loopinvariant for the whileloop is ______
PASCAL is out of syllabus. 
Question 122 
Consider the following recursive definition of fib:
fib (n) : = if n = 0 then 1 else if n = 1 than 1 else fib (n – 1) + fib (n – 2)
The number of times fib is called (including the first call) for an evaluation of fib (7) is ___________
41 
T(n) = T(n1) + T(n2) + 2
T(0) = T(1) = 0 (for fib(0) and fib(1), there are no extra recursive calls)
T(2) = 2
T(3) = 4
T(4) = 8
T(5) = 14
T(6) = 24
T(7) = 40
Counting the initial call, we get
40+1 = 41
Question 123 
Choose the correct alternatives (more than one may be correct) and write the corresponding letters only: Consider the following Pascal function:
function X (M:integer) : integer; var i:integer; begin i = 0; while i*i < M do i; =i+1 X;=i endThe function call X(N), if N is positive, will return
(√N)  
(√N)+1  
[√N]  
[√N]+1  
None of the above 
Question 124 
Give short answers to the following questions:
(i) Convert the following Pascal statement to a single assignment statement:
if x > 5 they y:=true else y:=false;(ii) Convert the Pascal statement repeat S until B; into an equivalent Pascal statement that uses the while construct.
(iii) Obtain the optimal binary search tree with equal probabilities for the identifier set (a_{1}, a_{2}, a_{3}) = (if, stop, while)
(iv) If a finite axiom system A for a theory is complete and consistent, then is every subsystem of A complete and consistent? Explain briefly.
Theory Explanation. 
Question 125 
(a) Consider the following pseudocode
(all data items are of type integer):
Procedure P (a, b, c); a:=2; c:=a+b; end {P} begin x:=1 y:=5; z:=100; P(x,x*y,z); Write (‘x=’,x,z=’,z) end:Determine its output, if the parameters are passed to the procedure P by (i) value, (ii) reference and (iii) name.
(b) For the following pseudocode, indicate the output, if
(i) static scope rules and (ii) dynamic scope rules are used
Var, a, b : integer; Procedure P; a:=5; b:=10 end {P}; procedure Q; var a, b : integer; P; end {Q}; begin a:=1; b:=2; Q; Write (‘a =’, a, ‘b=’,b) end.
Theory Explanation. 
Question 126 
Match the pairs in the following questions:
(a) Small talk (p) Logic programming (b) LISP (q) Data flow programming (c) Prolog (r) Functional programming (d) VAL (s) Objectoriented programming
(a)  (s), (b)  (r), (c)  (p), (d)  (q) 
Question 127 
In which of the following case(s) is it possible to obtain different results for callbyreference and callbyname parameter passing?
Passing an expression as a parameter  
Passing an array as a parameter  
Passing a pointer as a parameter  
Passing as array element as a parameter  
Both A and D 
Passing array element as a parameter.
Consider an example:
{
.......
a[ ] = {1, 2, 3, 4, 5}
fun (a[i]);
print a[0];
}
fun (int x)
{
int i=1;
}
O/P:
Callbyreference: 6
Callbyname: 1
Result is different.
Option A:
While we passing an expression as a parameter due to precedence (higher (or) lower), the output may changes.
If we pass 1+2 to the below function
int foo (int x)
{
return x*x;
}
O/P:
Call by reference = 3*3 = 9
Call by name = 1+2*1+2 (* has higher precedence e)
= 1+2+2
= 5
Output differs.
Answer: A, D
Question 128 
An unrestricted use of the "go to" statement is harmful because of which of the following reason(s):
It makes it more difficult to verify programs.  
It makes programs more inefficient.  
It makes it more difficult to modify existing programs.  
It results in the compiler generating longer machine code. 
Question 129 
Study the following program written in a blockstructured language:
Var x, y:interger; procedure P(n:interger); begin x:=(n+2)/(n3); end; procedure Q Var x, y:interger; begin x:=3; y:=4; P(y); Write(x) __(1) end; begin x:=7; y:=8; Q; Write(x); __(2) end.
What will be printed by the write statements marked (1) and (2) in the program if the variables are statically scoped?
3, 6  
6, 7  
3, 7  
None of the above. 
Question 130 
For the program given below what will be printed by the write statements marked (1) and (2) in the program if the variables are dynamically scoped?
Var x, y:interger; procedure P(n:interger); begin x := (n+2)/(n3); end; procedure Q Var x, y:interger; begin x:=3; y:=4; P(y); Write(x); __(1) end; begin x:=7; y:=8; Q; Write(x); __(2) end.
3, 6  
6, 7  
3, 7  
None of the above 
Question 131 
Match the programming paradigms and languages given in the following table.
Ic, IId, IIIb, IVa  
Ia, IId, IIIc, IVb  
Id, IIc, IIIb, IVa  
Ic, IId, IIIa, IVb 
Question 132 
What is the output printed by the following C code?
# include int main () { char a [6] = "world"; int i, j; for (i = 0, j = 5; i < j; a [i++] = a [j]); printf ("%s\n", a); }
dlrow  
Null String  
dlrld  
worow 
Question 133 
Consider the C program below. What does it print?
# include # define swapl (a, b) tmp = a; a = b; b = tmp void swap2 ( int a, int b) { int tmp; tmp = a; a = b; b = tmp; } void swap3 (int*a, int*b) { int tmp; tmp = *a; *a = *b; *b = tmp; } int main () { int num1 = 5, num2 = 4, tmp; if (num1 < num2) {swap1 (num1, num2);} if (num1 < num2) {swap2 (num1 + 1, num2);} if (num1 >= num2) {swap3 (&num1, &num2);} printf ("%d, %d", num1, num2); }
5, 5  
5, 4  
4, 5  
4, 4 
{Swap3 (&num1, &num2) ; }"
Statement is true, so call by reference will be performed and the value of num1 and num2 will get exchanged.
Question 134 
Consider the C program given below. What does it print?
#include int main () { int i, j; int a [8] = {1, 2, 3, 4, 5, 6, 7, 8}; for(i = 0; i < 3; i++) { a[i] = a[i] + 1; i++; } i; for (j = 7; j > 4; j) { int i = j/2; a[i] = a[i]  1; } printf ("%d, %d", i, a[i]); }
2, 3  
2, 4  
3, 2  
3, 3 
First for loop will run for i = 0, 2 and 4 as i is incremented twice and resultant array will be 'a' = 2, 2, 4, 4, 5, 6, 7, 8. Loop will terminate at i = 4.
After that value of 'i' will become '3' as there is a decremented operation after for loop.
Next for loop is running for j = 7, 6, 5 and corresponding 'i' values which is a local variable inside for loop will be
3(7/2), 3(6/2), 2(5/2)
Array after this for loop will be
a = 2, 2, 3, 2, 5, 6, 2, 8.
After the loop, current 'i' value is 3 and elements at a[3] = 2.
Question 135 
C program is given below:
# include int main () { int i, j; char a [2] [3] = {{'a', 'b', 'c'}, {'d', 'e', 'f'}}; char b [3] [2]; char *p = *b; for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) { *(p + 2*j + i) = a [i] [j]; } } }What should be the contents of the array b at the end of the program?
ab cd ef  
ad be cf  
ac eb df  
ae dc bf 
*(p+2) = a[0][1] = b
*(p+4) = a[0][2] = c
*(p+1) = a[1][0] = d
*(p+3) = a[1][1] = e
*(p+5) = a[1][2] = f
Question 136 
Consider the code fragment written in C below :
void f (int n) { if (n <=1) { printf ("%d", n); } else { f (n/2); printf ("%d", n%2); } }
What does f(173) print?
010110101  
010101101  
10110101  
10101101 
So, after traversing the tree we get:
10101101
Question 137 
Consider the code fragment written in C below :
void f (int n) { if (n <= 1) { printf ("%d", n); } else { f (n/2); printf ("%d", n%2); } }
Which of the following implementations will produce the same output for f(173) as the above code?
P1 void f (int n) { if (n/2) { f(n/2); } printf ("%d", n%2); } P2 void f (int n) { if (n <=1) { printf ("%d", n); } else { printf ("%d", n%2); f (n/2); } }
Both P1 and P2  
P2 only  
P1 only  
Neither P1 nor P2 
But P2 prints the reverse of original sequence printed by original program.
Question 138 
The function f is defined as follows:
int f (int n) { if (n <= 1) return 1; else if (n % 2 == 0) return f(n/2); else return f(3n  1); }Assuming that arbitrarily large integers can be passed as a parameter to the function, consider the following statements.
(i) The function f terminates for finitely many different values of n ≥ 1.
(ii) The function f terminates for infinitely many different values of n ≥ 1.
(iii) The function f does not terminate for finitely many different values of n ≥ 1.
(iv) The function f does not terminate for infinitely many different values of n ≥ 1.
Which one of the following options is true of the above?
(i) and (iii)  
(i) and (iv)  
(ii) and (iii)  
(ii) and (iv) 
→ Let n=3, then it is terminated in 2^{nd} iteration.
→ Let n=5, then sequence is 5→14→7→20→10 and it will repeat.
→ Any number with factor 5 and 2 leads to infinite recursion.
So, (iv) is True and (iii) is False.
Question 139 
Consider the C program given below:
#includeint main () { int sum = 0, maxsum = 0, i, n = 6; int a [] = {2, 2, 1, 3, 4, 2}; for (i = 0; i < n; i++) { if (i == 0  a [i] < 0  a [i] < a [i  1]) { if (sum > maxsum) maxsum = sum; sum = (a [i] > 0) ? a [i] : 0; } else sum += a [i]; } if (sum > maxsum) maxsum = sum ; printf ("%dn", maxsum); }
What is the value printed out when this program is executed?
9  
8  
7  
6 
Question 140 
Consider the program below in a hypothetical language which allows global variable and a choice of call by reference or call by value methods of parameter passing.
int i ; program main () { int j = 60; i = 50; call f(i,j); print i, j; } procedure f(x,y) { i = 100; x = 10; y = y + i ; }Which one of the following options represents the correct output of the program for the two parameter passing mechanisms?
Call by value : i = 70, j = 10; Call by reference : i = 60, j = 70  
Call by value : i = 50, j = 60; Call by reference : i = 50, j = 70  
Call by value : i = 10, j = 70; Call by reference : i = 100, j = 60  
Call by value : i = 100, j = 60; Call by reference : i = 10, j = 70 
'i' is a global variable. Then in main( ) a local variable 'j' as integer declared, i.e., j=60 and global variable 'i' is initialized to 50 by i=50.
Now procedure f called and values of 'i' and 'j' are passed to it, i.e., in f(i, j)→f(x, y).
Content of memory location of 'i' (here 50) is copied to memory location of x (which is different from i) and content of memory location of 'j' (here 60) is copied to memory location of y. Then in f(x, y) i=100 changes the global i to 100, x=10 changes the local x from 50 to 10 and y=y+i means y=60+100=160. Now, when return back to main, i & j will be 100 & 60 respectively.
Call by reference:
Now procedure f called and passed reference of i and j to it, i.e., in f(i,j)→f(x,y). x and y are pointing to same memory location of i and j respectively. So i=100 changes the global i to 100 and x=10 means as well as global i=10 (as the i being passed is the global variable and x and i share the same address).
y=y+i means y=60+10=70 and this changes the value of j also to as j and y have the same addresses. Now when return to main, i and j will be 10 and 70.
Question 141 
Consider the program below in a hypothetical programming language which allows global variables and a choice of static or dynamic scoping.
int i ; program main () { i = 10; call f(); } procedure f() { int i = 20; call g (); } procedure g () { print i; }Let x be the value printed under static scoping and y be the value printed under dynamic scoping. Then, x and y are
x = 10, y = 10  
x = 20, y = 10  
x = 10, y = 20  
x = 20, y = 20 
Question 142 
Early binding refers to a binding performed at compile time and late binding refers to a binding performed at execution time. Consider the following statements:
i. Static scope facilitates w1 bindings.
ii. Dynamic scope requires w2 bindings.
iii. Early bindings w3 execution efficiency.
iv. Late bindings w4 execution efficiency.
The right choices of wl, w2, w3 and w4 (in that order) are
Early, late, decrease, increase  
Late, early, increase, decrease  
Late, early, decrease, increase  
Early, late, increase, decrease 
Dynamic scoping requires late binding (during execution time).
Late binding decreases efficiency as this binding needs to be done at run time.
Question 143 
Which one of the choices given below would be printed when the following program is executed?
#includestruct test { int i; char *c; }st[] = {5, "become", 4, "better", 6, "jungle", 8, "ancestor", 7, "brother"}; main () { struct test *p = st; p += 1; ++p > c; printf("%s,", p++ > c); printf("%c,", *++p > c); printf("%d,", p[0].i); printf("%s n", p > c); }
jungle, n, 8, ncestor  
etter, u, 6, ungle  
cetter, k, 6, jungle  
etter, u, 8, ncestor 
Line 1  main ( )
Line 2  {
Line 3  struct test *p = st;
Line 4  p += 1;
Line 5  ++p → c;
Line 6  printf("%s", p++→ c);
Line 7  printf("%c", +++p → c);
Line 8  printf("%d", p[0].i);
Line 9  printf("%s\n", p → c);
Line 10  }
Now,
Line 3: Initially p is pointing to st, i.e., first element of st which is {5, "become"}
Line 4: Now p is pointing to {4, "better"}
Line 5: ++(p → c), since → has higher precedence, so p → c points to 'e' of "better".
Line 6: prints 'enter' and p now points to {6, "jungle"}
Line 7: ***(p → c), since → has higher precedence. So, prints 'u'.
Line 8: p → i, which is 6 so prints '6'.
Line 9: prints 'ungle' since p is pointing to 'u'.
So, output is "enter, u, 6, ungle".
Question 144 
#includevoid swap (int *x, int *y) { static int *temp; temp = x; x = y; y = temp; } void printab () { static int i, a = 3, b = 6; i = 0; while (i <= 4) { if ((i++)%2 == 1) continue; a = a + i; b = b + i; } swap (&a, &b); printf("a = %d, b = %d\n", a, b); } main() { printab(); printab(); }
a = 0, b = 3 a = 0, b = 3  
a = 3, b = 0 a = 12, b = 9  
a = 3, b = 6 a = 3, b = 6  
a = 6, b = 3 a = 15, b = 12 
Inside print 'a' and 'b' are added to odd integers from 1 to 5, i.e., 1+3+5=9. So, in first call to print ab,
a = 3+9 = 6
b = 6+9 = 3
Static variable have one memory throughout the program run (initialized during program start) and they keep their values across function calls. So during second call to print ab,
a = 6+9 = 15
b = 3+9 = 12
Question 145 
Which one of the choices given below would be printed when the following program is executed?
#includeint a1[] = {6, 7, 8, 18, 34, 67}; int a2[] = {23, 56, 28, 29}; int a3[] = {12, 27, 31}; int *x[] = {a1, a2, a3}; void print(int *a[]) { printf("%d,", a[0][2]); printf("%d,", *a[2]); printf("%d,", *++a[0]); printf("%d,", *(++a)[0]); printf("%d/n", a[1][+1]); } main() { print(x); }
8, 12, 7, 23, 8  
8, 8, 7, 23, 7  
12, 12, 27, 31, 23  
12, 12, 27, 31, 56 
It returns the value of 3^{rd} element in a1.
First printf print 8.
2) *a[2] = *(*(a+2))
It returns the value of 1^{st} element in a3.
Second printf print 12.
3) *++a[0] = *(++(*(a+0)))
a[0] is pointing to 1^{st} element in a1.
++a[0]  after preincrement performed, now a[0] is pointing to 2^{nd} element in a1.
*++a[0] return the value of 2^{nd} element in a1.
Third printf print 7.
4) *(++a)[0]
++a  after preincrement is performed 'a' is pointing to a2.
(++a)[0] is pointing to 1^{st} element in a2.
*(++a)[0] returns the value of 1^{st} element in a2.
Fourth printf print 23.
5) a[1][+1] = *(*(a1)+1)
(a1) is pointing to a1.
*(a1) is pointing to the 2^{nd} element in a1, because in 3^{rd} printf already a1 was incremented by 1.
*(a1)+1 is pointing 3^{rd} element in a1.
*(*(a1)+1) returns the value of 3^{rd} element in a1, i.e., 8.
Question 146 
The following function computes the value of ^{m}C_{n} correctly for all legal values m and n (m≥1,n≥0 and m>n)
int func(int m, int n) { if (E) return 1; else return(func(m  1, n) + func(m  1, n  1)); }
In the above function, which of the following is the correct expression for E?
(n == 0)  (m == 1)  
(n == 0) && (m == 1)  
(n == 0)  (m == n)  
(n == 0) && (m == n) 
^{m}C_{0} = 1
^{n}C_{n} = 1
Question 147 
Match the following concepts and their best possible descriptions.
 Concept:
(i) overloading
(ii) friend
(iii) constructor
(iv) protected
(v) this
(vi) inheritance
Descriptions:
A. allows to define a class to have a properties of another class
B. defining a set of similar functions
C. used in dereferncing
D. used to given a non  member function access to the private parts of body
E. a function which is automatically called when object is created
F. allows a derived class to have access to the private parts of the base
G. a pointer to the object associated with the current functions
H. used to obtain persistence
(i)  B, (ii)  D, (iii)  E, (iv)  F, (v)  G, (vi)  A  
(i)  C, (ii)  A, (iii)  E, (iv)  D, (v)  H, (vi)  F  
(i)  C, (ii)  F, (iii)  H, (iv)  A, (v)  G, (vi)  D  
(i)  B, (ii)  E, (iii)  C, (iv)  F, (v)  G, (vi)  H 
Question 148 
The following C function takes two ASCII strings and determines whether one is an anagram of the other. An anagram of a string s is a string obtained by permuting the letters in s.
int anagram (char *a, char *b) { int count [128], j; for (j = 0; j < 128; j++) count[j] = 0; j = 0; while (a[j] && b[j]) { A; B; } for (j = 0; j < 128; j++) if (count [j]) return 0; return 1; }
Choose the correct alternative for statements A and B.
A : count [a[j]]++ and B : count[b[j]]–  
A : count [a[j]]++ and B : count[b[j]]++  
A : count [a[j++]]++ and B : count[b[j]]–  
A : count [a[j]]++and B : count[b[j++]]– 
B: Decrements the count by 1 at each index that is equal to the ASCII value of the alphabet it is pointing at. Also it increments the loop counter for next iteration.
If one string is permutation of other, there would have been equal increments and decrements at each index of array, and so count should contain zero at each index, that is what the loop checks at last and if any nonzero elements is found, it returns 0 indicating that strings are not anagram to each other.
Question 149 
The following C function takes a singlylinked list of integers as a parameter and rearranges the elements of the list. The list is represented as pointer to a structure. The function is called with the list containing the integers 1, 2, 3, 4, 5, 6, 7 in the given order. What will be the contents of the list after the function completes execution?
struct node { int value; struct node *next; ); void rearrange (struct node *list) { struct node *p, *q; int temp; if (!list  !list > next) return; p = list; q = list > next; while (q) { temp = p > value; p > value = q > value; q > value = temp; p = q > next; q = p ? p > next : 0; } }
1, 2, 3, 4, 5, 6, 7  
2, 1, 4, 3, 6, 5, 7  
1, 3, 2, 5, 4, 7, 6  
2, 3, 4, 5, 6, 7, 1 
Question 150 
What is the output printed by the following program?
#includeint f(int n, int k) { if (n == 0) return 0; else if (n % 2) return f(n/2, 2*k) + k; else return f(n/2, 2*k)  k; } int main () { printf("%d", f(20, 1)); return 0; }
5  
8  
9  
20 
Hence, 9 is the answer.
Question 151 
Let a be an array containing n integers in increasing order. The following algorithm determines whether there are two distinct numbers in the array whose difference is a specified number S > 0.
i = 0; j = 1; while (j < n ) { if (E) j++; else if (a[j]  a[i] == S) break; else i++; } if (j < n) printf("yes") else printf ("no");
Choose the correct expression for E.
a[j] – a[i] > S  
a[j] – a[i] < S  
a[i] – a[j] < S  
a[i] – a[j] > S 
If at times difference becomes greater than S we know that it won't reduce further for same 'i' and so we increment the 'i'.
Question 152 
Let a and b be two sorted arrays containing n integers each, in nondecreasing order. Let c be a sorted array containing 2n integers obtained by merging the two arrays a and b. Assuming the arrays are indexed starting from 0, consider the following four statements
1. a[i] ≥ b [i] => c[2i] ≥ a [i] 2. a[i] ≥ b [i] => c[2i] ≥ b [i] 3. a[i] ≥ b [i] => c[2i] ≤ a [i] 4. a[i] ≥ b [i] => c[2i] ≤ b [i]Which of the following is TRUE?
only I and II  
only I and IV  
only II and III  
only III and IV 
Since both 'a' and 'b' are sorted in the beginning, there are 'i' elements than or equal to a[i] and similarly 'i' elements smaller than or equal to b[i]. So, a[i] ≥ b[i] means there are 2i elements smaller than or equal to a[i] and hence in the merged array, a[i] will come after these 2i elements. So, c[2i] ≤ a[i].
Similarly, a[i] ≥ b[i] says for b that, there are not more than 2i elements smaller than b[i] in the sorted array. So, b[i] ≤ c[2i].
So, option (C) is correct.
Question 153 
Let x be an integer which can take a value of 0 or 1. The statement if(x = =0) x = 1; else x = 0; is equivalent to which one of the following?
x = 1 + x;  
x = 1  x;  
x = x  1;  
x = 1 % x; 
For x = 0, it gives 1.
For x = 1, it gives 0.
Question 154 
A program attempts to generate as many permutations as possible of the string, 'abcd' by pushing the characters a, b, c, d in the same order onto a stack, but it may pop off the top character at any time. Which one of the following strings CANNOT be generated using this program?
abcd  
dcba  
abad  
cabd 
B) First push abcd, and after that pop one by one. Sequence of popped elements will come to dcba.
C) push abc, and after that pop one by one. Sequence of popped elements will come to cba. Now push 'd' and pop 'd', final sequence comes to cbad.
D) This sequence is not possible because 'a' cannot be popped before 'b' anyhow.
Question 155 
What is the output of the following program?
#include <stdio.h> int funcf (int x); int funcg (int y); main() { int x = 5, y = 10, count; for (count = 1; count <= 2; ++count) { y += funcf(x) + funcg(x); printf ("%d ", y); } } funcf(int x) { int y; y = funcg(x); return (y); } funcg(int x) { static int y = 10; y += 1; return (y+x); }
43 80  
42 74  
33 37  
32 32 
In first case of funcf, which in turn calls funcg, y becomes 11 and it returns 5+11 = 16.
In second call of funcg, y becomes 12 and it returns 5+12 = 17.
So, in main y is incremented by 16+17 = 33 to become 10+33 = 43.
In second iteration:
y will be incremented by 18+19 = 37 to give 43+37 = 80.
Question 156 
Consider the following C program which is supposed to compute the transpose of a given 4 x 4 matrix M. Note that, there is an X in the program which indicates some missing statements. Choose the correct option to replace X in the program.
#include<stdio.h> #define ROW 4 #define COL 4 int M[ROW][COL] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; main() { int i, j, t; for (i = 0; i < 4; ++i) { X } for (1 = 0; i < 4; ++i) for (j = 0; j < 4; ++j) printf ("%d", M[i][j]); }
for(j = 0; j < 4; ++j){ t = M[i][j]; M[i][j] = M[j][i]; M[j][i] = t; }  
for(j = 0; j < 4; ++j){ M[i][j] = t; t = M[j][i]; M[j][i] = M[i][j]; }  
for(j = i; j < 4; ++j){ t = M[i][j]; M[i][j] = M[j][i]; M[j][i] = t; }  
for(j = i; j < 4; ++j){ M[i][j] = t; t = M[j][i]; M[j][i] = M[i][j]; } 
In (D) , given statements is wrong as temporary variable needs to be assigned some value and not viceversa.
Question 157 
Choose the correct option to fill the ?1 and ?2 so that the program prints an input string in reverse order. Assume that the input string is terminated by a new line character.
#includevoid wrt_it (void); int main (void) { printf("Enter Text"); printf ("n"); wrt_ it(); printf ("n"); return 0; } void wrt_it (void) { int c; if (?1) wrt_it(); ?2 }
?1 is getchar() ! = ‘\n’ ?2 is getchar(c);  
?1 is (c = getchar()); ! = ‘\n’ ?2 is getchar(c);  
?1 is c! = ‘\n’ ?2 is putchar(c);  
?1 is (c = getchar()) ! = ‘\n’ ?2 is putchar(c); 
putchar( ) = writes a character specified by the argument to stdout.
As getchar( ) and putchar( ), both are needed to read the string and prints its reverse and only option (D) contains both the function. (D) is the answer.
Now coming to the code, wrt_id(void) is calling itself recursively. When \n is encountered, putchar( ) gets executed and prints the last character and then the function returns to its previous call and prints last 2^{nd} character and so on.
Question 158 
Consider the following C program:
#include <stdio.h> typedef struct { char *a; char *b; } t; void f1(t s); void f2(t *p); main() { static t s = {"A", "B"}; printf ("%s %sn", s.a, s.b); f1(s); printf ("%s %sn", s.a, s.b); f2(&s); } void f1(t s) { s.a = "U"; s.b = "V"; printf ("%s %sn", s.a, s.b); return; } void f2(t *p) { p > a = "V"; p > b = "W"; printf("%s %sn", p > a, p > b); return; }What is the output generated by the program?
AB UV VW VW  
AB UV AB VW  
AB UV UV VW  
AB UV VW UV 
→ f1 is call by value. The changes applicable only for local from f1. UV is printed.
→ Back in main( ), AB is printed.
→ Then in f2, VW is printed.
Hence, answer is (B).
Question 159 
int SimpleFunction (int Y[], int n, int x)
{
int total = Y[0], loopIndex;
for (loopIndex = 1; loopIndex <= n  1; loopIndex++)
total = x * total + Y[loopIndex]
return total;
}
Let Z be an array of 10 elements with Z[i]=1, for all i such that 0 ≤ i ≤ 9. The value returned by SimpleFunction(Z, 10, 2) is _______
1023 
n=10,x=2
Initial total value is 1 => total=1.
For loop will execute 9 times.
loopindex=1, 1<=9 condition is true then
total = x * total + Y[loopIndex]= 2*1+Y[1]=2+1=3
loopindex=2, 2<=9 condition is true then
total=2*3+Y[2]=6+1=7
loopindex=3, 3<=9 condition is true then
total=2*7+Y[3]=14+1 =15
loopindex=4, 4<=9 condition is true then
total= 2*15+Y[4]=30+1=31
loopindex=5, 5<=9 condition is true then
total=2*31+Y[5]=62+1=63
loopindex=6, 6<=9 condition is true then
total=2*63+Y[6]=126+1=127
loopindex=7, 7<=9 condition is true then
Total =2*127+Y[7]=254+1=255
loopindex=8, 8<=9 condition is true then
total=2*255+Y[8]=510+1=511
loopindex=9, 9<=9 condition is true then
total=2*511+Y[9]=1022+1=1023
loopindex=10, 10<=9 condition is false then
Total value is returned which is 1023.
You can also write generalized formulae 2101=1023
Question 160 
# include <stdio.h>
int main()
{
int i, j, count;
count = 0;
i = 0;
for (j = 3; j <= 3; j++)
{
if ((j >= 0) && (i++))
count = count + j;
}
count = count + i;
printf(“%d”, count);
return 0;
}
Which one of the following options is correct?
The program will compile successfully and output 13 when executed.  
The program will compile successfully and output 10 when executed.  
The program will compile successfully and output 8 when executed.  
The program will not compile successfully. 
Input: count=0 , i=0 and j=3
For(j = 3; j <= 3; j++) → Condition TRUE then enters into the loop.
if((j >= 0) && (i++)) → Condition fails because they are given logical AND.
So, we are not entering the “if” condition and come out of the loop. The count and “i” values remain “0”.
For(j = 2; j <= 3; j++) → Condition TRUE then enters into the loop.
if((j >= 0) && (i++)) → Condition fails because they are given logical AND.
So, we are not entering the “if” condition and come out of the loop. The count and “i” values remain “0”.
For(j = 1; j <= 3; j++) → Condition TRUE then enters into the loop.
if((j >= 0) && (i++)) → Condition fails because they are given logical AND.
So, we are not entering the “if” condition and come out of the loop. The count and “i” values remain “0”.
For(j = 0; j <= 3; j++) → Condition TRUE then enters into the loop.
if((j >= 0) && (i++)) → Condition TRUE then enters into the loop.
count=0+0 → Count=0
For(j = 1; j <= 3; j++) → Condition TRUE then enters into the loop.
if((j >= 0) && (i++)) → Condition TRUE then enters into the loop.
count=0+1 → Count=1
For(j = 2; j <= 3; j++) → Condition TRUE then enters into the loop.
if((j >= 0) && (i++)) → Condition TRUE then enters into the loop.
count=1+2 → Count=3
For(j = 3; j <= 3; j++) → Condition TRUE then enters into the loop.
if((j >= 0) && (i++)) → Condition TRUE then enters into the loop.
count=3+3 → Count=6
For(j = 4; j <= 3; j++) → Condition FALSE we are not entering the loop.
count=6+4 → We are given a condition as a post increment. So, “i” updates the next instruction.
The above code segment executes successfully and will print value=10.
Question 161 
#include <stdio.h>
int foo(intx, int y, int q)
{
if ((x <= 0) && (y <= 0))
return q;
if (x <= 0)
return foo(x, yq, q);
if (y <= 0)
return foo(xq, y, q);
return foo(x, yq, q) + foo(xq, y, q);
}
int main()
{
int r = foo(15, 15, 10);
printf(“%d”, r);
return 0;
}
The output of the program upon execution is ______
60 
int foo(intx, int y, int q)
{
if ((x <= 0) && (y <= 0)) //if 1
return q;
if (x <= 0) //if 2
return foo(x, yq, q);
if (y <= 0) //if 3
return foo(xq, y, q);
return foo(x, yq, q) + foo(xq, y, q);
}
int main()
{
int r = foo(15, 15, 10);
printf(“%d”, r);
return 0;
}
Question 162 
#include<stdio.h>
int main() {
int arr[4][5];
int i, j;
for (i=0; i<4; i++){
for (j=0; j<5; j++){
arr[i][j] = 10*i + j;
}
}
printf (“%d”, *(arr[1] + 9));
return 0;
}
What is the output of the above program?
14  
30  
24  
20 
Question 163 
int SomeFunction (int x, int y)
{
if ((x == 1)  (y == 1)) return 1;
if (x == y) return x;
if (x > y) return SomeFunction (xy, y);
if (y > x) return SomeFunction (x, yx);
}
The value returned by SomeFunction (15, 255) is _______.
15 
Question 164 
#include
{
int a[3][3][3] =
{{1, 2, 3, 4, 5, 6, 7, 8, 9},
{10, 11, 12, 13, 14, 15, 16, 17, 18},
{19, 20, 21, 22, 23, 24, 25, 26, 27}};
int i = 0, j = 0, k = 0;
for( i = 0; i < 3; i++ ){
for(k = 0; k < 3; k++ )
printf("%d ", a[i][j][k]);
printf("\n");
}
return 0;
}
1 2 3 10 11 12 19 20 21  
1 4 7 10 13 16 19 22 25  
1 2 3 4 5 6 7 8 9  
1 2 3 13 14 15 25 26 27 
Hence, 1, 2, 3 will be 1^st row
10 , 11, 12 will be 2^nd row
19, 20, 21 will be 3^rd row
Question 165 
#include
int main(int argc, char *argv[]){
char a = 'P';
char b = 'x';
char c = (a & b) + '*';
char d = (a  b)  '';
char e = (a ^ b) + '+';
printf("%c %c %c\n", c, d, e);
return 0;
}
z K S  
122 75 83  
*  +  
P x + 
Question 166 
concat(sl, s2) concatenates string s1 with s2.
The output of concat(head(s), head(tail(tail(s)))), where s is acbc is
ab  
ba  
ac  
as 
Question 167 
Assuming the required header files are already included, the above program:
results in a compilation error  
print 123  
print 111  
print 322 
→ It gives compilation error because declaration of “intc” is wrong.
→ q+=b(a(q)) and r+=a(c(r)) will result compilation error.
Question 168 
i > min; j!= (n+i)mod n; A[j + k]; temp; i + 1 ;  
i < min; j!= (n+i)mod n; A[j + k]; temp; i + 1;  
i > min; j!= (n+i+k)mod n; A[(j + k)]; temp; i + 1;  
i < min; j!= (n+ik)mod n; A[(j + k)mod n]; temp; i + 1; 
Step1: Observe all options, 4 options they are given 4th and 5th blank is temp and i+1.
So, they given clue that, 4th and 5th options must be temp and i+1.
Step2: Based on the 4th and 5th options, we can guess that 1st blank is i
Step4: Assume 2nd blank is correct, we are considering j!= (n+i) mod n this condition in while loop.
→ The meaning of the condition is “j becomes equal to (n+i)mod n then control goes out of the while loop.”
Step5: The condition (n+i)mod n=i and j is always equal to i because we are assigning the value of i to j in the code segment line 3.
Step6: based on these constraint we can say that 4th option is correct.
Reason: The control never enters the 2nd while loop. Sometimes it will enter the 2nd while loop, when we shift the numbers. It means total K places left.
Question 169 
Call swap (a, b)  
Call swap (&a, &b)  
swap(a, b) cannot be used as it does not return any value  
swap(a, b) cannot be used as the parameters passed by value 
Question 170 
A function that takes an integer pointer as an argument and returns an integer  
A function that takes an integer as argument and returns an integer pointer  
A pointer to a function that takes an integer pointer as an argument and returns an integer  
A function that takes an integer pointer as an argument and returns a function pointer 
→ int (*p)(char *a); p ia a pointer to a function that takes an argument as a pointer to a character and returns an integer.
Question 171 
10 11 12 13 14  
10 10 10 10 10  
0 1 2 3 4  
Compilation error 
Step2: Inside the for loop we are assigning again I value is 10 and printing value i.
Iteration1: We are printing value 10 then increment by 1
Iteration2: We are clearing previous value and assigning value 10. Printing value is 10;
Iteration5: We are clearing previous value and assigning value 10. Printing value is 10
Step3: output is 1010101010
Question 172 
It prints all even bits from num  
It prints all odd bits from num  
It prints binary equivalent of num  
None of the above 
Step2: 14<16
Step3: It will print 00000000 00001110
Question 173 
20 10 10  
20 10 20  
20 20 20  
10 10 10 
Step2: By default tmp value 20 will print initially.
Step3: It calls fun() then it will print 10
Step4: Again we are in main() function and printing value 20. Actually, the static value will return because its scope is a lifetime. But we are given tmp value as global. So, it prints 20 instead of 10.
Question 174 
Dynamic memory allocation  
Static memory allocation  
Both dynamic and static memory allocation  
None of the above 
1. Malloc
2. Realloc
3. Calloc
4. Free.
Question 175 
The complexity of the program is
O(log n)  
O(n^{2})  
O(n^{2} log n)  
O(n log n) 
Question 176 
14  
36  
18  
20 
Here macro takes one parameter also.
A macro is a fragment of code that is given a name. You can use that fragment of code in your program by using the name. For example,
#define SQR(x) (x*x)
Here, when we use SQR(x) in our program, it's replaced with (x*x)
The movement program control execute the macro, it will replace SQR(b+2) by (b+2*b+2)
The expression (b+2*b+2) consists of addition and multiplication operators.
Between two operators multiplication operator has highest priority later addition .
So the expression evaluation steps are as follows
a = (b + 2*b + 2)
=(4+2*4+2)// first multiplication
=(4+8+2) // addition equal priority , so it will evaluate left to right
=(12+2)
=14
Question 177 
A reference can never be NULL  
A reference needs an explicit dereferencing mechanism  
A reference can be reassigned after it is established  
A reference and pointer are synonymous 
We can assign NULL to pointers where as we can’t assign NULL to references.
We can reassign pointers as many as number of times where a reference can never be reassigned once it is established.
Question 178 
What is the output of the following ‘C’ program ? (Assuming little  endian representation of multibyte data in which Least Significant Byte (LSB) is stored at the lowest memory address.)
#include <stdio.h> #include <stdlib.h> /* Assume short int occupies two bytes of storage */ int main () { union saving { short int one; char two[2]; }; union saving m; m.two [0] = 5; m.two [1] = 2; printf("%d, %d, %d\n", m.two [0], m.two [1], m.one); }/* end of main */
5, 2, 1282
 
5, 2, 52  
5, 2, 25  
5, 2, 517

• Size of the short integer is 2 bytes. Saving is union variable, we will access one variable at time and only one memory location is shared among all the members. So, the two values 5 and 2 (two bytes of the data) will store in little endian format in the variable m.one.
• Endianness is the sequential order in which bytes are arranged into larger numerical values when stored in memory or when transmitted over digital links.
• In bigendian format, whenever addressing memory or sending/storing words bytewise, the most significant byte—the byte containing the most significant bit—is stored first (has the lowest address) or sent first, then the following bytes are stored or sent in decreasing significance order.
• Littleendian format reverses this order: the sequence addresses/sends/stores the least significant byte first (lowest address) and the most significant byte last (highest address).
• First 5 will store in the lowest address and 2 will store next highest address.
• So the binary representation 5 and 2 in little endian format is 00000010 00000101.
The binary number of the above is 517.
Question 179 
z=x+y*z/4%21
*/%+=  
=*/%+  
/*%+=  
*%/+= 
Question 180 
int(^{*}P[7])();
P is pointer to function  
P is pointer to such function which return type is array  
P is array of pointer to function  
P is pointer to array of function 
int (^{*}ptr)[7]; This is a pointer to an array of 7 int
int(^{*}P[7])(); P is array of pointer to function
int(^{*}P)() ;  P is pointer to function
Question 181 
Switch  
Go to  
go back  
Retun 
● The execution resumes in the calling function at a point immediately following the call.
Question 182 
C=100
for i=1 to n do
for j=1 to n do
{
Temp=A[i][j]+C
A[i][j]=A[j][i]
A[j][i]=TempC
}
for i=1 to n do
for j=1 to n do
output(A[i][j]);
The matrix A itself  
Transpose of matrix A  
Adding 100 to the upper diagonal elements and subtracting 100 from diagonal elements of A  
None of the option 
Question 183 
is globally accessible by all functions  
has a declaration "extern" associated with it when declared within a function  
will be initialized to 0 if not initialized  
All of these 
Question 184 
n=5;
x=n++;
y=x;
5,4  
6,5  
6,6  
5,5 
N++ is post increment statement, so first “n” will store into variable into “x” and later “n” value is incremented.
X value becomes 5 and y value become 5.
Question 185 
int  
float  
char  
long int 
The rules for implicit type casting are as follows:
Integer Promotion: All types below int, like char and short are converted to int.
If still types other than int remain, following rules are executed by order
● If long double exists, all are converted to long double.
● If double exists, all are converted to double.
● If float exists, all are converted to float, and so on.
Question 186 
1  
0  
0.005  
0.5 
Description
CEIL(x) rounds the number x up.
Examples
CEIL(1.3) equals 2
CEIL(1.6) equals 1
Question 187 
them in an array and sort the array  
pointers to them in an array and sort the array  
them in a linked list and sort the linked list  
references to them in an array and sort the array 
● By using pointers we will easily access the large objects or structures with the help the addresses pointing to them.
● If you made any changes to the elements in the array, it automatically reflect as these are pointed by the pointers
Question 188 
automatic  
register  
static  
anything 
Question 189 
Consider the following pseudocode fragment, where m is a nonnegative integer that has been initialized:
p = 0; k = 0; while(k < m) p = p + 2^{k}; k = k + 1; end while
Which of the following is a loop invariant for the while statement?
(Note: a loop variant for a while statement is an assertion that is true each time guard is evaluated during the execution of the while statement).
Options:p = 2^{k}  1 and 0≤k  
p = 2^{k+1}  1 and 0≤k  
p = 2^{k}  1 and 0≤k≤m  
p = 2^{k+1}  1 and 0≤k≤m 
k=1, P = 1+21 = 3
k=2, P = 3+22 = 7
k=3, P = 7+23 = 15
Only the option3 satisfied to the loop variant.
Ex: m=2, The loop will execute for 3 times for k value is 0,1 and 2.
Then options3 gives P=1, P=3 and P=7 for the k values 0,1 and respectively.
Question 190 
y=(int)(x+0.5)  
y=int(x+0.5)  
y=(int)x+0.5  
y=(int)(int) x+0.5) 
y = (int)(x + 0.5); here x is any float value. To round off, we have to typecast the value of x by using (int)
Example:
#include
int main ()
{
float x = 3.6;
int y = (int)(x + 0.5);
printf ("Result = %d\n", y );
return 0;
}
Output:
Result = 4.
Question 191 
f(int a, int b)
{
int a;
a=20;
return a;
}
Missing parenthesis is return statement  
Function should be defined as int f(int a, int b)  
Redeclaration of a  
None of these 
Question 192 
declared  
initialized  
both declared and initialized  
none of these 
● Pointer is also one variable
● So before using a pointer variable it should be both declared and initialized.
Question 193 
a syntax error  
cartrt  
catrat  
catratratratrat... 
for(Initialization; Condition; value modification/updation)
As per the above question,
→ Initialization part given by putchar('c)
→ Condition part check by putchar('a')
→ Value modification/updation part given by putchar('r')
→ Inside the for loop we are given putchar('t’)
→ The sequence of the for loop first initialization, second condition, executing inside body of for loop and value modification.
So, it prints catratratratrat...
Question 194 
less than m+n  
equal to m+n  
greater than m+n  
none of these 
Question 195 
Consider the following method :
int f(int m, int n, boolean x, boolean y) { int res=0; if(m<0) {res=nm;} else if(x  y) { res= 1; if( n==m) { res =1; } } else {res=n; } return res; } /*end of f */
If P is the minimum number of tests to achieve full statement coverage for f() and Q is the minimum number of tests to achieve full branch coverage for f(), then (P,Q) =
(3,4)  
(3,2)
 
(2,3)  
(4,3)

→ Statement coverage is a white box test design technique which involves execution of all the executable statements in the source code at least once. It is used to calculate and measure the number of statements in the source code which can be executed given the requirements.
→ Branch coverage is a testing method, which aims to ensure that each one of the possible branch from each decision point is executed at least once and thereby ensuring that all reachable code is executed.
→ In the branch coverage, every outcome from a code module is tested. For example, if the outcomes are binary, you need to test both True and False outcomes.
Question 196 
What will be output if you will compile and execute the following C code?
void main()
{
char c=125;
c=c+10;
printf("%d",c);
}
135  
115  
121  
8 
In our example the data type is char data type , so if you will increase or decrease the char
variables beyond its maximum or minimum value respectively it will repeat same value
according to following cyclic order
So,
125+1= 126
125+2= 127
125+3=128
125+4=127
125+5=126
125+6=125
125+7=124
125+8=123
125+9=122
125+10=121
Question 197 
i+j  
j+i(i1)/2
 
i+j1  
i+j(j1)/2 
Now at i^{th} row, the j^{th} element will be at j position.
So the index of (i, j)^{th} element of lower triangular matrix in this new representation is
j = i(i1)/2
Question 198 
What will be output if you will compile and execute the following C code?
void main()
{
printf("%d",sizeof(5.2));
}
4  
8  
2  
16 
Question 199 
void greet (int n)
{
if (n>0)
{
printf("hello");
greet(n1);
}
printf("world");
}
If you run greet(n) for some nonnegative integer n, what would it print?
n times “hello”, followed by n + 1 times “world”  
n times “hello”, followed by n times “world”  
n times “helloworld”  
n + 1 times “helloworld”  
n times “helloworld”, followed by “world” 
Question 200 
1. The sign bits are same i.e MSB bits are same.
2. Carry_in ≠ Carry_out.
In option B, the MSB are equal.
Question 201 
int fun(x: integer)
{
If x > 100
then
fun = x – 10;
else
fun = fun(fun(x + 11));
}
For the input x = 95, the function will return
89  
90  
91  
92 
fun(95) = fun(fun(106))
= fun(96)
= fun(fun(107))
= fun(97)
= fun(fun(108))
= fun(98)
= fun(fun(109))
= fun(99)
= fun(110)
= fun(100)
= fun(fun(111))
= fun(101)
= 91
Question 202 
int func(int num)
{
int count = 0;
while(num)
{
count++;
num >>= 1;
}
return(count) ;
}
For func(435) the value returned is
9  
8  
0  
10 
count = 0 Shift right of 1, which means the number gets half.
while (num)
{
Shift left of 1, which means, the number gets doubled.
count++;
num>>=1;
}
return (count); 435/2 = 217/2 = 108/2 = 54/2 = 27/2 = 13/2 = 6/2 = 3/2 = 1/2 = 0
Count: 1, 2, 3, 4, 5, 6, 7, 8, 9. Χ
(or)
(435)_{10} = (110110011)_{2}
The given program counts total number of bits in binary representation and fails when while (num) becomes all zeroes.
Question 203 
#include <stdio.h>
int main(void)
{
char c[ ] = "ICRBCSIT17";
char *p=c;
printf("%s", c+2[p] – 6[p] – 1);
return 0;
}
The output of the program is
SI  
IT  
TI  
17 
Pointer(p) is pointing to character array c[ ].
Index location 2[p] =’R’ and 6[p] =’I’
‘R’‘I’ = 9 and c+2[p]–6[p]–1
= c+9–1
= c+8
It will print 17.
Question 204 
main( )
{
int x=128;
printf (“\n%d”, 1 + x++);
}
128  
129  
130  
131 
printf(“\n%d”, 1 + x++); /* x=128 */
Here, 1+128=129
Question 205 
#include
int main()
{
int i=5;
printf("%d%d%d", i++,i++,i++);
return 0;
}
765  
567  
777  
compile dependent 
● The output will depend upon the way the compiler developed.
Question 206 
Which of the following numerical values is NOT a valid constant in C language?
12345L  
018CDF
 
9.3e12  
0XBCF

→ 018CDF starts with 0 means octal number but actually we are given decimal and hexa numbers. So it is not a valid constant.
→ 9.3e12 float number
→ 0XBCF is hexa number. Valid constant.
Question 207 
#include
void dynamic(int s,..)
{
printf("%d",s);
}
int main()
{
dynamic(2,4,6,8);
dynamic(3,6,9);
return 0;
}
23  
compile error  
43  
32 
● Old compiler may support that syntax, in that syntax only first argument is defined which consists of remainings arguments but not defined.
● For the function call dynamic(2,4,6,8), first argument 2 is printed.
● For the function call dynamic(3,6,9);first argument 3 is printed.
Question 208 
#include
int main()
{
int *ptr;
int x;
ptr=&x;
*ptr=0;
printf("x=%d\n",x);
printf("*ptr=%d\n",*ptr);
*ptr+=5;
printf("x=%d\n",x);
printf("*ptr=%d\n",*ptr);
(*ptr)++;
printf(x=%d\n",x);
printf("*ptr=%d\n",*ptr);
return 0;
}
x=0 *ptr=0 x=5 *ptr=5 x=6 *ptr=6  
x=garbage value *ptr=0 x=garbage value *ptr=5 x=garbage value *ptr=6  
x=0 *ptr=0 x=5 *ptr=5 x=garbage value *ptr=garbage value  
x=0 *ptr=0 x=0 *ptr=0 x=0 *ptr=0 
● *ptr=0; // storing value “0” in the memory location.
● printf("x=%d\n",x); // “0” will be printed
● printf("*ptr=%d\n",*ptr); // “0” will be printed because , ptr will point to variable “x”
● *ptr+=5; // *ptr+=5; means *ptr=*ptr+5 which is nothing but value 5 will store into memory locaton
● printf("x=%d\n",x); // 5 will be printed
● printf("*ptr=%d\n",*ptr); //5 will be printed.
● (*ptr)++; // (*ptr) means 5 and it is incremented by 1 so the updated value is “6”
● printf(x=%d\n",x); // “6” will be printed
● printf("*ptr=%d\n",*ptr);// “6” will be printed
Question 209 
#include
int main()
{
float arr[5]={12.5,10.0,13.5,90.5,0.5};
float *ptr1=&arr[0];
float *ptr2=ptr1+3;
printf("%f",*ptr2);
printf("%d",ptr2ptr1);
return 0;
}
90.500000 3  
90.500000 12  
10.000000 12  
0.500000 3 
● float *ptr2=ptr1+3; // ptr2 will point to fourth element of the array
● printf("%f",*ptr2); // It will display fourth element value which is 90.500000
● printf("%d",ptr2ptr1); // Here both pointer will point to same array . The subtraction operation gives the number of elements between the addresses.
Question 210 
#include
struct st
{
int x;
static int y;
};
int main()
{
printf(%d",sizeof(struct st));
return 0;
}
4  
8  
compile error  
runtime error 
● Static variables are allocated memory in data segment, not stack segment.
● Static variable isn't allowed in struct because C requires the whole structure elements to be placed "together". To withdraw a element value from a structure is counted by the offset of the element from the beginning address of the structure.
Question 211 
Struct
{
short s[5];
Union
{
float y;
long z;
}u;
}t;
Assume that objects of the type short, float and long occupy 2 bytes, 4 bytes and 8 bytes respectively. The memory requirement for variable t ignoring alignment considerations, is
22 bytes  
14 bytes  
18 bytes  
10 bytes 
{
float y;
long z;
}u;
● The sizeof union is 8 bytes (maximum size of two variables sizes 4 and 8)
● The size of structure is sum of short size(array of 5 elements) is 5x2=10 and union size is 8.
● So the total size is 18.
Question 212 
struct st
{
int x;
struct st next;
};
int main()
{
struct st temp;
temp.x=10;
temp.next=temp;
printf("%d",temp.next,x);
return 0;
}
Compile error  
10  
Runtime Error  
Garbage value 
● But we can declare pointer structure member with in same structure which is called self referential structure.
● The above code gives compile error “ main.c:5:11: error: field ‘next’ has incomplete type struct st next”
Question 213 
Unary operator  
ternary operator  
binary Operator  
Not an operator 
● This operator requires two tables so it binary operator.
Question 214 
main()
{
static int a=3;
printf("%d",a);
if(a)
main();
}
3  
3 2 1  
3 3 3  
Program will fall in continuous loop and print 3 
“A” is post decrement so it will print “3”
if(2) condition is true and main() function will call again , Here the “a” value is 2.
“A” is post decrement so it will print “2”
if(1) condition is true and main() function will call again Here the “a” value is 1.
“A” is post decrement so it will print “1”
if(0) condition is false it won’t call main() function
Question 215 
int i=5;
do
{
putchar(i+100);
printf("%d",i);
}
while(i);
i5h4g3f2el  
14h3g2f1e0  
An error message  
None of the above 
It will print the ASCII equivalent of 105 which is lower case ' i '. The printf statement prints the current value of i. i.e. 5 and then decrements it. So, h4 will be printed in the next pass. This continues until ' i ' becomes 0, at which point the loop gets terminated.
Question 216 
Consider the following algorithm:
Algorithm Anand(n) { sum=0; For i=1 to n do { For j=1 to i do { sum=sum+i; } } }
What will be the output of this algorithm for n=10?
370  
385
 
380  
55 
Step1: if i=1, j is also will execute 1 time because it is purely dependent to the variable i.
Sep2: The sum variable is perform addition how many time jth loop executes with the difference of i value.
Question 217 
In C language ______ is a process in which a function calls itself repeatedly until some specified condition has been satisfied
Infinite loop
 
Call by value
 
Call by reference
 
Recursion 
Question 218 
int a, *b=&a, **c=&b;
a=4;
**c=5;
If the statement
b=(int *)**c
is appended to the above program fragment then
Value of b becomes 5  
value of b will be the address of c  
value of b is unaffected  
none of these 
Ordinary variable a // value will be stored
Pointer variable b // address of variable will be stored
Pointer to pointer variable(double pointer) c // address of pointer variable will stored.
a=4 means storing/assigning value to “a”.
**c means value at(value at(c)) =value at(value at(&b)) (c holds address of pointer “b”)
=value at(&a) (b holds the address of “a”)
Memory location of variable “a”, value 5 is
stored/assigned into the variable.
Given statement is b=(int *)**c. So the value of b becomes 5.
Question 219 
What is the return value of the C library function fmod(d1,d2), where d1 and d2 are integer numbers?
It returns the remainder of d2/d1, with the same sign as d1  
It returns the remainder of d2/d1, with the same sign as d2  
It returns the remainder of d1/d2, with the same sign as d1
 
It returns the remainder of d1/d2, with the same sign as d2

Take d1 = 10 and d2 = 20
d1/d2 = 10/20 = 10
So, option C is correct.
Question 220 
int main()
{
int f=1;
for(;f;)
cout<<”f=”<<f++<<”\n”;
Return 0;
}
10 times  
Not even once  
Repeated forever  
Only once 
Question 221 
int x=22,y=15;
x=(x>y)?(x+y):(xy);
What will be the value of x after the code is executed?
22  
37  
7  
37 and 7 
Question 222 
Both the loops are repetitive in nature  
Boh are conditional loops  
Both will be executed at least once  
Both are terminated when the condition become false 
Question 223 
if (count<10) //if#1
if((count%4)==2) //if#2
count<<”condition:white\n”;
else //(indentation is wrong)
count<<”condition is:tan\n”;
There are 2 if statements and one else. To which if, the else statement belong?
It belongs to if#1  
It belongs to if#2  
It belongs to both the if statements  
It is independent 
→ If there are no braces ({}) following the if statement then only the next immediate statement belongs to the if statement. The same thing is true for else and elseif clause
Question 224 
int i=5;
do
{
putchar(i+100);
printf("%d",i);
}while(i);
i5h4g3f2el  
14h3g2f1e0  
An error message  
None of the above 
Step2: The printf statement prints the current value of i=5 because we are given post decrement.
Step3: The same process will perform until it fail the condition.
Question 225 
Which of the following ‘C’ language operators has the right to left associativity?
Relational operators
 
Conditional operators
 
Logical AND and OR operators
 
Arithmetic multiply and divide operators

Question 226 
48  
45  
46  
49 
→ The initial value of “x” is 10 and it is preincremented two times and later addition will be performed from left to right.
→ While performing the addition the variable “x” value is 12 and we adding four “x” variables so answer is 48 (output is based upon the Gcc compiler)
Question 227 
if(Y<0)
{
X=X;
Y=Y;
}
Z=0;
while(Y>0)
{
Z=Z+X;
Y=Y1;
}
Assume that X,Y and Z are integer variables, and that X and Y have be initialized. Which of the following best describes what this code segment does?
Sets Z to be the product X*Y  
Sets Z to be the sum X+Y  
Sets Z to be the absolute value of Y  
Sets Z to be the value of Y 
So, it satisfying condition while(Y>0)
Iteration1: while(3>0)
Z=0+3⇒ Z=3
Y=31⇒ Y=2
Iteration2: while(2>0)
Z=3+3=6
Y=21=1
Iteration3:while(1>0)
Z=6+3
Y=11=0
Iteration4 while(0>0) fails.
So,It Sets Z to be the product X*Y=3*3=9
Question 228 
Minimize coupling and minimize cohesion  
Maximize coupling and minimize cohesion  
Minimize coupling and maximize cohesion  
Maximize coupling and maximize cohesion 
→ If it turns out to be impossible to capture the purpose of a module into a single discriminative phrase, then that's a smell.
→ At the other hand, don't go totally overboard by making everything a separate module.
→ It will have a dramatic effect on the number of dependencies between modules, and therefore hurt you in terms of coupling.
→ One of the tools that might help you organizing your dependencies is the Dependency Structure Matrix.
Question 229 
Which of the following method is used for repetitive in which each action is started in terms of a previous result:
Recursion
 
Iteration
 
Looping
 
Structures

Question 230 
delete pp;  
delete pp[]  
delete []pp;  
delete *pp; 
Question 231 
fragment:
while X< >Y do
if X > Y then
X ← XY
else
Y← YX
endif
end while
print(X)
What is the code doing?
It computes the GCD of two numbers  
It computes the LCM of two numbers  
It finds the smallest of two numbers  
It divides the largest number by the smaller 
1 _{st} pass : X=3 and Y=2
2 _{nd} pass : X=1 and Y=2
3 _{rd} pass : X=1 and Y=1
Write(X), which writes 1. Which is nothing but GCD of 3 & 5.
Question 232 
Exception  
Syntax error  
Semantic error  
Fault 
● An exception is also known as a fault.
Question 233 
main()
{
int d=1;
do
{
printf(“%d”\n”,d++);
}while(d<=9);
}
Adding 9 integers  
Adding integers from 1 to 9  
Displaying integers from 1 to 9  
No output 
In the printf() statement, d++ means first it will display d value and increment the d value later condition checking.So the integer values 1 to 9 will be printed.
Question 234 
#include<iostream.h>
float answer;
main()
{
answer=⅓;
cout<<”The value of ⅓ is” <<answer,,”\n”;
return(0);
}
The value of ⅓ is 0  
The value of ⅓ is 0.33  
The value of ⅓ is 0.3333  
The value of ⅓ is 1/3 
Modulus operation gives the quotient values when one number is divided by another number .
When 1 is divide by 3, the quotient is o
Question 235 
int main()
{
int x=0,i=4;
switch(i)
{
default:x+=5;
cout<<”x=<<x<<”\n”;
Case 4:x+=4;
cout<<”x=<<x<<”\n”;
Case 1:x+=1;
cout<<”x=<<x<<”\n”;
Case 2:x+=2;
cout<<”x=<<x<<”\n”;
Case 3:x+=3;
cout<<”x=<<x<<”\n”;
}
return 0;
}
x=4,x=10  
x=4  
x=10  
x=9 
Question 236 
value=1;
result=(value++ *5)+(value++ *3)
What shall be the answer, after this code is executed?
result=11 or 13  
result=16 or 19  
result=21 or 16  
result=19 or 21 
→Consider the following expression, result=(value++ *5)+(value++ *3), post increements operation will be performed in the expression.
→result=(value++ *5)+(value++ *3) First left side operand evaluates means (1*5+2*3)=11
→result=(value++ *5)+(value++ *3) First right side operand evaluates means (2*5+1*3)=13
Question 237 
Cannot be assigned a value  
Can only be used in static functions  
Cannot be defined in a union  
Can be accessed outside the class 
→In some cases when we need a common data member that should be same for all objects, we cannot do this using normal data members. To fulfill such cases, we need static data members.
→If you are calling a static data member within a member function, member function should be declared as static (i.e. a static member function can access the static data members)
Question 238 
+   
* /  
^(exponentiation)  
MOD 
Question 239 
A function returning a pointer to an array of integers.  
Array of functions returning pointers to integers.  
A function returning an array of pointers to integers.  
An illegal statement. 
Question 240 
x * y < i + j  k
1  
0  
1  
2 
Step1: Evaluate x * y because multiplication has more priority than remaining operators
x * y→ 0
Step2: i + j is 1
Step3: (x*y) < (i+j) is 1. Because relational operators only return 1(TRUE) or 0(FALSE).
Step4: ((x*y) < (i+j))  k is logical OR operator.
1  1 will returns 1.
Note: The precedence is ((x*y) < (i+j))  k
Question 241 
int (*f())[ ];
declares
a function returning a pointer to an array of integers.  
a function returning an array of pointers to integers.  
array of functions returning pointers to integers.  
an illegal statement. 
Question 242 
int f (int n)
{
if (n = = 0) then return n;
else return n + f(n2);
}
2550  
2556  
5220  
5520 
Step1: int f(100)
{ if (100 = = 0) then return 100; /*false*/
else return 100 + f(1002); /* return 198 */
}
Step2: int f(98)
{ if (98 = = 0) then return 98; /*false*/
else return 98 + f(96); /* return 194 */
}
Step3: int f(96)
{ if (96 = = 0) then return 96; /*false*/
else return 96 + f(94); /* return 190 */
}
;
;
Stepfinal:
int f(0)
{ if (0 = = 0) then return 0; /*TRUE*/
else return 0 + f(0); /* FALSE */
}
Actual process:
The above series is nothing but sum of Arithmetic Progression(A.P)
= 2+4+6+8+ ... +98+100
= n(n+1)
/* It is nothing but sum of even numbers upto 'n' */
= 50*51
= 2550
Question 243 
#include
main( )
{
int i, inp;
float x, term=1, sum=0;
scanf(“%d %f ”, &inp, &x);
for(i=1; i<=inp; i++)
{
term = term * x/i;
sum = sum + term ;
}
printf(“Result = %f\n”, sum);
}
The program computes the sum of which of the following series?
x + x ^{2} /2 + x ^{3} /3 + x^{ 4} /4 +...  
x + x ^{2} /2! + x^{ 3} /3! + x^{ 4} /4! +...  
1 + x ^{2} /2 + x^{ 3} /3 + x^{ 4} /4 +...  
1 + x ^{2} /2! + x^{ 3} /3! + x^{ 4} /4! +... 
Let x=5, inp=5
Iteration1:
for(i=1; i<=inp; i++)
/* condition true 1<=5 */
{
term = term * x/i;
/* (1*5)/1=5. Here, 5 nothing but ‘x’ */
sum = sum + term ; /* 0+5=5 */
}
Iteration2: Here, ‘i’ becomes 2.
for(i=2; i<=inp; i++)
/* condition true 2<=5 */
{
term = term * x/i;
/* (5*5)/2 is nothing but x 2 /i */
sum = sum + term ; /* 5+12=17 */
}
;;;
;;;
Iteration5: Here, ‘i’ becomes 5.
for(i=5; i<=inp; i++)
/* condition true 5<=5 */
{
term = term * x/i;
/* (625*5)/5! is nothing but x ^{5} /i! */
sum = sum + term ;
}
So, OptionB is correct answer.
Question 244 
Compiler  
Linker  
Debugger  
Loader 
→ Loader is the program of the operating system which loads the executable from the disk into the primary memory(RAM) for execution. It allocates the memory space to the executable module in main memory and then transfers control to the beginning instruction of the program .
→ Loading a program involves reading the contents of the executable file containing the program instructions into memory, and then carrying out other required preparatory tasks to prepare the executable for running. Once loading is complete, the operating system starts the program by passing control to the loaded program code.
Question 245 
(Assume that the appropriate preprocessor directives are included and there is no syntax error)
main( )
{
char S[ ] = "ABCDEFGH";
printf ("%C", *(&S[3]));
printf ("%s", S+4);
printf ("%u", S);
/* Base address of S is 1000 */
}
ABCDEFGH1000  
CDEFGH1000  
DDEFGHH1000  
DEFGH1000 
Step2: printf ("%C", *(&S[3]));
This statement will print character ‘D’
(&S[3]) → Will print address of index 3
*(&S[3]) → will print value in index 3. The value is nothing but ‘D’.
Step3: printf ("%s", S+4); /* will print characters ‘EFGH’ */
Because previous S value index position is 3. Now we are performing +4 operations. It will print EFGH. we are given escape sequence is String.
Step4: printf ("%u", S); → It will print address of S. The base address given as S is 1000.
Question 246 
the value of x + j == x>n>=m is:
0  
1  
2  
3 
given condition is x + j == x > n >= m
(6.5 + (1.0)) == ((6.5 > 1.0) >= 2.0)
Here, 6.5 is greater than 1.0. so, it will print TRUE value is 1
Step2: (5.5 == (1 >= 2.0))
Here, 1 is less than 2.0. So, it will print FALSE value is 0
Step3: 5.5 == 0
5.5 is not equal to 0. So, it will print FALSE value is 0.
Question 247 
0 x 5089  
0 x 4084  
0 x 78A4  
0 x 3AD1 
Step1: Convert hexadecimal numbers into binary number because we want to perform AND operation.
0x5AB6 equivalent into binary number is 0101 1010 1011 0110
0x61CD equivalent into binary number is 0110 0001 1100 1101
Step2: Perform Bitwise AND operation
0101 1010 1011 0110
0110 0001 1100 1101

0100 0000 1000 0100(Bitwise AND operation)

Step3: Convert result into hexadecimal number.
0100 0000 1000 0100 equivalent into hexadecimal number is 0x4084
Question 248 
int i=4, j=3, k=0;
k= ++i  j + i++    j +j++;
What will be the values of i, j and k after the statement.
7, 2, 8  
5, 2, 10  
6, 2, 8  
4, 2, 8 
Step1: k= ++i j + i++  j +j++;
k= 5  2 + 5  1 + 1
k= (52)+(51)+1
= 3 + 4 + 1
= 8
Step2: The value of i=6,j=2 and k=8
Question 249 
0  
1  
1.5  
None of the above 
Step1: In C language multiplication and division having higher priority than addition and subtraction.
Step2: Evaluating procedure is ((2*3)/4)((3⁄4)* 2)
= ((2*3)/4)((3⁄4)* 2)
= (6/4)((3⁄4)* 2)
= 1  ((3⁄4)* 2)
= 1  0*2
= 1  0
= 1
Question 250 
Serially useable procedures  
Concurrent procedures  
Reentrant procedures  
Top down procedures 
→ The interruption could be caused by an internal action such as a jump or call, or by an external action such as an interrupt or signal. The previous invocations may resume correct execution before the reentered invocation completes, unlike recursion, where the previous invocations may only resume correct execution once the reentered invocation completes.
Rules:
1. Reentrant code may not hold any static or global nonconstant data.
2. Reentrant code may not modify itself.
3. Reentrant code may not call nonreentrant computer programs or routines.
Question 251 
main()
{
printf(''%d%d%d'', sizeof(3.14f), sizeof(3.14), sizeof(3.141));
}
4 4 4  
4 8 10  
8 4 8  
8 8 8  
None of the above 
sizeof(3.14f) → It will consider as float data type. The float data type size is 4 bytes.
sizeof(3.14) → It will consider as double data type. The double data type size is 8 bytes.
sizeof(3.141) → It will consider as double data type. The double data type size is 8 bytes.
Output= 4 8 8
Note: The exact size of each of these 3 types depends on the C compiler implementation (or) platform
Question 252 
35  
7  
42  
39 
(35) _{10} = ( 0010 0011 ) _{2}
(7) _{10} = (0000 0111)_{ 2}
Step2: Perform OR operation on both binary numbers.
0010 0011
0000 0111

0010 0111

Step3: Convert result into Decimal number
(0010 0111) _{2} = (39)_{ 10}
Question 253 
2  
5  
13  
12 
i=i+(11>3) ? 3&2 : 5
/* 11>3 condition true. So, it will perform 3&2
(3)_{10} → (11)_{2}
(2)_{10} → (10)_{2}

10 (AND)

(10)_{2} = (2)_{10}
So, i=3+2
i=5
Note: Instead of ‘f’ they given ‘i’ value in question. Excluded for evaluation.
Question 254 
Serially usable procedure  
Concurrent procedure  
Reentrant procedure  
Top down procedure 
Rules:
1. Reentrant code may not hold any static or global nonconstant data.
2. Reentrant code may not modify itself.
3. Reentrant code may not call nonreentrant computer programs or routines.
Question 255 
int j=1;
bug( )
{
static int i=0; int j=0;
i++;
j++;
return (i);
}
i = 0, j = 0  
i = 3, j = 3  
i = 3, j = 0  
i = 3, j = 1 
Step2: Call1: i=1 and j=1
Call2: i=2 and j=1 because ‘i’ is static ‘j’ is again become 0 when it starts new call.
Call3: i=3 and j=1 because ‘i’ is static ‘j’ is again become 0 when it starts new call.
Note: A static ‘int’ variable remains in memory while the program is running.
Question 256 
main ( )
{
int x=20, y=35;
x= y++ + x++;
y= ++y + ++x;
printf (“%d, %d\n”, x,y);
}
55, 93  
53, 97  
56, 95  
57, 94  
56, 93 
x= 35 + 20
y= 37 + 56 (In this statement, ‘y’ will become 36 before performing pre increment)
Step2: Final x=56 and y=93
Note: They given wrong options. We are added correct option.
Excluded for evaluation.
Question 257 
{
char *str = “abcde”;
printf (“%c”, *str);
printf (“%c”, *str++);
printf (“%c”, *(str++));
printf (“%s”, str);
}
The output of the above ‘C’ code will be :
a a c b c d e  
a a c c c d e  
a a b c d e  
None of these 
main( )
{
char *str = “abcde”;
printf (“%c”, *str); /* It returns character ‘a’ */
printf (“%c”, *str++); /* It returns character ‘a’ because it is used post increment*/
printf (“%c”, *(str++)); /* It returns character ‘b’ because the previous increment is update here and present also they given post increment, so it only returns ‘b’ */
printf (“%s”, str); /* It returns aabcde */
}
Question 258 
are initialized during each execution of the function  
are retained from the last execution  
are maintained in a stack  
are ignored 
Question 259 
search statement like an integer variable  
break statement  
preprocessor commands  
function statement 
→ The enumerator names are usually identifiers that behave as constants in the language. An enumerated type can be seen as a degenerate tagged union of unit type. A variable that has been declared as having an enumerated type can be assigned any of the enumerators as a value.
→ In ‘C’ language exposes the integer representation of enumeration values directly to the programmer. Integers and enum values can be mixed freely, and all arithmetic operations on enum values are permitted. It is even possible for an enum variable to hold an integer that does not represent any of the enumeration values.
Question 260 
int count;
incr( )
{
return ++count;
}
main( )
{
arr[count++]=incr( );
printf(“arr[count]=%d\n”, arr[count]);
}
The value printed by the above program is :
1  
2  
3  
4 
Step2: arr[2] value is 3 , So, it will print the value “3”.
Method2:
→ The function incr() is executed as it is first statement.
→ Count is global variable whose initial value is 0 ,the function definition increments the count value and returns value “1” to the main function.
→ Again the main function, the expression arr[count++] , here count variable operation is post increment so arr[1] will store the value “1”.
→ After that statement , count value becomes “2” as it is incremented in the previous statement (total two increments).
→ Before printing the arr[count] value, the variable “count” is incremented twice then count =2
→ arr[2] value is 3 , so it will print the value “3”.
Question 261 
an arbitrary character is automatically added to the end of the string  
‘0’ is added to the end of the string  
length of the string is added to the end of the string  
‘end’ is added to the end of the string 
→ When onedimensional character array of unspecified length is assigned an initial value ‘0’ is added to the end of the string.
Question 262 
u is an unsigned character  
u is an unsigned integer  
u is a character  
u is a string 
Question 263 
main ( )
{
int count, digit=0;
count=1;
while(digit <=9)
{
printf("%d /n”" , ++count);
++digit;
}
}
10  
9  
12  
11 
It prints the result is
2 /n 3 /n 4 /n 5 /n 6 /n 7 /n 8 /n 9 /n 10 /n 11
Question 264 
Which cannot be initialized  
Which is initialized once at the commencement of execution and cannot be changed at runtime  
Which retains its value throughout the life of the program  
Which is the same as an automatic variable but is placed at the head of a program 
Question 265 
{
int num=0;
do
{
  num;
printf ( ”%d” , num);
num++;
} while (num >50)
}
the loop will run infinitely many times  
the program will not enter the loop  
there will be compilation error reported  
a run time error will be reported 
Question 266 
x and y are both integers only  
x and y are both declared as float only  
x and y are both declared as double only  
x and y are both integers, float or double 
→ A macro is a fragment of code that is given a name. You can use that fragment of code in your program by using the name. For example,
→ #define c 299792458 // speed of light
→ Here, when we use c in our program, it's replaced with 299792458.
→ From the given question, the x and y consists of any data type.
Question 267 
Data in a file  
stdrr  
stdin  
string 
int sprintf ( char * str, const char * format, ... );
Composes a string with the same text that would be printed if format was used on printf, but instead of being printed, the content is stored as a C string in the buffer pointed by str.
Question 268 
a pointer to a function returning array of n pointers to function returning character pointers.  
a function return array of N pointers to functions returning pointers to characters  
an array of n pointers to function returning pointers to characters  
an array of n pointers to function returning pointers to functions returning pointers to characters. 
Question 269 
560  
565  
570  
575 
Offset= (Row number * Total number of columns) + Column Number
Step1: Add the Base address to calculate the effective address. Given matrix is A[20][10], Size of memory word is 4 bytes, address of the location to find A[11][5], Base address is 100.
Step2: Offset = (11*10) + 5
= 115 (multiply with 4 words)
= 115*4
= 460
Step 3: Initial base address is 100
=Offset+base address
= 460 +100
= 560.
Question 270 
p=0;
k=0;
while(k < m)
p = p + 2^{k};
k=k+1;
end while
Which of the following is a loop invariant for the while statement?
(Note: a loop variant for a while statement is an assertion that is true each time guard is evaluated during the execution of the while statement).
p = 2 ^{k} − 1 and 0≤k < m  
p = 2 ^{k+1} − 1 and 0≤k < m  
p = 2 ^{k − 1} and 0≤k≤m  
p = 2 ^{k+1} − 1 and 0≤k≤m 
k=1, P=1+2 ^{1} =3
k=2,P=3+2 ^{2} =7
k=3,P=7+2 ^{3}