更新时间: 试题数量: 购买人数: 提供作者:

有效期: 个月

章节介绍: 共有个章节

收藏
搜索
题库预览
20.给定程序MODI1.C中函数fum的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在-一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。

请改正函数fm中指定部位的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define N 10

typedef struct ss

{char num[10];

   int s;

} STU;

STU *fun(STU a[], int m)

{STU b[N], *t;

   int i,j,k;

/**********found**********/

   t=(STU *)calloc(sizeof(STU),m);

   for(i=0; i<N; i++) b[i]=a[i];

      for(k=0; k<m; k++)

      {for(i=j=0; i<N; i++)

         if(b[i].s > b[j].s) j=i;

/**********found**********/

         t[k]=b[j];

         b[j].s=0;

      }

      return t;

}

outresult(STU a[], FILE *pf)

{int i;

   for(i=0; i<N; i++)

   fprintf(pf,"No = %s Mark = %d\n", a[i].num,a[i].s);

   fprintf(pf,"\n\n");

}

main()

{STU a[N]={ {"A01",81},{"A02",89},{"A03",66}, {"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} };

   STU *pOrder;

   int i, m;

   printf("***** The Original data *****\n");

   outresult(a, stdout);

   printf("\nGive the number of the students who have better score: ");

   scanf("%d",&m);

   while(m>10)

   {printf("\nGive the number of the students who have better score: ");

     scanf("%d",&m);

   }

   pOrder=fun(a,m);

   printf("***** THE RESULT *****\n");

   printf("The top :\n");

   for(i=0; i<m; i++)

      printf(" %s  %d\n",pOrder[i].num , pOrder[i].s);

   free(pOrder);

}


1 2