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

admin2009-02-15  93

问题 下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按从低到高的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
请改正程序中的错误,使它能得到正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
   #include <conio.h>
   #include <string.h>
   #include <stdio.h>
   #include <alloc.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=calloc(m,sizeof(STU));
     for(i=0;i<N;i++)
       b=a
     for(k=0;k<m;k++)
       {
   /*************found*************/
    for(i=j=0;i<N;j++)
      if(b.s<b[j],s)
      j=i;
   /*************found*************/
       t[k].s=b[j].s;
       b[j].s=100;
       }
     return t;
     }   
     outresult(STU a[],FILE *pf)
     {   
     int i;
     for(i=0;i<N;i++)
     fprintf(pf,"NO=%S Mark=%d\n",
           a.num,a.S);
     fprintf(pf,"\n\n");
     }
     main()
     {
     STU a[N]={{“A01”,77},{“A02”,85},
     {“A03”,96},{“A04”,65},{“A05”,75},   
     {“A06”,96},{“A07”,76},{“A08”,63},
     {“A09”,69},{“A10”,78}};
    STU *porder;
   int i,m;
   clrscr();
   printf(“*****THE RESULT*****\n”);
   outresult(a,stdout);
   printf(“\nGive the number of the students who have lower score:”);
   scanf(“%d”,&m);
   while(m>10)
      {
      printf(“\nGive the number of the students who have lower score:”);
      scanf(“%d”,&m);
      }
   porder=fun(a,m);
   printf(“*****THE RESULT*****\n”);
   printf(“The low:\n”);
   for(i=0;i<m;i++)
     printf(“%s %d\n”,porder.num,
          porder.s);
   free(porder);
   }

选项

答案(1)错误:*t=calloc(m,sizeof(STU)); 正确:t=calloc(m,sizeof(STU)); (2) 错误:for(i=j=0;i<N;j++) 正确:for(i=j=0;i<N;i++) (3) 错误:t[k].s=b[j].s; 正确:t[k]=b[j];

解析 错误1:calloc也用于分配内存空间。调用形式:  (类型说明符*)calloc(n,size),功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址,而本题中t定义为指针类型。(类型说明符*)用于强制类型转换。calloc函数与malloc函数的区别仅在于一次可以分配n块区域。例如:ps=(stmet stu*)calloc(2,sizeof(stmct stu));其中的sizeof(stmct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配两块连续区域,强制转换为sm类型,并把其首地址赋予指针变量ps。错误2:此循环中,变量i递增。错误3:本题旨在考查对结构体概念的掌握和灵活应用程度。
转载请注明原文地址:https://kaotiyun.com/show/bTID777K
0

最新回复(0)