大连香洲太坑人:解释C程序题

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/10 14:19:02
main ( )
{ int a,b=1,c=0;
if(b!=0) a=5;
printf (“a=%d\t”,a);
if (b==0) a=3;
else a=5;
printf (“a=%d\t\n”,a);
a=1;
if (c<0)
if(b<0) a=3;
else a=5;
printf(“a=%d\t\n”,a);
if (c=b<0) a=3;
else if (b==0) a=5;
else a=7;
printf (“a=%d\t”,a);
printf(“c=%d\t\n”,c);
if (a=c=b) a=3;
printf (“a=%d\t”,a);
printf(“c=%d\t\n”,c);
}
我怎么算出来得:
a=5 a=5
a=5
a=7 c=1
a=3 c=3
我就是不知道它是怎么搞的啊?请问一下那位高手能详解一下这个程序题吗?我在这儿谢谢了啊!
a=5 a=5
a=1
a=7 c=0
a=3 c=1
这是正确答案!

main ( )
{
int a,b=1,c=0;
if(b!=0)
{a=5;}
printf (“a=%d\t”,a);//输出a=5
if (b==0)
{a=3;}
else
{a=5;}
printf (“a=%d\t\n”,a); //输出a=5
a=1;
if (c<0) //因为此时c=0,由于是内嵌if,所以下面的if和else都不做
if(b<0)
{a=3;}
else
{a=5;}
printf(“a=%d\t\n”,a); //输出a=1
if (c=b<0) //因为<优先级高于=,所以可以理解为c=(b<0),即不成立
{a=3;}
else if (b==0)
{a=5;}
else
{a=7;}
printf (“a=%d\t”,a); //输出a=7
printf(“c=%d\t\n”,c); //输出c=0
if (a=c=b) //是=而不是==
{a=3;}
printf (“a=%d\t”,a); //输出a=3
printf(“c=%d\t\n”,c); //输出C=1
好了,我把一楼的写错的2个地方改过来了!这就是正确答案咯!

main ( )
{
int a,b=1,c=0;
if(b!=0)
{a=5;}
printf (“a=%d\t”,a);//输出a=5
if (b==0)
{a=3;}
else
{a=5;}
printf (“a=%d\t\n”,a); //输出a=5
a=1;
if (c<0)
if(b<0)
{a=3;}
else
{a=5;}
printf(“a=%d\t\n”,a); //输出a=5
if (c=b<0) //这里是=而不是==,所以c=b=1
{a=3;}
else if (b==0)
{a=5;}
else
{a=7;}
printf (“a=%d\t”,a); //输出a=7
printf(“c=%d\t\n”,c); //输出c=1
if (a=c=b) //是=而不是==
{a=3;}
printf (“a=%d\t”,a); //输出a=3
printf(“c=%d\t\n”,c);
//输出c=3,这里我也不明白,似乎应该输出c=1,不好意思,不能帮你回答这个问题。
}

这个程序别的地方都显而易见,只有一个地方要注意:
if (c=b<0) a=3; /*这里先将B的值赋给C,再比较此值与0的大小.注意C的值已经被b赋为了1*/
else if (b==0) a=5;
else a=7;

你的第三个printf之前是个if语句的嵌套,没写清楚
应该是a=1;
if (c<0)
if(b<0) a=3;
else a=5;
printf(“a=%d\t\n”,a);
因为首先给a赋值为1,再来判断c是否小于0,显然c=0,不小于0,因此不执行这个嵌套!所以这个地方仍然输出--a=1;然后在后面有if (c=b<0) a=3;这个时候if语句内c被赋值为0,因为b<0为假(0).这时因为a显然是7,而c=0,
最后你的错误是因为if (a=c=b)此时c已经被b赋值1了,所以c=1;if括号内为真即(1),所以输出a=3,c=1.