作者PanYX (Panpeter)
看板C_and_CPP
标题[问题] C语言变数宣告问题
时间Wed Jan 2 23:34:59 2019
开发平台(Platform): (Ex: Win10, Linux, ...)
Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
DEV-C++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
目前已知a,b,c变数宣告为单精度浮点数float答案是正确的
可是为什麽不能把a,b,c变数宣告为double倍精度浮点数?
喂入的资料(Input):
a=1,b=6,c=2
预期的正确结果(Expected Output):
此方程式有两个实根:x=-0.354248762,x=-5.645751
错误结果(Wrong Output):
没有实根
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main (void)
{
double a,b,c;
double value,r1,r2;
printf("请输入a,b,c的值:");
scanf("%f,%f,%f",&a,&b,&c);
value = b*b-4*a*c;
r1=(-b+(float)(sqrt(b*b-4*a*c)))/(2*a);
r2=(-b-(float)(sqrt(b*b-4*a*c)))/(2*a);
if(value>0)
{
printf("此方程式有两个实根:x=%f,x=%f\n",r1,r2);
}
else if(value==0)
{
r1=(-b)/(2*a);
printf("此方程式有两个相等实根:x=%f\n",r1);
}
else
{
printf("没有实根\n");
}
system("pause");
return 0;
}
补充说明(Supplement):
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.205.139.5
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1546443301.A.A8D.html
1F:→ Schottky: scanf 写错了,double float 要用 %lf 01/03 00:08
2F:→ Schottky: 我记得这样写会有Warning? 01/03 00:09
3F:→ PanYX: 因为我是使用dev-c++没测试过其他编译器,他是没有警告的 01/03 00:26
4F:→ PanYX: 所以以後如果是double就要用%lf这样资料比较不会出错吗? 01/03 00:28
5F:→ Schottky: 可能要开 -Wall 选项吧,我习惯Warning全开所以不太确定 01/03 00:34
6F:→ Schottky: 你可以读一下 scanf 的 man page 或说明网页 01/03 00:34
7F:→ PanYX: 好的 我再去看看资料 谢谢S大 01/03 00:42
8F:推 KALR: 题外话,double 或 float 变数不要跟0做比较 01/03 02:33
9F:→ Schottky: 应该说不要做 float == 0 的判断,比大小是可以的 01/03 03:14
10F:→ PanYX: 又学到了一课 谢谢 01/03 04:06
11F:→ Gway: 推文讲的好! 01/09 07:15