沈阳师范大学大一下册C++语言PTA题目集以及答案(函数题篇)

沈阳师范大学大一下册C++语言PTA题目集以及答案(函数题篇)

设计一个void类型的函数reverse_string,其功能是将一个给定的字符串逆序。例如,给定字符串为“hello”,逆序后为“olleh”。

函数接口定义如下:
/* 函数原型参见main函数 */
裁判测试程序样例:
#include
#include
using namespace std;

/* 你的代码将嵌在这里 */

int main(int argc, char const *argv[])
{
     
    string str;
    getline(cin, str);		//输入字符串
    reverse_string(str); 	//逆序字符串str
    cout << str << endl;	//输出逆序后的字符串
    return 0;
}

输入样例:
hello
输出样例:
Olleh

void reverse_string(string &s)
{
     
    char *str=&s[0];
    int n,i,j;
    char a;
    for(n=0;*(str+n);n++);
    for(i=0,j=n-1;i<j;i++,j--)
    {
     
        a=*(str+i);
        *(str+i)=*(str+j);
        *(str+j)=a;
    }
}

实现一个面积计算器,它能够计算矩形或长方体的面积。

函数接口定义:
int area(int x, int y);
int area(int x, int y, int z);
第一个函数计算长方形的面积,其中x和y是长和宽。第二个函数计算长方体的表面积,x,y和z是长,宽和高。

裁判测试程序样例:

#include
#include
using namespace std;
int area(int,int);
int area(int,int,int);
int main()
{
     
    int i, repeat, c, x, y, z;
    cin>>repeat;
    for(i=0;i<repeat;i++){
     
        cin>>c;
        if(c==2){
     
            cin>>x>>y;
            cout<<area(x,y)<<endl;
        }
        if(c==3){
     
            cin>>x>>y>>z;
            cout<<area(x,y,z)<<endl;
        }
    }
    return 0;
}

/* 请在这里填写答案 */
输入样例:
2
2 1 2
3 2 3 4
输出样例:
2
52


```cpp
int area(int x,int y)
{
     
    return x*y;
}
int area(int x,int y,int z)
{
     
    return 2*(x*y+y*z+x*z);
}

**编写重载函数myMax可分别求取两个整数,三个整数,两个双精度数的最大值。**

函数接口定义:

裁判测试程序样例:

/* 请在这里填写答案 */

```cpp
int main(){
	cout<

输入样例:

输出样例:
在这里给出相应的输出。例如:

4
5
4.3

#include 
using namespace std;

int myMax(int a,int b)
{
     
    return a>b?a:b;
}
int myMax(int a,int b,int c)
{
     
    return (a>b)?((a>c)?a:c):((b>c)?b:c);
}
double myMax(double a,double b)
{
     
    return a>b?a:b;
}

本题要求定义一个简单的学生类,数据成员仅需要定义学号和姓名,函数成员的原型见给出的代码,请给出函数成员的类外完整实现。

函数接口定义:

class Student
{
private:
int m_id;
char m_name[10];
public:
Student(int id=0,char *name="");
~Student();
void print();

};
其中m_id和m_name分别表示学生的学号和姓名,类型已经定义好。类内声明了3个成员函数,分别表示构造函数、析构函数和用于输出学生信息的函数。 构造函数要完成两个数据成员的初始赋值,并做一行输出,形如:“Hi!学号 姓名”。 析构函数要求输出一行,形如:“Bye!学号 姓名”。 print函数要求在一行中输出学生信息,形如:“学号 姓名”。 注:学号和姓名之间用一个空格分开。

裁判测试程序样例:

#include 
#include 
using namespace std;

int main()
{
     
    Student stu_array[3]={
     Student(1,"Zhang"),Student(2,"Wang")};
    return 0;
}

/* 请在这里填写答案 */

Student::Student(int id,char *name)
{
     
    m_id=id;
    strcpy(m_name ,name) ;
    cout<<"Hi!"<<m_id<<" "<<m_name<<endl;
}

Student::~Student()
{
     
    cout<<"Bye!"<<m_id<<" "<<m_name<<endl;
}

//void Student::print()
//{
     
    //cout<
//}

定义一个Tree(树)类,有成员ages(树龄),不带参数的构造函数对ages初始化为1,成员函数grow(int years)对ages加上years,age()显示tree对象的ages的值。

Tree类声明如下:
class Tree {
public:
Tree();//构造函数
void grow(int years);//对数龄ages加上years
void age();//显示数龄ages的值
private:
int ages;//树龄
};
请实现Tree类的构造函数和成员函数。

裁判测试程序样例:

#include 
using namespace std;

class Tree {
     
public:
    Tree();//构造函数
    void grow(int years);//对数龄ages加上years
    void age();//显示数龄ages的值
private:
    int ages;//树龄
};

int main()
{
     
    Tree tree;
    int years;
    cin >> years;
    tree.grow(years);
    tree.age();

    return 0;
}

/* 你的代码将被嵌在这里 */
输入样例:
30
输出样例:
31

Tree::Tree()
{
     
    ages=1;
}
void Tree::grow(int years)
{
     
    ages+=years;
}
void Tree::age()
{
     
    cout<<ages;
}

本题要求实现一个日期类定义,根据所定义的类可以完成相关的类测试。

Date类定义:
根据Date被使用的情况,进行Date类定义,要求通过构造函数进行日期初始化,并通过display()函数进行日期格式显示,显示格式为"月/日/年"

测试程序样例:
main( ) 函数定义如下

int main()
{
     
 Date d1(3,25,2019);
 Date d2(3,30);
 Date d3(10);
 Date d4;
 d1.display();
 d2.display();
 d3.display();
 d4.display();
 return 0;
 }

/* 请在这里填写答案 */
输出样例:
在这里给出相应的输出。例如:

3/25/2019
3/30/2019
10/1/2019
1/1/2019

class Date{
     
public:
    Date(int newTimeM=1,int newTimeD=1,int newTimeY=2019);
    void display();
private:
    int month,day,year;
};


Date::Date(int newTimeM, int newTimeD, int newTimeY) {
     
    month=newTimeM;
    day=newTimeD;
    year=newTimeY;

}

void Date::display() {
     
    cout<<month<<"/"<<day<<"/"<<year<<endl;
}

本题要求声明和实现一个Car类,包括实现其成员函数。
要求如下:

类和函数接口定义:

  1. 声明一个Car类;
  2. 三个public成员函数:
    (1) disp_welcomemsg(),无返回类型;
    (2) get_wheels(),返回一个Car类的数据成员m_nWheels的值;
    (3) set_wheels(int),用指定的形参初始化数据成员m_nWheels的值;
  3. 一个私有数据成员m_nWheels,整数类型,代表汽车的车轮数量。

其中,成员函数disp_welcomemsg()显示一条欢迎信息“Welcome to the car world!”。 成员函数get_wheels()返回Car类的私有数据成员m_nWheels。 成员函数set_wheels(int)用指定的形参初始化数据成员m_nWheels。

裁判测试程序样例:
#include
using namespace std;

/* 请在这里填写答案 */


```cpp
int main()
{
     
    int n;
    cin >> n;
    Car myfstcar, myseccar;    //定义类对象
    myfstcar.disp_welcomemsg();//访问成员函数,显示欢迎信息
    myfstcar.set_wheels(n);    //访问成员函数,设置车轮数量
    myseccar.set_wheels(n+4);  //访问成员函数,设置车轮数量
    //访问成员函数,显示车轮数量
    cout << "my first car wheels num = " << myfstcar.get_wheels() << endl;
    cout << "my second car wheels num = " << myseccar.get_wheels() << endl;

    return 0;

}


输入样例:
4
输出样例:
Welcome to the car world!
my first car wheels num = 4
my second car wheels num = 8

class Car
{
     
    private:
    int m_nWheels;
    public:
    void disp_welcomemsg()
    {
     
        cout<<"Welcome to the car world!"<<endl;
    }
    int get_wheels()
    {
     
        return m_nWheels;
    }
    void set_wheels(int n)
    {
     
        Car::m_nWheels=n;
    }

};

某大学开田径运动会,现有12名选手参加100米比赛,对应的运动员号及成绩如表所示,请按照成绩排名并输出,要求每一行输出名次、运动员号及成绩。

运动员号 成绩(秒) 运动员号 成绩(秒)
001 13.6 031 14.9
002 14.8 036 12.6
010 12.0 037 13.4
011 12.7 102 12.5
023 15.6 325 15.3
025 13.4 438 12.7
使用给定的类,完成数据的对象的定义,并按照成绩排序后输出(格式见输出样例)
类声明如下:

#include 
#include 
#include 
using namespace std; 
class Sport	
{
     
  public: 
       Sport() {
      }
	Sport(string n,double g)
	{
     
		num=n;
		grade=g;
	} 
	string num;	
	double grade;	
};	

输入样例:

输出样例:
在这里给出相应的输出。例如:

 1   010    12
 2   102  12.5
 3   036  12.6
 4   011  12.7
 5   438  12.7
 6   025  13.4
 7   037  13.4
 8   001  13.6
 9   002  14.8
10   031  14.9
11   325  15.3
12   023  15.6

注意:使用setw()进行宽度设置,每个输出项占6列。

int main()
{
     
    Sport A[12];
    void paixu(Sport *p);
    void luru(Sport *p);
    luru(A);
    paixu(A);
}
void paixu(Sport *p)
{
     
    double a;
    string b;
    int i,j;
    for(i=0;i<12;i++)
    {
     
        for(j=0;j<12;j++)
        {
     
            if(((p+j)->grade)>((p+i)->grade))
            {
     
                a=(p+j)->grade;
                (p+j)->grade=(p+i)->grade;
                (p+i)->grade=a;
                b=(p+j)->num;
                (p+j)->num=(p+i)->num;
                (p+i)->num=b;
            }
        }
    }
    for(i=0;i<12;i++)
    {
     
        cout<<setw(6)<<(i+1)<<setw(6)<<(p+i)->num<<setw(6)<<(p+i)->grade<<endl;
    }
}
void luru(Sport *p)
{
     
    p->num="001";
    p->grade=13.6;
    (p+1)->num="002";
    (p+1)->grade=14.8;
    (p+2)->num="010";
    (p+2)->grade=12.0;
    (p+3)->num="011";
    (p+3)->grade=12.7;
    (p+4)->num="023";
    (p+4)->grade=15.6;
    (p+5)->num="025";
    (p+5)->grade=13.4;
    (p+6)->num="031";
    (p+6)->grade=14.9;
    (p+7)->num="036";
    (p+7)->grade=12.6;
    (p+8)->num="037";
    (p+8)->grade=13.4;
    (p+9)->num="102";
    (p+9)->grade=12.5;
    (p+10)->num="325";
    (p+10)->grade=15.3;
    (p+11)->num="438";
    (p+11)->grade=12.7;
}

本题要求定义一个简单的学生类,数据成员仅需要定义学号和姓名,函数成员的原型见给出的代码,请给出函数成员的类外完整实现。

函数接口定义:

class Student
{
     
private:
    int m_id;
    char m_name[10];
public:
    Student(int id=0,char *name="");
    ~Student();
    void print();

};

其中m_id和m_name分别表示学生的学号和姓名,类型已经定义好。类内声明了3个成员函数,分别表示构造函数、析构函数和用于输出学生信息的函数。 构造函数要完成两个数据成员的初始赋值,并做一行输出,形如:“Hi!学号 姓名”。 析构函数要求输出一行,形如:“Bye!学号 姓名”。 print函数要求在一行中输出学生信息,形如:“学号 姓名”。 注:学号和姓名之间用一个空格分开。

裁判测试程序样例:

#include 
#include 
using namespace std;

int main()
{
     
    Student stu_array[3]={
     Student(1,"Zhang"),Student(2,"Wang")};
    return 0;
}

/* 请在这里填写答案 */

Student::Student(int id,char *name)
{
     
    m_id=id;
    strcpy(m_name ,name) ;
    cout<<"Hi!"<<m_id<<" "<<m_name<<endl;
}

Student::~Student()
{
     
    cout<<"Bye!"<<m_id<<" "<<m_name<<endl;
}

//void Student::print()
//{
     
    //cout<
//}

定义一学生类,已有若干个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。

类定义:
定义一学生类,已有若干个学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分
裁判测试程序样例:
利用学生类进行对象定义并输出结果的例子如下:
/* 请在这里填写答案 */

int Stud::sum=0;
int Stud::num=0;
int main()
{
     
    Stud  s1(1,"Li",89)s2(2,"Chert",78)s3(3,"zheng",94);
    s1.disp();
    s2.disp();
    s3.disp();
    cout<<"avg="<<Stud::avg()<<endl;
    return 0}

输入:

输出样例:
1,Li,89
2,Chert,78
3,zheng,94
avg=87

#include
using namespace std;  
class Stud
{
     
    private:
    static int sum;
    static int num;
    int a,b;
    string c;
    public:
    Stud(int x,string y,int z)
    {
     
        a=x;
        c=y;
        b=z;
        sum+=z;
        num++;
    }
    void disp()
    {
     
        cout<<a<<","<<c<<","<<b<<endl;
    }
    static double avg()
    {
     
        return sum/(num*1.0);
    }
};

6-1 2017final友元函数之全班同学的平均绩点 (10分)
一个学生类,有三个私有成员:名字name、课程学分指针score、课程成绩指针grade。定义一个友元函数,求全班同学的平均绩点。单门课程的学分绩点=学分绩点=学分(成绩/10-5) ; 全班同学的平均绩点是 所有同学的全部课程的学分绩点之和/所有同学学分数之和。单个同学的课程数不超过100门。全班同学人数不超过100名。

输入说明:

输入若干行。

每行一个学生的信息:第一个输入是学生的名字,第二个输入是第一门课程的学分,第三个输入是第一门课程的成绩,第四个输入是第二门课程的学分,第五个输入是第二门课程的成绩,以此类推,最后以-1表示该行输入结束。每个学生的课程数不超过100门。

最后以 no 表示输入结束。

输出一行,即该全班同学的平均绩点。

函数接口定义:
这是求全部同学平均绩点的友元函数的声明:
friend double averagegrade(student *stu, int count)
其中 *stu 和 count 都是用户传入的参数。 *stu 是传入的学生对象数组的首指针,count是全班学生数量。

裁判测试程序样例:

#include
#include
using namespace std;
class student{
     
   private:
      double *grade;
      double *score;
      string name;
public:
      student( )
     {
     
      grade=NULL;
      score=NULL;
      }
      student(string n, double *g, double *s)
      {
     
            name=n;
            grade=g;
            score=s;
       }
     friend double averagegrade(student *stu, int count);
};


/* 请在这里填写答案 */


int main()
{
     
   student stu[100];
   double s[100][100], g[100][100];
   int count=0;
   string n;
   for(int i=0;i<100;i++)
   {
     
         cin>>n;
         if(n=="no") break;
         count++;
         for(int j=0;j<100;j++)
        {
     
            cin>>s[i][j];
            if(s[i][j]==-1) break;
            cin>>g[i][j];
        }
       stu[i]=student(n, g[i], s[i]);
   }
   cout<<averagegrade(stu, count);
   return 0;
}

输入样例:
bob 3 90 2 68.5 2.5 50 -1
andy 3 80 2 77 -1
no
输出样例:
2.408

double averagegrade(student *stu, int count)
{
     
    int i=0,k=1;
    double sum1=0,sum2=0,sum3=0;
    for(;i<count;i++)
    {
     
        double *p1=(stu+i)->grade,*p2=(stu+i)->score;
        int j=0;
        while(*(p2+j)!=-1)
        {
     
            sum1+=*(p1+j);
            sum2+=*(p2+j);
            sum3+=*(p2+j)*(*(p1+j)/10-5);
            j++;

        }
    }
    if(sum3!=0&&sum2!=0)
    return sum3/sum2;
    else return 0;
   //double *p=(stu+i)->grade;
   //return *(p+k);
}

6-2 车与船的重量 (10分)
定义一boat与car两个类,二者都有weight属性,定义二者的一个友元函数totalweight(),计算二者的重量和。

测试程序样例:
在这里给出函数被调用进行测试的例子。例如:

#include 
using namespace std;

/* 请在这里填写答案 */

int main()
{
     
  int c,b;
  cin>>c>>b;
  car c1(c);
  boat b1(b);
  cout<<totalweight(b1,c1)<<endl;
}

输入样例:
1000 2000
输出样例:
3000
作者
范鹏程
单位
内蒙古师范大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

class car;
class boat;
class car
{
     
private:
    double weight;
    public:
    car(double a)
    {
     
        weight=a;
    }
    friend double totalweight(const boat b,const car c);
};
class boat
{
     
    double weight;
public:
    boat(double a)
    {
     
        weight=a;
    }
    friend double totalweight(const boat b,const car a);

};
double totalweight(boat b,car a)
{
     
    return b.weight+a.weight;
}

6-1 写出派生类构造方法(C++) (10分)
裁判测试程序样例中展示的是一段定义基类People、派生类Student以及测试两个类的相关C++代码,其中缺失了部分代码,请补充完整,以保证测试程序正常运行。

函数接口定义:
提示:
观察类的定义和main方法中的测试代码,补全缺失的代码。
裁判测试程序样例:
注意:真正的测试程序中使用的数据可能与样例测试程序中不同,但仅按照样例中的格式调用相关函数。

#include 
using namespace std;
class People{
     
private:
    string id;
    string name;
public:
    People(string id, string name){
     
        this->id = id;
        this->name = name;
    }
    string getId(){
     
        return this->id;
    }
    string getName(){
     
        return name;
    }
};
class Student : public People{
     
private:
    string sid;
    int score;
public:
    Student(string id, string name, string sid, int score)
		
		/** 你提交的代码将被嵌在这里(替换此行) **/
		
    }
    friend ostream& operator <<(ostream &o, Student &s);
};
ostream& operator <<(ostream &o, Student &s){
     
    o << "(Name:" << s.getName() << "; id:"
      << s.getId() << "; sid:" << s.sid
      << "; score:" << s.score << ")";
    return o;
}
int main(){
     
    Student zs("370202X", "Zhang San", "1052102", 96);
    cout << zs  << endl;
    return 0;
}

输入样例:
(无)
输出样例:

(Name:Zhang San; id:370202X; sid:1052102; score:96):People::People(id,name)
    {
       
        this->sid=sid;
        this->score=score;	}

6-2 狗的继承 (10分)
完成两个类,一个类Animal,表示动物类,有一个成员表示年龄。一个类Dog,继承自Animal,有一个新的数据成员表示颜色,合理设计这两个类,使得测试程序可以运行并得到正确的结果。

函数接口定义:
按照要求实现类

裁判测试程序样例:
/* 请在这里填写答案 */

int main(){
     
	Animal ani(5);
	cout<<"age of ani:"<<ani.getAge()<<endl;
	Dog dog(5,"black");
	cout<<"infor of dog:"<<endl;
	dog.showInfor();
}

输入样例:

输出样例:
age of ani:5
infor of dog:
age:5
color:black

#include
using namespace std;  

class Animal{
     
private:
int age;
public:
Animal(int a)
{
     
    this->age=a;
}
int getAge()
{
     
    return age;
}
};
class Dog:public Animal
{
     
private:
string color;
public:
Dog(int a,string b):Animal::Animal(a)
{
     
    this->color=b;
}
void showInfor()
{
     
    cout<<"age:"<<this->getAge()<<endl;
    cout<<"color:"<<this->color<<endl;
}
};

6-3 派生类使用基类的成员函数 (10分)
按要求完成下面的程序:
1、定义一个Animal类,成员包括:
(1)整数类型的私有数据成员m_nWeightBase,表示Animal的体重;
(2)整数类型的保护数据成员m_nAgeBase,表示Animal的年龄;
(3)公有函数成员set_weight,用指定形参初始化数据成员nWeightBase;
(4)公有成员函数get_weight,返回数据成员nWeightBase的值;
(5)公有函数成员set_age,用指定形参初始化数据成员m_nAgeBase;
2、定义一个Cat类,公有继承自Animal类,其成员包括:
(1)string类型的私有数据成员m_strName;
(2)带参数的构造函数,用指定形参对私有数据成员进行初始化;
(3)公有的成员函数print_age,功能是首先输出成员m_strName的值,然后输出“, age = ”,接着输出基类的数据成员m_nAgeBase的值。具体输出格式参见main函数和样例输出。

类和函数接口定义:
参见题目描述。
裁判测试程序样例:

#include 
#include 
using namespace std;

/* 请在这里填写答案 */


int main()
{
     
    Cat cat("Persian");   //定义派生类对象cat
    cat.set_age(5);       //派生类对象调用从基类继承的公有成员函数
    cat.set_weight(6);    //派生类对象调用从基类继承的公有成员函数
    cat.print_age();      //派生类对象调用自己的公有函数
    cout << "cat weight = " << cat.get_weight() << endl;
    return 0;
}

输入样例:
本题无输入。

输出样例:
Persian, age = 5
cat weight = 6

class Animal
{
     
private:
int m_nWeightBase;
protected:
int m_nAgeBase;
public:
void set_weight(int a){
     
this->m_nWeightBase=a;
}
int get_weight()
{
     
    return m_nWeightBase;
}
void set_age(int a)
{
     
    this->m_nAgeBase=a;
}
};
class Cat:public Animal{
     
private:
string m_strName;
public:
Cat(string a)
{
     
    this->m_strName=a;
}
void print_age()
{
     
    cout<<m_strName<<", age = "<<this->m_nAgeBase<<endl;
}

};

-4 派生类的定义和使用 (10分)
按要求完成下面的程序:
1、定义一个Animal类,包含一个void类型的无参的speak方法,输出“animal language!”。
2、定义一个Cat类,公有继承自Animal类,其成员包括:
(1)私有string类型的成员m_strName;
(2)带参数的构造函数,用指定形参对私有数据成员进行初始化;
(3)公有的成员函数print_name,无形参,void类型,功能是输出成员m_strName的值,具体输出格式参见main函数和样例输出。

类和函数接口定义:
参见题目描述。
裁判测试程序样例:

#include 
#include 
using namespace std;

/* 请在这里填写答案 */

int main()
{
     
    Cat cat("Persian"); //定义派生类对象
    cat.print_name();	//派生类对象使用本类成员函数
    cat.speak();	//派生类对象使用基类成员函数
    return 0;
}

输入样例:
本题无输入。

输出样例:
cat name: Persian
animal language!

class Animal
{
     
    public:
    void speak()
    {
     
        cout<<"animal language!"<<endl;
    }
};
class Cat:public Animal{
     
private:
string m_strName;
public:
Cat(string a)
{
     
    this->m_strName=a;
}
void print_name()
{
     
    cout<<"cat name: "<<this->m_strName<<endl;
}
};

6-5 学生派生类 (10分)
根据所给的类Student定义其派生类,并利用构造函数进行数据初始化,使程序能按照"样例"的格式进行输出

类定义:

#include 
#include
using namespace std;

class Student                             
 {
     public:                                
   Student(int n,string nam,char s )      
    {
     num=n;
     name=nam;
     sex=s; }
   ~Student( ) {
      }
  protected:                               
    int num;
    string name;
    char sex ;                           
};

/* 请在这里添加派生类定义 */

裁判测试程序样例:

int main( )
 {
     Student1 stud1(10010,"Wang-li",'f',19,"115 Beijing Road,Shanghai");
  Student1 stud2(10011,"Zhang-fun",'m',21,"213 Shanghai Road,Beijing");
  stud1.show( );           
  stud2.show( );            
  return 0;
}

输出样例:
num: 10010
name: Wang-li
sex: f
age: 19
address: 115 Beijing Road,Shanghai

num: 10011
name: Zhang-fun
sex: m
age: 21
address: 213 Shanghai Road,Beijing

class Student1:public Student{
     
    private:
    int a;
    string b;
    public:
    Student1(int c,string d,char e,int a,string b):Student(c,d,e)
    {
     
        this->a=a;
        this->b=b;
    }
    void show( )
    {
     
        static int x=0;
        cout<<"num: "<<this->num<<endl<<"name: "<<this->name<<endl<<"sex: "<<this->sex<<endl<<"age: "<<this->a<<endl<<"address: "<<this->b<<endl<<endl;
    }
};

-1 使用成员函数重载复数类的运算符+ (10分)
类Complex声明了一个复数类,有两个数据成员realPart(代表复数的实部)和imgPart(代表复数的虚部),并定义了成员函数实现了重载运算符“+”以实现两个复数对象的相加操作。成员函数Show用来输出复数的实部和虚部。请完成对运算符“+”的重载操作。

函数接口定义:
Complex& Complex::operator+(Complex& com);
参数com为复数类Complex的对象的引用,函数的返回值为当前对象与com对象相加后的值。

裁判测试程序样例:

#include
using namespace std;

class Complex {
     
public:
    Complex(double realPart = 0, double imgPart = 0) {
     
        this->realPart = realPart;
        this->imgPart = imgPart;
    }
    Complex& operator+(Complex& com);
    void Show() {
     
        cout << realPart << " " << imgPart << endl;
    }
private:
    double realPart, imgPart;
};
int main() {
     
    int r1, i1;			//第1个复数对象的实部和虚部
    int r2, i2;			//第1个复数对象的实部和虚部
    cin >> r1 >> i1;
    cin >> r2 >> i2;
    Complex c1(r1, i1);	//构造第1个复数对象c1
    Complex c2(r2, i2);	//构造第2个复数对象c2
    c1 = c1 + c2;
    c1.Show();

    return 0;
}
/* 你的代码将被嵌在这里 */

输入样例:
3 4
10 20
输出样例:
13 24

Complex &Complex::operator+(Complex& com){
     
Complex *t=new Complex;
t->imgPart=imgPart+com.imgPart;
t->realPart=realPart+com.realPart;
return *t;
}

6-2 重载±运算符 (10分)
请根据程序的输出结果,重载类A的+和-运算符。

类和函数接口定义:

class A {
     
public:
    A(int x = 0, int y = 0) : x(x), y(y) {
     }
    void show() const;
    A operator+(A& a);	//重载+运算符
    A operator-(A& a);	//重载-运算符
private:
    int x, y;
};
裁判测试程序样例:
#include 
using namespace std;

class A {
     
public:
    A(int x = 0, int y = 0) : x(x), y(y) {
     }
    void show() const;
    A operator+(A& a);
    A operator-(A& a);
private:
    int x, y;
};

void A::show() const {
     
    cout << "(x,y) = " << "(" << x << "," << y << ")" << endl;
}

/* 请在这里填写答案 */

int main() {
     
    A a1(1, 2);
    A a2(4, 5);
    A a;
    cout << "a1:";	a1.show();
    cout << "a2:";	a2.show();
    a = a1 + a2;
    cout << "a:";	a.show();
    a = a1 - a2;
    cout << "a:";	a.show();
    return 0;
}

输入样例:
本题无输入。

输出样例:
a1:(x,y) = (1,2)
a2:(x,y) = (4,5)
a:(x,y) = (5,7)
a:(x,y) = (-3,-3)

A A::operator+(A& a){
     
    A b;
    b.x=x+a.x;
    b.y=y+a.y;
    return b;
}
A A::operator-(A& a){
     
    A b;
    b.x=x-a.x;
    b.y=y-a.y;
    return b;
}

6-5 时间相加 (10分)
设计一个时间类,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现2个时间的相加。要求: (1)小时的时间范围限制在大于等于0;(2)分的时间范围为059分;(3)秒的时间范围为059秒。

#include 
using namespace std;
class Time {
     
private:
 int hours,minutes, seconds;
public:
 Time(int h=0, int m=0, int s=0);
 Time operator + (Time &);
 void DispTime();
};

/* 请在这里填写答案 */

int main() {
     
 Time tm1(8,75,50),tm2(0,6,16), tm3;
 tm3=tm1+tm2;
 tm3.DispTime();
 return 0;
}

输出:
在这里给出相应的输出。例如:

9h:22m:6s

Time::Time(int h, int m, int s){
     
    this->hours=h;
    this->minutes=m;
    this->seconds=s;
}
void Time::DispTime(){
     
cout<<this->hours<<"h:"<<this->minutes<<"m:"<<this->seconds<<"s"<<endl;
}
Time Time::operator + (Time &a){
     
Time c;
c.seconds=seconds+a.seconds;
c.minutes=minutes+a.minutes;
c.hours=hours+a.hours;
if(c.seconds>=60){
     
    c.minutes++;
    c.seconds-=60;
}
if(c.minutes>=60){
     
    c.hours++;
    c.minutes-=60;
}
return c;
}

6-2 抽象类Shape (10分)
请编写一个抽象类Shape,包括两个纯虚函数,分别为计算面积getArea()和计算周长getPerim()。通过Shape类派生出矩形类Rectangle和圆类Circle,并计算各自的面积和周长。

测试用例具体要求:输入1表示测试矩形类,之后输入矩形长和宽。输入2表示测试圆类,之后输入圆半径。

Shape类定义如下:

class Shape {
     
	public:
		virtual double getArea()=0;
		virtual double getPerim()=0;
};

裁判测试程序样例:

#include 
using namespace std;
const double PI=3.14;

class Shape {
     
	public:
		virtual double getArea()=0;
		virtual double getPerim()=0;
};


/* ------请在这里填写答案 ------*/


int main() {
     
	Shape *p;
	int n;
	double w,h,r;
	scanf("%d",&n);
	switch(n) {
     
		case 1: {
     
			cin>>w>>h;
			Rectangle rect(w,h);
			cout<<"area="<<rect.getArea()<<endl;
			cout<<"perim="<<rect.getPerim()<<endl;
			break;
		}
		case 2: {
     
			cin>>r;
			Circle c(r);
			cout<<"area="<<c.getArea()<<endl;
			cout<<"perim="<<c.getPerim()<<endl;
			break;
		}
	}

	return 0;
}

输入样例1:
在这里给出一组输入。例如:

1
4 5
输出样例1:
在这里给出相应的输出。例如:

area=20
perim=18

输入样例2:
在这里给出一组输入。例如:

2
5
输出样例2:
在这里给出相应的输出。例如:

area=78.5
perim=31.4

class Rectangle:public  Shape{
     
    private:
    double a,b;
public:
Rectangle(double a,double b){
     
    this->a=a;
    this->b=b;
}
double getArea(){
     
    return this->a*this->b;
}
double getPerim(){
     
    return this->a*2+this->b*2;
}
};
class Circle:public Shape{
     
private:
double a;
public:
Circle(double a){
     
    this->a=a;
}
double getArea(){
     
    return this->a*this->a*3.14;
}
double getPerim(){
     
    return this->a*2*3.14;
}
};

6-3 虚函数的应用 (10分)
补充下列代码,使得程序的输出为:
A:3
A:15
B:5
3
15
5

类和函数接口定义:
参见裁判测试程序样例中的类和函数接口。
裁判测试程序样例:

#include 
using namespace std;
class CMyClassA {
     
    int val;
public:
    CMyClassA(int);
    void virtual print();
};
CMyClassA::CMyClassA(int arg) {
     
    val = arg;
    printf("A:%d\n", val);
}
void CMyClassA::print() {
     
    printf("%d\n", val);
    return;
}

/* 在这里填写代码 */

int main(int argc, char** argv) {
     
    CMyClassA a(3), *ptr;
    CMyClassB b(5);
    ptr = &a;
    ptr->print();
    a = b;
    a.print();
    ptr = &b;
    ptr->print();
    return 0;
}

输入样例:
None
输出样例:
A:3
A:15
B:5
3
15
5
来源:
openjudge.cn

class CMyClassB:public CMyClassA{
     
    int val2;
    public:
    CMyClassB(int a):CMyClassA(a*3){
     
        this->val2=a;
        cout<<"B:"<<a<<endl;
    }
    void print(){
     
        cout<<val2<<endl;
    }

};

你可能感兴趣的:(沈阳师范大学,PTA,编程语言)