C++面向对象程序设计上机测验二

1.输出运算符重载之复数类

试题描述

定义复数Complex类,并重载输出运算符<<函数为Complex类的友元函数。类有两个保护数据成员,分别是int类型的real、image代表实部和虚部。类有一个构造函数(两个参数,参数默认值均为0,在初始化列表中将形参赋给对应的数据成员)。

int main()
{
   …… //输入两个整数a和b,再使用这两个整数创建复数对象z1

   cout << z1 << endl; //输出z1对象
   return 0;
}

注意:1.请务必提交完整的程序代码,不要修改代码框架。2.请不要修改试题描述中的所有标识符,注意大小写敏感。

输入

输入两个整数,用一个空格隔开。

输出

输出一个复数表达式。

输入示例1

2 -5

输出示例1

2-5i

输入示例2

2 0

输出示例2

2

数据范围

输入为int范围的整数

代码实现

#include 
#include 
#include 
using namespace std;
class Complex
{
protected:
    int real,image;
public:
    Complex(int r=0,int i=0):real(r),image(i){}
    friend ostream operator<<(ostream& out,const Complex& z);
};
ostream operator<<(ostream& out,const Complex& z)
{
    if(z.real==0&&z.image==0) out<<"0"<0) out<>a>>b;
   Complex z1(a,b);
   cout << z1 << endl; //输出z1对象
   return 0;
}

2.函数模板之互换问题

试题描述

阅读下面main()函数体代码结构并仔细观察输入输出示例,请定义互换函数模板void Exchange(……),定义日期Date类(保护的int类型的数据成员year、month、day)。
从main()函数体可知,为保证程序正确执行,必须为Date类定义恰当的构造函数、重载‘<<’输出运算符,但是不必为Date类重载赋值运算符函数,可以使用默认赋值运算符函数。

int main()
{
   int a, b; //定义整型变量
   double c, d; //定义浮点型变量
   int y1, m1, d1, y2, m2, d2;
   cin >> a >> b >> c >> d >> y1 >> m1 >> d1 >> y2 >> m2 >> d2;
   Date day1(y1, m1, d1), day2(y2, m2, d2); //定义Date型变量

   ……//参照输出示例,输出互换前a与b的值
   Exchange(a, b); //调用模板函数void Exchange(int,int)
   ……//参照输出示例,输出互换后a与b的值

   …… //参照输出示例,输出互换前c与d的值,要求小数点后必须保留2位有效数字(四舍五入),不足补零
   Exchange(c, d); //调用模板函数void Exchange(double,double)
   …… //参照输出示例,输出互换后c与d的值,要求小数点后必须保留2位有效数字(四舍五入),不足补零

   …… //参照输出示例,输出互换前day1与day2的值
   Exchange(day1, day2); //调用模板函数void Exchange(Date,Date)
   …… //参照输出示例,输出互换后day1与day2的值
   return 0;
}

注意:1.请务必提交完整的程序代码,不要修改代码框架。2.请不要修改试题描述中的所有标识符,注意大小写敏感。3.为了在不同编译平台下保证代码正确性,请加入头文件。

输入

输入两个整数、两个浮点数、六个非负整数(日期数据),相邻两项之间以空格隔开。

输出

依据题意输出若干行。每行的两个值之间用一个逗号和一个空格隔开,浮点数输出要求小数点后必须保留2位有效数字(四舍五入),不足补零。

输入示例

11 22 33.312 44.4 1949 10 1 2005 1 15

输出示例

互换前a与b为:11, 22
互换后a与b为:22, 11
互换前c与d为:33.31, 44.40
互换后c与d为:44.40, 33.31
互换前day1与day2为:1949年10月1日, 2005年1月15日
互换后day1与day2为:2005年1月15日, 1949年10月1日

数据范围

输入int范围的整数、double范围的浮点数、正确的日期数据

代码实现

#include 
#include 
#include 
using namespace  std;
template 
void Exchange(T& a,T& b)
{
    T c=a;
    a=b;
    b=c;
}
class Date
{
protected:
    int year,month,day;
public:
    Date(int y,int m,int d):year(y),month(m),day(d){}
    friend ostream& operator<<(ostream& dout,const Date& d);
};
ostream& operator<<(ostream& dout,const Date& d)
{
    dout<> a >> b >> c >> d >> y1 >> m1 >> d1 >> y2 >> m2 >> d2;
   Date day1(y1, m1, d1), day2(y2, m2, d2); //定义Date型变量

   cout<<"互换前a与b为:"<

3.类模板之堆栈问题

试题描述

根据下面的main()函数以及程序执行结果,请定义堆栈类模板Stack。类模板Stack的成员描述如表1所示。
在这里插入图片描述

int main()
{
   Stack  stk1; //创建对象
   Stack  stk2; //创建对象
   int n, m;
   cin >> n >> m;
   …… //输入n个整数,并压入堆栈stk1中

   …… //输入m个浮点数,并压入堆栈stk2中

   int a;
   if (stk1.Pop(a))
      cout << a << endl;
   if (stk1.Pop(a))
      cout << a << endl;
   double x;
   if (stk2.Pop(x))
      cout << x << endl;
   if (stk2.Pop(x))
      cout << x << endl;
   return 0;
} 

注意:1.请务必提交完整的程序代码,不要修改代码框架。2.请不要修改试题描述中的所有标识符,注意大小写敏感。3.为了在不同编译平台下保证代码正确性,请加入头文件。

输入

输入包含三行:
第一行包括两个整数n和m,用一个空格隔开,且1 < n, m <= 100。
第二行为n个整数,邻近两数之间用一个空格隔开。
第三行为m个浮点数,邻近两数之间用一个空格隔开。

输出

输出两行,分别为弹出stk1栈、stk2栈的数据,最后两个数据输出要求小数点后必须保留2位有效数字(四舍五入),不足补零。

输入示例

3 2
10 20 30
0.33 3.14

输出示例

30
20
3.14
0.33

数据范围

输入为int范围的整数和double范围的浮点数

代码实现

#include 
#include 
using namespace std;
template 
class Stack
{
protected:
    T* m_data;
    int m_count;
public:
    Stack()
    {
        m_data=new T[n];
        Clear();
    }
    ~Stack()
    {
        delete []m_data;
    }
    void Clear()
    {
        m_count=0;
    }
    void Push(T a)
    {
        m_data[m_count++]=a;
    }
    bool Pop(T& a)
    {
        if(m_count==0) return 0;
        a=m_data[--m_count];
        return 1;
    }
};
int main()
{
   Stack  stk1; //创建对象
   Stack  stk2; //创建对象
   int n, m;
   cin >> n >> m;
   for(int i=0;i>x;
        stk1.Push(x);
    }
   for(int i=0;i>x;
        stk2.Push(x);
    }
   int a;
   if (stk1.Pop(a))
      cout << a << endl;
   if (stk1.Pop(a))
      cout << a << endl;
   double x;
   if (stk2.Pop(x))
      cout << x << endl;
   if (stk2.Pop(x))
      cout << x << endl;
   return 0;
}

你可能感兴趣的:(C++面向对象程序设计)