C语言 矩形重叠面积如何求?

学校oj系统上的问题不会做

描述
给出两个矩阵坐标,算出这两个矩形重叠的面积

输入格式
第一行给出t表示有t组案例
每组案例给出(x1,y1),(x2,y2)表示第一个矩形左下角坐标和右上角坐标
之后给出(X3,Y3) ,(X4,Y4)表示第二个矩形左下角坐标和右上角坐标
其中1<=t<=10000;1<=x1,y1,x2,y2,X3,Y3,X4,Y4<=1000000000;
输出格式
每个案例输出一行结果表示重叠面积
输入样例
2
1 1 4 4
2 1 5 3
1 1 3 3
2 2 4 4
输出样例
4
1

现在这个循环会直接把第一组数据的结果输出,怎么改才能先把所有的数据先输入再一起把结果全部输出呢?或者不用我这个方法,换一种方法也可以!
#include
double max(double a, double b){
    if(a>b) return a;
    return b;
}
double min(double a, double b){
    if(a>b) return b;
    return a;
}
int main(){
    int t,i,s;
    double a,b,c,d,e,f,g,h;
    scanf("%d",&t);
    for(i=0;i0;
        double x1,y1,x2,y2,x3,y3,x4,y4;
        x1=min(a,c);x2=max(a,c);
        x3=min(e,g);x4=max(e,g);
        y1=min(b,d);y2=max(b,d);
        y3=min(f,h);y4=max(f,h);
        double left=max(x1,x3);
        double right=min(x2,x4);
        double up=min(y2,y4);
        double down=max(y1,y3);
        if(leftdown)
            s=(right-left)*(up-down);
            printf("%d\n",s);
        }
    return 0;
}
现在的运行结果

2
1 1 4 4
2 1 5 3
4
1 1 3 3
2 2 4 4
1

现在这个思路参考了相似问题的答案,可是运行结果不太符合。询问同学,1.建议我使用函数来解,但是不太懂;2.运用数组先把所有结果储存起来再输出,但是一直搞不成功
我想要达到的结果

输入
2
1 1 4 4
2 1 5 3
1 1 3 3
2 2 4 4
输出
4
1

用一个数组存放结果,全部算完之后把数组里的内容输出。参考代码如下

int main(){
            int t,i,s;
            double a,b,c,d,e,f,g,h;
            scanf("%d",&t);
            int res[t];
            for(i=0;i<t;i++){
                scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e,&f,&g,&h);
                s=0;
                double x1,y1,x2,y2,x3,y3,x4,y4;
                x1=min(a,c);x2=max(a,c);
                x3=min(e,g);x4=max(e,g);
                y1=min(b,d);y2=max(b,d);
                y3=min(f,h);y4=max(f,h);
                double left=max(x1,x3);
                double right=min(x2,x4);
                double up=min(y2,y4);
                double down=max(y1,y3);
                if(left<right&&up>down)
                    s=(right-left)*(up-down);
                res[i] = s;
            }
            for(i=0;i<t;i++){
                printf("%d\n",res[i]);
            }
            return 0;
        }

这个正常可以写一组if直接判断是否有相交,有相交的话那么可以很明显的看出这个交点的坐标是由给定的坐标组成的
x1,y1-x1,y2这条垂直线的交点与x3,y3-x4,y3这条横线的交点就是x1,y3
你找到了交点面积自然也就求出来了
如果实在想不通这组if应该如何写,那也可以简单的找到坐标最小的一组x1,y1作为左上角坐标,坐标最大的一组x2,y2作为右下角坐标,2个矩形就在这范围内,然后你暴力遍历所有的坐标(反正都是整数,遍历一下就行了),判断每个坐标是否同时处于两个矩形的范围内,处于就++,不处于就不加,最后得数就是面积
-=-=-=
暴力遍历没什么技术含量,这里就先来解决一下两个矩形是否相交的问题
假如两个矩形的坐标分别是x1,y1,x2,y2和x3,y3,x4,y4,这里为了方便,定义坐标是左上角和右下角,如果题目里给的是左下角和右上角,交换一下位置即可。这样定义的好处是,x1永远小于x2,y1永远小于y2
那么两个矩形相交必须满足:在x方向坐标有重叠,同时在y方向坐标有重叠,只要在任意一个方向上坐标没有重叠,那肯定不相交
判断有重叠有3种情况:矩形1包含矩形2,矩形2包含矩形1,互相不包含
那么仅以x方向为例子来写这个if,y方向同理,不赘述
(x1<x3 && x2>x4)这是矩形1把矩形2包在里面
(x1>x3 && x2<x4)这是矩形2把矩形1包在里面
(x1<x3 && x2>x3)矩形2的左边点落在矩形1的边内部
(x1<x4 && x2>x4)矩形2的右边点落在矩形1的边内部
当然后两个条件你判断矩形1部分落在矩形2内部也行,等价的,把上面四个条件或起来,就是有重叠,如果x方向和y方向同时有重叠,就是相交
那么重叠部分的坐标也很容易求得,你在纸上随便画画坐标就有了