我需要使用哪种数据类型以及%? 我尝试了很多,我只打印了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
}
答案 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);
可能会完成这项工作。 如果是这样,你可以考虑只使用双变量。