解题思路:
把矩形分解成两条边去分析,然后矩形两个点x值或者y值确定第一个点是最大值,然后去比较得出下图6种情况算出边长。最后主函数求出横向和纵向两个边长就可以得到面积。
注意事项:
比较的时候考虑相等的情况,我统一合并到大于的情况下。
参考代码:
#include<stdio.h>
void max(double *x1,double *x2) //交换函数,始终让第一个数最大
{
double t0;
if(*x2>*x1)
{
t0=*x1;
*x1=*x2;
*x2=t0;
}
}
//求边长函数,把矩形分成两个边来分析,前两个数是矩形1的两个x值(或y值),后两个数是矩形2的两个x值(或y值),
double length(double A1,double A2,double B1,double B2)
{
max(&A1,&A2); //始终让前一个点的坐标值大于后一个点,方便后面分析
max(&B1,&B2); //同上
if(B2>=A2&&A1>=B1) return B1-B2; //情况1
if(B2<A2&&A1>=B1&&B1>=A2) return B1-A2; //情况2
if(B2<A2&&A1>=B1&&B1<A2) return 0; //情况3
if(B2>=A2&&A1<B1&&A1>=B2) return A1-B2; //情况4
if(B2>=A2&&A1<B1&&A1<B2) return 0; //情况5
if(B2<A2&&A1<B1) return A1-A2; //情况6
}
int main()
{
double Ax1,Ay1,Ax2,Ay2,Bx1,By1,Bx2,By2,a,b; //定义四个点的x值和y值,可以用二维数组,但是我觉得用有意义的字母更直观,定义边长a边长b
scanf("%lf %lf %lf %lf",&Ax1,&Ay1,&Ax2,&Ay2); //输入矩形1的数据
scanf("%lf %lf %lf %lf",&Bx1,&By1,&Bx2,&By2); //输入矩形2的数据
a=length(Ax1,Ax2,Bx1,Bx2); //边长a相交处是横向边长
b=length(Ay1,Ay2,By1,By2); //边长a相交处是纵向边长
printf("%.2lf",a*b); //两数相乘就是面积
return 0;
}
0.0分
0 人评分
川哥的吩咐 (C语言代码)浏览:926 |
C语言程序设计教程(第三版)课后习题8.9 (C语言代码)浏览:597 |
小明A+B (C语言代码)浏览:1319 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:639 |
蛇行矩阵 (C语言代码)浏览:792 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:513 |
【魔板】 (C++代码)(时间超限,希望会的帮我改正一下)浏览:804 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:600 |
1113题解浏览:823 |
1024题解浏览:879 |