7 votes

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?

- $000$
- $010$
- $101$
- $111$

12 votes

Best answer

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.

Hence answer is **C. 101**

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??

7 votes

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 here****it is treat as if(a) here a is -1**

**so answer is 101**

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 )

so answer is c

comments are welcome!!!

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 )

so answer is c

comments are welcome!!!

0 votes

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.**

therefore, answer is d 111.

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