下面的程序是我以前写的,你稍微改改就能符合你的要求了
#include
#include
typedef struct st
{
char name[20];
int chinese;
int math;
int english;
float average;
}student;
void swap(student *a, student *b)
{
student temp = *a;
*a = *b;
*b = temp;
}
void sort(student *array, int n)
{
int i, j, flag;
for (i = 0; i < n - 1; i++)
{
flag = 1;
for (j = 0; j < n - i - 1; j++)
{
if (array[j].average > array[j + 1].average)
{
swap(array + j, array + j + 1);
flag = 0;
}
}
if (flag)
break;
}
}
void print(student *array, int n)
{
int i;
printf("姓名\t语文\t数学\t英语\t平均成绩\n");
for (i = 0; i < n; i++)
{
printf("%s\t%d\t%d\t%d\t%f\n", array[i].name, array[i].chinese,
array[i].math, array[i].english, array[i].average);
}
}
int main()
{
int number = 9;
int i;
student *stu = (student *)malloc(sizeof(student) * 9);
for (i = 0; i < number; i++)
{
printf("请输入第%d个学生的姓名及成绩(姓名 语文 数学 英语成绩以空格隔开):\n", i + 1);
scanf("%s %d %d %d", (*(stu + i)).name, &(*(stu + i)).chinese,
&(*(stu + i)).math, &(*(stu + i)).english);
(*(stu + i)).average = ((*(stu + i)).chinese +
(*(stu + i)).math + (*(stu + i)).english) / (float)3.0;
}
print(stu, number);
sort(stu, number);
print(stu, number);
free(stu);
return 0;
}
1、结构体指针其实是一个指针,它存储的是指向某个结构体的“地址”,所以结构体指针数组存储的其实是指向一组结构体的“地址”数组,它本身并不包含结构体的具体内容(没有被分配内存)
2、所以当用到他们时,要么重定向,比如:
d=&b; //让d指向b,d存储的是b的地址,这样就能通过d来调用b了
要么用malloc为他们分配内存:
d=(struct h *)malloc(sizeof(struct h));
这样d就指向系统为其分配的一块内存,其内容就是struct h中的东西