| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 793 人关注过本帖
标题:请高手帮我改个程序~
只看楼主 加入收藏
xtusr
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-10-28
收藏
 问题点数:0 回复次数:4 
请高手帮我改个程序~
能运行,可就是运行出来的结果是不对的~求高手帮我改下:)

//编写一个程序,已有若干个学生数据,包括学号、姓名、成绩,要求输出学生数据,计算平均分,并按平均分的高低排序。
#include <iostream.h>
#include <string.h>
#include <iomanip.h>
class Student
{
 private:
   int number;
   char *name;
   int score1,score2,score3;
 public:
   Student() {}
   void get(int,char *,int,int,int);
   int average();
   void show();
   ~Student(){}
};


void Student::get(int xnumber,char *xname,int xscore1,int xscore2,int xscore3)
{
number=xnumber;
 name=new char(strlen(xname)+1);   
 *name=*xname;
 score1=xscore1;
 score2=xscore2;
 score3=xscore3;
    }
    int Student::average()
    {return ((score1+score2+score3)/3);
    }
void Student::show()
{cout<<"学号:"<<number<<setw(10)<<"姓名:"<<name<<endl;
 cout<<"语文成绩:"<<score1<<setw(15)<<"数学成绩:"<<score2<<setw(15)<<"英语成绩:"<<score3<<setw(15)<<"平均分:"<<average()<<endl;
 cout<<endl;
}
void main()
{
int i,j;
Student S[3];
Student Temp;
S[0].get(1,"唐门",90,88,89);
S[1].get(2,"贾思乐",99,90,95);
S[2].get(3,"蒋小花",78,80,69);
for(i=0;i<3;i++)
 {for(j=0;j<3;j++)
   if((S[j].average())<(S[j+1].average()))
       {Temp=S[j];
        S[j]=S[j+1];
        S[j+1]=Temp;         
    }
}
cout<<"按平均分从高到低排序后:"<<endl;
S[0].show();
S[1].show();
S[2].show();
}

[[it] 本帖最后由 xtusr 于 2008-10-28 17:05 编辑 [/it]]
搜索更多相关主题的帖子: 高人 
2008-10-28 16:59
haiyungood
Rank: 2
等 级:论坛游民
帖 子:83
专家分:98
注 册:2008-7-2
收藏
得分:0 
这个程序在我电脑上不能运行啊?
2008-10-28 22:41
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
收藏
得分:0 
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
    if((S[j].average())<(S[j+1].average()))
    {
        Temp=S[j];
    S[j]=S[j+1];
    S[j+1]=Temp;         
    }

这是个什么算法呢...

2008-10-28 23:15
BBGASJ
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2007-8-15
收藏
得分:0 
既然包含了#include <string.h>为什么不用string?
用字符数组的话应该name=xname;把字符串首地址给它。
如果*name="abc";*xname="bcd";
*name=*xname;的意思是把xname的首字符赋给name的首字符,即'a'='b';
'a'不是个左值,显然不能通过编译。

Stay Hungry. Stay Foolish.
2008-10-29 07:13
qiaoyu
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-10-22
收藏
得分:0 
name=new char(strlen(xname)+1);   
*name=*xname;
这两句把第一句删掉第二句改成name=xname;这样直接传递地址就不用事先分配地址空间了;
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
把这个二重循环改成
for(i=0;i<3;i++)
{for(j=0;j<2;j++)因为如果第二个循环不改在最后一次时是S[2]跟S[3]比较s[3]不存在
2008-10-29 16:43
快速回复:请高手帮我改个程序~
数据加载中...
 
   



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

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