| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
有些语句我看不懂求大佬给程序加上注释,感激不尽   
 
[题目] 
两个班的成绩分别存放在两个班的成绩分别存放在两个文件当中。 每个文件有多行, 每行都是由空格分隔的学号、姓名和成绩。现在要将两个班的成绩合并到一起进行排序按照成绩从高到低,如果相同则按学号由小到大排序。将结果输出一个文件当中。两个输入文件名与输出文件名使用命令行参数指定。  
请你编写一个程序完成上述功能 
 
主要考查的是结构体排序和命令行参数的用法  
 
代码: 
- #include <stdio.h>
 
 - #include <string.h>
 
 - #include <stdlib.h>
 
 - #define MAXN 200
 
 - struct stuNode
 
 - {
 
 -     char stuID[20];
 
 -     int score;
 
 - };
 
 - typedef struct stuNode stuType;
 
  
 
- int myCompare(stuType m,stuType n)
 
 - {
 
 -     if(m.score!=n.score)
 
 -         return n.score-m.score;
 
 -     else
 
 -         return strcmp(m.stuID,n.stuID);
 
 - }
 
  
- int cmp(const void *a,const void *b)
 
 - {
 
 -     stuType m=*(stuType*)a, n=*(stuType*)b;
 
 -     return myCompare(m,n);
 
 - }
 
  
- void loadData(FILE* fp,stuType *m)
 
 - {
 
 -     int i=0;
 
 -     while(fscanf(fp,"%s",m[i].stuID)!=EOF)
 
 -     {
 
 -         fscanf(fp,"%d",&m[i].score);
 
 -         i++;
 
 -     }
 
 -     qsort(m,i,sizeof(stuType),cmp);
 
 -     m[i].score=-1; // set -1 as bounder
 
 - }
 
  
- void merge(stuType *a,stuType *b)
 
 - {
 
 -     stuType tmp[MAXN];
 
 -     int i=0,j=0,index=0;
 
 -     while(a[i].score>0 && b[j].score>0)
 
 -     {
 
 -         if(myCompare(a[i],b[j])<0)
 
 -             tmp[index++]=a[i++];
 
 -         else
 
 -             tmp[index++]=b[j++];
 
 -     }
 
 -     while(a[i].score>0)
 
 -         tmp[index++]=a[i++];
 
 -     while(a[i].score>0)
 
 -         tmp[index++]=b[j++];
 
 -     tmp[index].score=-1;
 
 -     for(i=0;i<index;i++)
 
 -         a[i]=tmp[i];
 
 - }
 
  
- int main(int argc,char* argv[])
 
 - {
 
 -     stuType a[MAXN],b[MAXN];
 
 -     FILE *fin1,*fin2,*fout;
 
 -     int i;
 
 -     fin1=fopen(argv[1],"r");
 
 -     fin2=fopen(argv[2],"r");
 
 -     fout=fopen(argv[3],"w");
 
  
-     loadData(fin1,a);
 
 -     loadData(fin2,b);
 
  
-     merge(a,b);
 
 -     for(i=0;a[i].score>0;i++)
 
 -     {
 
 -         fprintf(fout,"%s %d\n",a[i].stuID,a[i].score);
 
 -     }
 
  
-     return 0;
 
 - }
 
  
 
  复制代码 |   
 
 
 
 |