gpt4 book ai didi

c - 在C编程中通过给定边查找三角形的角度

转载 作者:行者123 更新时间:2023-12-02 08:23:58 26 4
gpt4 key购买 nike

我在我的 code::blocks 中运行它以显示三角形的 3 个角,其中 3 个边由用户给出。但是,如果我运行并给出 3、4、5 等 3 个边,输出将是 -1.#J -1.#J -1.#J。我的代码有什么问题?

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

int main()
{
float a, b, c, A, B, C, R, s, pi, area;
pi = acos(-1);

scanf("%f %f %f", &a, &b, &c);
s = (a+b+c)/2;
area = sqrt(s*(s-a)*(s-b)*(s-c));

R = (a*b*c)/(4*area);

A = (180/pi)*asin(a/2*R);
B = (180/pi)*asin(b/2*R);
C = (180/pi)*asin(c/2*R);

printf("%.2f %.2f %.2f", A, B, C);


return 0;
}

最佳答案

你需要更多的括号。你有:

A = (180/pi)*asin(a/2*R);

你需要:

A = (180/pi)*asin(a/(2*R));

你写的相当于:

A = (180 / pi) * asin((R * a) / 2);

您还应该检查您的输入,例如拒绝边为 1、1、3 的“三角形”。负数和零长度也应该被拒绝。

修改后的代码

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

int main(void)
{
float a, b, c, A, B, C, R, s, pi, area;
pi = acos(-1);

if (scanf("%f %f %f", &a, &b, &c) != 3)
{
fprintf(stderr, "Failed to read 3 numbers\n");
return 1;
}
if (a <= 0 || b <= 0 || c <= 0)
{
fprintf(stderr, "Sides must be strictly positive\n");
return 1;
}
s = (a + b + c) / 2;
if (a > s || b > s || c > s)
{
fprintf(stderr, "The three sides %.2f, %.2f, %.2f do not form a triangle\n",
a, b, c);
return 1;
}

area = sqrt(s * (s - a) * (s - b) * (s - c));

R = (a * b * c) / (4 * area);

A = (180 / pi) * asin(a / (2 * R));
B = (180 / pi) * asin(b / (2 * R));
C = (180 / pi) * asin(c / (2 * R));

printf("Sides: %6.2f %6.2f %6.2f\n", a, b, c);
printf("Angles: %6.2f %6.2f %6.2f\n", A, B, C);

return 0;
}

请注意,错误消息是在标准错误上报告的。所有输出行都以格式中的换行符结尾。输入数据被回显。所有这些都是好的做法。

示例运行

$ triangle <<< "0 1 3"
Sides must be strictly positive
$ triangle <<< "-1 1 3"
Sides must be strictly positive
$ triangle <<< "1 1 3"
The three sides 1.00, 1.00, 3.00 do not form a triangle
$ triangle <<< "3 4 5"
Sides: 3.00 4.00 5.00
Angles: 36.87 53.13 90.00
$ triangle <<< "3 3 3"
Sides: 3.00 3.00 3.00
Angles: 60.00 60.00 60.00
$ triangle <<< "1 1.4141 1"
Sides: 1.00 1.41 1.00
Angles: 45.00 nan 45.00
$ triangle <<< "1 1 1.4141"
Sides: 1.00 1.00 1.41
Angles: 45.00 45.00 nan
$ triangle <<< "1 1 1.414"
Sides: 1.00 1.00 1.41
Angles: 45.01 45.01 89.98
$ triangle <<< "1 1 1.41421356237309504880"
Sides: 1.00 1.00 1.41
Angles: 45.00 45.00 nan
$

我对 nan 值有点困惑。但是,将数据类型从 float 更改为 double 并适当调整 scanf() 格式(%lf %f) 似乎“解决”了(也许“逃避”这个词更好)这个问题。

关于c - 在C编程中通过给定边查找三角形的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34109796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com