C语言奇怪问题~高手请进

来源:百度知道 编辑:UC知道 时间:2024/05/18 01:08:16
我要求X与Y之间关系·关系如下
x y
x < 0 0
0 < x ≤ 10 x
10 < x ≤ 20 10
20 < x < 40 -0.5x + 20
左边为X取值,右边为Y的取值;
我写的代码如下
main()
{
int x,y;
printf("x=");
scanf("%d",&x);
if(x<0) y=0;
if(0<x<=10) y=x;
if(10<x<=20) y=10;
if(20<x<40) y=-0.5*x+20;
printf("y=%d",y);
}
运行无任何错误,但是显示是错的
比如我输入5 y=17
输入12 y=14
请问高手我错在什么地方??谢谢了···
x<o时,y=0
0<x<=10 y=x
10<x<=20 y=10
20<x<40 y=-0.5x=20

0<x<=10条件相当于:
先判断0<x,如果x=5,条件为真,也就是1,再做1<10,成立
如果x=15,0<15,条件为真,也是1,再做1<10,成立,
所以所有的if语句都成立,y被不断的赋新值,最后y的值是-0.5*x+20,所以,当x=5时,y=
-0.5*5+20=-3+20=17;当x=12时,y=-0.5*12+20=-6+20=14.
if(0<x<=10)应该写成:0<x&&x<10,&&表示并且

你的判断条件有问题,
哪有这麽写的啊?
if(0<x<=10) 就条件一直成立了.

if(0<x<=10) ====> if( (0<x)&&(x<=10) )
........
.......
.......

main()
{
int x,y;
printf("x=");
scanf("%d",&x);
if(x<0) y=0;
if(0<x||x<=10) y=x;
if(10<x||x<=20) y=10;
if(20<x||x<40) y=-0.5*x+20;
printf("y=%d",y);
}

不能<X<X<=X
要用&&连接~~~