怎样用c语言编写下面这个问题,困扰我好多天了:

已知地球的平均半径为6371千米,假设在地球的同一纬度上,有两个处于不同经度的城市A、B,编程序求出这两个城市之间的地面距离。... 已知地球的平均半径为6371千米,假设在地球的同一纬度上,有两个处于不同经度的城市A、B,编程序求出这两个城市之间的地面距离。 展开
 我来答
无有之见
2012-03-13 · TA获得超过8113个赞
知道小有建树答主
回答量:1398
采纳率:0%
帮助的人:805万
展开全部
解题思路是这样的:
1、先计算两城市的径度间隔α。 因为东经180度和西经180度重合,所以只要两城市在同一侧(如都是东经)就取差值;在不同侧 就取和,但和如超过180度,就要用360度来减,才是实际的经度差α。

2、再求出两城市(A、B)与地心连线之间的夹角β。【估计你被困在这里】
如果A、B在赤道上,那么β就是经度差α,而如果都在极点,β就等于0,在此之间呢?β等于α乘以纬度的余弦,即 β=α*cos(纬度值) 。推理过程从略,自己去想哈。

3、地球周长*β/360 就是两地的距离啦

代码你自己整吧,应该木有问题吧?
追问
可以再帮我写一写程序吗?这道题实在太难了,纠结死我了
追答
#include 
#include
#define PI 3.14159
#define R 6371

viod main()
{
double aj,bj,w,alfa,beta,dis;
printf("请输入A城市的经度(东经为正,西经为负) : ");
scanf("%f",&aj);
printf("请输入B城市的经度(东经为正,西经为负) : ");
scanf("%f",&bj);
printf("请输入两城市的纬度: ");
scanf("%f",&w);

alfa=(fabs(aj-bj)<180)?fabs(aj-bj):360-fabs(aj-bj);
beta=alfa*cos(w*PI/180);
dis=2*PI*R*beta/360;

printf("两城间的距离为 : %.2f千米。\n",dis);
}
xoalyg
2012-03-13 · TA获得超过4178个赞
知道大有可为答主
回答量:2356
采纳率:100%
帮助的人:2348万
展开全部
设A城市的经度为α,B城市的经度为β,则二城市间的经度差为γ = α - β,可得两城市之间的距离为: S = 2πRγ/360°。
/*
请输入第一个城市的经度 : 121
请输入第二个城市的经度 : 122
两城间的距离为 : 111.19千米。
Press any key to continue
^/
#include <stdio.h>
#include <math.h>

int main() {
double alpha,beita,gama,S;
double R = 6371,PI = 3.1415927;
printf("请输入第一个城市的经度 : ");
scanf("%lf",&alpha);
printf("请输入第二个城市的经度 : ");
scanf("%lf",&beita);
gama = fmod(fabs(alpha - beita), 360); // fmod(ouble x, double y),返回x/y的余数
S = 2 * PI * R * gama / 360;
printf("两城间的距离为 : %.2lf千米。\n",S);
return 0;
}
追问
你说输入的是东经还是西经啊,东经、西经又怎么输入呢
,在不同的纬度上半径不一样,那又怎么求啊
追答
1、gama = fmod(fabs(alpha - beita), 360);`中已经考虑到东西经之间的差别,且假定东经为正,西经为负。
2、这只是赤道上两个城市之间距离的算法。如果需要计算不同纬度、不同经度之间的距离要麻烦的多。
设地球半径为R,球心为O,A城的经纬度为A(ja,wa),B城的经纬度为B(jb,wb),连接点C(ja,wb),那么平面三角形△ABC是直角三角形,且直线AC² = 2R² - 2R²cos(wa - wb),BC² = 2R² - 2R²cos(jb - ja),故AB = √(AC² + BC²)。连接AO、BO,设∠AOB的角度为α,则在△AOB中,由余弦定理得cosα = (2R² - AB²)/(2R²) = 1 - (1/2)(AB/R)²。可求得弧AB = απR/180°。
/* 下面是北京和上海之间距离的计算实例。
请输入A城市的经度(东经为正,西经为负) : 116.24
请输入A城市的纬度(南纬为正,北纬为负) : -39.55
请输入B城市的经度(东经为正,西经为负) : 121.29
请输入B城市的纬度(南纬为正,北纬为负) : -31.24
两城间的距离为 : 1081.79千米。
Press any key to continue
*/
#include
#include

int main() {
double wa,wb,ja,jb,dw,dj,alpha,AB,AC2,BC2,S;
double const R = 6371,PI = 3.1415927;
printf("请输入A城市的经度(东经为正,西经为负) : ");
scanf("%lf",&wa);
printf("请输入A城市的纬度(南纬为正,北纬为负) : ");
scanf("%lf",&ja);
printf("请输入B城市的经度(东经为正,西经为负) : ");
scanf("%lf",&wb);
printf("请输入B城市的纬度(南纬为正,北纬为负) : ");
scanf("%lf",&jb);
dw = fmod(fabs(wa - wb),360);
dj = fmod(fabs(jb - ja),360);
AC2 = 2 * R * R * (1 - cos(PI * dw / 180));
BC2 = 2 * R * R * (1 - cos(PI * dj / 180));
AB = sqrt(AC2 + BC2);
alpha = acos(1 - pow(AB/R,2) / 2);
S = alpha * R;
printf("两城间的距离为 : %.2lf千米。\n",S);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淦海瑶s1
2012-03-13 · TA获得超过3646个赞
知道大有可为答主
回答量:3341
采纳率:100%
帮助的人:729万
展开全部
给你个比较全的算法,在不同经度维度上
设A的经度是j1,维度w1,B的经度为j2,维度为w2
地球圆心为O,从A做垂直线AC到赤道面,B做垂直线BD到赤道面
从B做垂直线BE到AC线
这样模型建立好了,
先假设地球半径为1,也就是OA,OB长度为1。最后求出的数值乘以6371就可以

现在计算

先计算OC,OD长度,OC=cos(j1)*OA=cos(j1),OD=*OB=cos(j2)
再计算AC,BD长度,AC=sin(ji)*OA=sin(ji),BD=sin(j2)*OB=sin(j2)
计算CD长度,也就是BE的长度,这个用与玄定理
cos(w2-w1)=(OC^2+OD^2-CD^2)/2*OC*OD
整理CD=sqrt(OC^2+OD^2-2*OC*OD*cos(w2-w1))=BE
这样,在直角三角形ABE中,BE知道,AE是AC和BD的差或者和(这个要是在同一南北半球是差,在不同的南北半球是和,看j1和j2的取值)
AB可以求出
AB=sqrt(BE^2+AE^2)
AB求出来了,这样就可以求出角AOB的弧度
cos(AOB)=(OA^2+OB^2-AB^2)/2*OA*OB=(2-AB^2)/2
AOB弧度求出来了,那么弧AB也就没有问题了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qq414657161
2012-03-13 · TA获得超过103个赞
知道答主
回答量:154
采纳率:0%
帮助的人:39.5万
展开全部
百度新手? 刷下任务 打扰了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式