日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/9 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读取城市坐标,计算任意两个城市之间的距离。 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

要求:語言要求純C語言, 知識(shí)點(diǎn)要求:讀文件,結(jié)構(gòu)體,動(dòng)態(tài)分配內(nèi)存,數(shù)組,指針,函數(shù),循環(huán),條件判斷。



代碼描述:

#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;//判斷出城市個(gè)數(shù); int main() {Point *point = readfile();char array[6] = "ABCD";char a[5],b[5];printf("\n求距離 請輸入一對頂點(diǎ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;//讀文件必須首先建立一個(gè)FILE 指針; fp = fopen("test1.txt","r");//打開一個(gè)文件 傳入的參數(shù)為文件路徑與名字,與文件操作方式; fscanf(fp,"%d",&n);//通過函數(shù)fscanf進(jìn)行存取 Point *p = (Point*)malloc(n*sizeof(Point));//申請內(nèi)存;p也為數(shù)組的首地址,n就為數(shù)組的大小 printf("有%d個(gè)城市\(zhòng)n",n); myinprint(fp,p,n);myoutprint(p,n); // fclose(fp);//打開一個(gè)文件操作完后就得關(guān)閉這個(gè)文件 // free(p);//釋放內(nèi)存 return p; } void myinprint(FILE *p,Point *q,int n){//傳入Point 數(shù)組 以及 文件大小 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最近的兩個(gè)坐標(biāo)是:%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]);}

結(jié)果描述:

要是要求模塊功能簡單,那就把我的代碼注釋幾行即可;


第30行和第106行注釋掉
效果顯示如下

詳解請關(guān)注牛牛,私聊給你過程解析!

但是為了讓各位同學(xué)有優(yōu)秀的編程能力,增強(qiáng)動(dòng)手能力,此代碼雖然是完整程序,還是請先獨(dú)立思考,再拿此程序作為參考,相信你會(huì)有更好的解題過程,要是有不妥之處,各位請多多指正,多多包涵

總結(jié)

以上是生活随笔為你收集整理的读取城市坐标,计算任意两个城市之间的距离。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。