资讯专栏INFORMATION COLUMN

读取城市坐标,计算任意两个城市之间的距离。

kgbook / 3299人阅读

摘要:要求语言要求纯语言,知识点要求读文件,结构体,动态分配内存,数组,指针,函数,循环,条件判断。

要求:语言要求纯C语言, 知识点要求:读文件,结构体,动态分配内存,数组,指针,函数,循环,条件判断。



代码描述:

#include #include  #include #include  struct Coordinator{	int x;	int y;};typedef struct City{    char name[5];	struct Coordinator place;}Point;void myinprint(FILE *p,Point *q,int n);void myoutprint(Point *q,int n);Point* readfile();double distance(Point *city,char a[],char b[],int n);void closest(Point city[]);double luJin(Point city[],char array[],int n);void disAll(Point city[]);int n;//判断出城市个数; int main() {	Point *point = readfile();	char array[6] = "ABCD";	char a[5],b[5];	printf("/n求距离 请输入一对顶点如(A B):");	scanf("%s %s",a,b);	printf("%s和%s的距离是:%.3lf",a,b,distance(point,a,b,n));	closest(point);//求短距离 	luJin(point,array,n);	disAll(point);	return 0;}Point* readfile(){	FILE *fp = NULL;//读文件必须首先建立一个FILE 指针; 	fp = fopen("test1.txt","r");//打开一个文件 传入的参数为文件路径与名字,与文件操作方式; 	fscanf(fp,"%d",&n);//通过函数fscanf进行存取 	Point *p = (Point*)malloc(n*sizeof(Point));//申请内存;p也为数组的首地址,n就为数组的大小  	printf("有%d个城市/n",n); 	myinprint(fp,p,n);	myoutprint(p,n);//	fclose(fp);//打开一个文件操作完后就得关闭这个文件 //	free(p);//释放内存 	return p;}void myinprint(FILE *p,Point *q,int n){//传入Point 数组 以及 文件大小 	int i;	for(i=0;i<n;i++,q++)		fscanf(p,"%s%d%d",q->name,&q->place.x,&q->place.y);}void myoutprint(Point *q,int n){	int i;	for(i=0;i<n;i++,q++)		printf("%s/t%d/t%d/n",q->name,q->place.x,q->place.y);}double distance(Point city[],char a[],char b[],int n){	int i;	int x,x1;	int y,y1;	double c;	for(i=0;i<n;i++){		if(strcmp(city[i].name,a) == 0){			x = city[i].place.x;			y = city[i].place.y;		}		if(strcmp(city[i].name,b) == 0){			x1 = city[i].place.x;			y1 = city[i].place.y;		}	}	c = sqrt((double)((x-x1)*(x-x1) + (y-y1)*(y-y1)));	return c;}void closest(Point city[]){	int i=0,j=0;	double min = distance(city,city[0].name,city[1].name,n); 	double c = 0;	char M[5],N[5];	for(i=0;i<n;i++){		for(j=i+1;j<n;j++){			c = distance(city,city[i].name,city[j].name,n);			if(c<min){				min = c;				strcpy(M,city[i].name);				strcpy(N,city[j].name);			}		}	}	printf("/n最近的两个坐标是:%s和%s的距离是:%.3f",M,N,min);}double luJin(Point city[],char array[],int n){	int i,j;	char a[5] ;	char b[5] ;	double K=0;	static double sum[6];	for(i=0;i<4;i++){		a[0] = array[i];		a[1] = "/0";		b[0] = array[i+1];		b[1] = "/0";			sum[i] = distance(city,a,b,n);		K += sum[i];//		printf("%.3f/n",sum[i]);//		printf("总里程%.3f/n",K);	}	printf("总里程%.3f/n",K);} void disAll(Point city[]){	int i,j,k=0;	static double num[10],temp;	for(i=0;i<n;i++){		for(j=i+1;j<n;j++){			num[k] = distance(city,city[i].name,city[j].name,n);			printf("num[%d]=%.3f/n",k,num[k]);			k++;		}		}	printf("/n**********************/n");	for(i=0;i<10;i++){		for(j=0;j<10-i-1;j++){			if(num[j] > num[j+1]){				temp = num[j+1];				num[j+1] = num[j];				num[j] = temp;			}			}	}	for(i=0;i<10;i++){		printf("num[%d]=%.3f/n",i,num[i]);	}	printf("/n**********************/n");	printf("num[%d]=%.3f/n",9/2,num[9/2]);	printf("num[%d]=%.3f/n",9/2+1,num[9/2+1]);	}

结果描述:

要是要求模块功能简单,那就把我的代码注释几行即可;


第30行和第106行注释掉
效果显示如下

详解请关注牛牛,私聊给你过程解析!

但是为了让各位同学有优秀的编程能力,增强动手能力,此代码虽然是完整程序,还是请先独立思考,再拿此程序作为参考,相信你会有更好的解题过程,要是有不妥之处,各位请多多指正,多多包涵

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123499.html

相关文章

  • 完成一个城市选择组件(阿里前端题目,内附知识点、思路)

    摘要:知识点部分简单的说一下我这个城市选择组件和其中的一下知识点后台我用起了一个后台服务,使用的框架,完成满足了我的需求。还有俩个基础组件,分别是滚动组件和城市组件。子组件模板必须包含至少一个插口,否则父组件的内容将会被丢弃。   借用了两个已经久经考验的轮子:fastClick和better-scroll,介意可以就此打住。本文绝对原创,手打,思路清晰,知识不难,不适合大佬观看,谢谢。  ...

    LiangJ 评论0 收藏0
  • 完成一个城市选择组件(阿里前端题目,内附知识点、思路)

    摘要:知识点部分简单的说一下我这个城市选择组件和其中的一下知识点后台我用起了一个后台服务,使用的框架,完成满足了我的需求。还有俩个基础组件,分别是滚动组件和城市组件。子组件模板必须包含至少一个插口,否则父组件的内容将会被丢弃。   借用了两个已经久经考验的轮子:fastClick和better-scroll,介意可以就此打住。本文绝对原创,手打,思路清晰,知识不难,不适合大佬观看,谢谢。  ...

    since1986 评论0 收藏0
  • 完成一个城市选择组件(阿里前端题目,内附知识点、思路)

    摘要:知识点部分简单的说一下我这个城市选择组件和其中的一下知识点后台我用起了一个后台服务,使用的框架,完成满足了我的需求。还有俩个基础组件,分别是滚动组件和城市组件。子组件模板必须包含至少一个插口,否则父组件的内容将会被丢弃。   借用了两个已经久经考验的轮子:fastClick和better-scroll,介意可以就此打住。本文绝对原创,手打,思路清晰,知识不难,不适合大佬观看,谢谢。  ...

    gggggggbong 评论0 收藏0
  • 使用JavaScript实现机器学习和神经学网络

    摘要:我会使用一个先进的神经网络和机器学习框架这个框架,并向你们展示如何用这个框架来实现光学字符辨识,模拟退火法,遗传算法和神经网络。欧氏距离我们从欧氏距离开始谈起,欧氏距离是一个非常简单的概念,适用于不同的机器学习技术。 欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载 heaton-javascript-ml.zip - 45.1 KB 基本介绍 在本文中,你会对如何使用Ja...

    tunny 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<