使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.C。在此程序中,函数fun()的功能是对N名学生的学习成绩,按从高到低的顺序排列并找出前m(m≤10)名学生,将这些学生的数据存放在一个动态分配的连

admin2023-02-27  32

问题 使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.C。在此程序中,函数fun()的功能是对N名学生的学习成绩,按从高到低的顺序排列并找出前m(m≤10)名学生,将这些学生的数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!
  试题程序:
1 #include<stdlib.h>
2 #include<conio.h>
3 #include<string.h>
4 #include<stdio.h>
5 #include<malloc.h>
6 #define N 10
7 typedef struct ss
8 {
9  char num[10];
10  int s;
11 }STU;
12 STU*fun(STU a[],int m)
13 {
14  STU b[N],*t;
15  int i,j,k;
16  /*********found*********/
17    *t=calloc(m,sizeof(STU))
18    for{i=0;i<N;i++)
19    b=a;
20    for(k=0;k<m;k++)
21    {
22    for(i=j=0;i<N;i++)
23    if(b.s>b[j].s)
24    j=i;
25  /*********found*********/
26    t[k].num=b[j].num;
27    t[k].s=b[j].s;
28    b[j].s=0;
29    }
30    return t;
31 }
32 outresult(STU a[],FILE*pf)
33 {
34    int i;
35    for(i=0;i<N;i++)
36    fprintf(pf,"No=%s Mark=%d\n",a.num,a.s);
37  fprintf(pf,"\n\n");
38 }
39 void main()
40 {
41  STU a[N]={{"A01",81),{"A02",
89},{"A03",66),{"A04",87},{"A05",77},{"A06",90},{"A07",
79},{"A08",61},{"A09",
80},{"A10",71}};
42    STU*pOrder;
43    int i,m;
44    system("CLS");
45    printf ("****The original data****\n");
46    outresult(a,stdout);
47    printf("\nGive the number of the students who have better score:");
48    scanf("%d",&m);
49    while(m>10)
50    {
51    printf("\nGive the number of the students who have better score:");
52    scanf("%d",&m);}
53    pOrder=fun(a,m);
54    printf ("****The Result****\n");
55  printf("The top:\n");
56  for(i=0;i<m;i++)
57    printf("%s%d\n",pOrder.num,pOrder.s);
58    free(pOrder);
59 }

选项

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

解析 (1)函数calloc()用于分配内存空间。调用形式为(类型说明符*)callot(n,size)。在内存动态存储区中分配n块长度为"size"字节的连续区域,函数的返回值为该区域的首地址;(类型说明符*)用于强制类型转换。calloc()函数与malloc()函数的区别在于calloc()函数一次可以分配n块区域。如ps=(struct stu*)calloc(2,sizeof(struct stu));,其中sizeof(struct stu)是求stu的结构长度。该语句的意思是按stu的长度分配两块连续区域,将指针变量强制转换为stu类型,并把其首地址赋予指针变量ps。在本题中,根据定义类型STU b[N],*t;可知代码*t=calloc(m,sizeof(STU))中的错误。*表示指针类型可以直接赋地址值。再强制转换为STU*类型。
    (2)因为num为字符串,不能直接赋值,需要使用字符串复制函数strcpy()。  
转载请注明原文地址:https://jikaoti.com/ti/dBoiFFFM
0

最新回复(0)