798487012 发表于 2018-9-16 22:06:33

看题目写一个四边形的函数,遇到困难求助大佬

又是我{: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:23:01

本帖最后由 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));
}

下面自己改一下,对应就行了。

人造人 发表于 2018-9-16 23:11:55

上面已经有回复了,但是我花时间研究了这个题目,那就把我的研究成果贴上来吧

#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;
}

人造人 发表于 2018-9-16 23:16:44

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;
}




人造人 发表于 2018-9-16 23:17:20

https://wenda.so.com/q/1379517483068725

claws0n 发表于 2018-9-17 00:21:21

本帖最后由 claws0n 于 2018-9-17 00:23 编辑

人造人 发表于 2018-9-16 23:16


我用算盘敲出来的是 10.0937 ,cos 直接是 145 度的,没有转来转去。
哥哥多除了吧? pi = 180 不是 360,不用再乘 2。

账号还有问题,用手机,所以代码就少打了

人造人 发表于 2018-9-17 01:18:34

claws0n 发表于 2018-9-17 00:21
我用算盘敲出来的是 10.0937 ,cos 直接是 145 度的,没有转来转去。
哥哥多除了吧? pi = 180 不是 3 ...

正确答案不是16.6151吗?
https://zhidao.baidu.com/question/126673677.html

人造人 发表于 2018-9-17 01:19:08

claws0n 发表于 2018-9-17 00:21
我用算盘敲出来的是 10.0937 ,cos 直接是 145 度的,没有转来转去。
哥哥多除了吧? pi = 180 不是 3 ...

例子输入
3
4
5
5
145
例子输出
16.6151

claws0n 发表于 2018-9-17 02:42:36

人造人 发表于 2018-9-17 01:19
例子输入
3
4


最后一个回答的才正确

798487012 发表于 2018-9-17 12:41:43

claws0n 发表于 2018-9-16 22:23
不是呀,那个.....
更正
#define VAL 0.017453


不胜感激!!

798487012 发表于 2018-9-17 12:49:50

感谢实习版主@claws0n 和@人造人 大佬的回答!因为自己数学基础薄弱,在开始看了过后不能理解@claws0n 回答中VAL 0.017453和cos(alpha * VAL);    // VAL 是 pi/180的意思,又不好意思再麻烦,就请教了室友(数学专业)这些问题,才弄,明白在c语言里cos后不能直接加145°,感谢各位大佬!!!{:10_281:}{:10_281:}{:10_281:}{:10_281:}{:10_281:}

798487012 发表于 2018-9-17 12:50:28

人造人 发表于 2018-9-16 23:16


十分感激大佬{:10_254:}

798487012 发表于 2018-9-17 13:23:50

@798487012

人造人 发表于 2018-9-17 13:55:19

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;
}

claws0n 发表于 2018-9-17 14:04:09

人造人 发表于 2018-9-17 13:55
2a是145度
a是145/2度

确实看漏了{:10_279:}

claws0n 发表于 2018-9-17 14:05:30

798487012 发表于 2018-9-17 12:50
十分感激大佬

遗漏了计算,用人造人的。

798487012 发表于 2018-9-17 14:21:46

claws0n 发表于 2018-9-17 14:05
遗漏了计算,用人造人的。

好的{:10_254:}
页: [1]
查看完整版本: 看题目写一个四边形的函数,遇到困难求助大佬