注册 登录
编程论坛 C语言论坛

新手求教,请问我的问题出在哪里

mentoBrisc 发布于 2020-04-08 07:57, 2317 次点击
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    float x,y;
    scanf("%f",&x);
    if(x<=5)
    {
        if(x<-5)
        y=abs(x)-5;
        else
     y=2*pow(x,2.5)-3*x+3;
    }
        else y=sqrt(pow(x,2)-25);

       printf("y=%.2f",y);

        return 0;

}

等我输入值为负数(-2,-5)
就会y=-1.#J

[此贴子已经被作者于2020-4-8 08:02编辑过]

9 回复
#2
lin51616782020-04-08 08:18
pow(负数, 2.5) 是错的
负数不能做开根

[此贴子已经被作者于2020-4-8 08:32编辑过]

#3
mentoBrisc2020-04-08 08:19
回复 2楼 lin5161678
只有本站会员才能查看附件,请 登录
可是题目就是这么要求的。。。。。
#4
lin51616782020-04-08 08:32
以下是引用mentoBrisc在2020-4-8 08:19:43的发言:

 可是题目就是这么要求的。。。。。

那就是题目错了
#5
mentoBrisc2020-04-08 08:34
回复 4楼 lin5161678
好的,谢谢解答
#6
纯蓝之刃2020-04-08 08:56
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    float x,y;
    scanf("%f",&x);
    if(x<=5)
    {
        if(x<-5)
            y=fabs(x)-5;
        else
            y=2*pow(fabs(x),2.5)*(fabs(x)/x)-3*x+3;
    }
    else
        y=sqrt(pow(x,2)-25);

    printf("y=%.2f",y);

    return 0;

}
#7
lin51616782020-04-08 09:09
以下是引用纯蓝之刃在2020-4-8 08:56:39的发言:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    float x,y;
    scanf("%f",&x);
    if(x<=5)
    {
        if(x<-5)
            y=fabs(x)-5;
        else
            y=2*pow(fabs(x),2.5)*(fabs(x)/x)-3*x+3;
    }
    else
        y=sqrt(pow(x,2)-25);

    printf("y=%.2f",y);

    return 0;

}

看不懂为什么要
乘以 (fabs(x)/x)
#8
邹峰研2020-04-08 09:57
回复 楼主 mentoBrisc
把pow(x,)改成pow(abs(x),),负数改成绝对值,反正都要平方了。
#9
邹峰研2020-04-08 09:58
回复 8楼 邹峰研
是fabs
#10
计算机好难啊2020-04-08 11:07
负数是不能开根号的 (-2)的2.5次方就相当于(-2)的5次方再开根号,就相当于根号(-32),所以是错误的,题目有问题
1