| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 683 人关注过本帖
标题:友元函数 学生类为什么能运行但是结果错误??
只看楼主 加入收藏
敏枫
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-10-17
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
友元函数 学生类为什么能运行但是结果错误??
#include<iostream.h>
#include<string.h>
class Stu
{
char name[10];
int deg;
public:
Stu(char na[],int d)
{
strcpy(name,na);
deg=d;
}
char *getname(){ return name;}
friend int compare(Stu &s1,Stu &s2)
{
if(s1.deg>s2.deg)
return 1;
else if(s1.deg==s2.deg)
return 0;
else return -1;
}
};
void main()
{
Stu St[]={Stu("zhang",78),Stu("wang",80),Stu("zhao",92),Stu("li",65),Stu("chen",50)};
int i,min=0,max=0;
for(i=1;i<5;i++)
{
if(compare(St[max],St[i])==-1)
max=i;
else if(compare(St[i],St[min])==1)
min=i;
}
cout<<"输出结果:"<<endl;
cout<<" 最高分:"<<St[max].getname()<<endl;
cout<<" 最低分:"<<St[min].getname()<<endl;
}
搜索更多相关主题的帖子: 函数 学生 结果 运行 
2010-10-17 17:51
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:5 
程序代码:
怎么没人帮你啊!帮你改下哈!













#include<iostream>
#include<string>
using namespace std;
class Stu
{
    char name[10];
    int deg;
public:
    Stu(char na[],int d)
    {
        strcpy(name,na);
        deg=d;
    }
    char *getname(){ return name;}
    friend int compare(Stu &s1,Stu &s2) ;

}; 

int compare(Stu &s1,Stu &s2)
{
    if(s1.deg>s2.deg)
        return 1;
    else if(s1.deg==s2.deg)
        return 0;
    else
        return -1;
}
void main()
{
    Stu St[]={Stu("zhang",78),Stu("wang",80),Stu("zhao",92),Stu("li",65),Stu("chen",50)};
    int i,min=0,max=0;
    for(i=1;i<5;i++)
    {
        if(compare(St[max],St[i])==-1)
            max=i;
        if(compare(St[min],St[i])==1)  //  这两个关系是并列的不能用if-else, min与i的顺序也要换下
            min=i;
    }
    cout<<"输出结果:"<<endl;
    cout<<" 最高分:"<<St[max].getname()<<endl;
    cout<<" 最低分:"<<St[min].getname()<<endl;
}

If You Want Something, Go Get It, Period.
2010-10-17 21:30
shafeilong
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:236
专家分:1434
注 册:2009-3-21
收藏
得分:5 
else if(compare(St[i],St[min])==1)   //把这里的1改成-1看看
2010-10-19 08:12
敏枫
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-10-17
收藏
得分:0 
回复 2楼 m21wo
谢谢!!
2010-10-20 00:22
敏枫
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2010-10-17
收藏
得分:0 
回复 3楼 shafeilong
嗯!谢谢!!
2010-10-20 00:23
mengjava
Rank: 2
等 级:论坛游民
帖 子:6
专家分:20
注 册:2010-10-2
收藏
得分:5 
黑侠留个QQ号嘛!不会之处愿能指点
2010-10-20 09:50
yangang2
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:64
专家分:432
注 册:2010-9-1
收藏
得分:5 
二楼的方法是对的,具体分析如下:
第1次:i=1
St[0]与St[1]比较,返回-1;max=1
St[0]与St[1]比较,返回-1 min=0

第2次:i=2
St[1]与St[2]比较,返回-1;max=2
St[0]与St[2]比较,返回-1 min=0

第3次:i=3
St[2]与St[3]比较,返回1;max=2
St[0]与St[3]比较,返回1 min=3

第4次:i=4
St[2]与St[4]比较,返回1;max=2
St[0]与St[4]比较,返回1 min=4
所以max=2,min=4,最大是St[2]即"zhao",最小是St[4]即"chen"

但有一种更简便的方法,即楼主你的双分支判断语句,前提是那个St[i]要写在后面。为什么它还要简便点,想一想,循环比较开始时将最大最小数同时都设置为St[0],当一个数比St[max](St[max]为初始值St[0])大时,那么还有必要比较它与St[min](St[min]也为初始值St[0])的大小吗?也就是说你难道担心一个数比同一个数大同时它又比同一个数要小,有这样的数吗?所以两个单分支的if语句可简化为双分支的if语句,具体比较结果如下:
第1次:i=1
St[0]与St[1]比较,返回-1;max=1
                         min=0
第2次:i=2
St[1]与St[2]比较,返回-1;max=2
                         min=0
第3次:i=3
St[2]与St[3]比较,返回1;max=2//当出现不比最大值要大,就比较它是否比最小值小,如果比最小值小,最小值是它,否则介于最大与最小之间
St[0]与St[3]比较,返回1 min=3

第4次:i=4
St[2]与St[4]比较,返回1;max=2//道理同上
St[3]与St[4]比较,返回1 min=4
所以max=2,min=4,最大是St[2]即"zhao",最小是St[4]即"chen"


[ 本帖最后由 yangang2 于 2010-10-20 12:07 编辑 ]
2010-10-20 12:03
m21wo
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:4
帖 子:440
专家分:1905
注 册:2010-9-23
收藏
得分:0 
回复 6楼 mengjava
my QQ  is 670597005

If You Want Something, Go Get It, Period.
2010-10-20 19:03
快速回复:友元函数 学生类为什么能运行但是结果错误??
数据加载中...
 
   



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

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