首页 > 解决方案 > 余弦规则程序产生不正确的结果

问题描述

我一直在尝试使用余弦规则在三角形中找到角度,但是当我运行它时,程序一直给我 -1。这是我下面的代码,我需要帮助。

#include<studio.h>
#include<math.h>

int main()
{
// a , b and c are the lengths of the triangle.
   int a = 7;
   int b = 4;
   int c = 10;
   double Angle_a;
   double Angle_b;
   double Angle_c;
   Angle_a = acos( (pow(b,2)+pow(c,2)-pow(a,2))/2*b*c);
   Angle_b = acos( (pow(a,2)+pow(c,2)-pow(b,2))/2*a*c);
   Angle_c = acos( (pow(a,2)+pow(b,2)-pow(c,2))/2*a*b);
   Printf("%lf\n%lf\n%lf", Angle_a , Angle_b , Angle_c);
   
   return 0;
}

标签: c

解决方案


问题在于关联性。当您编写一个表达式时,x/2*a*b它被视为

x
- * a * b
2

因为乘法和除法具有相同的优先级和左结合性。

但是你想要

    x
  -----
  2*a*b

您需要添加括号来强制进行此分组。

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

int main()
{
// a , b and c are the lengths of the triangle.
    int a = 7;
    int b = 4;
    int c = 10;
    double Angle_a;
    double Angle_b;
    double Angle_c;
    Angle_a = acos( (pow(b,2)+pow(c,2)-pow(a,2))/(2*b*c));
    Angle_b = acos( (pow(a,2)+pow(c,2)-pow(b,2))/(2*a*c));
    Angle_c = acos( (pow(a,2)+pow(b,2)-pow(c,2))/(2*a*b));
    printf("%lf\n%lf\n%lf", Angle_a , Angle_b , Angle_c);
   
    return 0;
}

这打印

0.578104
0.317560
2.245928

推荐阅读