#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编辑过]
----------------解决方案--------------------------------------------------------
结构体不能整体复制,你可以再写一个函数,专门是复制整个结构体
----------------解决方案--------------------------------------------------------
结构体里有问题..
可以在定义结构体数组时,多定义一个..然后,把它做中间元..来回的转..
----------------解决方案--------------------------------------------------------
不好意思我的题看错了呵呵
结构体里应该是学号 不是名字
----------------解决方案--------------------------------------------------------
直接在结构体中,定义一个学号
----------------解决方案--------------------------------------------------------
二楼的意思没明白
不过已经解决了
----------------解决方案--------------------------------------------------------
用strcopy 函数
----------------解决方案--------------------------------------------------------
帮忙看看float *avg(STU *str[], int n)函数和void sort(STU *str[], int n)的关系是不是有问题? 排序会出错
----------------解决方案--------------------------------------------------------
str[i] = (STU *)malloc(81 * sizeof(STU));
这行是不是太浪费了?
应该怎么分配?
str[i] = (STU *)malloc(sizeof(STU));?
----------------解决方案--------------------------------------------------------