>第 4 章 分支语句>布尔代数>习题

mici 759719925@qq.com
2002-02-14 11:48:56

x*(y+z)=x*y+x*z 不准确
应为:
x*(y+z)=(x*y)+(x*z)


刘艳明 lonny_liu@hotmail.com
2009-04-02 00:32:41

宋老师,你好!
下面的答案对吗?
2、x<=0&&y<=0
3、x==1||y==1
4、x>=3可以省掉


宋劲杉 songjinshan@akaedu.org
2009-04-05 09:51:29

2对
3对
4、x>=3 && y>=3 这个条件可以去掉


zhuangzhy zhuangzhy@gmail.com
2009-08-10 10:26:20

if (x > 0 && x < 10);
else
	printf("x is out of range.\n");
改写成下面这种形式:

if ( x>=10 || x <=0 )
	printf("x is out of range.\n");
正确与否


码匠 code_smith@sohu.com
2009-09-01 21:23:37

哪位能帮着用宋老师给的公式解答一下?


码匠 code_smith@sohu.com
2009-09-02 09:34:49

1. a = x>0
   b = y<10

¬(a*b) = ¬a + ¬b 

i.e.
x<=0 || y>=10


码匠 code_smith@sohu.com
2009-09-02 09:39:38

2.设a = x>0, 则 ¬a = x<=0
    b = y>0, 则 ¬b = y<=0

¬a*¬(¬a*b)=¬a*¬b

i.e.
x<=0 && y<=0


码匠 code_smith@sohu.com
2009-09-02 09:45:17

3. 设a=x>1, b=x<1, c=(y!=1)
¬(a*c)*¬(b*c)
=¬¬¬(a*c)*¬(b*c)
=¬(a*c + b*c)
=¬(c(a+b)
=¬c + ¬(a+b)

i.e
y==1 || x==1


码匠 code_smith@sohu.com
2009-09-02 09:47:05

4. 第四题貌似复杂,谁玩出来了?请举手


Laciq dd@qq.com
2009-10-05 12:21:57

4.
if (x<3)
		printf("Test OK!\n");
	else if (y>=3)
		printf("Test OK!\n");
	else if (z>3)
		printf("Test OK!\n");
	else
		printf("Test failed!\n");
I not sure.


mmmcat jy28520@gmail.com
2009-10-19 16:59:24

第三题不是一个答案吧?只要y是1,x的值随便写一个就行了,gcc编译通过。第一题逻辑上有错误吧,用或的方法能写一个闭合的区域?不明白


宋劲杉 songjinshan@akaedu.org
2010-01-21 16:15:47

你的逻辑相当有问题。多练练吧。


crow crow@hotmail.com
2010-03-19 17:22:01

第一题 “;”分号是重点。别漏看了!


laicqs 530107999@qq.com
2010-04-17 11:50:34

分号不可能漏看,因为既然有else,if后面的语句一定要有;,又因为那代码是书中的,错误的几率很低,所以这时候应该会怀疑自己读代码是否有问题了。
所以即使没看到;,当看到else时也应该回去找分号才对。


段云 233377377@qq.com
2010-11-23 03:25:03

第四题不懂 请老师解释一下可以吗


lingshiying lingshiying@126.com
2011-03-09 17:30:54

第三道题只要X = 1,Y不管等于多少都会进入到最后一个else吧!


lingshiying lingshiying@126.com
2011-03-16 11:22:31

1、X < 0|| y > 10
2、X <= 0 && y <= 0
3、只要X == 1,Y等于多少根本无所谓。因为C编译器只要检测到与逻辑的第一个条件为0,就不会去计算后面的条件,直接判断为0。
4、X >= 3 && y >= 3可以去掉。这个题我是这样思考的:printf("Test failed!\n");这个语句在Y < 3的情况下一定会执行。所以行printf("Test OK!\n");语句要执行,y 必须 >= 3。所以这个条件其实是多余的。我们再看第判断语句
if (x<3 && y>3),X < 3情况下执行printf("Test OK!\n");如果x 不小于3,那么就说明X >= 3,那么如执行到else if (x>=3 && y>=3)
的时候,其实x一定是大于等于3了,否则就是y < 3,执行的是最后一条语句。所以(X >= 3 && y >= 3)这个句子是对于的。


guoyu gguoyu@126.com
2011-06-10 00:55:34

第四题,如果满足第二个条件
x>=3 && y >= 3,那么第三第四个条件一定满足
因为 此时无论z取什么值,三和四两个条件必有一个为真,所以第二个条件是可以去掉的


gogodick gogodick@163.com
2011-08-09 16:18:47

第四题是由课文中的定理决定的:
x*y+¬x*z+y*z=x*y+¬x*z
这里y*z就对应x>=3 && y>=3
剩下的就是怎么证明这条定理了,
y=1,z=1时,x+¬x+1=x+¬x=1
y=0,z=0时,0+0+0=0+0=0
y=1,z=0时,x+0+0=x+0=x
y=0,z=1时,0+¬x+0=0+¬x=¬x


caozhijie czj627@126.com
2011-12-23 23:52:34

“第四题,如果满足第二个条件
x>=3 && y >= 3,那么第三第四个条件一定满足”

这种说法是不对:第二个条件式的值为1,只能推导出第三第四个条件式必有一个为真。如果能推到出第三第四个条件都为真,那么去掉第三和第四个两个条件分支,不是更好吗?

正确的说法是:如果第三第四个条件式的值都为1,那么第二个条件式的值一定为1。所以第二个条件分支可以去掉。


ssnobig5 ssnobig5@gmail.com
2012-07-09 23:27:58

第三道确实表述有问题,逻辑推导出来是x==1||y==1,但程序实际运行的时候只需要x==1就可以到最后的else。


ssnobig5 ssnobig5@gmail.com
2012-07-09 23:41:35

仔细想想不对,第三道答案确实是x==1||y==1。因为中间是或逻辑…计算机跟数学还是不矛盾的。
也说明带入法会片面,逻辑推导才准确。


冲前总死 peacefultd@gmail.com
2013-01-09 15:14:21

第四题在三维坐标系里面画一下不就行了吗?

结论是第二个if可以去掉。


如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!