考研机试题(通过C++的类实现)

例题1 三角形相加

描述

写一个CTriangle 类,要求可以接受CTriangle(y,x)形式的构造。表示含义如下:A(0,y) B(0,0) C(x,0)。要求能够处理若干个三角形的相加(点B保持不变,两直角边相加)。 

输入描述:

输入有若干行,每行两个数y,x,读到0表示结束。

输出描述:

输出一行表示三点坐标,格式参见样例。

输入:

10 20
1 31
0

输出:

A(0,11),B(0,0),C(51,0)

代码示例:

#include <bits/stdc++.h>
using namespace std;
class CTriangle{
	public:
		int x,y;
		CTriangle(int yy,int xx):y(yy),x(xx){
		}
		CTriangle operator+(const CTriangle &a){ //运算符重载
			return CTriangle (y+a.y,x+a.x);
		}
};
int main(){
	int x,y;
	cin>>y>>x;
	CTriangle a(y,x);
	while(cin>>y>>x && y!=0){
		CTriangle b(y,x);
		a=a+b; //坐标会对应相加
	}
	if(y==0) cout<<"A(0,"<<a.y<<"),B(0,0),C("<<a.x<<",0)";
	
	return 0;
}

例题2 直角三角形

描述

创建一个CTriangle 类,用3点来代表一个三角形,输入三个点的坐标,实现判断此三角形是不是直角三角形,并输出此三角形的周长。

输入描述:

输入第一行为样例数m,接下来m行每行6个整数分别表示三个点的横纵坐标。

输出描述:

对于每个样例输出两行,第一行根据是否直角三角形输出Yes或No,第二行输出三角形的周长,保留小数点后两位。

输入:

1
0 0 3 0 0 4

输出:

Yes
12.00

代码示例:

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

class CTriangle {
  public:
    int x1, x2, x3, y1, y2, y3;
    CTriangle(int _1x, int _1y, int _2x, int _2y, int _3x, int _3y) {
        x1 = _1x;
        y1 = _1y;
        x2 = _2x;
        y2 = _2y;
        x3 = _3x;
        y3 = _3y;
    }
    void fun() {
        int d1 = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
        int d2 = (x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3);
        int d3 = (x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3);
        if (d1 + d2 == d3){
            cout << "Yes" << endl;
        } 
        else{ 
            cout << "No" << endl;
        }
        double c = sqrt(d1) + sqrt(d2) + sqrt(d3);
        printf("%.2f\n", c);
    }
};

int main() {
    int m;
    cin >> m;
    for (int i = 0; i < m; i++) {
        int x1, x2, x3, y1, y2, y3;
        cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
        CTriangle c(x1, y1, x2, y2, x3, y3);
        c.fun();
    }
}

例题3 重载运算符

描述

建立一个角类,在这个类中重载减号运算符(角度相减),并实现求出角度的正弦值的函数。

输入描述:

输入第一行为样例数m,接下来有m行每行两个整数表示角度。

输出描述:

输出m行,表示两角相减的正弦值,保留小数点后两位。

输入:

1
60 30

输出:

0.50

代码示例:

// 重载运算符实现sin(a-b)
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const double Pi = 3.1415926;
class Angle {
  public:
    int du;
    Angle(int d): du(d) {}
    Angle operator - (Angle a) {
        this->du = this->du - a.du;
        return *this;
    }
    void show() {
        double res = sin(du / 180.0 * Pi); //角度要转化为弧度
        printf("%.2f\n", res);
    }
};
int main() {
    int m;
    cin >> m;
    for (int i = 0 ; i < m; ++i) {
        int du1, du2;
        cin >> du1 >> du2;
        Angle a(du1);
        Angle b(du2);
        Angle c = a - b;
        c.show();
    }
}

例四 复数相加

描述

编写一个复数类,有构造函数,能对复数初始化;重载加法操作符并按a+bi 的形式输出。

输入描述:

输入第一行表示测试用例的个数m,接下来m行每行有4个用空格隔开的整数,分别表示2个复数的实部和虚部。

输出描述:

输出m行。按a+bi或者a-bi的格式输出,表示两个复数相加的和。

输入:

1
3 4 1 -2

输出:

4+2i

代码示例:

// 复数相加
#include<iostream>
#include<cstdio>
using namespace std;
class Complex {
  public:
    int real;
    int imag;
    Complex(int re, int im): real(re), imag(im) {}

    Complex operator + (Complex& a) {
        this->real += a.real;
        this->imag += a.imag;
        return *this;
    }
    void show() {
        if (imag > 0) {
            printf("%d+%di\n", real, imag);
        } else if (imag < 0) {
            printf("%d%di\n", real, imag);
        } else {
            printf("%d\n", real);
        }
    }
};
int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; ++i) {
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        Complex c1(x1, y1);
        Complex c2(x2, y2);
        Complex c3 = c1 + c2;
        c3.show();
    }
}

例题5 点的距离

描述

创建一个CPoint 类,代表平面直角坐标系中的点,创建构造函数和运算符重载函数,运算符重载为类重载(非友元重载),可以实现计算两个点之间的距离。要求:

1。输入两个点的坐标,输出两个点之间的距离;2。重载运算符“-”

输入描述:

输入第一行为样例数m,接下来m行每行4个整数分别表示两个点的横纵坐标。

输出描述:

输出m行,通过重载“-”运算输出两点的距离,保留小数点后两位。

输入:

1
0 0 2 0

输出:

2.00

代码示例:

// 点的距离
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
class CPoint{
public:
    double x,y;
    CPoint(double x1,double y1):x(x1),y(y1){}
    void operator - (CPoint p){
        double d1 = pow(x-p.x,2);
        double d2 = pow(y-p.y,2);
        double distance = sqrt(d1+d2);
        printf("%.2f\n",distance);
    }
};
int main(){
    int n;
    double x1,y1,x2,y2;
    cin >> n;
    for(int i = 0; i < n ; i++){
        cin >> x1 >> y1 >> x2 >> y2;
        CPoint c1(x1,y1);
        CPoint c2(x2,y2);
        c1 - c2;
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
北京理工大学的研究生考试是非常有竞争力的,被称为中国的MIT。其中,考研复试的C试题是技术类专业考生需要进行的一部分。以下是对北京理工考研复试C试题的回答。 北京理工大学考研复试C试题主要涉及技术类专业的知识和能力。试题内容通常会围绕专业领域的基础知识、实践能力和解决问题的能力。试题旨在考察考生的综合素养和专业能力是否与该专业要求相符。 在回答C试题时,首先要全面理解题目要求,明确题目的关键词和考察的知识点。接下来,需要找出问题的关键点,分析问题的本质,并提出解决问题的方法或策略。在回答问题时,要注意语言表达的准确性和逻辑性,尽量用简明扼要的语言阐述观点,清晰地展示自己的思路和解决问题的能力。 在准备C试题的过程中,考生应该通过认真学习专业知识,多做相关的实验和项目,提高自己的实践能力。同时,可以参加一些相关的讨论组织或科研项目,与其他同行交流,提高自己的解决问题的能力。此外,要经常关注专业领域的最新动态,了解前沿的研究成果和发展方向,做到知行合一。 总之,北京理工大学考研复试C试题对技术类专业考生来说是一个重要的考察环节。通过深入学习专业知识,提高实践能力和解决问题的能力,考生可以更好地回答C试题,展现自己的专业素养,从而在竞争激烈的考研环境中脱颖而出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~許諾~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值