给定程序MODI1.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。 请改正函数fun中指定部位的错误,使它能得出正确的结

admin2018-09-27  21

问题 给定程序MODI1.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
    请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
1  #include<stdio.h>
2  #include<stdlib.h>
3  #include<string.h>
4  #define N 10
5   typedef struct S S
6{  char num[10];
7  int s;
8  } STU;
9  STU *fun(STU a[],int m)
10  {STU b[N],*t;
11  int i,j,k;
12  /**********found**********/
13  t=(STU *)calloc(sizeof(STU),m)
14    for(i=0;i<N;i++)b=a
15    for(k=0;k<m;k++)
16   {  for(i=j=0;i<N;i++)
17    if(b.s>b[J].s)j=i,
18  /**********found**********/
19  t(k)=b(j);
20  b[j].s=0;
21  }
22  return t;
23  }
24  outresult(STU a[],FILE *pf
25  {  int i;
26  for(i=0;i<n;i++)
27  fprintf(pf,’’No=%s Mark=%d\n’’,a.num,a.s);
28  fprintf(pf,’’\n\n’’);
29  }
30  main()
31  {STU  a[N]={{’’A01’’,81},{’’A02”,89},{’’A03’’,66},{’’A04’’,87},{’’A05’’,77},{’’A06’’,90},{’’A07’’,79},{’’A08’’,61},{’’A09’’,80},{’’A10’’,71}};
32  STU *pOrder;
33  int i,m;
34  printf(’’’’’ The  Original data  *****\n");
35  outresult(a, stdout);
36  printf(’’\nGive the number of the students who have better score:’’),
37  scarlf(’’%d’’,&m);
38  while(m>10)
39  {printf(’’\nGive the number of the students who have better score:’’);
40  scanf(’’%d’’,&m);
41    }
42    porder=fun(a,m);
43   printf(’’*****THE  RESULT *****  \n");
44  printf(’’The top:\n’’);
45  for(i=0;i<m;i++)
46   printf(’’%s%d\n’’,pOrder.num,pOrder.s);
47  free(pOrder);
48  }

选项

答案(1)t=(STU*)calloc(sizeof(STU),m); (2)t[k]=b[j];

解析 本题中函数的功能是按学习成绩从高到低的顺序找出前m(m≤10)名学生。利用循环结构实现对定义的结构体中的成绩域进行排序。
    (1)题干中要求结构体STU类型的m个学生放在动态分配的连续存储区中,“t=(STU*)calloc(sizeof(STU),m)”语句没有使用分号“;”结束,因此,需要在语句结尾处加分号。calloc函数是C语言的动态分配函数,分配存储空间。
    (2)第二个标识下是将b数组拷贝到t数组,在C语言中,数组元素的访问使用中括号“[]”而不是圆括弧“()”,因此,第二标识下应改成“t[k]=b[j];”。
转载请注明原文地址:https://jikaoti.com/ti/kla0FFFM
0

最新回复(0)