学堂在线TsinghuaX: 00740043_2X C++语言程序设计进阶 第八章Lab

第一题:复数加减乘除

题目描述

求两个复数的加减乘除。

要求使用c++ class编写程序。可以创建如下class

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

class Complex{
public:
    Complex(double r = 0.0, double i = 0.0): real(r), imag(i) {};
    Complex operator+ (const Complex &c2) const;
    Complex operator- (const Complex &c2) const;

    /*实现下面三个函数*/
    Complex operator* (const Complex &c2) const;
    Complex operator/ (const Complex &c2) const;
    friend ostream & operator<< (ostream &out, const Complex &c);

private:
    double real;
    double imag;
};

Complex Complex::operator+ (const Complex &c2) const {
    return Complex(real + c2.real, imag + c2.imag);
}

Complex Complex::operator- (const Complex &c2) const {
    return Complex(real - c2.real, imag - c2.imag);
}

int main() {
    double real, imag;
    cin >> real >> imag;
    Complex c1(real, imag);
    cin >> real >> imag;
    Complex c2(real, imag);
    cout << c1 + c2;
    cout << c1 - c2;
    cout << c1 * c2;
    cout << c1 / c2;
}

输入描述

第一行两个double类型数,表示第一个复数的实部虚部

第二行两个double类型数,表示第二个复数的实部虚部

输出描述

输出依次计算两个复数的加减乘除,一行一个结果

输出复数先输出实部,空格,然后是虚部,

样例输入

1 1
3 -1

样例输出

4 0
-2 2
4 2
0.2 0.4
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

class Complex{
public:
    Complex(double r = 0.0, double i = 0.0): real(r), imag(i) {};
    Complex operator+ (const Complex &c2) const;
    Complex operator- (const Complex &c2) const;
    Complex operator* (const Complex &c2) const;
    Complex operator/ (const Complex &c2) const;
    friend ostream & operator<< (ostream &out, const Complex &c);

private:
    double real;
    double imag;
};

Complex Complex::operator+ (const Complex &c2) const {
    return Complex(real + c2.real, imag + c2.imag);
}

Complex Complex::operator- (const Complex &c2) const {
    return Complex(real - c2.real, imag - c2.imag);
}

Complex Complex::operator* (const Complex &c2) const{
    return Complex(real * c2.real - imag * c2.imag, imag * c2.real + real * c2.imag);
}

Complex Complex::operator/ (const Complex &c2) const{
    return Complex((real * c2.real + imag * c2.imag) / (c2.real * c2.real + c2.imag * c2.imag), (imag * c2.real - real * c2.imag) / (c2.real * c2.real + c2.imag * c2.imag));
}

ostream & operator<< (ostream &out, const Complex &c){
    out << c.real << " "<< c.imag << endl;
    return out;
}

int main() {
    double real, imag;
    cin >> real >> imag;
    Complex c1(real, imag);
    cin >> real >> imag;
    Complex c2(real, imag);
    cout << c1 + c2;
    cout << c1 - c2;
    cout << c1 * c2;
    cout << c1 / c2;
}

第二题:圆的周长和面积

题目描述

求圆的周长和面积,已知圆类从shape抽象类继承。

要求使用c++ class编写程序。可以创建如下class

#include <iostream>
using namespace std;

const double pi = 3.14;

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

class Circle: public Shape{
public:
    Circle(double rad):radius(rad){}
    ~Circle(){}

    /*补充这两个函数*/
    double getArea();
    double getPerim();
private:
    double radius;
};

int main() {
    double radius;
    cin >> radius;
    Circle c(radius);
    cout << c.getArea() << " " << c.getPerim() << endl;
}

输入描述

输入圆的半径

输出描述

输出圆的周长和面积

样例输入

10

样例输出

314 62.8
#include <iostream>
using namespace std;

const double pi = 3.14;

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

class Circle: public Shape{
public:
    Circle(double rad):radius(rad){}
    ~Circle(){}
    double getArea()
    {
        return pi * radius * radius;
    }
    double getPerim()
    {
        return 2 * pi * radius;
    }
private:
    double radius;
};

int main() {
    double radius;
    cin >> radius;
    Circle c(radius);
    cout << c.getArea() << " " << c.getPerim() << endl;
}

第三题:三角形还是长方形?

题目描述

在多态概念中,基类的指针既可以指向基类的对象,又可以指向派生类的对象。我们可以使用dynamic_cast类型转换操作符来判断当前指针(必须是多态类型)是否能够转换成为某个目的类型的指针。

同学们先查找dynamic_cast的使用说明(如http://en.wikipedia.org/wiki/Run-time_type_information#dynamic_cast),然后使用该类型转换操作符完成下面程序(该题无输入)。

函数int getVertexCount(Shape * b)计算b的顶点数目,若b指向Shape类型,返回值为0;若b指向Triangle类型,返回值为3;若b指向Rectangle类型,返回值为4。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

class Shape{
public:
    Shape() {}
    virtual ~Shape() {}
};

class Triangle: public Shape{
public:
    Triangle() {}
    ~Triangle() {}
};

class Rectangle: public Shape {
public:
    Rectangle() {}
    ~Rectangle() {}
};

/*用dynamic_cast类型转换操作符完成该函数*/
int getVertexCount(Shape * b){
}

int main() {
    Shape s;
    cout << getVertexCount(&s) << endl;
    Triangle t;
    cout << getVertexCount(&t) << endl;
    Rectangle r;
    cout << getVertexCount(&r) << endl;
}

答案:

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

class Shape{
public:
    Shape() {}
    virtual ~Shape() {}
};

class Triangle: public Shape{
public:
    Triangle() {}
    ~Triangle() {}
};

class Rectangle: public Shape {
public:
    Rectangle() {}
    ~Rectangle() {}
};

/*用dynamic_cast类型转换操作符完成该函数*/
int getVertexCount(Shape * b){
    if(dynamic_cast<Triangle *>(b))
        return 3;
    else if(dynamic_cast<Rectangle *>(b))
        return 4;
    else
        return 0;
}

int main() {
    Shape s;
    cout << getVertexCount(&s) << endl;
    Triangle t;
    cout << getVertexCount(&t) << endl;
    Rectangle r;
    cout << getVertexCount(&r) << endl;
}
时间: 2024-10-15 14:41:07

学堂在线TsinghuaX: 00740043_2X C++语言程序设计进阶 第八章Lab的相关文章

学堂在线TsinghuaX: 00740043_2X C++语言程序设计进阶 第七章Lab

第一题:账户类 题目描述 定义一个基类Account,数据成员包含string类变量userName用于保存账户主人姓名,函数成员包括默认构造函数.带参构造函数用于初始化数据成员和输出姓名的成员函PrintName().从Account类派生出CreditAccount类,增加整型数据成员credit用于记录该用户信用额度,函数成员包括带参构造函数用于初始化数据成员和输出账户信息的成员函数PrintInfo().要求:在函数PrintInfo()中需要调用基类的成员函数PrintName().填

学堂在线TsinghuaX: 00740043_2X C++语言程序设计进阶 第六章Lab

第一题:最大子数组和 题目描述 给定一个数组a[0,...,n-1],求其最大子数组(长度>=1)和 输入描述 第一行一个整数n(1<=n<=5000),然后依次输入n个整数(每个整数范围[-5000, 5000]) 输出描述 输出一个整数表示最大子数组和 样例输入 5 1 -1 1 1 -1 样例输出 2 #include<stdio.h> int maxSum(int *a,int n) { int max=-1; int i,j,sum; for(i=0;i<n;

学堂在线TsinghuaX: 00740043X C++语言程序设计基础 第二章Lab

第一题:简单题目(求和,最大值,最小值) 题目描述 任意给定n个整数,求这n个整数序列的和.最小值.最大值 输入描述 输入一个整数n,代表接下来输入整数个数,n<=100,接着输入n个整数,整数用int表示即可. 输出描述 输出整数序列的和.最小值.最大值.用空格隔开,占一行 样例输入 21 2 样例输出 3 1 2 #include<iostream> using namespace std; int main() { int n,a,i,sum=0,min=0,max=0; cin&

学堂在线TsinghuaX: 00740043X C++语言程序设计基础 第五章Lab

第一题:“鱼额宝” 题目描述 请实现一个“鱼额宝”类,下面已给出代码模板,请根据main函数中对该类的操作,补充类实现部分完成代码. “鱼额宝”类可以记录账户余额.存钱.取钱.计算利息.该类中有一个私有静态成员变量profitRate存储“鱼额宝”的利率,可以用共有静态成员函数setProfitRate修改利率的值.程序输入为第1天至第n天连续n天的账户操作,每天只能进行一次账户操作,或存或取,每一天产生的利息是前一天的账户余额与“鱼额宝”利率的乘积,产生的利息当天也将存入账户余额,由于第1天之

网易云课堂_C语言程序设计进阶_第一周:数据类型:整数类型、浮点类型、枚举类型

C语言程序设计进阶_第一周:数据类型:整数类型.浮点类型.枚举类型 1.0数据类型 1.1整数类型 1.2浮点类型 1.3逻辑类型 1.4类型转换和条件运算 1.0数据类型 1 整数 char(%c), short, int(%d), long(%ld), long long(C99) 2 浮点数 float(%f), double(%lf), long double(C99) 3 逻辑 bool(C99) 4 指针 5 自定义类型 所表达的数的范围:char<short<int<flo

网易云课堂_Java语言程序设计进阶_第1周 类和对象_1分数

第1周编程题 查看帮助 返回 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 第1周编程题.我们在题目说明中给出了一部分代码,你需要在这部分代码的基础上,按照题目说明编写代码,然后将两部分代码一起提交. 依照学术诚信条款,我保证此作业是本人独立完成的. 1 分数(10分) 题目内容: 设计一个表示分数的类Fraction.这个类用两个int类型的变量分别表示分子和分母. 这个类

网易云课堂_C语言程序设计进阶_第8周

8.2函数指针 8.3图形交互 8.2函数指针 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void f(int i) 5 { 6 printf("void f(),%d\n", i); 7 } 8 9 void main() 10 { 11 void(*pf)(int) = f;//函数指针 12 13 pf(10); 14 15 (*pf)(20); 16 17 (pf)(30); 18 19 system(

网易云课堂_C语言程序设计进阶_第七周:文件:文件访问、格式化输入输出、二进制输入输出

格式化的输入输出 printf %[flags][width][.prec][hIL]type Flag 含义 - 左对齐 + 在前面放+或- (space) 正数留空 0 0填充 1 #include <stdio.h> 2 3 void main() 4 { 5 printf("%+9d\n", 123); 6 7 printf("%9d\n", 123); 8 9 printf("%-9d\n", 123); 10 11 pri

网易云课堂_C语言程序设计进阶_第二周:指针:取地址运算和指针、使用指针、指针与数组、指针与函数、指针与const、指针运算、动态内存分配_2信号报告

2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength)    信号强度即大小. 其中R位于报告第一位,共分5级,用1—5数字表示. 1---Unreadable 2---Barely readable, occasional words distinguishable 3---Readable with considerable difficulty 4---Readable with prac