用结构体完成N个学生M名课程的成绩排序 用C语言编写

(1)定义一个数组,用以存放学生的成绩。
(2)从键盘输入学生成绩
(3)采用冒泡法,将学生成绩按照从高到低进行排序
(4)再输入一个学生的成绩,将此成绩按照排序规律插入原学生成绩数组
(5)将排好序的成绩单进行反序存放,即原来是从高到低,现在改为从低到高排列。
(6)将以上每一步骤的结果均打印输出,验证程序是否正确实现题目要求
(7)在项目报告中画出程序流程图,说明程序设计的算法,附主要程序段。
我想要详细的编辑程序,谢谢,请尽快帮我写好。

#include <stdio.h>


int main()
{
struct student
{
int stunum;
char stuname[20];
int stuscore1;
int stuscore2;
int stuscore3;
};

int i=0;
int j=0;
int range=0;
struct student students[100];
struct student temp;
int n=0;
printf("请输入学生总数:\n");
scanf("%d",&n);

for(i=0;i<n;i++)
{
scanf("%d %s %d %d %d",&students[i].stunum,students[i].stuname,&students[i].stuscore1,&students[i].stuscore2,&students[i].stuscore3);
}

scanf("%d",&range);
switch(range)
{
case 1:
{
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)
{
if(students[j].stuscore1<students[j+1].stuscore1)
{
temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;

}
if(students[j].stuscore1==students[j+1].stuscore1)
{
if(students[j].stunum>students[j+1].stunum)
{
temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;
}


}
}
}
for(i=0;i<n;i++)
{
printf("%d %s %d %d %d\n",students[i].stunum,students[i].stuname,students[i].stuscore1,students[i].stuscore2,students[i].stuscore3);
}
break;
}
case 2:
{
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)
{
if(students[j].stuscore2<students[j+1].stuscore2)
{
temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;

}
if(students[j].stuscore2==students[j+1].stuscore2)
{
if(students[j].stunum>students[j+1].stunum)
{
temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;
}


}
}
}
for(i=0;i<n;i++)
{
printf("%d %s %d %d %d\n",students[i].stunum,students[i].stuname,students[i].stuscore1,students[i].stuscore2,students[i].stuscore3);
}
break;
}
case 3:
{
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)
{
if(students[j].stuscore3<students[j+1].stuscore3)
{
temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;

}
if(students[j].stuscore3==students[j+1].stuscore3)
{
if(students[j].stunum>students[j+1].stunum)
{
temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;
}


}
}
}
for(i=0;i<n;i++)
{
printf("%d %s %d %d %d\n",students[i].stunum,students[i].stuname,students[i].stuscore1,students[i].stuscore2,students[i].stuscore3);
}
break;
}
}
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-12-23
#include <stdio.h>


int main()
{
struct student
{
int stunum;
char stuname[20];
int stuscore1;
int stuscore2;
int stuscore3;
};

int i=0;
int j=0;
int range=0;
struct student students[100];
struct student temp;
int n=0;
printf("请输入学生总数:\n");
scanf("%d",&n);

for(i=0;i<n;i++)
{
scanf("%d %s %d %d %d",&students[i].stunum,students[i].stuname,&students[i].stuscore1,&students[i].stuscore2,&students[i].stuscore3);
}

scanf("%d",&range);
switch(range)
{
case 1:
{
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)
{
if(students[j].stuscore1<students[j+1].stuscore1)
{
temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;

}
if(students[j].stuscore1==students[j+1].stuscore1)
{
if(students[j].stunum>students[j+1].stunum)
{
temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;
}


}
}
}
for(i=0;i<n;i++)
{
printf("%d %s %d %d %d\n",students[i].stunum,students[i].stuname,students[i].stuscore1,students[i].stuscore2,students[i].stuscore3);
}
break;
}
case 2:
{
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)
{
if(students[j].stuscore2<students[j+1].stuscore2)
{
temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;

}
if(students[j].stuscore2==students[j+1].stuscore2)
{
if(students[j].stunum>students[j+1].stunum)
{
temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;
}


}
}
}
for(i=0;i<n;i++)
{
printf("%d %s %d %d %d\n",students[i].stunum,students[i].stuname,students[i].stuscore1,students[i].stuscore2,students[i].stuscore3);
}
break;
}
case 3:
{
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)
{
if(students[j].stuscore3<students[j+1].stuscore3)
{
temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;

}
if(students[j].stuscore3==students[j+1].stuscore3)
{
if(students[j].stunum>students[j+1].stunum)
{
temp=students[j];
students[j]=students[j+1];
students[j+1]=temp;
}


}
}
}
for(i=0;i<n;i++)
{
printf("%d %s %d %d %d\n",students[i].stunum,students[i].stuname,students[i].stuscore1,students[i].stuscore2,students[i].stuscore3);
}
break;
}
}
return 0;
}

第2个回答  2016-01-02
这里是4名学生一门成绩的排序,不过中间还有生日,希望能给你带来点灵感吧!
通过比较,进行交换达到的排序。
源代码如下:
#include <stdio.h>
struct student_record
{
char name[8];
struct birth
{
int year;
int month;
int day;
}date;
int score;
}student[4];

void main()
{
struct student_record student[4];
struct student_record stu;
int i,j;
printf("please input date:\n");
for(i=0;i<4;i++)
scanf("%s%d%d%d%d",student[i].name,&student[i].date.year,
&student[i].date.month,&student[i].date.day,&student[i].score);
printf("OUTPUT:\n");
printf("NAME BIRTH SCORE\n");
for(j=1;j<=3;j++)
for(i=0;i<4-j;i++)
{

if(student[i].score<student[i+1].score)
{
stu=student[i];
student[i]=student[i+1];
student[i+1]=stu;
}

}
for(i=0;i<4;i++)
printf("%s %d,%d,%d %d\n",student[i].name,student[i].date.year,
student[i].date.month,student[i].date.day,student[i].score);
}
第3个回答  推荐于2018-02-27
这里是4名学生一门成绩的排序,不过中间还有生日,希望能给你带来点灵感吧!源代码如下:
#include <stdio.h>
struct student_record
{
char name[8];
struct birth
{
int year;
int month;
int day;
}date;
int score;
}student[4];

void main()
{
struct student_record student[4];
struct student_record stu;
int i,j;
printf("please input date:\n");
for(i=0;i<4;i++)
scanf("%s%d%d%d%d",student[i].name,&student[i].date.year,
&student[i].date.month,&student[i].date.day,&student[i].score);
printf("OUTPUT:\n");
printf("NAME BIRTH SCORE\n");
for(j=1;j<=3;j++)
for(i=0;i<4-j;i++)
{

if(student[i].score<student[i+1].score)
{
stu=student[i];
student[i]=student[i+1];
student[i+1]=stu;
}

}
for(i=0;i<4;i++)
printf("%s %d,%d,%d %d\n",student[i].name,student[i].date.year,
student[i].date.month,student[i].date.day,student[i].score);
}本回答被提问者和网友采纳
第4个回答  2016-01-08
M门课程要先知道M是多少。不然没办法定义结构体。变量多少不知道。
相似回答