卫星圆弧距离和直线距离C语言

麻烦看看哪里出错了,代码过一部分测试点,怎么也找不到解决办法

地球的半径是6440公里。有许多人造卫星围绕着地球运行。如果两颗人造卫星对地球中心形成一个夹角,您能计算出这两颗人造卫星之间的距离吗?距离分别以圆弧距离(arc distance)和直线弦距离(chord distance)来表示。这两颗人造卫星是在同一轨道上(本题设定这两颗人造卫星是在一条圆形路径上,而不是在椭圆路径上,绕地球运行)。
输入输出格式
输入格式
输入包含一个或多个测试用例。.
每个测试用例一行,给出两个整数s和a,以及一个字符串”min”或”deg”;其中s是人造卫星与地球表面的距离,a是这两颗人造卫星对地球中心的夹角。以分(′),或者以度(◦),为单位。输入不会既给出分,又给出度。
输出格式
对于每个测试用例,输出一行,给出两个卫星之间的圆弧距离和直线弦距离,以公里为单位。距离是一个浮点数,保存小数点后的六位数字。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define R 6440
#define P  3.14159265358979323846
int main() 
{
    double a=0,s=0,arc=0,cho=0;
    char angle[4]={0};
    while(scanf("%lf %lf %s",&s,&a,angle)!=-1)
    {
    if(angle[0]=='m') a=a/60;
    a=a*P/180;
    if(a>P)a=2*P-a;
    arc=(s+R)*a;
    cho=2*(s+R)*sin(a/2);
    printf("%.6lf %.6lf",arc,cho);
     
    }
    return 0;
}

img

应该是当两个卫星之间的角度大于180度时,需要转为小于180度的角;

然后将角度转弧度,需要放在计算完圆弧距离之后。

修改如下:

参考链接:


角度与弧度的换算公式?_百度知道 https://zhidao.baidu.com/question/240987150.html

已知弧长,如何求直线距离?_百度知道 https://zhidao.baidu.com/question/991326303167887139.html


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define R 6440
#define P  3.14159265358979323846
//#define P  3.1415926
int main() 
{
    double a=0,s=0,arc=0,cho=0;
    char angle[4]={0};
    while(scanf("%lf %lf %s",&s,&a,angle)!=-1)
    {
       // printf("s=%f,a=%f,angle=%s\n",s,a,angle);
       // 如果输入的角度单位为分,转为对应的角 
        if(angle[0]=='m') a=a/60;
        
     //  printf("a=%f\n",a);
        
        // 如果两个卫星之间的角度大于180度,转为小于180度的角 
        if (a>180){
            a=360-a;
        }
        
        // https://baike.baidu.com/item/%E5%BC%A7%E9%95%BF%E5%85%AC%E5%BC%8F/6024564
        //  求两个卫星直线的圆弧距离 
        arc=a*(s+R)*P/180;
        
        // https://zhidao.baidu.com/question/240987150.html
        // 角度转弧度 
        a=a*P/180;
        // https://zhidao.baidu.com/question/991326303167887139.html
        // 求两个卫星之间的直线距离 
        cho = 2*(s+R)*sin(a/2);
    //    arc=(s+R)*a;
    //    cho=2*(s+R)*sin(a/2);
        printf("%.6lf %.6lf\n",arc,cho);
     
    }
    return 0;
}
 


img

【以下回答由 GPT 生成】

该代码已经是一个完整的解决方案了,没有明显的问题需要解决。代码中通过输入卫星与地球表面的距离s,两颗人造卫星对地球中心的夹角a以及角度单位(分或度),然后通过一系列计算,得到圆弧距离(arc distance)和直线弦距离(chord distance)。最后,使用printf函数将计算结果输出。



【相关推荐】


  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/751224
  • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 我们老师给我们花了100个星星的重要,那就是非常重要,快速排序。名字就很嚣张。。。言归正传,快排采用了分治算法。把大问题,分解成小问题。首先我们先找一个基准值,基准值的寻找法,有很多,这里我先用一个取边上值得方法,找到基准值以后呢拿着这个基准值和所有数组比较,使这个数组中比基准值小的都放左边,比基准值大的都放到右边,然后就把原来数组分成三块,中间基准值,左边都是比它小的,右边都是比它大的。然后这两个数组,继续分,一直分。直到他的终止条件,也就是小数组有序了就停止,那么什么时候有序停止呢?小区间长度为1或者长度为0的时候,就是有序了。所有小数组都有序了,那么就是整个数组有序了。只是原理,那么问题,又来了,怎么放左放右呢?我目前会三种。 部分也许能够解决你的问题。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

可恶!我的代码在本地的测试是对的,到平台上就不对了!然后重启,再用我写的代码就通过了!!!不通过的时候都要自闭了!可恶的平台!