3个回答
展开全部
#include <stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct students
{
char name[10];
int score;
struct students *next;
}STUS;
STUS *inputStus(STUS *sHead,STUS *sTail);//输入学生信息 传参:首节点指针 尾节点指针 返回值:尾节点指针
void stusPX(STUS *sHead);//将数据链表按照分数由大到小排序
void printfStu(STUS *sHead);//打印链表数据
int main()
{
STUS *sHead=NULL,*sTail=NULL;
sHead=(STUS *)malloc(sizeof(STUS));
sHead->next=NULL;
sTail=inputStus(sHead,sTail);//想录入几个学生就调用几次
sTail=inputStus(sHead,sTail);
sTail=inputStus(sHead,sTail);
sTail=inputStus(sHead,sTail);
stusPX(sHead);
printfStu(sHead);
return 0;
}
void printfStu(STUS *sHead)//打印链表数据
{
printf("姓名 分数\n");
while(sHead->next!=NULL)
{
printf("%-10s%d\n",sHead->next->name,sHead->next->score);
sHead=sHead->next;
}
}
void stusPX(STUS *sHead)//将数据链表按照分数由大到小排序
{
STUS *stu1=sHead->next,*stu2=NULL;
int scoreSave;
char nameSave[10];
printf("开始降序排列!\n");
while(stu1!=NULL)//冒泡排序,依次后后面所有学生成绩比较
{
stu2=stu1->next;
while(stu2!=NULL)
{
if(stu2->score>stu1->score)
{
strcpy(nameSave,stu2->name);
memset(stu2->name,0,10);
strcpy(stu2->name,stu1->name);
memset(stu1->name,0,10);
strcpy(stu1->name,nameSave);
scoreSave=stu2->score;
stu2->score=stu1->score;
stu1->score=scoreSave;
}
stu2=stu2->next;
}
stu1=stu1->next;
}
printf("排列完成!\n");
}
STUS *inputStus(STUS *sHead,STUS *sTail)//输入学生信息 传参:首节点指针 尾节点指针 返回值:尾节点指针
{
STUS *sNew=(STUS *)malloc(sizeof(STUS));
printf("请输入学生姓名 和 成绩:");
scanf("%s%d",sNew->name,&sNew->score);
sNew->next=NULL;
if(sHead->next==NULL)
sHead->next=sNew;
if(sTail==NULL)
sTail=sNew;
else
{
sTail->next=sNew;
sTail=sNew;
}
return sTail;
}
展开全部
#include<stdio.h>
#include<string.h>
struct stu
{
char name[32];
int score;
}stus[150];
int main()
{
int n=0,i,j;
struct stu t;
while(1)
{
printf("请输入第%d个学生的姓名和分数(空格分隔,输入exit退出):",n+1);
scanf("%s",stus[n].name);
if(0==strcmp("exit",stus[n].name))
break;
else
scanf("%d",&stus[n].score);
n++;
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(stus[j].score<stus[j+1].score)
{
t=stus[j];
stus[j]=stus[j+1];
stus[j+1]=t;
}
}
}
printf("排序后:\n");
for(i=0;i<n;i++)
{
printf("%s\t\t%d\n",stus[i].name,stus[i].score);
}
return 0;
}
#include<string.h>
struct stu
{
char name[32];
int score;
}stus[150];
int main()
{
int n=0,i,j;
struct stu t;
while(1)
{
printf("请输入第%d个学生的姓名和分数(空格分隔,输入exit退出):",n+1);
scanf("%s",stus[n].name);
if(0==strcmp("exit",stus[n].name))
break;
else
scanf("%d",&stus[n].score);
n++;
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(stus[j].score<stus[j+1].score)
{
t=stus[j];
stus[j]=stus[j+1];
stus[j+1]=t;
}
}
}
printf("排序后:\n");
for(i=0;i<n;i++)
{
printf("%s\t\t%d\n",stus[i].name,stus[i].score);
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个就一个排序不就完了 如果是输入学生姓名查询他的成绩再按 分数排序就用一个模糊查询一个排序就完事
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询