【问题标题】:How to get answers of calculations in form of exponent(i.e-6.6.7e-11) in C language [duplicate]如何在C语言中以指数(即6.6.7e-11)的形式获得计算答案[重复]
【发布时间】:2016-07-12 17:33:49
【问题描述】:

我是 stackoverflow 的新手,很抱歉我的问题或问题格式过长。

我试过这个程序来计算重力。到目前为止,我已经尝试过这些东西,但它们似乎不起作用。

#include <stdio.h>
#include <conio.h>
#include <math.h>
#define G 6.67e-11


main()

{

 long double r;

 long double m1,m2,F;
printf("Enter m1:-");
scanf("%Lf",&m1);
printf("Enter m2:-");
scanf("%Lf",&m2);
printf("Enter distance between m1 and m2:-");
scanf("%Lf",&r);
F=(G*m1*m2)/(r*r);
printf("The force is:-%Le",F);

return; 

}

现在我在最后一行代码中尝试了许多变体。

printf("The force is:-%e",F);

我尝试使用 %Lf 而不是 %e,因为我已将 F 定义为 long double。 同样,当我按上述方式运行代码并输入以下输入时

即。

Enter m1:10

Enter m2:2

Enter m3:10

回答为

 force is:1.327e-317

而不是 1.334e-11。

我用计算器计算的。

如果#define 有问题,请详细说明我如何以指数形式定义常数并将它们用于类似的计算。

请帮忙。

【问题讨论】:

    标签: c


    【解决方案1】:

    scanf 将变量的地址写入其中,但printf 将值作为参数。 由于printf是一个可变参数函数,它无法检查参数类型,所以你必须传递正确的类型。

    改为这样做:

    printf("The force is:-%e",F);
    

    我已点击链接并添加该开关适用于 Windows:

    -D__USE_MINGW_ANSI_STDIO
    
    The force is:-1.334000e-011
    

    【讨论】:

    • 是的,谢谢,我删除了 & 符号。并以 double 作为数据类型运行代码。和最后一个 printf 中的 %e 但有效的输出是 #QNAN0e+000
    【解决方案2】:

    您使用了错误的格式说明符来打印结果。

    Flong double 类型,但 %e 用于 double。您需要使用%Le

    使用错误的格式说明符会导致undefined behavior

    另外,对于printf,您需要传入F,而不是&amp;F

    【讨论】:

    • 先生,我刚刚按照您的建议进行了尝试,但不幸的是,答案仍然是 1.327e-317。
    • @Samarth 您是否修复了格式说明符删除了F 之前的&amp;
    • 是的,我做到了。并且正如你所说,我将数据类型更改为 double 并保留 %e 并运行程序。但输出是#QNAN0e+000
    • @Samarth 不,不要更改数据类型。将其保留为long double,并将printf 中的%e 更改为%Le
    • owww 可能与 MinGW 相关的问题:stackoverflow.com/questions/26296058/…
    猜你喜欢
    • 2021-12-11
    • 2023-04-10
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2020-05-12
    • 2012-01-29
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多