x*(y+z)=x*y+x*z 不准确 应为: x*(y+z)=(x*y)+(x*z)
宋老师,你好! 下面的答案对吗? 2、x<=0&&y<=0 3、x==1||y==1 4、x>=3可以省掉
2对 3对 4、x>=3 && y>=3 这个条件可以去掉
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"); 正确与否
哪位能帮着用宋老师给的公式解答一下?
1. a = x>0 b = y<10 ¬(a*b) = ¬a + ¬b i.e. x<=0 || y>=10
2.设a = x>0, 则 ¬a = x<=0 b = y>0, 则 ¬b = y<=0 ¬a*¬(¬a*b)=¬a*¬b i.e. x<=0 && y<=0
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
4. 第四题貌似复杂,谁玩出来了?请举手
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.
第三题不是一个答案吧?只要y是1,x的值随便写一个就行了,gcc编译通过。第一题逻辑上有错误吧,用或的方法能写一个闭合的区域?不明白
你的逻辑相当有问题。多练练吧。
第一题 “;”分号是重点。别漏看了!
分号不可能漏看,因为既然有else,if后面的语句一定要有;,又因为那代码是书中的,错误的几率很低,所以这时候应该会怀疑自己读代码是否有问题了。 所以即使没看到;,当看到else时也应该回去找分号才对。
第四题不懂 请老师解释一下可以吗
第三道题只要X = 1,Y不管等于多少都会进入到最后一个else吧!
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)这个句子是对于的。
第四题,如果满足第二个条件 x>=3 && y >= 3,那么第三第四个条件一定满足 因为 此时无论z取什么值,三和四两个条件必有一个为真,所以第二个条件是可以去掉的
第四题是由课文中的定理决定的: 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
“第四题,如果满足第二个条件 x>=3 && y >= 3,那么第三第四个条件一定满足” 这种说法是不对:第二个条件式的值为1,只能推导出第三第四个条件式必有一个为真。如果能推到出第三第四个条件都为真,那么去掉第三和第四个两个条件分支,不是更好吗? 正确的说法是:如果第三第四个条件式的值都为1,那么第二个条件式的值一定为1。所以第二个条件分支可以去掉。
第三道确实表述有问题,逻辑推导出来是x==1||y==1,但程序实际运行的时候只需要x==1就可以到最后的else。
仔细想想不对,第三道答案确实是x==1||y==1。因为中间是或逻辑…计算机跟数学还是不矛盾的。 也说明带入法会片面,逻辑推导才准确。
第四题在三维坐标系里面画一下不就行了吗? 结论是第二个if可以去掉。
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!