View Code of Problem 67

#include <stdio.h>
int main()
{
	float x1,y1,x2,y2,x3,y3,x4,y4;
	float k1,k2,b1,b2;           //k斜率 b截距 
	while(scanf("%f%f%f%f",&x1,&y1,&x2,&y2)!=EOF)
	{
		getchar();     //getchar()换行
		scanf("%f%f%f%f",&x3,&y3,&x4,&y4);
		if(x1==x2&&x3==x4)    //重点: ****因为垂直直线的斜率是无穷大的 所以要拎出来单独讨论****【1】
		{
			if(x2==x3)          //如果四个横坐标都相等则说明两条线重合即相交
			{
				printf("Yes\n");
			}
			else             //横坐标两两相等则说明平行不想交
				printf("No\n");
		}
		else
		{
			k1=(y2-y1)/(x2-x1); // 分别求两条直线的斜率  【2】
			k2=(y4-y3)/(x4-x3);
			b1=y1-k1*x1;        //再求两条直线的截距
			b2=y3-k2*x3;
			if(k1==k2)
			{
				if(b1!=b2)
					printf("No\n");
				else
					printf("Yes\n");   //**斜率相等且截距相同则说明重合相交**
			}
			else
				printf("Yes\n");   // **斜率不同的两条直线必然是相交的**
		}
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 67