为什么输出结果都为0?

 我来答
xgn911
2022-11-04 · TA获得超过1363个赞
知道小有建树答主
回答量:1493
采纳率:96%
帮助的人:642万
展开全部

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;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式