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

c++ 初学者,求助,课后习题。

cityrunner 发布于 2016-04-14 19:08, 4149 次点击
题:建立一个对象数组,内放5个学生的数据(学号,成绩),用指针指向数组的首元素,输出第 1,3,5;个学生的数据,设计一个max 函数,用指向对象的指针变量作为函数参数,函数的功能是找出5个学生中的成绩最高者,并输出其学号及成绩。
程序代码:
#include<iostream>
#include<cstring>
#define maxsize 5;
using namespace std;
class  ST
{
    private:
        int g;
        char num[15];
    public:
        ST(int x,const char *y)
        {
            g=x;
            strcpy(num,y);
        }
    };
        ex(ST *p)
        {
            for(int i=0;i<maxsize;i=i+2)
            cout<<""<<i+1<<"个人的成绩为:"<<s[i]->g<<endl;
            
        }
        
    void max(ST *s)
    {
        ST temp(s[0]);
        for(int i=0;i<maxsize-1;i++)
        {
            if(s[i]<s[i+1])
            temp=s[i+1];
        }
        cout<<"成绩最高的人的学号是:"<<temp->num<<"其成绩为:"<<g<<endl;
        
    }
    int main()
    {
        ST s[maxsize];
        s[0]=ST(98,1306060132);
        s[1]=ST(97,1306060131);
        s[2]=ST(96,1306060134);
        s[3]=ST(95,1306060132);
        s[4]=ST(94,1306060129);
        ex(s);
        max(s);
        return 1;
    }

我不太会查看错误,大概逻辑知道些,求前辈给出解答。
7 回复
#2
alice_usnet2016-04-14 21:22
程序代码:
#include<iostream>
#include<cstring>
#define maxsize 5
using namespace std;
class  ST
{
private:
  int id;
  double score;
public:
  //ST():id(0),score(0){}
  ST(const int x,const double sc):id(x),score(sc)
  {
  }
  friend void ex(const ST *);
  friend void max(const ST *);
  ~ST(){}
};
void ex(const ST *p)
{
   for(int i=0;i<maxsize;i=i+2)
     cout<<""<<i+1<<"个人的id为:"<<p[i].id<<" 成绩为"<<p[i].score<<endl;
}
void max(const ST *s)
{
  int maxsc=s[0].score;
  int j=0;
  for(int i=0;i<maxsize;i++)
  {
     if(s[i].score>maxsc)
       j=i;
  }
  cout<<"成绩最高的人的学号是:"<<s[j].id<<"其成绩为:"<<s[j].score<<endl;
}
int main()
{
  ST s[maxsize]={
        ST(98,1306060132),
        ST(97,1306060131),
        ST(96,1306060134),
        ST(95,1306060132),
        ST(94,1306060129)
  };
  ex(s);
  max(s);
  return 0;
}
#3
cityrunner2016-04-14 22:23
回复 2楼 alice_usnet
ST s[maxsize];
         s[0]=ST(98,1306060132);
         s[1]=ST(97,1306060131);
         s[2]=ST(96,1306060134);
         s[3]=ST(95,1306060132);
         s[4]=ST(94,1306060129);
      我这条语句有啥问题没?
还有我的 构造函数 有啥问题没? 学号应该也可以当做字符串吧
   ST(int x,const char *y)
         {
             g=x;
             strcpy(num,y);
你的 构造函数不太懂 能解释下吗?
 //ST():id(0),score(0){}
  ST(const int x,const double sc):id(x),score(sc)
   {
   }
谢谢了!
#4
alice_usnet2016-04-14 22:37
ST s[maxsize];

数组中的对象已经创建了
 
程序代码:
s[0]=ST(98,1306060132);
         s[1]=ST(97,1306060131);
         s[2]=ST(96,1306060134);
         s[3]=ST(95,1306060132);
         s[4]=ST(94,1306060129);

再调用构造函数是错的。
你的构造函数没问题,学号也可以用字符串。况且用int可以偷一下懒
但既然你的学号的字符串,先不说
ST s[maxsize];

 
程序代码:
s[0]=ST(98,1306060132);
         s[1]=ST(97,1306060131);
         s[2]=ST(96,1306060134);
         s[3]=ST(95,1306060132);
         s[4]=ST(94,1306060129);

本身有问题,第二个参数是int是什么意思。
ST(const int x,const double sc):id(x),score(sc)
{
}

主要是使用了初始化列表,没学过吗?
就是使用参数对成员进行初始化。对比
程序代码:
ST(const int x,const double sc)
{
  id=x;
  score=sc;
}

只是赋值而已,不是初始化。
#5
仰望星空的2016-04-15 11:10
受教了~
#6
cityrunner2016-04-15 20:52
回复 4楼 alice_usnet
哦,有的地方没看到,大概明白了,谢谢了。
#7
小盛开2016-04-16 14:10
回复 4楼 alice_usnet
什么叫初始化 啊?
#8
小盛开2016-04-16 14:17
回复 4楼 alice_usnet
#include<iostream>
using namespace std;
class sample{
public:
    sample(int i,int j)
    {
        x=i;
        y=j;
    }
    void disp()
    {
        cout<<"disp1"<<endl;
    }
    void disp()const{
        cout<<"disp2"<<endl;
    }
private:
    int x,y;
};
int main()
{
    const sample a(1,2);
    a.disp();
    return 0;
}
你也帮我看一下,我这里const sample a(1,2);赋值给谁啊,括号里的1,2和disp1和disp2有什么关联么?
1