函数fun的功能是:对N名学生的学习成绩。按从高到低的顺序找出前m(m<=10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区域内,此存储区的首地址作为函数值返回。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<alloc.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;
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;
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");
}
int 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 student who have bettrer score:");
scanf("%d", &m);
while (m > 10)
{
printf("\nGive the number of the students who have detter 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);
system("pause");
return 0;
}