定义一个表示点的结构类型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 17:51:41 浏览: 58
下面是代码实现:
```cpp
#include<iostream>
#include<cmath>
using namespace std;
struct Point {
int x;
int y;
};
class Line {
private:
int a;
int b;
public:
Line(int a1 = 0, int b1 = 0) {
a = a1;
b = b1;
}
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) {
double x, y;
if (l1.a == l2.a) {
if (l1.b == l2.b) {
cout << "Two lines coincide!" << endl;
}
else {
cout << "No intersection" << endl;
}
}
else {
x = (l2.b - l1.b) * 1.0 / (l1.a - l2.a);
y = l1.a * x + l1.b;
if (x - int(x) == 0 && y - int(y) == 0) {
cout << int(x) << " " << int(y) << endl;
}
else {
cout << "No intersection" << 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;
}
```
注:本代码假设两个直线方程中的系数都为int类型。