定义一个表示点的结构类型Point和一个由直线方程y=ax+b确定的直线类Line。结构类型Point有两个成员x和y,分别表示点的横坐标和纵坐标。Line类有两个数据成员a和b,分别表示直线方程中的系数。 Line类有一个成员函数print用于显示直线方程。 友元函数setPoint(Line &l1, Line &l2)用于求两条直线的交点。在main函数中,建立两个直线对象,分别调用print函数显示两条直线的方程,并调用函数setPoint求这两条直线的交点。 输入包含多组数据,每组一行,包含直线l1和直线l2的a和b的值,中间以空格隔开。格式:a1 b1 a2 b2,假设都为int类型。 每组输出占3行,第一行为直线l1的方程,第二行为直线l2的方程,第三行为两直线的交点坐标(横纵坐标以空格隔开),如果没有交点,则输出"No intersection"(注意No后面有一个空格),交点坐标按int类型存储。 请注意计算交点的中间过程需要用浮点数进行计算,计算得出的交点结果用int类型存储。 请注意末尾不需要输出空格。
时间: 2024-02-29 15:51:34 浏览: 22
下面是代码实现,注释中有详细解释:
```c++
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
struct Point {
int x, y;
};
class Line {
private:
int a, b;
public:
Line(int a = 0, int b = 0) {
this->a = a;
this->b = b;
}
void print() {
cout << "y=" << a << "x";
if (b >= 0) cout << "+";
cout << b << endl;
}
// 声明友元函数
friend void setPoint(Line &l1, Line &l2);
};
void setPoint(Line &l1, Line &l2) {
// 计算两条直线的交点
Point p;
if (l1.a == l2.a) {
// 两条直线平行
if (l1.b == l2.b) {
cout << "Coincident" << endl;
} else {
cout << "Parallel" << endl;
}
} else {
p.x = round((double)(l2.b - l1.b) / (l1.a - l2.a)); // round函数四舍五入
p.y = l1.a * p.x + l1.b;
cout << p.x << " " << p.y << endl;
}
}
int main() {
int a1, b1, a2, b2;
while (cin >> a1 >> b1 >> a2 >> b2) {
// 创建两条直线对象
Line l1(a1, b1), l2(a2, b2);
// 分别输出两条直线的方程
l1.print();
l2.print();
// 计算两条直线的交点
setPoint(l1, l2);
}
return 0;
}
```