IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 读取城市坐标,计算任意两个城市之间的距离。 -> 正文阅读

[数据结构与算法]读取城市坐标,计算任意两个城市之间的距离。

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

在这里插入图片描述
在这里插入图片描述
代码描述:

#include <stdio.h>
#include <malloc.h> 
#include <math.h>
#include <string.h> 
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行注释掉
效果显示如下

在这里插入图片描述

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

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

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-16 19:05:28  更:2021-11-16 19:06:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 11:30:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码