回复 10楼 rjsp
我的这道题的坐标是用户任意给出的,并且两个矩形可能根本不相交,此时的面积应为0

一片落叶掉进了回忆的流年。
程序代码:#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
void change(int *a);//保证小的坐标在前,大的坐标在后
int cul_(int *a, int *b);//计算重合面积
void f_printf(int a);
int main()
{
int x_[4] = { 0 }, y_[4] = {0}, area;//0.1 2.3
printf("请分别输入两个矩阵的横坐标x1_1,x1_2,x2_1,x2_2,以空格隔开\n");
scanf("%d %d %d %d",&x_[0], &x_[1], &x_[2], &x_[3]);
printf("请分别输入两个矩阵的纵坐标y1_1,y1_2,y2_1,y2_2,以空格隔开\n");
scanf("%d %d %d %d",&y_[0], &y_[1], &y_[2], &y_[3]);
change(x_);
change(y_);
area=cul_(x_,y_);
f_printf(area);
return 0;
}
void change(int *a)
{
if (a[0] > a[1])
{
int temp = a[0];
a[0] = a[1];
a[1] = temp;
}
if (a[2] > a[3])
{
int temp = a[2];
a[2] = a[3];
a[3] = temp;
}
}
int cul_(int *a, int *b)
{
if (a[0] >= a[3])
return 0;
else if (a[1] <= a[2])
return 0;
else if (b[0] >= b[3])
return 0;
else if (b[1] <= b[2])
return 0;
else//前面都是没有重叠的情况,这里是重叠的情况
{
int x, y;
x=(a[1] - a[2])<(a[3] - a[0]) ? (a[1] - a[2]) : (a[3] - a[0]);
y = (b[1] - b[2])<(b[3] - b[0]) ? (b[1] - b[2]) : (b[3] - b[0]);
return x*y;
}
}
void f_printf(int a)
{
if (a)
printf("重叠部分面积为%d\n", a);
else
printf("没有重叠部分\n");
}