错误的原因是因为第二个if的判断表达式写错了。然后第一个if也执行了 ,只不过被第二个if修改了,执行过程如下:首先判断第一个if, x=-3,所以x<1满足,执行y=x, y=-3.
然后第二个if(1<=x<10) ,根据运算符的优先级和结合律,先计算表达式1<=x,x=-3,所以1<=x 为假,这个表达式值就为0,然后计算0<10, 这个为真,所以当x为-3,第二个if也满足,所以就执行y=2*x-1,y=-7。
第三个if条件不满足,不执行,所以最后打印x=-3,y=-7。
把第二if改为if(x>=1&&x<10)即可。然后如果需要观察计算过程,可以在每个if里面增加一个打印语句,打印下x和y的值。修改如下:
#include <stdio.h>
int main(void){
int x,y;
scanf("%d",&x);
if(x<1) {
y =x;
// printf("第一个if,x=%d,y=%d\n",x,y);
}
if(1<=x<10) {
y=2*x-1;
// printf("第一个if,x=%d,y=%d\n",x,y);
}
if(x>=10) {
y=3*x-11;
// printf("第三个if,x=%d,y=%d\n",x,y);
}
printf("x=%d,y=%d\n",x,y);
return 0;
}
首先 在c语言里面我们不得像数学一样直接连续比较大小关系,要用 逻辑与 && 来连接
例如1 < x <10 表示为 x>1&&x<10
其次 要用
if()
else if()
else if()
来表达你的判断逻辑。这样的if判断结构
,自上而下,当其中一个成立时,下面的都不会被执行