一个入门级C语言编程问题

已知地球的平均半径为6371.393千米,假设在地球的某一纬度上,有两个处于不同经度的点A、B,用C语言编程求出这两点之间的直线距离、这两点在该纬度剖面上切圆的劣弧长度,以及这两点之间的球面距离。
以下是我写的代码。
#include "stdio.h"
#include "math.h"
main()
{
double x,y,z,t,s,d,l,R,r=6378.137,pi=3.1415926;
scanf("%lf%lf%lf",&x,&y,&z);
if((t=fabs(z-y))>180)
t=360-t;
t=2*pi*t/360;
x=fabs(x);
x=2*pi*x/360;
R=r*cos(x);
l=2*R*sin(t/2);
s=R*t;
d=r*t;
printf("%f,%f,%f\n",l,s,d);
system("pause");
return 0;
}
老师给的参考数据是

北纬0度,东经0度,东经90度——直线距离=9010.510271,纬度切圆劣弧长度=10008.160550,球面距离=10008.160550
而我求出来的是,9020.047727,10018.754000,10018.754000
老师要求尽可能高的精确度
我是哪里出了问题

除法那里,如: .../360 .../2 改成 .../360.0 .../2.0 试一下吧

scanf里面的小数点位或者是定义的double精度不够,,改一下试试

printf("%f,%f,%f\n",l,s,d);
为什么不用高精度实数?

不知道你问得是什么,是答案和老师给的不一样吗,如果是这个,你看下【已知地球的平均半径为6371.393千米】,你程序中的半径是r=6378.137,半径都不一样,结果能一样吗?

为什么不用double型。如果精度还不够,可以自己设计一个高精度数据类型

这就是简单的数学计算问题啊,只需要找到公式如何用C语言表示就行了。http://wenku.baidu.com/link?url=9zSIC6ovvQqDQ6orhloCPav2vOQp-4NZMjTPsPdAWMzFuHjxyY3HStrnksx4CWk-ykC7X5ysoaRvowcLHBPKeUwORKGz4-5qbdex1lT58Xi这里有些简单的数学公式,是否能够满足你的要求。

劣弧长?老师有没有给你计算公式?

其实,你老师已经把这道题简化了很多了
因为处于同一纬度的AB两点
那么刚好是纬度剖面的一个小圆
这个小圆(不大于赤道剖面的那个圆)的半径 根据纬度很容易得到,即r*cos纬度值,
假设得到小圆半径为r-latitude
那AB两点直线距离,根据经度也可以得到,即r-latitude * sin (经度差/2)
这里要注意经度差应该小于180度
对应的,根据上面的经度差,也可以求得纬度剖面上的劣弧长度
即 2π*r-latitude/经度差

最后,求球面距离,
这里,注意到,不管是纬度剖面还是球面,都不会改变AB两点的直线距离,这一事实的。
所以,这时候,你知道一个三角形的三条边(两个地球半径r,一个AB直线距离)

很容易求得AB两点的球面夹角的度数(反三角函数),同样也可以求得AB两点的球面距离了

个人理解

你在程序中的地球半径与题目中的地球半径不一样。。。。参数错误