当前位置: 代码迷 >> C语言 >> [求助]请教几道与逻辑运算及分支结构的问题
  详细解决方案

[求助]请教几道与逻辑运算及分支结构的问题

热度:382   发布时间:2006-09-16 14:46:20.0
以下是引用cdmalcl在2006-9-16 14:39:05的发言:

???
怎么和我们这的一个老师出的考试题一样

if后面没加{}
所以只不执行z=x 

那我想再请教亮哥两道题目
[问题求助]请教两道有关c语言分支结构的问题
以下程序的输出结果是
#include"stidio.h"
main()
{int x=1;
if(x=2)
printf("OK");
else if(x<2)printf("%d\n",x);
else printf("Quit");
}
答案是OK,为什么不是1啊?

以下程序的输出结果是
main()
{int x=2,y=-1,z=2;
if(x<y)
if(y<0)z=0;
else z+=1;
printf("%d\n",z);
}
答案是2,为什么不是3啊?


----------------解决方案--------------------------------------------------------
以下是引用inku在2006-9-16 14:46:20的发言:

那我想再请教亮哥两道题目
[问题求助]请教两道有关c语言分支结构的问题
以下程序的输出结果是
#include"stidio.h"
main()
{int x=1;
if(x=2) //if()t条件为真(2).所以会执行打印OK
printf("OK");
else if(x<2)printf("%d\n",x);//这里如果没有else的话也会执行.
else printf("Quit");
}
答案是OK,为什么不是1啊?

以下程序的输出结果是
main()
{int x=2,y=-1,z=2;
if(x<y)
if(y<0)z=0;
else z+=1;
printf("%d\n",z);
}
答案是2,为什么不是3啊?

if(x<y)
{
if(y<0)z=0;
else z+=1;
}
printf("%d\n",z); 匹配问题.


----------------解决方案--------------------------------------------------------
以下是引用inku在2006-9-16 14:46:20的发言:

那我想再请教亮哥两道题目
[问题求助]请教两道有关c语言分支结构的问题
以下程序的输出结果是
#include"stidio.h"
main()
{int x=1;
if(x=2)/*符值运算*/
printf("OK");
else if(x<2)printf("%d\n",x);
else printf("Quit");
}
答案是OK,为什么不是1啊?

以下程序的输出结果是
main()
{int x=2,y=-1,z=2;
if(x<y)
if(y<0)z=0;
else z+=1;  else和最近无对应if对应(没{}指定的时候)
printf("%d\n",z);
}
答案是2,为什么不是3啊?


----------------解决方案--------------------------------------------------------

to:nuciewth
因为x>y所以
{
if(y<0)z=0;
else z+=1;
}
这几步根本就没有执行过,所以z的值还是和原来一样是2对吗?是这样理解的吗?


----------------解决方案--------------------------------------------------------

----------------解决方案--------------------------------------------------------
main()
{int x=1;
if(x=2)/*符值运算*/
这符值运算为什么就是打印OK,我知道反正x<2就要打印出x的值,因为一开始定义了x=1,所以我觉得答案是1,不知道我错在哪里了?
----------------解决方案--------------------------------------------------------
因为整个(x=2)整个表达式的值就是1了 而且x=2
----------------解决方案--------------------------------------------------------
if(x=2),括号里的表达式值为2,故条件成立.

#include<stdio.h>
main()
{
int x;
printf("%d",x=2);
getch();
}
----------------解决方案--------------------------------------------------------
以下是引用cdmalcl在2006-9-16 15:25:12的发言:
因为整个(x=2)整个表达式的值就是1了 而且x=2

是不是因为(x=2)这个表达是1,所以等价与if(x==1),执行打印出OK这个语句,又因为一开始就定义了x=1,所以符合if(x==1),所以答案是OK,我的理解对吗?


----------------解决方案--------------------------------------------------------
以下是引用inku在2006-9-16 16:14:38的发言:

是不是因为(x=2)这个表达是1,所以等价与if(x==1),执行打印出OK这个语句,又因为一开始就定义了x=1,所以符合if(x==1),所以答案是OK,我的理解对吗?

不不不
你可别这么想
你就按照我说的想就行

if(x=2) 这个地方起了两个效果
一个是判断通过 是 判断  
(x=2)表达式等于1 表达式为1 不代表x怎么样
第二个效果就是把2符给x
也就是这个时候 x下存储的值是2了 

第二个效果在这个程序中并没起到作用

而第一个效果判断if条件成立
进行 是 语句的执行
也就是运行了printf("OK");

----------------解决方案--------------------------------------------------------