我应该使用什么数据类型来打印像64.432785439这样的数字?

时间:2014-09-07 17:37:11

标签: c

我需要使用哪种数据类型以及%? 我尝试了很多,我只打印了0或0.00000

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

int main(int argc, char *argv[]) {
    int ab;
    int ac;
    int bc;
    printf("introdu valoarea laturii AB:\n");
    scanf("%d", &ab);
    printf("introdu valoarea laturii BC:\n");
    scanf("%d", &bc);
    printf("introdu valoarea laturii AC:\n");
    scanf("%d", &ac);
    int per= (bc+ac+ab)/2;
    unsigned int x= sqrt(per*(per - ab)*(per-bc)*(per-ac));

    printf("aria triunghiului este: %x", x);//printarea ariei triunghiului
}

4 个答案:

答案 0 :(得分:2)

您可以使用这样的双倍:

double per= (bc+ac+ab)/2.0;
double x= sqrt(per*(per - ab)*(per-bc)*(per-ac));

printf("aria triunghiului este: %lf", x);

修改: -

如果您没有将int值作为三角形的一侧传递,那么您还需要更改输入变量的数据类型

double ab = 0.0;
double ac = 0.0;
double bc = 0.0;

<强> Working Demo

答案 1 :(得分:1)

printf("aria triunghiului este: aria %.9f", x);

这将打印一个带有九位小数的浮点类型,但您需要float类型,并且x在您的情况下为unsigned int

将您的最后一行更改为:

float per= (bc+ac+ab)/2.0f;
double x= sqrt(per*(per - ab)*(per-bc)*(per-ac)));
printf("aria triunghiului este: aria %.9lf", x);

答案 2 :(得分:1)

您可能需要将所有变量声明为double

double ab=0.0, ac=0.0, bc=0.0, x=0.0;

我认为初始化变量是一个好习惯。您可以使用NAN ...

中的<math.h>对其进行初始化

用例如

阅读
if (scanf("%f", &ab)<=0) 
    { perror("failed ab input"); exit(EXIT_FAILURE); };

使用%g%.6f等打印它们

你绝对需要阅读the floating point guide,即每个程序员应该知道的关于浮点运算的内容

您还应该阅读有关您正在使用的所有标准功能,特别是scanf(3)printf(3)等。

您应该编译所有警告和调试信息(例如gcc -Wall -g),并学习如何使用调试器(例如gdb)。立即了解它!

答案 3 :(得分:0)

无论你的例子如何, 要在c中打印固定点值,您应该使用%f,例如:

double someDoubleVar=64.123132123;
printf("%f",someDoubleVar);

您可以通过执行以下操作来控制点后的位数:

double someDoubleVar=64.123132123;
printf("%.3f",someDoubleVar);

(复制它,你会看到输出将是64.123)。

在你的计划中:

double per= (bc+ac+ab)/2.0;
double x= sqrt(per*(per - ab)*(per-bc)*(per-ac));
printf("aria triunghiului este: %lf", x);

可能会完成这项工作。 如果是这样,你可以考虑只使用双变量。