虚心请问一个入门级的有关问题
虚心请教一个入门级的问题
初次发帖 请多多指教
刚刚接触c语言 现在碰到个难题 做了几天还是没做出来 特来请教各位大侠~
有一个文本文件 data.txt
4
BUR
LAX
SFO
SMO
0 150 80 50
150 0 0 0
80 0 0 229
50 0 229 0
其中字母代表机场缩写,数字为机票价钱 要求是在CMD里显示:
1.完整的机场与机票价钱对照表格,如下图
| BUR LAX SFO SMO
--- --- --- --- ---
BUR | 0 150 80 50
LAX | 150 0 0 0
SFO | 80 0 0 229
SMO | 50 0 229 0
2.统计每个机场能去的地点,如下图
BUR (3): LAX, SFO, SMO
LAX (1): BUR
SFO (2): BUR, SMO
SMO (2): BUR, SFO
3.列出每个机场分别能到哪个目的地(不重复,例如有了BUR - LAX,就不用LAX - BUR)如下图
BUR - LAX
BUR - SMO
BUR - SFO
SFO – SMO
4.列出每个机场最便宜的机票,如下图
BUR -> SMO 50
LAX -> BUR 150
SFO -> BUR 80
SMO -> BUR 50
绞尽脑汁只憋出了这么点代码,请各位大侠帮帮忙~~ 在线等~~ 只剩15个小时了
------解决方案--------------------
我觉得 你把你不明白的问题说出来 大家帮你比较好,如果全部给你代码,你学到的其实很少。
不知你怎么认为?
如伤害到你,请谅解。
------解决方案--------------------
初次发帖 请多多指教
刚刚接触c语言 现在碰到个难题 做了几天还是没做出来 特来请教各位大侠~
有一个文本文件 data.txt
4
BUR
LAX
SFO
SMO
0 150 80 50
150 0 0 0
80 0 0 229
50 0 229 0
其中字母代表机场缩写,数字为机票价钱 要求是在CMD里显示:
1.完整的机场与机票价钱对照表格,如下图
| BUR LAX SFO SMO
--- --- --- --- ---
BUR | 0 150 80 50
LAX | 150 0 0 0
SFO | 80 0 0 229
SMO | 50 0 229 0
2.统计每个机场能去的地点,如下图
BUR (3): LAX, SFO, SMO
LAX (1): BUR
SFO (2): BUR, SMO
SMO (2): BUR, SFO
3.列出每个机场分别能到哪个目的地(不重复,例如有了BUR - LAX,就不用LAX - BUR)如下图
BUR - LAX
BUR - SMO
BUR - SFO
SFO – SMO
4.列出每个机场最便宜的机票,如下图
BUR -> SMO 50
LAX -> BUR 150
SFO -> BUR 80
SMO -> BUR 50
绞尽脑汁只憋出了这么点代码,请各位大侠帮帮忙~~ 在线等~~ 只剩15个小时了
- C/C++ code
#include <stdio.h> #include <stdlib.h> int main() { FILE *stream=NULL; int TableArray[4][4]; char ch; int i,j,size; stream=fopen("airports.txt","r"); if( stream == NULL ) { printf( "The file airports.txt was not opened\n" ); } else { fscanf(stream,"%d",&size); /*do { ch = getc(stream); if (ch!=EOF); //printf("%c",ch); }while (ch!=EOF);*/ for(i=0;i<size;i++) { for(j=0;j<size;j++) { fscanf(stream,"%d",&TableArray[i][j]); } } } /*===== print array =====*/ for(i=0;i<size;i++) { for(j=0;j<size;j++) { printf("%4d",TableArray[i][j]); } printf("\n"); } return 0; }
------解决方案--------------------
我觉得 你把你不明白的问题说出来 大家帮你比较好,如果全部给你代码,你学到的其实很少。
不知你怎么认为?
如伤害到你,请谅解。
------解决方案--------------------
- C/C++ code
#define MAXN 1000 char nm[MAXN][4];//约定机场名3个英文字母 int TableArray[MAXN][MAXN]; …… fscanf(stream,"%d",&size); if (size<2 || size>MAXN) return 1; for (i=0;i<size;i++) fscanf(strean,"%3s",nm[i]); for(i=0;i<size;i++) { for(j=0;j<size;j++) { fscanf(stream,"%d",&TableArray[i][j]); } } printf(" |"); for(i=0;i<size;i++) printf("%4s",nm[i]); printf("\n"); printf("---| --- --- --- ---\n"); for(i=0;i<size;i++) { printf("%3s|",nm[i]); for(j=0;j<size;j++) { printf("%4d",&TableArray[i][j]); } printf("\n"); }
------解决方案--------------------
这个是完整的程序了。
- C/C++ code
#include <stdio.h> #include <stdlib.h> #include <string.h> int read_data(char ***names, int **array) { int i, j, len; int count; char buf[1024]; fgets(buf, sizeof(buf), stdin); count = atoi(buf); (*names) = malloc(sizeof(char *) * count); (*array) = malloc(sizeof(int) * count * count); for (i = 0; i < count; i++) { fgets(buf, sizeof(buf), stdin); len = strlen(buf); if (len > 1 && (buf[len - 1] == '\r' || buf[len - 1] == '\n')) buf[len - 1] = '\0'; len = strlen(buf); if (len > 1 && (buf[len - 1] == '\r' || buf[len - 1] == '\n')) buf[len - 1] = '\0'; (*names)[i] = strdup(buf); } for (i = 0; i < count; i++) for (j = 0; j < count; j++) scanf("%d", &(*array)[i * count + j]); return count; } void show_data(int count, char **names, int *array) { int i, j; printf(" |"); for (i = 0; i < count; i++) printf(" %s", names[i]); printf("\n--- --- --- --- ---\n"); for (i = 0; i < count; i++) { printf("%s |", names[i]); for (j = 0; j < count; j++) printf(" %3d", array[i * count + j]); printf("\n"); } } void show_each(int count, char **names, int *array) { int i, j, len; int nreach; char *sreach; sreach = malloc((strlen(names[0]) + 2) * 3 + 1); for (i = 0; i < count; i++) { nreach = 0; sreach[0] = '\0'; len = 0; for (j = 0; j < count; j++) { if (array[i * count + j] > 0) { nreach++; len += sprintf(sreach + len, "%s, ", names[j]); } } if (len > 0) sreach[len - 2] = '\0'; printf("%s (%d): %s\n", names[i], nreach, sreach); } free(sreach); } void show_path(int count, char **names, int *array) { int i, j; for (i = 0; i < count; i++) for (j = i; j < count; j++) if (array[i * count + j] > 0) printf("%s - %s\n", names[i], names[j]); } void show_cheap(int count, char **names, int *array) { int i, j; int m; for (i = 0; i < count; i++) { m = 0; for (j = 0; j < count; j++) if ((array[i * count + j] > 0 && (array[i * count + j] < array[i * count + m] || array[i * count + m] == 0) )) m = j; printf("%s -> %s %d\n", names[i], names[m], array[i * count + m]); } } int main(int argc, char *argv[]) { int i, j, count; int *array; char **names; count = read_data(&names, &array); show_data(count, names, array); show_each(count, names, array); show_path(count, names, array); show_cheap(count, names, array); return 0; }