九宫格菜单程序设计,今天面试无从下手,请教编程高手指教!

题目内容:已知菜单中有九个方格记为n1--n9,菜单长为w,高为h,九宫格左边边距为T,右边边距为L,每个方格之间横向边距为A,九宫格上边距为P,下边边距为Q,九宫格纵向边距为B,具体数据如图所示,要求写一个函数,这个函数能够返回n1--n9任意一个方格中左上,右上,左下,右下一个点的坐标,即x,y的值。

题目要求三十分钟以内完成。
忘了设置悬赏分了,抱歉了,暂时设置20分,如果那位大大给出的答案非常正确,则还会加分的,希望各位前辈高手们帮帮忙了。
答案越完整越好!

#include<stdio.h>

typedef struct
{
int id;
int xl;
int xr;
int yb;
int yu;
}loc_club; /*单个九宫格的编号以及位置数据*/

typedef struct
{
int w;
int h;
}size_club;/*单个九宫格的大小*/

typedef struct
{
int w;
int t;
int a;
int l;

int h;
int p;
int b;
int q;
}size_menu;

void init(size_club *a,size_menu *b)/*根据菜单数据计算单个九宫格的大小*/
{
a->w=(b->w-2*b->a-b->t-b->l)/3;
a->h=(b->h-2*b->b-b->p-b->q)/3;
}

void find_loc_club(int n,loc_club *lc,size_club *sc,size_menu *bc)/*计算第n个九宫格的位置,并保存到a指向的结构体变量中*/
{
int row=(n-1)/3,col=(n-1)%3;

lc->id=n;
lc->xl=bc->t+col*(bc->a+sc->w);
lc->xr=lc->xl+sc->w;
lc->yu=bc->p+row*(bc->b+sc->h);
lc->yb=lc->yu+sc->h;
}

void input_size_menu(size_menu *b)/*输入菜单大小基本数据*/
{
scanf("%d%d",&b->w,&b->h);/*输入菜单宽和高*/
scanf("%d%d%d",&b->t,&b->a,&b->l);/*输入九宫格水平间隔*/
scanf("%d%d%d",&b->p,&b->b,&b->q);/*输入九宫格垂直间隔*/
}

void print_loc_club(const loc_club *lc)
{
printf("No.%d\n",lc->id);
printf("Left:%d\t\tTop:%d\n",lc->xl,lc->yu);
printf("Right:%d\t\tBottom:%d\n",lc->xr,lc->yb);
}
int main(void)
{
size_club sc;
size_menu sm;
loc_club lc;
int n;

input_size_menu(&sm);/*输入菜单的大小和九宫格的间距,保存到sm中*/
init(&sc,&sm);

printf("n=");
scanf("%d",&n);

find_loc_club(n,&lc,&sc,&sm);

print_loc_club(&lc);

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-10-16
'''参数number 表示第几个九宫格
'''参数corner 表示是哪个角
Function GetPos(number as integer,corner as integer)as Point
dim pos as new point
'求出格子的宽高
dim width as integer=(w-T-L-2*A)/3
dim height as integer=(h-P-Q-2*B)/3
'求出左上角坐标
pos.x=T+((number-1) mod 3)*width
pos.y=P+((number-1)\ 3)*height
select case corner
case 1'左上角
case 2'右上角
pos.x+=width
case 3'左下角
pos.y+=height
case 4'右下角
pos.x+=width
pos.y+=height
end select
Return Pos
End Function
第2个回答  2010-10-15
这个题目我以前写过,你一分都不给啊?代码都快100行了。找到规律就行了。
相似回答