为什么输出结果都为0?
float fabsf(float x); 直接声明fabsf函数而不调用是没有意义的
可以如此调用:x = fabsf(x);
若不想改变x的原值,可写为:y = fabsf(x)+5;
中间0<x<10这样写是有歧义的,会被编译器解释为(0<x)<10
这样无论x为何值,x>0成立返回1,错误返回0,都小于10,原式必为真
没有起到原有的效果,应改为:x>0 && x<10,表示既大于0又小于10
然后建议使用if...else if...else的结构,可简化if判断
最后printf中应该是x和y而不是&x和&y,后者打印的是变量的地址,不是变量值
修改后的代码和运行结果如下:
可见输出正确~
附修改后的源码:
#include <stdio.h>
#include <math.h>
int main(){
float x, y;
scanf("%f", &x);
if (x < 0) {
//x = fabsf(x); // 直接声明float fabsf(float x)是没有意义的
y = x + 5;
// y = fabsf(x)+5; 若不想改变x,可以直接写为该形式
}
else if (x == 0)
y = 0;
else if (x > 0 && x < 10) // 不能写成0<x<10
y= 4 * sqrt(x) - 1;
else // x>=10
y = 3 * x / 4 - 11;
printf("x=%.2f y=%.2f", x, y); // 不用加&
return 0;
}