#include <iostream>using namespace std;struct Point { int x, y;};class Line {public: int a, b; Line(int a_, int b_) : a(a_), b(b_) {} void print() { cout << "y = " << a << "x "; if (b > 0) cout << "+ " << b << endl; else if (b < 0) cout << "- " << -b << endl; else cout << endl; } friend void setPoint(Line &l1, Line &l2);};void setPoint(Line &l1, Line &l2) { int x, y; if (l1.a == l2.a) { if (l1.b == l2.b) cout << "No intersection" << endl; else cout << "Parallel lines" << endl; return; } x = (l2.b - l1.b) / (l1.a - l2.a); y = l1.a * x + l1.b; cout << x << " " << 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;}
时间: 2023-12-06 11:43:21 浏览: 69
这是一个求两条直线交点的程序,使用了结构体和类的定义。其中Line类有两个成员变量a和b,分别表示直线的斜率和截距,print函数用于输出直线的方程。setPoint函数用于计算两条直线的交点。在main函数中,先输入两条直线的斜率和截距,然后创建两个Line对象,分别打印出两条直线的方程,最后调用setPoint函数计算交点并输出。
相关问题
任务描述 定义一个表示点的结构类型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类型存储。 请注意末尾不需要输出空格。 样例输入: -6 -10 -7 -20 8 -27 8 54 0 7 7 0 样例输出: y = -6x - 10 y = -7x - 20 -10 50 y = 8x - 27 y = 8x + 54 No intersection y = 7 y = 7x 1 7 注意直线方程的输出格式:y@=@[mx]@[op]@[n],其中@表示一个空格,[]表示此项不一定输出,具体参考样例输出。用c++编程
```cpp
#include <iostream>
using namespace std;
struct Point {
int x, y;
};
class Line {
public:
int a, b;
Line(int a_, int b_) : a(a_), b(b_) {}
void print() {
cout << "y = " << a << "x ";
if (b > 0) cout << "+ " << b << endl;
else if (b < 0) cout << "- " << -b << endl;
else cout << endl;
}
friend void setPoint(Line &l1, Line &l2);
};
void setPoint(Line &l1, Line &l2) {
int x, y;
if (l1.a == l2.a) {
if (l1.b == l2.b) cout << "No intersection" << endl;
else cout << "Parallel lines" << endl;
return;
}
x = (l2.b - l1.b) / (l1.a - l2.a);
y = l1.a * x + l1.b;
cout << x << " " << 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;
}
```
定义一个表示点的结构类型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类型存储。 请注意末尾不需要输出空格。
下面是代码实现,注释中有详细解释:
```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;
}
```
阅读全文