如何在C中执行此程序?第3.2-3.9部分

时间:2013-10-14 02:21:22

标签: c scanf intersection pass-by-reference call-by-value

是否有多个条件,如交叉矩形正确打印所需的多个if else语句?

步骤3:两个矩形相交,如果它们有一个共同的区域两个矩形如果只是触摸(公共边缘或公共角落)不重叠

当且仅当,

时,两个矩形相交(如上所述)

i)max(xmin1,xmin2)< min(xmax1,xmax2)和

ii)max(ymin1,ymin2)< min(ymax1,ymax2)

您的输出将被格式化。如下所示,矩形显示为其左下坐标(xmin,ymin)和右上角坐标(xmax,ymax)。坐标是笛卡尔平面中的坐标。

示例输出:

enter two rectangles: 

1 1 4 4

2 2 5 5

rectangle 1: (1,1)(4,4) 

rectangle 2: (2,2)(5,5) 

intersection rectangle: (2,2)(4,4)  

enter two rectangles: 

1 1 4 4

5 5 10 10

rectangle 1: (1,1)(4,4) 

rectangle 2: (5,5)(10,10) 

these two rectangles do not intersect 

代码:

#include <stdio.h>
#include <stdlib.h>

int readRect (int *w, int *x, int *y, int *z){
return scanf("%d%d%d%d",w,x,y,z);
}

int minInt(int x1, int x2){
return x1, x2;
}

int maxInt(int y1, int y2){
    return y1, y2;
}

int main (void){

int a,b,c,d,e,f,g,h;
printf(">>enter two rectangles:\n");

readRect(&a,&b,&c,&d);
readRect(&e,&f,&g,&h);
printf("rectangle 1:(%d,%d)(%d,%d)\n",a,b,c,d);
printf("rectangle 2:(%d,%d)(%d,%d)\n",e,f,g,h);

if(maxInt(a,e) < minInt(c,g) && maxInt(b,f) < minInt(d,g)){
        printf("intersection rectangle: (%d,%d)(%d,%d)\n",?,?,?,?);
}
else {
         printf("these rectangles do not intersect\n");
}

return EXIT_SUCCESS;
}

3 个答案:

答案 0 :(得分:1)

第1步 - 罪魁祸首是scanf中的“\ n”。如果你删除它将工作 如果您在步骤2或步骤3中需要任何特定帮助,请与我们联系。

答案 1 :(得分:0)

第一件事:

return scanf("%d%d%d%d\n",w,x,y,z);

应该是

return scanf("%d %d %d %d",w,x,y,z);

然后,您可以输入数字列表作为空格分隔列表,它将正确扫描它们。

问题的其他部分,您必须尝试自己解决问题,使问题更具体,并提出新问题。

答案 2 :(得分:0)

maxmin的功能错误 1.你没有比较这些函数中传递的参数最多/最少两个。
2.您无法从函数返回两个值。

你应该这样做;

int minInt(int x1, int x2){
    if(x1 < x2)     
        return x1;
    else 
        return x2;
}

int maxInt(int x1, int x2){
    if(x1 > x2)     
        return x1;
    else 
        return x2;
} 

并将printf打印交叉矩形更改为

printf("intersection rectangle: (%d,%d)(%d,%d)\n", maxInt(a,e), maxInt(b,f), minInt(c,g), minInt(d,h) );