2.3k views

Consider the following $C$ code.

#include <stdio.h>
#include <math.h>
void main ()
{
double pi = 3.1415926535;
int a = 1;
int i;
for (i=0; i < 3; i++)
if (a = cos(pi * i/2))
printf("% d", 1);
else printf("%d", 0);
}

What would the program print?

1. $000$
2. $010$
3. $101$
4. $111$

edited | 2.3k views
0
@makhdoom, Is there any typo, I mean check the condition in if. It is single = or double ==. Verify this?

Initially I thought there is a typo in this line

if (a = cos(pi * i/2))

Then I checked the ISRO paper and found that it is correct i.e. @makhdoom has not done any mistake.

According to that,

i = 0  : Cos(0), i.e. a = 1 i.e. condition will be True, hence it will print 1.

i = 1  : Cos(Pi/2) i.e. a = 0 i.e. Condition will be False, Hence It will print 0.

i = 2  : Cos(Pi) i.e. a = -1, i.e. Condition will be True, Hence It will print 1.

by Boss (35.7k points)
selected by
+1
@rude if condition is having assignment operator and not equality operator. So answer should be D). And even if we think as a==cos(pi*i/2) it would still not be 0 exactly it will wil 0.0000 sometihng. So answer should be D) right??
0

In that case answer will be 100, which is not in the option.

0
@rude your answer is correct. Here bcoz data type of a is int answer will be 101. When a=0 then false bcoz it becomes equivalent to if(a) other wise it is true.
0
When I=2 than how 3.1*I/2=-1 give some explanation

for i=0

if(a=cos0)  that means  if(1) which means true . //here a is use for assignment. and on the basis of assigning value of a if condition is checked

then print 1

then for i=1

if(a=cos(pi/2) that means if(0) which is false then print 0 bcz it is treat as if(a) here a is 0

then for i=2

if(a=cos(pi)) that means if(-1) which is true then print 1  same thing hereit is treat as if(a) here a is -1

by Loyal (5.6k points)
0
plz verify @arjun sir ,@manojk, @srestha
0
Please recheck, conditional statements are false only in case of 0. Other that 0, whatever integer value you pass to conditional statement (if-condition), it will treat it as true. Therefore, the correct answer is C. 101
0

@ranjan

if(a = cos(pi * i/2))

here a is assignment ot condition check?

is it typo?

+1
@ sreshta  now see my edit solution
0

but @ranjan tell me one thing u r checking condition with ==

and given

a = cos(pi * i/2)

why?

0
@rajan. look at the condition in if condition. Its =, not ==.
0
@srestha and @rude

o shit!!  i forget to change it .so its blunder now see the solution yr
0
ya Now done :)
0
I think printf() stmt also wrong.if we want to print 0 and 1 wats the need of use %d. 0 and 1 are not variables.
+1 vote
I am answering through elimination technique

cos(pi*0/2)=cos(0)=1

if(a=1) prints 1 //if(a=0) then only will not enter if condition else it enters//

so a and b options are eliminated.

cos(pi/2) surely not 1 (because cos 0=1 )

by (227 points)

Quoting C11 Assignment operators

An assignment operator stores a value in the object designated by the left operand. An assignment expression has the value of the left operand after the assignment,111) but is not an lvalue.

but, anyway i am not 100% sure. stackoverflow is also supporting option d.

by (345 points)