首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

虚心请问一个入门级的有关问题

2012-10-31 
虚心请教一个入门级的问题初次发帖 请多多指教刚刚接触c语言 现在碰到个难题 做了几天还是没做出来 特来请

虚心请教一个入门级的问题
初次发帖 请多多指教
刚刚接触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 1000char 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;} 

热点排行