解题思路:
把矩形分解成两条边去分析,然后矩形两个点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语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:454 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:756 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:1246 |
本人酷爱递归实现很多问题,这里也是浏览:557 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:476 |
printf基础练习2 (C语言代码)浏览:646 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:660 |
关于C语言变量位置的问题浏览:273 |
1011题解浏览:765 |
C语言训练-大、小写问题 (C语言代码)浏览:682 |