注册 登录
编程论坛 C++教室

关于一个C++中查找最大值的问题

赤壁男儿 发布于 2010-06-27 16:20, 840 次点击
#include<iostream>
using namespace std;
class Student
{
public:
    int num;
    int score;
    Student(int a,int b):num(a),score(b){}
    void Max(Student *p)
    {
        int max=p->score;
        Student *h=p;
        h++;
        for(int i=0;i<5;i++)
        {
            if(i==4)
                cout<<h->score<<endl;
            if(max<h->score)
                max=h->score;
            h++;
        }
        cout<<max<<endl;
        for(i=0;i<5;i++)
        {
            if(max==p->score)
                cout<<p->num<<endl;
        }
    }
};
int main()
{
    Student a[5]={Student(23,34),Student(23,54),Student(42,34),Student(42,45),Student(45,23)};
    Student *q;
    q=a;
    for(int i=0;i<5;i++)
    {
        cout<<q->num<<" "<<q->score<<endl;
        q++;
    }
    q->Max(a);
    return 0;
}
这个程序不知道哪里出错了,最后数的最大值竟是一个地址?请各位高手指教。
2 回复
#2
lintaoyn2010-06-27 16:48
for(int i=0;i<5;i++)
    {
        cout<<q->num<<" "<<q->score<<endl;
        q++;
    }
//你想想在什么情况下会从for这个循环体里出来
    q->Max(a);//越界行为
#3
方廷2010-06-27 20:24
#include<iostream>
using namespace std;
class Student
{
public:
    int num;
    int score;
    Student(int a,int b):num(a),score(b){}
    void Max(Student *p)
    {
        int max=p->score;
        Student *h=p;
        h++;
        for(int i=0;i<4;i++)//五个数只比较四次就行了
        {
            if(max<h->score)
                max=h->score;
            h++;
        }
        cout<<"max="<<max<<endl;
        for(i=0;i<5;i++)
        {
            if(max==p->score)
                cout<<"number:"<<p->num<<endl;
            p++;
        }
    }
};
int main()
{
    Student a[5]={Student(23,34),Student(23,54),Student(42,34),Student(42,45),Student(45,23)};
    Student *q;
    q=a;
    for(int i=0;i<5;i++)
    {
        cout<<q->num<<" "<<q->score<<endl;
        q++;
    }
    q->Max(a);
    return 0;
}
1