读书人

求高手帮忙告知一上上面这段程序哪儿有

发布时间: 2012-10-16 09:57:37 作者: rapoo

求高手帮忙告知一下下面这段程序哪儿有错?
我是一个大一新生自学了C现在在自学C++下面是我小打小闹写的一段程序。目的是实现再输入端输入5个学生4门功课的成绩,然后求出(1)每个学生的总分。(2)每门课程的平均分。(3)输出总分最高的学生的姓名和总分数。
我写了下面一段比较繁琐的程序实现了前两个,最后一个好像出了问题。不知出在哪儿?求高手告知一下。本人不胜感激。
#include<iostream>
using namespace std;
#define MAX 5
#define SUB 4
#define NAME 20
#define NULL 0
typedef struct
{
int subject[SUB];
int sum;
char str[NAME];
}student;
student STU[MAX];
student *s=STU;
double average[SUB];
void cin_score(student *s)
{
int i,j;
for(i=0;i<MAX;i++)
{
cin>>STU[i].str;
for(j=0;j<SUB;j++)

cin>>STU[i].subject[j];
}
}
void calculate_sum(student STU[])
{
int i,j;
for(i=0;i<MAX;i++)
{
STU[i].sum=0;
for(j=0;j<SUB;j++)
STU[i].sum=STU[i].sum+STU[i].subject[j];
}

}
void cout_sum(student *s)
{
int i;
for(i=0;i<MAX;i++)
{
cout<<STU[i].sum<<" ";
cout<<STU[i].str<<endl;;
}
cout<<endl;
}
void average_subject(student *s,double average[])
{

int sum=0,i,j;
for(j=0;j<SUB;j++)
{
for(i=0;i<=MAX;i++)
{

sum=sum+STU[i].subject[j];

}
average[j]=1.0*sum/MAX;
sum=0;
}
}
void print_average(double average[])
{
int i;
for(i=0;i<SUB;i++)
{
cout<<average[i]<<endl;
}
}
void sort_score(student *s)
{
int highest=STU[0].sum;
int i;
student *m=NULL;
for(i=0;i<MAX;i++)
{
if(highest<STU[i].sum)
highest=STU[i].sum;
*m=STU[i];
}
cout<<highest<<m->str<<endl;
}
void main()
{
cout<<"Please input the score of every student:"<<endl;
student *p=STU;
cin_score(p);
calculate_sum(p);
cout_sum(p);
average_subject(p,average);
print_average(average);
sort_score(STU);
}

[解决办法]
用指针记录下谁最大就行了。

C/C++ code
#include<iostream>using namespace std;#define MAX 5#define SUB 4#define NAME 20#define NULL 0typedef struct  {    int subject[SUB];    int sum;    char str[NAME];}student;student STU[MAX];student *s=STU;double average[SUB];void cin_score(student *s){    int i,j;    for(i=0;i<MAX;i++)    {        cin>>STU[i].str;        for(j=0;j<SUB;j++)            cin>>STU[i].subject[j];    }}void calculate_sum(student STU[]){    int i,j;    for(i=0;i<MAX;i++)    {        STU[i].sum=0;        for(j=0;j<SUB;j++)            STU[i].sum=STU[i].sum+STU[i].subject[j];    }}void cout_sum(student *s){    int i;    for(i=0;i<MAX;i++)    {        cout<<STU[i].sum<<" ";        cout<<STU[i].str<<endl;;    }    cout<<endl;}void average_subject(student *s,double average[]){    int sum=0,i,j;    for(j=0;j<SUB;j++)    {        for(i=0;i<=MAX;i++)        {            sum=sum+STU[i].subject[j];        }        average[j]=1.0*sum/MAX;        sum=0;    }}void print_average(double average[]){    int i;    for(i=0;i<SUB;i++)    {        cout<<average[i]<<endl;    }}void sort_score(student *s){    int highest=STU[0].sum;    int i;    student *m=NULL;    for(i=0;i<MAX;i++)    {        if(highest<STU[i].sum){            highest=STU[i].sum;            m = &STU[i];     //将m指向分数最高的学生就行了        //*m=STU[i];         //m里面什么都没有,*m就出错了        }    }    cout<<highest<<m->str<<endl;}void main(){    cout<<"Please input the score of every student:"<<endl;    student *p=STU;    cin_score(p);    calculate_sum(p);    cout_sum(p);    average_subject(p,average);    print_average(average);    sort_score(STU);} 


[解决办法]

C/C++ code
#include<iostream>using namespace std;#define MAX 5#define SUB 4#define NAME 20#define NULL 0typedef struct  {    int subject[SUB];    int sum;    char str[NAME];}student;student STU[MAX];student *s=STU;double average[SUB];void cin_score(student *s){    int i,j;    for(i=0;i<MAX;i++)    {        cin>>STU[i].str;        for(j=0;j<SUB;j++)            cin>>STU[i].subject[j];    }}void calculate_sum(student STU[]){    int i,j;    for(i=0;i<MAX;i++)    {        STU[i].sum=0;        for(j=0;j<SUB;j++)            STU[i].sum=STU[i].sum+STU[i].subject[j];    }}void cout_sum(student *s){    int i;    for(i=0;i<MAX;i++)    {        cout<<STU[i].str<<": ";        cout<<STU[i].sum<<" ";            }    cout<<endl;}void average_subject(student *s,double average[]){    int sum=0,i,j;    for(j=0;j<SUB;j++)    {        for(i=0;i<=MAX;i++)        {            sum=sum+STU[i].subject[j];        }        average[j]=1.0*sum/MAX;        sum=0;    }}void print_average(double average[]){    int i;    for(i=0;i<SUB;i++)    {        cout<<average[i]<<endl;    }}void sort_score(student *s){    int highest=STU[0].sum;    int i;    student *m=NULL;    for(i=0;i<MAX;i++)    {        if(highest<STU[i].sum)        {            highest=STU[i].sum;           m=&STU[i];        }    }    cout<<m->str<<":"<<highest<<endl;}void main(){    cout<<"Please input the score of every student:"<<endl;    student *p=STU;    cin_score(p);    cout<<"sum:"<<endl;    calculate_sum(p);    cout_sum(p);    cout<<"average:"<<endl;    average_subject(p,average);    print_average(average);    cout<<"max:"<<endl;    sort_score(STU);}
[解决办法]
你学过C++的容器么? 用map vector容器 来做会比较轻松 好做些!

读书人网 >C++

热点推荐