比较一个空间点与两群点的重心的距离,用c语言编

Python012

比较一个空间点与两群点的重心的距离,用c语言编,第1张

/*

DEV C++及VC++2002编译运行通过(当然是只用C)

输入坐标时格式为:

X Y Z

*/

#include <stdlib.h>

#include <stdio.h>

#include <assert.h>

#define PointInit(p) p[0]=0.0,p[1]=0.0,p[2]=0.0

#define PointAdd(p0,p1) p0[0]+=p1[0],p0[1]+=p1[1],p0[2]+=p1[2]

#define PointDiv(p,n) p[0]/=n,p[1]/=n,p[2]/=n

#define PointDiff(p0,p1) (p0[0]-p1[0])*(p0[0]-p1[0])+(p0[1]-p1[1])*(p0[1]-p1[1])+(p0[2]-p1[2])*(p0[2]-p1[2])

int main(int argc, char* argv[]){

double g0[3],g1[3],t[3]

int n,m

PointInit(g0)PointInit(g1)PointInit(t)

printf("输入点群1内点的个数:")

for(assert(scanf("%d",&n)==1),printf("输入点:\n"),m=nn>0n--,PointAdd(g0,t))

assert(scanf("%lf %lf %lf",&t[0],&t[1],&t[2])==3)

PointDiv(g0,m)

printf("输入点群2内点的个数:")

for(assert(scanf("%d",&n)==1),printf("输入点:\n"),m=nn>0n--,PointAdd(g1,t))

assert(scanf("%lf %lf %lf",&t[0],&t[1],&t[2])==3)

PointDiv(g1,m)

printf("点群1重心:%f,%f,%f\n点群2重心:%f,%f,%f\n",g0[0],g0[1],g0[2],g1[0],g1[1],g1[2])

for(printf("\n请输入测试距离的点:")scanf("%lf %lf %lf",&t[0],&t[1],&t[2])==3)

{

double d0=PointDiff(g0,t),d1=PointDiff(g1,t)

if(d0==d1) printf("与两个点群重心的距离相等\n")

else if(d0>d1) printf("与点群2重心的较近\n")

else printf("与点群1重心的较近\n")

}

return 0

}

三角形的重心坐标公式x=(x1+x2+x3)/3,y=(y1+y2+y3)/3

两点距离 sqrt[(x1-x2)(x1-x2)+(y1-y2)(y1-y2)]

#include <math.h>

main(){

clrscr()

printf("顶点为 (1.5,2)(3,1)(2.1,4)的三角形\n")

printf("重心坐标为(%4.1f,%4.1f)\n",(1.5+3+2.1)/3,(2+1+4)/3)

printf("三边长为%5.3f %5.3f %5.3f \n",sqrt((1.5-3)*(1.5-3)+(2-1)*(2-1)),

sqrt((1.5-2.1)*(1.5-2.1)+(2-4)*(2-4)), sqrt((2.1-3)*(2.1-3)+(4-1)*(4-1)),)

}

c语言是很多人都想学习的内容,但是很多人都不知道如何开头。

学习c言语,是可以分成几个阶段来学习的:

1.初级阶段

这个阶段,其实就是入门阶段。这个阶段的学习办法也很简单,看书、做题。不过这个简单的看书做题却又有一些留意事项。就是书看什么书,题做什么题。首先,关于初学来说,我以为看谭浩强的c言语就能够了,毕竟是初学,不用看难度太大、写的太深的书。至于做题,分两种方式,一种是把谭浩强c言语对应的题集买下来,好好地做一遍;另外一种是把这些题再在电脑里面编一遍。纸上做题是为了锻炼思想、稳固根底,电脑上编程才是真正的学致使用,两者都需求停止。置信依照这个过程,会提升你对c言语的兴味,也能让你快速入门。

有人可能会说谭浩强的c言语太浅,这里我要解释下为什么我要引荐这本书。由于我觉得作为初学者,应该由浅入深,上来就看太难的东西,会消除本人的学习兴味。

2.中级阶段

这个阶段,是对c言语的进阶阶段。这个阶段的学习办法是看书、练习、琢磨。这个阶段的重点倾向于c言语语法背后的原理,例如全局变量和部分变量在内存中分配的区别,又比方栈中分配和分配在堆中又有什么区别等等。这个阶段需求看的书应该主要是《c专家编程》、《c圈套与缺陷》这样的书。在这里,我还要特别引荐一本宋劲杉写的《c言语一站式编程》。这本书的作者固然不是计算机专业的,但是我以为真的写得十分好,关于理解c言语背后的原理,十分合适。经过这个阶段,你对c言语曾经有一个十分不错的功底了。

3.进阶

这个阶段的标题我没有用高级阶段,只用了进阶。由于我觉得高级阶段要懂得东西太多,而且不只仅限于c言语自身或者是编程的东西,所以我用了进阶。

在这个阶段主要是对算法和数据构造上面的学习。入门首先引荐严蔚敏的数据构造。这本书不厚,都是根底的学问,需求将这本书中的学问好好地控制。这本书学完,数据构造根本上没有问题了,根底算法也理解一些了。那么就能够再学习《算法导论》,并且选择一些算法本人入手完成。

当然,这个阶段你也能够选择不重点在算法上面研讨。除了严蔚敏的数据构造是必需控制的外,你也能够选择学习《unix环境高级编程》、《unix网络编程》这样的书籍停止学习。但是我倾向于算法的学习。

4.实战

阅历了上面三个阶段,我以为你根本上曾经晓得本人还要学哪些、该怎样学习了。但是我还是要提示你,这个时分还能够找一个c言语完成的开源项目,好好的研讨一下。个人以为最好的就是linux内核源码。

总结

c言语作为一门编程言语,应该是每个软件开发人员都应该控制的,而对计算机专业的学生来说更是根底。假如你依照我上面说的步骤,把这些学问都控制的话,置信你的c言语可以到达一个较好的程度。