编程不知道哪里出了错

img


为什么当输入-3是按第二个算的,不是按第一个算的?请求回答。能回答一下具体哪里出错吗

错误的原因是因为第二个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;
} 

img

首先 在c语言里面我们不得像数学一样直接连续比较大小关系,要用 逻辑与 && 来连接

例如1 < x <10 表示为 x>1&&x<10
其次 要用
if()
else if()
else if()
来表达你的判断逻辑。这样的if判断结构
,自上而下,当其中一个成立时,下面的都不会被执行