写出x或y中有一个小于z的表达式,求佬解释
为什么x
x<z&&y>=z||x>=z&&y<z表示x和y中只有一个小于z
而x<z||y<z表示x和y中至少有一个小于z
所以写出x或y中有一个小于z的表达式应该是x<z||y<z
可以参考以下程序
#include <stdio.h>
int main()
{
int x,y,z;
int num=15;
while(num--)
{
scanf("%d%d%d",&x,&y,&z);
int flag=0;
if(x<z&&y>=z||x>=z&&y<z)
{
printf("x=%d y=%d z=%d\n",x,y,z);
printf("x或y中有一个小于z(x<z&&y>=z||x>=z&&y<z)\n\n");
flag=1;
}
if(x<z||y<z)
{
printf("x=%d y=%d z=%d\n",x,y,z);
printf("x或y中有一个小于z(x<z||y<z)\n\n");
flag=1;
}
if(flag==0)
{
printf("!(x<z||y<z)&&!(x<z&&y>=z||x>=z&&y<z)\n\n");
}
}
return 0;
}
你不对是因为少了一个情况:x小于z且y小于z
如果题目没有说至少有一个的话,
你可以写(x<z&&y>=z)||(x>=z&&y<z)试试看
x<z&&y>=z||x>=z&&y<z 中的&&和||都是同等优先级的,从左往右看,但是这个表达式依然不满足题目要求。
如果 x<z 这个条件不满足,那么&&右边的所有表达式都不会再执行了。
(x<z&&y>=z)||(x>=z&&y<z) 加上括号就可以。
x<z||y<z
等价于
((x<z&&y>=z)||(x<z&&y<z))||((x>=z&&y<z)||(x<z&&y<z))
x<z&&y>=z||x>=z&&y<z 这个少了1种情况(x<z&&y<z)
区分清楚 “x或y中有一个小于z ” 、“x或y中至少有一个小于z”、“x或y中至多有一个小于z”。
“x或y中有一个小于z ” 包含 x<z ^y>=z 、x>=z^y<z(不含都大于Z和都小于Z)。
“x或y中至少有一个小于z” 包含 x<z ^y>=z 、x>=z^y<z和x<z ^y<z(不含都小于Z)。
“x或y中至多有一个小于z” 包含 x<z ^y>=z 、x>=z^y<z和x>=z ^y>=z(不含都大于Z)。
x<z || y<z 是或运算,一真则真,只要有一个小于表达式的结果就是true,
前面的表达式,需要加个括号,用于分割运算符也是一样的,比如:(x<z && y >= z) || (x>=z&&y<z) 这样就可以了。
x小于z且y小于z
表达式从左到右阅读,你打括号了吗?