学c鱼 发表于 2018-8-6 23:12:45

c语言新手求教!

#include<stdio.h>
#include<math.h>

void main()
{
double a,b,c,disc,x1,x2,p,q;
scanf("%lf,%lf,%lf",&a,&b,&c);
disc = b*b-a*4*c;
p=-b/(2*a);
q=sqrt(disc)/(2*a);
x1=p+q;
x2=p-q;
printf("\nx1=%5.2f\nx2=%5.2f\n",x1,x2);

}
我输入:
3.0,4.0,5.0

x1=30853210449772612000000000000000000000000000000000000000000000.00
x2= 0.00
Press any key to continue
为什么会出现这个情况,是哪里错了??看了好久没看出来,求教!!!



ba21 发表于 2018-8-6 23:35:03



 C语言中sqrt函数是指的开方运算函数,得到的结果是函数变量(可以是数值,也可以是变量名)的算术平方根。如输入m=sqrt(4);,则输出结果为2。或者对于变量a有赋值9,,则输入m=sqrt(9),输出结果为3.

  需要注意的是以下三点:

sqrt函数运行的是结果是算术平方根,即不能运算处负数值,也不能输出虚数结果。如需要得到算术平方根中的负数值,则应该在sqrt函数前添加负号。

sqrt函数的参数必须是非负数值,如果是负数值,则输出会报错,即数值无效;如果参数是未定义的非数字变量,则按回车后也会报错,即变量名有误。

sqrt函数的计算精度与C语言设置的精度有关,可以通过设置更改精度。

claws0n 发表于 2018-8-6 23:53:03

建议写 int main(), return 0。这对调试有帮助。
scanf 里边是没有空格的,但你的输入却有空格,造成无效输入。里边在多重输入的情况,要有空格,才可吸收用户的无限空白之输入。
另外 3 4 5,是共轭复数根,double 不支持

最后,您的代码还是把该空格的地方空一下,不方便阅读~

学c鱼 发表于 2018-8-7 22:18:46

claws0n 发表于 2018-8-6 23:53
建议写 int main(), return 0。这对调试有帮助。
scanf 里边是没有空格的,但你的输入却有空格,造成无效 ...

好的好的,谢谢,我会注意空格的,谢谢您的提醒
那个我的输入没有输入空格我用的是‘,’可能是我打字出来看起来有空格把哈哈
为什么现在我换成2.0,7.0,3.0这个数字还是没打印出正确的答案呢,这个不是共轭复数根了呀。

学c鱼 发表于 2018-8-7 22:20:18

ba21 发表于 2018-8-6 23:35
 C语言中sqrt函数是指的开方运算函数,得到的结果是函数变量(可以是数值,也可以是变量名)的算术平 ...

好的好的,谢谢您的答案,是我没了解清楚那个函数。
可是为什么现在我换成2.0,7.0,3.0的数值还是打印不出正确的答案呢?

claws0n 发表于 2018-8-7 22:42:16

#include<stdio.h>
#include<math.h>

int main()
{
        double a, b, c, disc, x1, x2, p, q;
        scanf("%lf, %lf, %lf",&a,&b,&c);
        disc = (b*b)-(a*4*c);
        p=-b/(2*a);
        q=sqrt(disc)/(2*a);
        x1=p+q;
        x2=p-q;
        printf("\nx1=%5.2f\nx2=%5.2f\n",x1,x2);
       
        return 0;
}
编译器吧,我的用 void main() 会有问题,换成 int main() 就可以。我不喜欢用 void。main() 在一开始的设计是 int 然后配合 return 0 的。这个对调试是有帮助的。

学c鱼 发表于 2018-8-8 21:27:25

claws0n 发表于 2018-8-7 22:42
编译器吧,我的用 void main() 会有问题,换成 int main() 就可以。我不喜欢用 void。main() 在一开始的 ...

好的,谢谢!!
页: [1]
查看完整版本: c语言新手求教!