| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 481 人关注过本帖
标题:简单课后习题求高手指点啊!!!
只看楼主 加入收藏
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
结帖率:96.23%
收藏
 问题点数:0 回复次数:9 
简单课后习题求高手指点啊!!!
题目是这样的:建立一个对象数组,内放5个学生的数据(学号、成绩),设立一个函数max。用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。下面是我写的程序求指点错误。。。
#include<iostream>
using namespace std;
class student
{
public:
    student(int n,float s):number(n),score(s){}
    void display();
    int number:
    float score:
};
void student::display()
{
    cout<<number<<endl;
}
void max(student *pt)
{
    int i,max_i=0;
    float max_score=0;
    for(i=0;i<5;i++)
    {
        if((pt+i)->score>max_score)
        {max_score=(pt+i)->score;
        max_i=i;
        }
    }
    (pt+i)->display();
}
int main()
{
    student stu[5]={student(1,3.0),student(2,3.2),student(3,5.3),student(4,3.8),student(5,4.2)};
    student *p;
    p=stu;
    max(p);
    return(0);
}
        

搜索更多相关主题的帖子: void display include public 
2013-01-26 06:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
这个题目出得不好
a. max函数名容易引起冲突
b. max函数竟然强制5个元素,而是传入数组长度
c. max函数竟然还包含了输出
但既然题目如此,那就只能照着要求写
程序代码:
#include <iostream>

class student
{
public:
    student( int n, double s ) : number(n), score(s)
    {
    }
    int number;
    double score;
};

void max( const student* pt )
{
    size_t max_i = 0;
    for( size_t i=1; i<5; ++i )
    {
        if( pt[i].score > pt[max_i].score )
            max_i = i;
    }
    std::cout << pt[max_i].number << std::endl;
}

int main()
{
    student stu[5] = { student(1,3.0),student(2,3.2),student(3,5.3),student(4,3.8),student(5,4.2) };
    max( stu );

    return 0;
}

2013-01-26 08:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
如果撇开题目的不合理要求的话,我写个示范代码给你参考一下
(刚才代码没拷贝全,我重贴一下)
程序代码:
#include <iostream>

class student
{
public:
    student( int n, double s ) : number_(n), score_(s)
    {
    }
private:
    int number_;
    double score_;

    friend std::ostream& operator<<( std::ostream& os, const student& st );
    friend const student* student_max( const student* pt, size_t n );
};

std::ostream& operator<<( std::ostream& os, const student& st )
{
    return os << st.number_ << ':' << st.score_;
}

const student* student_max( const student* pt, size_t n )
{
    size_t max_i = 0;
    for( size_t i=1; i<n; ++i )
    {
        if( pt[i].score_ > pt[max_i].score_ )
            max_i = i;
    }
    return &pt[max_i];
}

inline student* student_max( student* pt, size_t n )
{
    return (student*)student_max( (const student*)pt, n );
}

template<size_t N>
inline const student* student_max( const student (&pt)[N] )
{
    return student_max( pt, N );
}

template<size_t N>
inline student* student_max( student (&pt)[N] )
{
    return student_max( pt, N );
}

using namespace std;

int main()
{
    student stu[5] = { student(1,3.0),student(2,3.2),student(3,5.3),student(4,3.8),student(5,4.2) };
    cout << *student_max(stu) << endl;
    cout << *student_max(stu,2) << endl;

    return 0;
}



[ 本帖最后由 rjsp 于 2013-1-26 08:42 编辑 ]
2013-01-26 08:40
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 3楼 rjsp
0分的帖子回复的如此认真  好久看不到了哦

DO IT YOURSELF !
2013-01-26 08:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 4楼 wp231957
呵呵,若你不说,我还不知道帖子原来是带分数的:)
2013-01-26 09:19
Velunce
Rank: 1
等 级:新手上路
帖 子:9
专家分:2
注 册:2013-1-10
收藏
得分:0 
好久没有看到这么认真的帖子了
2013-01-26 12:04
lowryfly
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2012-11-28
收藏
得分:0 
#include<iostream>
using namespace std;
class student
{
public:
    student(int n,float s);
    void display();
    int number;
    float score;
}stu[5]={student(1,3.0),student(2,3.2),student(3,5.3),student(4,3.8),student(5,4.2)};
student::student(int n,float s)
{
    number=n;
    score=s;
}
void student::display()
{
    cout<<number<<endl;
    cout<<score<<endl;
}
void max(student *pt)
{
    pt=stu;
    int i;
    float m=0;
    for(;pt<&stu[4];pt++)
    {
        if((*pt).score>m)
        {
            m=(*pt).score;
            i=(*pt).number;
        }
    }
 
    cout<<i;
}
int main()
{
   
    student *p=stu;
    max(p);
}
2013-01-27 16:58
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:0 
写的好复杂,友元涵数,什么重载都用上了。

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-01-29 01:53
yg130
Rank: 2
等 级:论坛游民
帖 子:17
专家分:22
注 册:2013-1-29
收藏
得分:0 
2013-01-29 23:01
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 楼主 fl8962
万分感谢!!

想抽苏烟了。
2013-01-31 21:26
快速回复:简单课后习题求高手指点啊!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018144 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved