(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
Q.42 What is the return value of f(p,p), if the value of p is initialized to 5 before the call? Note that  
+
What is the return value of f(p,p), if the value of p is initialized to 5 before the call? Note that the first parameter is passed by reference, whereas the second parameter is passed by value.  
the first parameter is passed by reference, whereas the second parameter is passed by value.  
+
 
 
  <syntaxhighlight lang="c">
 
  <syntaxhighlight lang="c">
 
int f (int &x, int c) {  
 
int f (int &x, int c) {  
Line 9: Line 9:
 
}  
 
}  
 
</syntaxhighlight >
 
</syntaxhighlight >
 +
 
(A) 3024  
 
(A) 3024  
  
Line 18: Line 19:
  
 
===Solution===
 
===Solution===
In GATE 2013 marks were given to all as the same code in C/C++ produces undefined behavior. This is because * is not a sequence point. The correct code must replace
+
In GATE 2013 marks were given to all as the same code in C/C++ produces undefined behavior. This is because * is not a sequence point in C/C++. The correct code must replace
 
  return f(x,c) * x;  
 
  return f(x,c) * x;  
 
with
 
with
Line 24: Line 25:
 
  return res * x;
 
  return res * x;
  
In this code, there will be 4 recursive calls with parameters (6,4), (7,3), (8,2) and (9,1). The last call returns 1. But, because of pass by reference, in all the previous functions, x is now 9. Hence, the value returned by f(p,p) will be 9 * 9 * 9 * 9 * 1 = 6561.
+
In this code, there will be 4 recursive calls with parameters (6,4), (7,3), (8,2) and (9,1). The last call returns 1. But due to pass by reference, x in all the previous functions is now 9. Hence, the value returned by f(p,p) will be 9 * 9 * 9 * 9 * 1 = 6561.
  
 
{{Template:FBD}}
 
{{Template:FBD}}
Line 30: Line 31:
  
 
[[Category: GATE2013]]
 
[[Category: GATE2013]]
[[Category: Previous year GATE questions]]
+
[[Category: Programming Languages questions from GATE]]
 
[[Category:Coding Questions]]
 
[[Category:Coding Questions]]

Latest revision as of 12:02, 15 July 2014

What is the return value of f(p,p), if the value of p is initialized to 5 before the call? Note that the first parameter is passed by reference, whereas the second parameter is passed by value.

<syntaxhighlight lang="c">

int f (int &x, int c) {

c = c - 1; 
if (c==0) return 1; 
x = x + 1; 
return f(x,c) * x; 

} </syntaxhighlight >

(A) 3024

(B) 6561

(C) 55440

(D) 161051

Solution

In GATE 2013 marks were given to all as the same code in C/C++ produces undefined behavior. This is because * is not a sequence point in C/C++. The correct code must replace

return f(x,c) * x; 

with

res = f(x,c);
return res * x;

In this code, there will be 4 recursive calls with parameters (6,4), (7,3), (8,2) and (9,1). The last call returns 1. But due to pass by reference, x in all the previous functions is now 9. Hence, the value returned by f(p,p) will be 9 * 9 * 9 * 9 * 1 = 6561.




blog comments powered by Disqus

Q.42 What is the return value of f(p,p), if the value of p is initialized to 5 before the call? Note that the first parameter is passed by reference, whereas the second parameter is passed by value.

<syntaxhighlight lang="c">

int f (int &x, int c) {

c = c - 1; 
if (c==0) return 1; 
x = x + 1; 
return f(x,c) * x; 

} </syntaxhighlight > (A) 3024

(B) 6561

(C) 55440

(D) 161051

Solution[edit]

In GATE 2013 marks were given to all as the same code in C/C++ produces undefined behavior. This is because * is not a sequence point. The correct code must replace

return f(x,c) * x; 

with

res = f(x,c);
return res * x;

In this code, there will be 4 recursive calls with parameters (6,4), (7,3), (8,2) and (9,1). The last call returns 1. But, because of pass by reference, in all the previous functions, x is now 9. Hence, the value returned by f(p,p) will be 9 * 9 * 9 * 9 * 1 = 6561.




blog comments powered by Disqus