鱼C论坛

 找回密码
 立即注册
查看: 1662|回复: 16

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

[复制链接]
发表于 2018-9-16 22:06:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
又是我 题目如图,因为有的函数还没有理解,所以关于一对角之和145°那个函数,直接以B放结果在里面的 ,这个函数输出的结果是错的,不知道怎么改,有没有大佬赐教呀


#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;
}
最佳答案
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));
}

下面自己改一下,对应就行了。
QQ图片20180916215708.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-16 22:23:01 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 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));
}

下面自己改一下,对应就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}

1.png
2.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-16 23:17:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-17 00:21:21 From FishC Mobile | 显示全部楼层
本帖最后由 claws0n 于 2018-9-17 00:23 编辑
人造人 发表于 2018-9-16 23:16


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

账号还有问题,用手机,所以代码就少打了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-17 02:42:36 | 显示全部楼层

最后一个回答的才正确
Screenshot_2018-09-17-02-37-14_1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-17 12:41:43 | 显示全部楼层
claws0n 发表于 2018-9-16 22:23
不是呀,那个.....
更正
#define VAL 0.017453

不胜感激!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-17 12:49:50 | 显示全部楼层
感谢实习版主@claws0n 和@人造人 大佬的回答!因为自己数学基础薄弱,在开始看了过后不能理解@claws0n 回答中VAL 0.017453和cos(alpha * VAL);    // VAL 是 pi/180的意思,又不好意思再麻烦,就请教了室友(数学专业)这些问题,才弄,明白在c语言里cos后不能直接加145°,感谢各位大佬!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-17 12:50:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-17 13:23:50 | 显示全部楼层
@798487012
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-17 14:04:09 From FishC Mobile | 显示全部楼层
人造人 发表于 2018-9-17 13:55
2a是145度
a是145/2度

确实看漏了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-17 14:05:30 From FishC Mobile | 显示全部楼层
798487012 发表于 2018-9-17 12:50
十分感激大佬

遗漏了计算,用人造人的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-17 14:21:46 | 显示全部楼层
claws0n 发表于 2018-9-17 14:05
遗漏了计算,用人造人的。

好的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-30 09:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表