當前位置:編程學習大全網 - 編程語言 - C語言編程題 急!

C語言編程題 急!

#include<stdio.h>

#include<string.h>

#include<math.h>

typedef struct

{

char Cname[21];

float Lat;

float Lon;

} CITY;

typedef struct

{

int Nb_cities;

CITY Cities[20];

} CITIES_LIST;

float **DistancesMatix = NULL;

char* GetFileName(void)

{

static char file[20];

printf("Enter the file name:\n");

scanf("%s",file);

return file;

}

void ReadFile(CITIES_LIST &list)

{

char *file=GetFileName();

FILE*fp=NULL;

int i;

fp=fopen(file,"r");

fscanf(fp,"%d\n",&list.Nb_cities);

for(i=0;i<list.Nb_cities;i++)

{

fscanf(fp,"%s %f %f\n",list.Cities[i].Cname,&(list.Cities[i].Lat),&(list.Cities[i].Lon));

}

fclose(fp);

}

void WriteDistanceMatrix(CITIES_LIST list)

{

int i, j, no = -1;

char *file=GetFileName();

FILE*fp=NULL;

if(DistancesMatix == NULL) return;

fp=fopen(file,"w");

fprintf(fp, "DESTINATION ");

for(i=0; i<list.Nb_cities; ++i)

{

fprintf(fp, "%s ", list.Cities[i].Cname);

}

fprintf(fp, "\n");

for(i=0; i<list.Nb_cities; ++i)

{

fprintf(fp, "%s ", list.Cities[i].Cname);

for(j=0; j<list.Nb_cities; ++j)

{

fprintf(fp, "%.2f ", DistancesMatix[i][j]);

}

fprintf(fp, "\n");

}

}

void CalculateDistances(CITIES_LIST list)

{

int i, j;

float res;

if(DistancesMatix != NULL)

{

delete[] DistancesMatix;

}

DistancesMatix = new float*[list.Nb_cities];

for(i=0; i<list.Nb_cities; ++i)

{

DistancesMatix[i] = new float[list.Nb_cities];

}

for(i=0; i<list.Nb_cities; ++i)

{

DistancesMatix[i][i] = 0;

for(j=i+1; j<list.Nb_cities; ++j)

{

res = cos(list.Cities[i].Lat) * cos(list.Cities[j].Lat);

res *= cos(list.Cities[i].Lon - list.Cities[j].Lon);

res += sin(list.Cities[i].Lat) * sin(list.Cities[j].Lat);

res = 6378 * acos(res);

DistancesMatix[i][j] = res;

DistancesMatix[j][i] = res;

}

}

}

void main (void)

{

CITIES_LIST list;

memset(&list, 0, sizeof(CITIES_LIST));

ReadFile(list);

CalculateDistances(list);

WriteDistanceMatrix(list);

}

測試數據:

3

Metz 3.400000 5.400000

Nancy 6.400000 78.000000

Rennes 43.000000 23.000000

輸出:

DESTINATION Metz Nancy Rennes

Metz 0.00 3231.42 9743.57

Nancy 3231.42 0.00 10559.68

Rennes 9743.57 10559.68 0.00

  • 上一篇:linux網絡編程四次揮手fin的確認和上次發送的數據怎麽壹起確認
  • 下一篇:編程321
  • copyright 2024編程學習大全網