#include <stdio.h>
#include <stdlib.h>
#define NUM 20
struct _stu_
{
char name[12];
float chinese;
float math;
};
typedef struct _stu_ STU;
int accept(STU *str[]);
void sort(STU *str[], int n);
void print(STU *str[], int n);
void main()
{
int n;
STU *str[NUM];
n = accept(str);
sort(str, n);
print(str, n);
}
int accept(STU *str[])
{
int n, i;
printf("请输入学生个数:");
scanf("%d", &n);
printf("\n");
for(i = 0; i < n; i++)
{
str[i] = (STU *)malloc(81 * sizeof(STU));
printf("请输入第%d号学员的名字:", i + 1001);
scanf("%s", &str[i]->name);
printf("请输入第%d号学员的语文成绩:", i + 1001);
scanf("%f", &str[i]->chinese);
printf("请输入第%d号学员的数学成绩:", i + 1001);
scanf("%f", &str[i]->math);
printf("\n");
}
return n;
}
float *avg(STU *str[], int n)
{
int i;
float f[NUM];
float *p;
p = f;
for(i = 0; i < n; i++)
{
f[i] = (str[i]->math + str[i]->chinese) / 2;
}
return f;
}
void sort(STU *str[], int n)
{
int i, j;
STU *tmp;
float *p;
p = avg(str, n);
for(j = 0; j < n - 1; j++)
{
for(i = 0; i < n - j - i; i++)
{
if(*(p + i) < *(p + i + 1))
{
tmp = str[i];
str[i] = str[i + 1];
str[i + 1] = tmp;
}
}
}
}
void print(STU *str[], int n)
{
int i;
printf("\n名次\t学号\t语文成绩\t数学成绩\t平均分\n");
for(i = 0; i < n; i++)
{
printf("%02d\t", i + 1);
printf("%d\t", i + 1001);//输出学号
printf("%.1f\t\t", str[i]->chinese);
printf("%.1f\t\t", str[i]->math);
printf("%.1f\n", (str[i]->math + str[i]->chinese)/2);
}
}
现在的运行结果是这样的
有一点问题,我用什么方法能把学号固定?也就是排序之后的学号和输入时是一致的。
[此贴子已经被作者于2007-10-18 0:27:53编辑过]