《C++语言基础》实践参考——指向学生类的指针

返回:贺老师课程教学链接

【项目4-指向学生类的指针】

设计一个学生类Student,数据成员包括学号(num)和成绩(score),成员函数根据需要自行设计(建议配备需要的set、get函数,以及必要的输入或输出,给出的代码中也可以找到需要成员函数的线索)。在main函数中,要做到:

  • 建立一个对象数组,通过初始化,设置5个学生的数据,要求:
  • 用指针指向数组首元素,输出第1、3、5个学生的信息;
  • 设计一个函数int max(Student *arr);,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并返回值其学号。

下面给出部分程序,在此基础上完成项目:

class Student
{
public:
    ……
private:
    int num;   //学号
    double score;   //成绩
};

//max函数返回arr指向的对象数组中的最高成绩(max并不是成员函数,而是普通函数)
int max(Student *arr);

int main()
{
    Student stud[5]=
    {
        Student(101,78.5),Student(102,85.5),Student(103,100),
        Student(104,98.5),Student(105,95.5)
    };
    //输出第1、3、5个学生的信息(用循环语句)
    ……
    //输出成绩最高者的学号
    cout<<"5个学生中成绩最高者的学号为: "<<max(stud);//调用函数显示最高成绩
    return 0;
}

//定义函数max,返回arr指向的对象数组中的最高成绩,返回值为最高成绩者的学号
int max(Student *arr)
{
//求最高成绩及对应同学的学号

//返回最高成绩者的学号   

}

[参考解答]

#include <iostream>
using namespace std;

class Student
{
public:
    Student(int n,double s):num(n),score(s) {}
    void display();
    int getNum()
    {
        return num;
    }
    double getScore()
    {
        return score;
    }
private:
    int num;   //学号
    double score;   //成绩
};

void Student::display()
{
    cout<<num<<" "<<score<<endl;
}

//max函数返回arr指向的对象数组中的最高成绩者的学号
int max(Student *arr);

int main()
{
    Student stud[5]=
    {
        Student(101,78.5),Student(102,85.5),Student(103,100),
        Student(104,98.5),Student(105,95.5)
    };

    //输出第1、3、5个学生的信息
    for(int i=0; i<5; i+=2)
    {
        cout<<"学生"<<i+1<<": ";
        stud[i].display();
    }
    //找出个学生中成绩最高者,并输出其学号
    cout<<"5个学生中成绩最高者的学号为: "<<max(stud);//调用函数显示最高成绩
    return 0;
}

//定义函数max,返回arr指向的对象数组中的最高成绩者的学号
int max(Student *arr)
{
    double max_score=arr[0].getScore();//通过公共的成员函数取出私立有的数据成员,用好此法
    int k=0;
    for(int i=1; i<5; i++)
        if(arr[i].getScore()>max_score)
        {
            max_score=arr[i].getScore();
            k=i;
        }
    return arr[k].getNum();
}

  有同学提出,要是最高成绩者不止一位该如何去做?上面的解法,是在没有相同成绩的前提下做的,确实不够实际。

  下面的解法,将max函数定义为,返回最高成绩,而在main函数中将多位同学的学号输出。

#include <iostream>
#include <cmath>
using namespace std;

class Student
{
public:
    Student(int n,double s):num(n),score(s) {}
    void display();
    int getNum()
    {
        return num;
    }
    double getScore()
    {
        return score;
    }
private:
    int num;   //学号
    double score;   //成绩
};

void Student::display()
{
    cout<<num<<" "<<score<<endl;
}

//max函数返回arr指向的对象数组中的最高成绩
double max(Student *arr);

int main()
{
    Student stud[5]=
    {
        Student(101,78.5),Student(102,85.5),Student(103,100),
        Student(104,98.5),Student(105,100)
    };

    //输出第1、3、5个学生的信息
    for(int i=0; i<5; i+=2)
    {
        cout<<"学生"<<i+1<<": ";
        stud[i].display();
    }
    //找出个学生中成绩最高者,并输出其学号
    double max_score = max(stud); //调用函数求最高成绩
    cout<<"5个学生中成绩最高者的学号为: ";
    for(int i=0; i<5; i++)
    {
        if(abs(stud[i].getScore() - max_score)<1e-7)  //浮点数不能直接比较相等,只要相减小于一个很小的值,就认为相等
            cout<<stud[i].getNum()<<"  ";
    }
    cout<<endl;
    return 0;
}

//定义函数max,返回arr指向的对象数组中的最高成绩
double max(Student *arr)
{
    double max_score=arr[0].getScore();//通过公共的成员函数取出私立有的数据成员,用好此法
    for(int i=1; i<5; i++)
        if(arr[i].getScore()>max_score)
        {
            max_score=arr[i].getScore();
        }
    return max_score;
}
#include <iostream>
using namespace std;

class Student
{
public:
    Student(int n,double s):num(n),score(s) {}
    void display();
    int getNum()
    {
        return num;
    }
    double getScore()
    {
        return score;
    }
private:
    int num;   //学号
    double score;   //成绩
};

void Student::display()
{
    cout<<num<<" "<<score<<endl;
}

//max函数返回arr指向的对象数组中的最高成绩者的学号
int max(Student *arr);

int main()
{
    Student stud[5]=
    {
        Student(101,78.5),Student(102,85.5),Student(103,100),
        Student(104,98.5),Student(105,95.5)
    };

    //输出第1、3、5个学生的信息
    for(int i=0; i<5; i+=2)
    {
        cout<<"学生"<<i+1<<": ";
        stud[i].display();
    }
    //找出个学生中成绩最高者,并输出其学号
    cout<<"5个学生中成绩最高者的学号为: "<<max(stud);//调用函数显示最高成绩
    return 0;
}

//定义函数max,返回arr指向的对象数组中的最高成绩者的学号
int max(Student *arr)
{
    double max_score=arr[0].getScore();//通过公共的成员函数取出私立有的数据成员,用好此法
    int k=0;
    for(int i=1; i<5; i++)
        if(arr[i].getScore()>max_score)
        {
            max_score=arr[i].getScore();
            k=i;
        }
    return arr[k].getNum();
}

  周经纬同学提出,要是最高成绩者不止一位该如何去做?上面的解法,是在没有相同成绩的前提下做的,确实不够实际。

  下面的解法,将max函数定义为,返回最高成绩,而在main函数中将多位同学的学号输出。

#include <iostream>
#include <cmath>
using namespace std;

class Student
{
public:
    Student(int n,double s):num(n),score(s) {}
    void display();
    int getNum()
    {
        return num;
    }
    double getScore()
    {
        return score;
    }
private:
    int num;   //学号
    double score;   //成绩
};

void Student::display()
{
    cout<<num<<" "<<score<<endl;
}

//max函数返回arr指向的对象数组中的最高成绩
double max(Student *arr);

int main()
{
    Student stud[5]=
    {
        Student(101,78.5),Student(102,85.5),Student(103,100),
        Student(104,98.5),Student(105,100)
    };

    //输出第1、3、5个学生的信息
    for(int i=0; i<5; i+=2)
    {
        cout<<"学生"<<i+1<<": ";
        stud[i].display();
    }
    //找出个学生中成绩最高者,并输出其学号
    double max_score = max(stud); //调用函数求最高成绩
    cout<<"5个学生中成绩最高者的学号为: ";
    for(int i=0; i<5; i++)
    {
        if(abs(stud[i].getScore() - max_score)<1e-7)  //浮点数不能直接比较相等,只要相减小于一个很小的值,就认为相等
            cout<<stud[i].getNum()<<"  ";
    }
    cout<<endl;
    return 0;
}

//定义函数max,返回arr指向的对象数组中的最高成绩
double max(Student *arr)
{
    double max_score=arr[0].getScore();//通过公共的成员函数取出私立有的数据成员,用好此法
    for(int i=1; i<5; i++)
        if(arr[i].getScore()>max_score)
        {
            max_score=arr[i].getScore();
        }
    return max_score;
}
时间: 2024-09-02 17:30:39

《C++语言基础》实践参考——指向学生类的指针的相关文章

C++第5周(春)项目4 指向学生类的指针

课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4-指向学生类的指针] 设计一个学生类Student,数据成员包括学号(num)和成绩(score),成员函数根据需要自行设计(建议配备需要的set.get函数,以及必要的输入或输出,给出的代码中也可以找到需要成员函数的线索).在main函数中,要做到: 建立一个对象数组,通过初始化,设置5个学生的数据,要求: 用指针指向数组首元素,输出

c语言基础-C语言基础题,统计学生成绩。求解

问题描述 C语言基础题,统计学生成绩.求解 输入一个正整数n,再输入n个学生的百分制成绩,统计各等级成绩的个数. 成绩等级分为五级,分别为A(90~100).B(80~89).C(70~79).D(60~69)和E(0~59) 解决方案 abcde没有初始化 加上 开头的printf下面加上 a=b=c=d=e=0; 解决方案二: 图片在这里,这样做为什么不对,求大神解答

《C++语言基础》参考——学生可以相加吗?

返回:贺老师课程教学链接 谈及运算,我们总是习惯"数"的运算.而实际上,像时间之类的对象也是可以进行加减运算的.再进一步,我们的思维还可以拓展,运算加以加到任何事物上,只要我们可以为这些"运算"设计好意义. 例如:有班级类和学生类.两个学生相加,组成了一个由两个学生构成的班级:班级加学生,代表班级增加了一名新同学:学生乘学生,结果为这两个学生"结对子",可以做某些事(这个对子,需要定义成一个新的类):班级乘班级,是班级中的所有学生,两两结对子的所

《C++语言基础》实践参考——复数模板类

返回:贺老师课程教学链接 [项目6-复数模板类]    阅读教材例10.1.该例实现了一个复数类,但是美中不足的是,复数类的实部和虚部都固定只能是double型的.可以通过模板类的技术手段,设计Complex,使实部和虚部的类型为定义对象时指定的实际类型.    (1)要求类成员函数在类外定义.    (2)在此基础上,再实现减法.乘法和除法    你可以使用的main()函数如下. int main( ) { Complex<int> c1(3,4),c2(5,-10),c3; //实部和虚

C++实践参考:数组类模板

[项目-数组类模板] 在数组类的基础上,将之改造为类模板,以使数组中可以存储各种类型的数据. template <class T> //数组类模板定义 class Array { private: T* list; //用于存放动态分配的数组内存首地址 int size; //数组大小(元素个数) ... }; 参考解答: #include <iostream> #include <iomanip> #include <cassert> using name

C+实践参考——日期时间类

[项目]日期时间类 定义一个日期类Date,数据成员包括年.月.日,SetDate(int y,int m,int d)和PrintDate()函数分别用于设置日期和显示日期:再定义一个时间类Time,数据成员包括时.分.秒,SetTime(int h,int m,int s)和PrintTime()函数分别用于设置时间和显示时间,在此基础上再定义一个日期时间类TimeDate,充分利用已有的两个类中提供的方法,实现日期和时间的设置和显示.请实现类TimeDate,下面是用于测试的主函数及参考运

C++语言基础 例程 案例:MyVector类的设计

贺老师的教学链接  本课讲解 //MyVector类的设计 #include <iostream> using namespace std; class MyVector //定义向量类 { public: MyVector(int m); //构造函数,共有m个元素的向量,元素值预置为0 MyVector(const MyVector &v); //复制构造函数 ~MyVector(); //析构函数:释放动态数组所占用的存储空间 friend istream &operat

《C++语言基础》程序阅读——字符串类的设计

返回:贺老师课程教学链接 阅读下面的程序,领会其中用到的设计方案.技术手段与算法. /* 对于要定义的字符串类CMyString, 数据成员包括: - 字符串的长度: - 指向字符串第一个字符的指针 成员函数包括: - 不带参数的构造函数: - 带一个类型为const char *类型的参数(用于对字符串初始化)的构造函数: - 带一个const CMyString&类型的复制构造参数: - 析构函数: - Strlen函数 (用于求字符串的长度): - int Find(char c) (找出

C++实践参考——长方柱类

返回:贺老师课程教学链接 [项目 - 长方柱类] 编写基于对象的程序,求3个长方柱(Bulk)的体积.数据成员包括长(length).宽(width).高(heigth).体积,要求设计成员函数实现下面的功能: (1)由键盘输入3个长方柱的长.宽.高: (2)计算长方柱的体积(volume)和表面积(areas): (3)输出这3个长方柱的体积和表面积: [参考解答] 写出的程序结构应该如下: class Bulk {//定义需要的成员函数 //定义数据成员 }; //此处实现各成员函数 int