用C语言或者C++做。冒泡排序或者其他排序都行。哪位高手帮帮忙 统计成绩 [问题描述] 给出n个学生的m门考试

如题所述

/*说明:学生的姓名虽然定义 了,但是我没有输入,课程成绩是要自己输入的,当然你也可以改动一下从文件中读取,还有,你要指明是按照哪门课程排序的,就像我们平时考试一样,比如按照语文或者总分排序等等,其实我只提供了一个框架,虽然能够满足你的所有需要了,但是你还可以在此基础上面进行改进。我感觉我这个程序的思想挺好的,你可以看一下,然后自己再做一下。不知不觉就半个多小时啊,将近100行的代码。*/
#include<iostream.h>

struct Students
{
char name[10];
int *grade; //成绩的指针,指向一个学生的m门成绩
};

void Sort(Students stu[],int n,int i)
{
Students temp;
for(int j=1;j<n;++j)
{
for(int k=0;k<n-j;++k)
{
if(stu[k].grade[i]>stu[k+1].grade[i])//按照某一门课程排序
{
temp=stu[k]; //还好已经重载了赋值号,这样可以整体赋值,否则要麻烦一点
stu[k]=stu[k+1];
stu[k+1]=temp;
}
}
}
}

void Show_Grades(Students stu[],int n,int m)
{
for(int i=0;i<m;++i)
{
cout<<"课程"<<i<<" ";
}
cout<<" 总分"<<endl;
for(i=0;i<n;++i)
{
for(int j=0;j<m+1;++j)
{
cout<<stu[i].grade[j]<<" ";
}
cout<<endl;
}
}

void main()
{
int n;
int m; //m门考试,采用动态分配空间
cout<<"请分别输入学生人数和课程数目:"<<endl;
cin>>n>>m;
Students *stu=new Students[n]; //为n个学生分配空间
for(int i=0;i<n;++i) //为n个学生的m门课程分配空间
{
stu[i].grade=new int[m+1]; //包括“总分”一栏
}

for(i=0;i<n;++i)
{
stu[i].grade[m]=0; //总分一栏初始化
}

cout<<"请依次输入每个学生各门课程的成绩:"<<endl;
for(i=0;i<n;++i)
{
for(int j=0;j<m;++j) //输入所有学生的成绩
{
cin>>stu[i].grade[j]; //输入第i+1号学生的所有科目的成绩
stu[i].grade[m]+=stu[i].grade[j]; //统计总分
}

}

cout<<"****************排序前****************"<<endl;
Show_Grades(stu,n,m);

cout<<"请输入按照哪门功课排序,按照总分排序请输入"<<m<<endl;
cin>>i;

Sort(stu,n,i);
cout<<"**********按照某门功课排序后**********"<<endl;
Show_Grades(stu,n,m);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-29
想学好编程语言,就要不断地练习,建议你用选择排序法,自己做!!!!!
第2个回答  2011-11-29
自己看书很简单的,练习一下不要什么都要在网上叫别人写呀,大哥
第3个回答  2011-11-30
具体点,要排序什么?
相似回答
大家正在搜