736 views

What will be the output of the following C program?

#include <stdio.h>
int main()
{
int f1(int,int);
int x = 9,n = 3;
printf("%d", f1(x, n));
}

int f1(int x, int n)
{
int y = 1,i = 1;
for(i = 1;i <= n; i++)
y = y * x;
return(y);
}
1. 27
2. 729
3. 81
4. Compilation Error

x = 9, n = 3;
int f1(int x, int n)
{
int y = 1,i = 1;
for(i = 1;i <= n; i++)
y = y * x;
return(y);
}

i = 1,
y = 1, x = 9, n = 3,
y = 1*9 = 9

i = 2,
y = 9, x = 9, n = 3,
y = 9*9 = 81

i = 3,
y = 81, x = 9, n = 3,
y = 81*9 = 729

return (y) i.e. 729

But their is no one to catch the value of function as function is returning integer? pls explain.
It is caught as it is used as an argument to printf. Also, even if it is not caught- there is no issue. Even printf always returns a value, and we rarely catch it.
The function f1(int,int) is defined inside main(). But it is supposed to be declared outside main(). So the code given in the question should generate a compilation error, right?
it is supposed to be declared outside main()

This supposed to be is wrong. There is no requirement that a function declaration must be in the global space. Only issue of doing it inside another function is that, then the declaration is valid only for that function.
Kindly clarify @Arjun sir,
So we can declare functions inside functions but can not define a function inside another function in C ,right?
edited by
you can define, declare, call functions inside functions in C.

EDIT: nested function declarations are part of the C standard but nested definitions are not.

@air1 I first declare the function inside the main function. Then after some code. I define that function inside the main function. I got this error: "error: a function-definition is not allowed here before '{' token
{"

@Hemant Thanks for pointing. Just checked that nested functions are not a part of the C standard. They are just supported by GCC.

You can get rid of that error by prepending the auto to the declaration.
edited by
1st time y=y*x;

y=1*9=9;

2nd time loop will run

y=y*x=9*9=81;

3rd time loop will run

and again y=y*x=81*9=729;

and next time condition will be false  because i!<=n

so y will return as o/p hence ans. is

729.