Looping Question and Answer
(1) What will be output of following
c code?
#include<stdio.h>
extern int x;
int main(){
do{
do{
printf("%o",x);
}
while(!-2);
}
while(0);
return 0;
}
int x=8;Explanation
Output: 10
Explanation:
Here variable x is extern type. So
it will search the definition of variable x. which is present at the end of the
code. So value of variable x =8
There are two do-while loops in the
above code. AS we know do-while executes
at least one time even that condition is false.
So program control will reach at
printf statement at it will print octal number 10 which is equal to decimal
number 8.
Note: %o is used to print the
number in octal format.
In inner do- while loop while
condition is ! -2 = 0
In C zero means false. Hence program control will come out of the
inner do-while loop. In outer do-while loop while condition is 0.
That is again false. So program control will also come out of the outer
do-while loop.(2) What will be output of following c code?
#include<stdio.h>
int main(){
int i=2,j=2;
while(i+1?--i:j++)
printf("%d",i);
return 0;
}Explanation
Output: 1
Explanation:
Consider the while loop condition: i + 1 ? -- i : ++j
In first iteration:
i + 1 = 3 (True)
So ternary operator will return -–i i.e. 1
In c 1 means true so while
condition is true. Hence printf statement will print 1
In second iteration:
i+ 1 = 2 (True)
So ternary operator will return -–i i.e. 0
In c zero means false so while
condition is false. Hence program control will come out of the while loop.(3) What will be output of following c code?
#include<stdio.h>
int main(){
int x=011,i;
for(i=0;i<x;i+=3){
printf("Start ");
continue;
printf("End");
}
return 0;
}Explanation
Output: Start Start Start
Explantion:
011 is octal number. Its equivalent decimal value is 9.
So, x = 9
First iteration:
i = 0
i < x i.e. 0 < 9
i.e. if loop condition is true.
Hence printf statement will print: Start
Due to continue keyword program
control will come at the beginning of the for loop and value of variable i will
be:
i += 3
i = i + 3 = 3
Second iteration:
i = 3
i < x i.e. 3 < 9 i.e. if loop condition is true.
Hence printf statement will print: Start
Due to continue keyword program
control will come at the beginning of the for loop and value of variable i will
be:
i += 3
i = i + 3 = 6
Third iteration:
i = 3
i < x i.e. 6 < 9 i.e. if loop condition is true.
Hence printf statement will print: Start
Due to continue keyword program
control will come at the beginning of the for loop and value of variable i will
be:
i += 3
i = i + 3 = 9
fourth iteration:
i = 6
i < x i.e. 9 < 9 i.e. if loop condition is false.
Hence program control will come out of the for loop.
(4) What will be output of
following c code?
#include<stdio.h>
int main(){
int i,j;
i=j=2,3;
while(--i&&j++)
printf("%d %d",i,j);
return 0;
}
Explanation
Output: 13
Explanation:
Initial value of variable
i = 2
j = 2
Consider the while condition : --i && j++
In first iteration:
--i && j++
= 1 && 2 //In c
any non-zero number represents true.
= 1 (True)
So
while loop condition is true. Hence printf function will print value of i = 1
and j = 3 (Due to post increment operator)
In second iteration:
--i && j++
= 0 && 3 //In c zero represents false
= 0 //False
So
while loop condition is false. Hence program control will come out of the for
loop.(5) What will be output of following c code?
#include<stdio.h>
int main(){
static int i;
for(++i;++i;++i) {
printf("%d ",i);
if(i==4) break;
}
return 0;
}
Explanation
Output: 24
Explanation:
Default value of static int variable
in c is zero. So, initial value of variable i = 0
First iteration:
For loop starts value: ++i i.e. i = 0 + 1 = 1
For loop condition: ++i i.e. i = 1
+ 1 = 2 i.e. loop condition is true. Hence printf statement will print 2
Loop incrimination: ++I i.e. i = 2 + 1 =3
Second iteration:
For loop condition: ++i i.e. i = 3
+ 1 = 4 i.e. loop condition is true. Hence printf statement will print 4.
Since is equal to for so if
condition is also true. But due to break keyword program control will come out
of the for loop.
(6) What will be output of
following c code?
#include<stdio.h>
int main(){
int i=1;
for(i=0;i=-1;i=1) {
printf("%d ",i);
if(i!=1) break;
}
return 0;
}Explanation
Output: -1
Explanation:
Initial value of variable i is 1.
First iteration:
For loop initial value: i = 0
For loop condition: i = -1 . Since
-1 is non- zero number. So loop condition true. Hence printf function will
print value of variable i i.e. -1
Since variable i is not equal to 1.
So, if condition is true. Due to break keyword program control will come out of
the for loop.
(7) What will be output of
following c code?
#include<stdio.h>
int main(){
for(;;) {
printf("%d ",10);
}
return 0;
}
Explanation
Output: Infinite loop
Explanation:
In for loop each part is optional.
(8) What will be output of
following c code?
#include<stdio.h>
int r();
int main(){
for(r();r();r()) {
printf("%d ",r());
}
return 0;
}
int r(){
int static num=7;
return num--;
}
Explanation
Output: 5 2
Explanation:
First iteration:
Loop initial value: r() = 7
Loop condition: r() = 6
Since condition is true so printf function will print r() i.e. 5
Loop incrimination: r() = 4
Second iteration:
Loop condition: r() = 3
Since condition is true so printf function will print r() i.e. 2
Loop incrimination: r() = 1
Third iteration:
Loop condition: r() = 0
Since condition is false so program
control will come out of the for loop.
(9) What will be output of
following c code?
#include<stdio.h>
#define p(a,b) a##b
#define call(x) #x
int main(){
do{
int i=15,j=3;
printf("%d",p(i-+,+j));
}
while(*(call(625)+3));
return 0;
}
Explanation
Output: 11
Explanation:
First iteration:
p(i-+,+j)
=i-++j // a##b
=i - ++j
=15 – 4
= 11
While condition is : *(call(625)+ 3)
= *(“625” + 3)
Note: # preprocessor operator convert
the operand into the string.
=*(It will return the memory address of character ‘\0’)
= ‘\0’
= 0 //ASCII value of
character null character
Since loop condition is false so
program control will come out of the for loop.
(10) What will be output of
following c code?
#include<stdio.h>
int main(){
int i;
for(i=0;i<=5;i++);
printf("%d",i)
return 0;
}
Explanation
Output: 6
Explanation:
It possible for loop without any body.
(11) What will be output of
following c code?
#include<stdio.h>
int i=40;
extern int i;
int main(){
do{
printf("%d",i++);
}
while(5,4,3,2,1,0);
return 0;
} Explanation
Output: 40
Explanation:
Initial value of variable i is 40
First iteration:
printf function will print i++ i.e. 40
do - while condition is : (5,4,3,2,1,0)
Here
comma is behaving as operator and it will return 0. So while condition is false
hence program control will come out of the for loop.
(12) What will be output of
following c code?
#include<stdio.h>
char _x_(int,...);
int main(){
char (*p)(int,...)=&_x_;
for(;(*p)(0,1,2,3,4); )
printf("%d",!+2);
return 0;
}
char _x_(int a,...){
static i=-1;
return i+++a;
}
Explanation
Output: 0
Explanation:
In c three continuous dot
represents variable number of arguments.
p is the pointer to the function _x_
First iteration of for loop:
Initial value: Nothing // In c it is optional
Loop condition: (*p)(0,1,2,3,4)
= *(&_x_)(0,1,2,3,4) // p = &_x_
= _x_(0,1,2,3,4) //* and & always cancel to each other
= return i+++a
= return i+ ++a
= return -1 + 1
= 0
Since
condition is false. But printf function will print 0. It is bug of c language.
(13) What will be output of
following c code?
#include<stdio.h>
int main(){
int i;
for(i=10;i<=15;i++){
while(i){
do{
printf("%d
",1);
if(i>>1)
continue;
}while(0);
break;
}
}
return 0;
}
Explanation
Output: 1 1 1 1 1 1
For loop will execute
six times.
Note:
continue keyword in do-while loop bring the program its while condition (while(0))
which is always false.
(14) How many times this loop will
execute?
#include<stdio.h>
int main(){
char c=125;
do
printf("%d ",c);
while(c++);
return 0;
}
Explanation
Output: Finite times
Explanation:
If we will increment the char
variable c it will increment as:
126,127,-128,-127,126 . . . .
, 3, 2, 1, 0
When variable c = 0 then loop will terminate.
(15) What will be output of
following c code?
#include<stdio.h>
int main(){
int x=123;
int i={
printf("c" "++")
};
for(x=0;x<=i;x++){
printf("%x ",x);
}
return 0;
}Explanation
Output: c++0 1 2 3
Explanation:
First printf function will print:
c++ and return 3 to variable i.
For loop will execute three time
and printf function will print 0, 1, 2 respectively.
0 comments:
Post a Comment