Find Output Of Program

Question 1 :

What will be the output of the program in 16 bit platform (Turbo C under DOS)?

#include
int main()
{
    int fun();
    int i;
    i = fun();
    printf("%d\n", i);
    return 0;
}
int fun()
{
    _AX = 1990;
}


A). Garbage value
B). 0 (Zero)
C). 1990
D). No output
Answer : Option C

Explanation :

Turbo C (Windows): The return value of the function is taken from the Accumulator _AX=1990.
But it may not work as expected in GCC compiler (Linux).


Question 2 :

What will be the output of the program?

#include
void fun(int*, int*);
int main()
{
    int i=5, j=2;
    fun(&i, &j);
    printf("%d, %d", i, j);
    return 0;
}
void fun(int *i, int *j)
{
    *i = *i**i;
    *j = *j**j;
}


A). 5, 2
B). 10, 4
C). 2, 5
D). 25, 4
Answer : Option D

Explanation :

Step 1: int i=5, j=2; Here variable i and j are declared as an integer type and initialized to 5 and 2 respectively.
Step 2: fun(&i, &j); Here the function fun() is called with two parameters &i and &j (The & denotes call by reference. So the address of the variable i and j are passed. )
Step 3: void fun(int *i, int *j) This function is called by reference, so we have to use * before the parameters.
Step 4: *i = *i**i; Here *i denotes the value of the variable i. We are multiplying 5*5 and storing the result 25 in same variable i.
Step 5: *j = *j**j; Here *j denotes the value of the variable j. We are multiplying 2*2 and storing the result 4 in same variable j.
Step 6: Then the function void fun(int *i, int *j) return back the control back to main() function.
Step 7: printf("%d, %d", i, j); It prints the value of variable i and j.

Hence the output is 25, 4.


Question 3 :

What will be the output of the program?

#include
int i;
int fun();
int main()
{
    while(i)
    {
        fun();
        main();
    }
    printf("Hello\n");
    return 0;
}
int fun()
{
    printf("Hi");
}


A). Hello
B). Hi Hello
C). No output
D). Infinite loop
Answer : Option A

Explanation :

Step 1: int i; The variable i is declared as an integer type.
Step 2: int fun(); This prototype tells the compiler that the function fun() does not accept any arguments and it returns an integer value.
Step 3: while(i) The value of i is not initialized so this while condition is failed. So, it does not execute the while block.
Step 4: printf("Hello\n"); It prints "Hello".

Hence the output of the program is "Hello".


Question 4 :

What will be the output of the program?

#include
int reverse(int);
int main()
{
    int no=5;
    reverse(no);
    return 0;
}
int reverse(int no)
{
    if(no == 0)
        return 0;
    else
        printf("%d,", no);
    reverse (no--);
}


A). Print 5, 4, 3, 2, 1
B). Print 1, 2, 3, 4, 5
C). Print 5, 4, 3, 2, 1, 0
D). Infinite loop
Answer : Option D

Explanation :

Step 1: int no=5; The variable no is declared as integer type and initialized to 5.
Step 2: reverse(no); becomes reverse(5); It calls the function reverse() with '5' as parameter.

The function reverse accept an integer number 5 and it returns '0'(zero) if(5 == 0) if the given number is '0'(zero) or else printf("%d,", no); it prints that number 5 and calls the function reverse(5);.
The function runs infinetely because the there is a post-decrement operator is used. It will not decrease the value of 'n' before calling the reverse() function. So, it calls reverse(5) infinitely.

Note: If we use pre-decrement operator like reverse(--n), then the output will be 5, 4, 3, 2, 1. Because before calling the function, it decrements the value of 'n'.


Question 5 :

What will be the output of the program?

#include
void fun(int);
typedef int (*pf) (int, int);
int proc(pf, int, int);

int main()
{
    int a=3;
    fun(a);
    return 0;
}
void fun(int n)
{
    if(n > 0)
    {
        fun(--n);
        printf("%d,", n);
        fun(--n);
    }
}


A). 0, 2, 1, 0,
B). 1, 1, 2, 0,
C). 0, 1, 0, 2,
D). 0, 1, 2, 0,
Answer : Option D