这是我写的程序,不知道哪里有问题,请帮我看看,怎么解决。是c++编程题。

题目:
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。要求:
(1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数
以下这是我写的代码:
#include <iostream>
using namespace std;
struct Student
{
long num;
int MT;
int EN;
int PH;
};
int Sum(Student stu[],int a)
{
int sum=0;
sum=stu[a].MT+stu[a].EN+stu[a].PH;
return sum;
}
void PX(Student stu[],int n)
{
for(int i=0;i<n;i++)
for(int j=n-1;j>i;j--)
if(Sum(stu,j-1)<Sum(stu,j))
{
Student tmp=stu[j-1];
stu[j-1]=stu[j];
stu[j]=tmp;
}
cout<<"学生编号"<<"\t"<<"数学"<<"\t"<<"英语"<<"t"<<"物理"<<"\t"<<"总分"<<"\t"<<"平均分"<<endl;
for(int m=0;m<n;m++)
cout<<stu[m].num<<"\t"<<stu[m].MT<<"\t"<<stu[m].EN<<"\t"<<stu[m].PH<<"\t"<<Sum(stu,m)<<"\t"<<Sum(stu,m)/3<<endl;
}
int Find(int x,int n,Student stu[])
{
for(int i=0;i<n;i++)
{
if(stu[i].num==x)
{
return i+1;
break;
}

}
return -1;
}
int main()
{
int n,x;Student stu[30];
cout<<"输入学生信息(详见实验报告):"<<endl;
for(int k=0;;k++)
{
cin>>stu[k].num>>stu[k].MT>>stu[k].EN>>stu[k].PH;
if(stu[k].num<0)
break;
}
n=k;
cout<<"名次表:"<<endl;
PX(stu,n);
cout<<"请输入要查找的学生编号:";
cin>>x;
int f=Find(x,n,stu);
if(f<0)
cout<<"输入有误!"<<endl;
else
{
cout<<"学生排名"<<Find(x,n,stu)<<endl;
cout<<"数学:"<<stu[f-1].MT<<endl;
cout<<"英语:"<<stu[f-1].EN<<endl;
cout<<"物理:"<<stu[f-1].PH<<endl;
}
return 0;
}
现在的问题是运行的时候,输入学生各项信息之后,没有任何东西输出……

#include <iostream>
using namespace std;
struct Student
{
long num;
int MT;
int EN;
int PH;
};
int Sum(Student stu[],int a)
{
int sum=0;
sum=stu[a].MT+stu[a].EN+stu[a].PH;
return sum;
}
void PX(Student stu[],int n)
{
for(int i=0;i<n;i++)
for(int j=n-1;j>i;j--)
if(Sum(stu,j-1)<Sum(stu,j))
{
Student tmp=stu[j-1];
stu[j-1]=stu[j];
stu[j]=tmp;
}
cout<<"学生编号"<<"\t"<<"数学"<<"\t"<<"英语"<<"\t"<<"物理"<<"\t"<<"总分"<<"\t"<<"平均分"<<endl;
for(int m=0;m<n;m++)
cout<<stu[m].num<<"\t\t"<<stu[m].MT<<"\t"<<stu[m].EN<<"\t"<<stu[m].PH<<"\t"<<Sum(stu,m)<<"\t"<<(float)Sum(stu,m)/3<<endl;//格式问题
}
int Find(int x,int n,Student stu[])
{
for(int i=0;i<n;i++)
{
if(stu[i].num==x)
{
return i+1;
break;
}

}
return -1;
}
int main()
{
int n,x;Student stu[30];
cout<<"输入学生信息(详见实验报告):"<<endl;
for(int k=0;;k++)//
{
cin>>stu[k].num>>stu[k].MT>>stu[k].EN>>stu[k].PH;
if(stu[k].num<0)
break;
}
n=k;
cout<<"名次表:"<<endl;
PX(stu,n);
cout<<"请输入要查找的学生编号:";
cin>>x;
int f=Find(x,n,stu);
if(f<0)
cout<<"输入有误!"<<endl;
else
{
cout<<"学生排名"<<Find(x,n,stu)<<endl;
cout<<"数学:"<<stu[f-1].MT<<endl;
cout<<"英语:"<<stu[f-1].EN<<endl;
cout<<"物理:"<<stu[f-1].PH<<endl;
}
return 0;
}追问

不懂……

追答

没什么问题,除了输出格式。。。。改善了一下
如果要自己测试一下的话可以设k<2
话说你觉得有什么问题啊?

追问

有啊,我运行的时候,输入了信息,但是什么都没有输出啊

追答

追问

但是参加考试的人数是未知的啊

追答

1,你可以给个提示-输入负数结束

追问

哦,那个我是输入了负数的……没用呢

追答

再改一下代码

温馨提示:答案为网友推荐,仅供参考
相似回答