看题目写一个四边形的函数,遇到困难求助大佬
又是我{:10_256:} 题目如图,因为有的函数还没有理解,所以关于一对角之和145°那个函数,直接以B放结果在里面的{:10_297:} ,这个函数输出的结果是错的,不知道怎么改,有没有大佬赐教呀{:10_297:}#include<stdio.h>
#include<math.h>
void area(double a,double b,double c,double d)
{
double s=(a+b+c+d)/2,S,B;
B=(2-sqrt(2))/4;
S=sqrt((s-a)*(s-b)*(s-c)*(s-d)-a*b*c*d*B);
printf("%f\n",S);
}
int main()
{
double a,b,c,d;
printf("输入4条边长");
scanf("%f %f %f %f",&a,&b,&c,&d);
area(a,b,c,d);
return 0;
}
本帖最后由 claws0n 于 2018-9-16 22:37 编辑
不是呀,那个.....
更正
#define VAL 0.017453
double area(double a, double b, double c, double d, double alpha)
{
double s = (a+b+c+d)/2, B;
B = cos(alpha * VAL); // VAL 是 pi/180
return sqrt((s-a)*(s-b)*(s-c)*(s-d)-(a*b*c*d*B*B));
}
下面自己改一下,对应就行了。 上面已经有回复了,但是我花时间研究了这个题目,那就把我的研究成果贴上来吧
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <math.h>
double Area(double a, double b, double c, double d, double m)
{
double s = 1.0 / 2.0 * (a + b + c + d);
double p = m * M_PI / (2 * 180);
return sqrt((s - a) * (s - b) * (s - c) * (s - d) - (a * b * c * d * cos(p) * cos(p)));
}
int main(void)
{
printf("%.4lf\n", Area(3, 4, 5, 5, 145));
return 0;
}
claws0n 发表于 2018-9-16 22:23
不是呀,那个.....
更正
#define VAL 0.017453
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <math.h>
double Area(double a, double b, double c, double d, double m)
{
double s = 1.0 / 2.0 * (a + b + c + d);
double p = m * M_PI / (2 * 180);
return sqrt((s - a) * (s - b) * (s - c) * (s - d) - (a * b * c * d * cos(p) * cos(p)));
}
#define VAL 0.017453
double area(double a, double b, double c, double d, double alpha)
{
double s = (a + b + c + d) / 2, B;
B = cos(alpha * VAL); // VAL 是 pi/180
return sqrt((s - a)*(s - b)*(s - c)*(s - d) - (a*b*c*d*B*B));
}
int main(void)
{
printf("%.4lf\n", Area(3, 4, 5, 5, 145));
printf("%.4lf\n", area(3, 4, 5, 5, 145));
return 0;
}
https://wenda.so.com/q/1379517483068725 本帖最后由 claws0n 于 2018-9-17 00:23 编辑
人造人 发表于 2018-9-16 23:16
我用算盘敲出来的是 10.0937 ,cos 直接是 145 度的,没有转来转去。
哥哥多除了吧? pi = 180 不是 360,不用再乘 2。
账号还有问题,用手机,所以代码就少打了 claws0n 发表于 2018-9-17 00:21
我用算盘敲出来的是 10.0937 ,cos 直接是 145 度的,没有转来转去。
哥哥多除了吧? pi = 180 不是 3 ...
正确答案不是16.6151吗?
https://zhidao.baidu.com/question/126673677.html claws0n 发表于 2018-9-17 00:21
我用算盘敲出来的是 10.0937 ,cos 直接是 145 度的,没有转来转去。
哥哥多除了吧? pi = 180 不是 3 ...
例子输入
3
4
5
5
145
例子输出
16.6151 人造人 发表于 2018-9-17 01:19
例子输入
3
4
最后一个回答的才正确 claws0n 发表于 2018-9-16 22:23
不是呀,那个.....
更正
#define VAL 0.017453
不胜感激!! 感谢实习版主@claws0n 和@人造人 大佬的回答!因为自己数学基础薄弱,在开始看了过后不能理解@claws0n 回答中VAL 0.017453和cos(alpha * VAL); // VAL 是 pi/180的意思,又不好意思再麻烦,就请教了室友(数学专业)这些问题,才弄,明白在c语言里cos后不能直接加145°,感谢各位大佬!!!{:10_281:}{:10_281:}{:10_281:}{:10_281:}{:10_281:} 人造人 发表于 2018-9-16 23:16
十分感激大佬{:10_254:} @798487012 claws0n 发表于 2018-9-17 02:42
最后一个回答的才正确
2a是145度
a是145/2度
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <math.h>
double Area(double a, double b, double c, double d, double m)
{
double s = 1.0 / 2.0 * (a + b + c + d);
double p = m / 180 * M_PI;
return sqrt((s - a) * (s - b) * (s - c) * (s - d) - (a * b * c * d * pow(cos(p / 2), 2)));
}
int main(void)
{
printf("%.4lf\n", Area(3, 4, 5, 5, 145));
return 0;
}
人造人 发表于 2018-9-17 13:55
2a是145度
a是145/2度
确实看漏了{:10_279:} 798487012 发表于 2018-9-17 12:50
十分感激大佬
遗漏了计算,用人造人的。 claws0n 发表于 2018-9-17 14:05
遗漏了计算,用人造人的。
好的{:10_254:}
页:
[1]