The Gateway to Computer Science Excellence
+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?

  1. $000$
  2. $010$
  3. $101$
  4. $111$
in Programming by Boss (30.8k points)
edited by | 2.3k views
@makhdoom, Is there any typo, I mean check the condition in if. It is single = or double ==. Verify this?

4 Answers

+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

by Boss (35.7k points)
selected by
@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??

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

@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.
When I=2 than how 3.1*I/2=-1 give some explanation
+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 hereit is treat as if(a) here a is -1

so answer is 101

by Loyal (5.6k points)
plz verify @arjun sir ,@manojk, @srestha
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


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

here a is assignment ot condition check?

is it typo?

@ sreshta  now see my edit solution

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

and given

a = cos(pi * i/2)


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

o shit!!  i forget to change it .so its blunder now see the solution yr
ya Now done :)
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


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!!!
by (227 points)
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.

by (345 points)

Related questions

Quick search syntax
tags tag:apple
author user:martin
title title:apple
content content:apple
exclude -tag:apple
force match +apple
views views:100
score score:10
answers answers:2
is accepted isaccepted:true
is closed isclosed:true
50,737 questions
57,297 answers
104,977 users