请问各位,这个排序该怎么写啊,我这为啥输出了这么多奇奇怪怪的东西
```c
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#define LEN sizeof(struct Student)
struct Student
{
char number[20]; //学号
char name[10]; //姓名
float Higher_mathematics;//高数
float C_programming_language;//C语言程序设计
float Sports;//体育
float English;//英语
float History_of_Chinese_Revolution;//中国革命史
float total;//总分
float average;//平均分
float credits;//学分
struct Student* next; //指向下一个数据的指针
}s[LEN];
struct Student* head = NULL;
struct Student* end = NULL;
void Menu()
{
void Menu();
void Add();
void View();
void ViewAll();
void rank();
void Statistics();
system("cls");
printf("\t\t\t============================================\n");
printf("\t\t\t| |\n");
printf("\t\t\t| 欢迎来到学生成绩管理系统 |\n");
printf("\t\t\t| |\n");
printf("\t\t\t|==========================================|\n");
printf("\t\t\t| 请选择要操作的命令 |\n");
printf("\t\t\t|------------------------------------------|\n");
printf("\t\t\t| |\n");
printf("\t\t\t| 1.录入学生信息 |\n");
printf("\t\t\t| 2.查找学生信息 |\n");
printf("\t\t\t| 3.显示全部学生信息 |\n");
printf("\t\t\t| 4.按学分排序 |\n");
printf("\t\t\t| 5.平均分各分段统计 |\n");
printf("\t\t\t| 6.退出系统 |\n");
printf("\t\t\t| |\n");
printf("\t\t\t============================================\n");
int choice;
loop:
scanf("%d",&choice);
switch (choice) {
case 1:
Add();
Menu();
case 2:
View();
Menu();
case 3:
ViewAll();
Menu();
case 4:
rank();
Menu();
case 5:
Statistics();
Menu();
case 6:
exit(0);
default:
printf("输入有误,请重新选择:");
goto loop;
}
}
//录入
void Add()
{
system("cls");
int count;
printf("请输入要录入信息的个数:");
scanf("%d",&count);
struct Student *s1,s2,temp;
s1=s2=(struct Student)malloc(LEN);
if(head==NULL){
head = s1;
}else{
end->next = s1 ;
}
int i = 1,m = 0;
while(count>0){s1->credits=m ;
printf("请输入第%d位学生信息:\n",i++);
printf("学号:\n");
scanf("%s",&s1->number);
printf("姓名:\n");
scanf("%s",&s1->name);
printf("高等数学成绩:\n");
scanf("%f",&s1->Higher_mathematics);
printf("C语言程序设计成绩:\n");
scanf("%f",&s1->C_programming_language);
printf("体育成绩:\n");
scanf("%f",&s1->Sports);
printf("英语成绩:\n");
scanf("%f",&s1->English);
printf("中国革命史成绩:\n");
scanf("%f",&s1->History_of_Chinese_Revolution);
//学分
if(s1->Higher_mathematics>=60)
s1->credits+=5.0;
if(s1->C_programming_language>=60)
s1->credits+=3.5;
if(s1->Sports>=60)
s1->credits+=2.0;
if(s1->English>=60)
s1->credits+=3.0;
if(s1->History_of_Chinese_Revolution>=60)
s1->credits+=2.0;
s1->total=s1->Higher_mathematics+s1->C_programming_language+s1->Sports+s1->English+s1->History_of_Chinese_Revolution;//总分
s1->average=s1->total/5.0;//平均分
count--;
s2->next=s1;
s2=s1;
s1=(struct Student)malloc(LEN);
printf("添加成功!\n");
system("pause");
system("cls");
}
s2->next= NULL;
end = s2;
printf("全部添加成功!\n");
system("pause");
}
//查找
void View()
{
system("cls");
struct Student *VS;
printf("输入要查询信息的学生学号:\n");
char num[10];
int flag=1;
scanf("%s",&num);
for(VS=head;VS!=NULL;){
if(strcmp(VS->number,num)==0){
printf("成功找到!\n");
printf("学号:%s\t姓名:%s\n",VS->number,VS->name);
printf("高数:%.2f\tC语言程序设计:%.2f\t体育:%.2f\t英语:%.2f\t中国革命史:%.2f总分:%.2f\t平均分:%.2f\t学分:%f\t",VS->Higher_mathematics,VS->C_programming_language,VS->Sports,VS->English,VS->History_of_Chinese_Revolution,VS->total,VS->average,VS->credits);
printf("\n");
flag=0;
break;
}
VS=VS->next;
}
if(flag){
printf("不好意思,未找到!\n");
}
system("pause");
}
//显示全部
void ViewAll()
{
system("cls");
struct Student *VA;
if(head!=NULL){
printf("所有学生成绩如下:\n");
printf("| 学 号 |姓 名|高数|C语言程序设计|体育|英语|中国革命史|总 分|均分|学分|\n");
for(VA=head;VA!=NULL;){
printf("%s %s ",VA->number,VA->name);
printf("%.1f\t %.1f\t%.1f\t%.1f\t%.1f\t%.1f\t%.2f\t%.1f\n",VA->Higher_mathematics,VA->C_programming_language,VA->Sports,VA->English,VA->History_of_Chinese_Revolution,VA->total,VA->average,VA->credits);
VA=VA->next;
}
}else{
printf("该系统中还未录入信息");
}
system("pause");
}
//统计
void Statistics()
{
system("cls");
int A=0,B=0,C=0,D=0,E=0;
struct Student *STA;
if(head!=NULL)
{
for(STA=head;STA!=NULL;)
{
if(STA->average<=100&&STA->average>=90)
A++;
if(STA->average<90&&STA->average>=80)
B++;
if(STA->average<80&&STA->average>=70)
C++;
if(STA->average<70&&STA->average>=60)
D++;
if(STA->average<60)
E++;
STA=STA->next;
}
printf("平均分在90到100的学生共%d个\n",A);
printf("平均分在80到90的学生共%d个\n",B);
printf("平均分在70到80的学生共%d个\n",C);
printf("平均分在60到70的学生共%d个\n",D);
printf("平均分不足60分的学生共%d个\n",E);
}else{
printf("该系统中还未录入信息");
}
system("pause");
}
//排序
void rank(struct Student s[],LEN)
{
system("cls");
Student temp;
int i,j,k;
for(i=0;i<LEN;i++)
{
for(j=0;j<LEN;j++)
{
if(s[j].credits > s[j+1].credits )
{
temp=*s[j];
*s[j]=*s[j+1];
*s[j+1]=temp;
}
}
}
printf("按学分排序后结果如下:\n");
for(k=0;k<LEN;k++)
{
printf("学号:%s\t姓名:%s",s[k].number,s[k].name);
printf("学分:%.2f\n",s[k].credits);
}
system("pause");
}
int main()
{
void Menu();
void Add();
void View();
void ViewAll();
void Statistics();
void rank();
Menu();
return 0;
}
```ase/static/image/mid/ask/177738164176119.jpg "#left")