C Language | Set 5 - GeeksforGeeks

27 Mar, 2017
Following questions have been asked in GATE CS 2008 exam.
1. What is printed by the following C program?
int f(int x, int *py, int **ppz){   int y, z;   **ppz += 1;     z  = **ppz;   *py += 2;    y = *py;   x += 3;   return x + y + z;}  void main(){   int c, *b, **a;   c = 4;    b = &c;   a = &b;     printf( "%d", f(c,b,a));   getchar();}
(A) 18(B) 19(C) 21(D) 22
Answer (B)
/* Explanation for the answer */    /*below line changes value of c to 5. Note that x remains unaffected     by this change as x is a copy of c and address of x is different from c*/  **ppz += 1     /* z is changed to 5*/  z  = **ppz;    /* changes c to 7, x is not changed */   *py += 2;     /* y is changed to 7*/  y = *py;       /* x is incremented by 3 */   x += 3;       /* return 7 + 7 + 5*/  return x + y + z; 
2. 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}main(){  printf ("Enter Text ") ;  printf ("\n") ;  reverse();  printf ("\n") ;}
(A) ?1 is (getchar() != ’\n’)?2 is getchar(c);(B) ?1 is (c = getchar() ) != ’\n’)?2 is getchar(c);(C) ?1 is (c != ’\n’)?2 is putchar(c);(D) ?1 is ((c = getchar()) != ’\n’)?2 is putchar(c);
Answer(D)getchar() is used to get the input character from the user and putchar() to print the entered character, but before printing reverse is called again and again until ‘\n’ is entered. When ‘\n’ is entered the functions from the function stack run putchar() statements one by one. Therefore, last entered character is printed first.You can try running below program
void reverse(void); /* function prototype */  void reverse(void) {  int c;  if (((c = getchar()) != '\n'))     reverse();    putchar(c);}main(){  printf ("Enter Text ") ;  printf ("\n") ;  reverse();  printf ("\n") ;  getchar();}
For questions 3 & 4, consider the following C functions:
int f1(int n){  if(n == 0 || n == 1)    return n;  else    return (2*f1(n-1) + 3*f1(n-2));}  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[i-1] + Z[i-2];    Y[i] = 2*X[i];    Z[i] = 3*X[i];  }  return X[n] ;}
3. The running time of f1(n) and f2(n) are(A) Θ(n) and Θ(n)(B) Θ(2^n) and Θ(n)(C) Θ(n) and Θ(2^n)(D) Θ(2^n) and Θ(2^n)
Answer (B)For f1(), let T(n) be the function for time complexity.
  T(n) = T(n-1) + T(n-2) 
Above recursion is a standard one for Fibonacci Numbers. After solving the recursion, we get
 T(n) = 1/sqrt(5)[(1 + sqrt(5))/2]^n - 1/sqrt(5)[(1 - sqrt(5))/2]^n 

Above recursion can also be written as Θ(1.618.^n)(Please see this).
In f2(), there is a single loop, so time complexity is Θ(n)
Among all the 4 given choices, (B) looks closest.
4. f1(8) and f2(8) return the values(A) 1661 and 1640(B) 59 and 59(C) 1640 and 1640(D) 1640 and 1661
Both functions perform same operation, so output is same, means either (B) or (C) is correct.f1(2) = 2*f1(1) + 3*f1(0) = 2f1(3) = 2*f1(2) + 3*f1(1) = 2*2 + 3*1 = 7f1(4) = 2*f1(3) + 3*f1(2) = 2*7 + 3*2 = 20f1(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 = 182f1(7) = 2*f1(6) + 3*f1(5) = 2*182 + 3*61 = 364 + 183 = 547f1(8) = 2*f1(7) + 3*f1(6) = 2*547 + 3*182 = 1094 + 546 = 1640
Please write comments if you find any of the answers/explanations incorrect, or you want to share more information about the topics discussed above.
GATE-CS-2008
GATE-CS-C-Language
GATE CS
MCQ
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Differences between TCP and UDP
Introduction of Operating System - Set 1
Inter Process Communication (IPC)
Semaphores in Process Synchronization
Data encryption standard (DES) | Set 1
Data Structures and Algorithms | Set 25
Operating Systems | Set 1
Practice questions on Height balanced/AVL Tree
Computer Networks | Set 2
Computer Networks | Set 1