C语言 结构体排序问题

1.程序中另外定义一个结构体指针数组,在排序前,其中每一个数组元素依次指向学生成绩登记表(为结构体类型数组)中的各学生情况。
2.将冒泡排序的功能独立编写成一个函数

#include <stdio.h>
#define S 5
struct student
{
int num;
char name[10];
int grade;
};
void sort(struct *ptr,int n);

int main()
{
struct student stu[S],*ptr;
int i;
ptr=stu;
printf("Input the student's number,name and grade:\n");
for(i=0;i<S;i++)
{
printf("No.%d:",i+1);
scanf("%d%s%d",&stu[i].num,stu[i].name,&stu[i].grade);
}

sort(ptr,S);
printf("The students score from high to low:\n");
for(i=0;i<S;i++)
{
printf("%d %s %d",stu[i].num,stu[i].name,stu[i].grade);
}
return 0;
}

void sort(struct student *ptr,int n)
{
int t;
for(int i=1;i<n;i++)
for(int j=0;j<n-i;j++)
if(*(ptr+j)<*(ptr+j+1))
{
t=*(ptr+j);
*(ptr+j)=*(ptr+j+1);
*(ptr+j+1)=t;
}
}

请问如何更改?

由于你只是交换字符串,所以修改如下,请检验。
用strcpy(s1,s2)进行复制字符串,不能直接s1=s2。
#include<stdio.h>
#include <time.h>
typedef struct
{
char number[10];//书号
char name[50];//书名
char author[20];//作者
char publish[50];//出版社
char time[20];//出版时间
float price;//单价
}mbook;
typedef struct
{
int count;//书的本数
mbook book[10];//最大可有书的数量
}mlibrary;
mlibrary library,t;

main()
{ void sort_by_price(void);
sort_by_price();
}
void sort_by_price(void) /*定义按价格排序函数*/
{
int i,j,k;
char sn[10];
for(i=0;i<library.count-1;i++)
{
k=i;
for(j=i+1;j<library.count;j++)
if(library.book[j].price<library.book[k].price)
k=j;
if(k!=i)
{
strcpy(sn,library.book[k].number);
strcpy(library.book[k].number,library.book[i].number);
strcpy(library.book[i].number,sn);
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-10-20
void sort(struct student *ptr,int n)
{
struct student t;
for(int i=1;i<n;i++)
for(int j=0;j<n-i;j++)
if(*(ptr+j).grade < *(ptr+j+1).grade)
{
t=*(ptr+j);
*(ptr+j)=*(ptr+j+1);
*(ptr+j+1)=t;
}
}本回答被提问者和网友采纳
第2个回答  2011-09-11
simple
相似回答