首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明和C代码,将应填入(n)处的字句写在的对应栏内。 【说明】 在一个简化的绘图程序中,支持的图形种类有点(point)和圆(circle),在设计过程中采用面向对象思想,认为所有的点和圆都是一种图形(shape),并定义了类型shape
阅读以下说明和C代码,将应填入(n)处的字句写在的对应栏内。 【说明】 在一个简化的绘图程序中,支持的图形种类有点(point)和圆(circle),在设计过程中采用面向对象思想,认为所有的点和圆都是一种图形(shape),并定义了类型shape
admin
2008-11-02
49
问题
阅读以下说明和C代码,将应填入(n)处的字句写在的对应栏内。
【说明】
在一个简化的绘图程序中,支持的图形种类有点(point)和圆(circle),在设计过程中采用面向对象思想,认为所有的点和圆都是一种图形(shape),并定义了类型shape t、 point t和circle t分别表示基本图形、点和圆,并且点和圆具有基本图形的所有特征。
【C代码】
typedef enum { point,circle } shape type; /* 程序中的两种图形:点和圆 */
typedef struct { /* 基本的图形类型 */
shape_type type; /* 图形中类标识:点或者圆*/
void (*destroy) (); /* 销毁图形操作的函数指针*/
void (*draw) (); /* 绘制图形操作的函数指针*/
} shape_t;
typedef struct { shape_t common; int x; iht y; } point_t; /* 定义点类
型, x, y为点坐标*/
void destroyPoint (point_t* this) { free (this); printf ("Point destoryed!
\n"); } ) /* 销毁点对象*/
void drawPoint(point_t* this) { printf("P(%d,%d)", this->x, this->y); }
/* 绘制点对象*/
shape_t* createPoint (va_list* ap) (/* 创建点对象,并设置其属性*/
point_t* p_point;
if ( (p_point= (point_t*)malloc (sizeof (point_t)) ) ==NULL) returnNULL;
p_point->common, type = point; p_point->common, destroy = destroyPoint;
p_point->common.draw = drawPoint;
p_point->x = va_arg(*ap, int); /* 设置点的横坐标*/
p_point->y = va_arg(*ap, int); /* 设置点的纵坐标*/
return (shape_t*)p_ooint; /*返回点对象指针*/
}
typedef struct { /*定义圆类型*/
shape_t common;
point_t 4center; /*圆心点*/
int radius; /*圆半径*/
} circle_t;
void destroyCircle(circle_t* this){
free((1)); free(this); printf("Circle destoryed!\n");
}
void drawCircle(circle_t* this) {
print f ("C (");
(2).draw(this->center); /*绘制圆心*/
printf(",%d) ", this->radius);
}
shape_t* createCircle(va_list4 ap) { /*创建一个圆,并设置其属性*/
circle_t4 p circle;
if ((p_circle = (circle_t4)malloc (sizeof (circle_t)) ) ==NULL ) return NULL;
p_circle->common.type = circle; p_circle->common.destroy = destroy
Circle;
p_circle->common.draw = drawCircle;
(3) = createPoint(ap); /* 设置圆心*/
p_circle->radius = va_arg(*ap, int); /* 设置圆半径*/
return p_circle;
}
shape_t* createShape(shape_type st, "’) { /* 创建某一种具体的图形*/
va_list ap; /*可变参数列表*/
shape_t4 p_shape = NULL;
(4) (ap, st);
if( st == point ) p shape = createPoint(&ap); /* 创建点对象*/
if( st == circle ) p shape = createCircle(&ap); /*创建圆对象*/
va_end (ap);
return p_shape;
}
int main( ) {
int i; /* 循环控制变量,用于循环计数*/
shape_t* shapes[2]; /* 图形指针数组,存储图形的地址*/
shapes[0] = createShape( point, 2, 3); /* 横坐标为2,比值坐标为3*/
shapes[ii = createShape( circle, 20, 40, 10); /* 圆心坐标(20,40),
半径为 10*/
for(i=0 i<2; i++) { shapes
->draw(shapes
); printf("\n"); } /*
纵制数组中图形*/
for( i = 1; i >= 0; i-- ) shapes
->destroy(shapes
); /* 销毁
数组中图形*/
return 0;
}
【运行结果】
P(2,3)
(5)
Circle destoryed !
Point destoryed !
选项
答案
(1)this->center (2)this->center->common (3)p_circle->center (4)va start (5)C(P(20,40),10)
解析
本题考查C语言中指针机制、可变数目参数机制及结构体存储映像。本题中涉及的三个数据结构shape_t、circle_t和point_t的关系如下图所示。
通过阅读给出的程序代码可以看出,point_t和circle_t两种结构通过其成员shape_t common表示了上图中的继承关系:circle t中的数据成员point_t *center表示了与 pornt_t之间的引用关系。
函数destroyCircle(circle_t*this)完成一个circle t对象的内存释放工作。在结构circle t定义中,由于数据成员center是一个指针,所以必须释放对应内存,即free(this->center)。
函数drawCircle(circle t* this)完成圆形的显示工作。其中需要显示其圆心的信息,而此信息由circle_t. common. draw()函数完成,即this->center->common.draw(this.center)。 point_t类型的显示工作由函数draw Point完成,其在屏幕上显示的信息格式为P(x,y),其中x表示点的横坐标,y表示点的纵坐标。圆形的显示函数drawCirele在屏幕卜显示的信息格式为C(P(x,y),r),其中x表示圆心的横坐标,y表示圆心的纵坐标,r表示半径。
函数ereateCircle(va_list*叩)完成创建一个圆形工作,其中需要创建其圆心对象,a圆心对象的地址保存在circle t.center数据成员中。该函数的参数采用了C语言提供的标准类型va list,以处理可变数目的函数实参。对于可变数目的参数列表的一般处理方式如下:
#include <stdarg.h>
void foo(char*fmt,…) /*表示fmt后面的参数个数可变*/
{
va list ap; /*保存可变数目的参数列表*/
va start(ap, fmt); /*初始化ap,保存参数fmt后面的实参列表*/
//…
va arg(ap,TYPE); /*获取下一个实参,其中TYPE指明该参数的类型*/
//…
va end(ap); /*释放ap占用的资源*/
}
转载请注明原文地址:https://kaotiyun.com/show/65DZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
某供应商数据库中的供应关系为SPJ(供应商号,零件号,工担号,数量),如下命令查询某工程至少用了3家供应商(包含3家)供应的零件的平均数量,并按工程号的降序排列。SELECT工程号,(14)FROMSPJGROUPBY工程号(15)
在数据库管理系统中,(13)不属于安全性控制机制。
在CPU与主存之间设置高速缓冲存储器(Cache)的目的是为了(2)。
风险分析在软件项目开发中具有重要作用,包括风险识别、风险预测、风险评估和风险控制等。“建立风险条目检查表”是(18)时的活动,“描述风险的结果”是(19)时的活动。
软件测试原则中指出“完全测试是不可能的”,主要原因是______。A.输入量太大、输出结果太多以及路径组合太多B.自动化测试技术不够完善C.测试的时间和人员有限D.仅仅靠黑盒测试不能达到完全测试
模块设计中,某模块根据输入的控制信息从文件中读一个记录或者向文件中写一个记录,则其内聚类型为______。
在C程序中,若表达式中的算术运算对象的类型不同,则需要先统一为相同类型后再进行计算。例如,表达式“a-b”中,若a是双精度浮点型变量,b是整型变量,为了尽可能保证运算精度,通常进行的处理是______。
如果在查找路由表时发现有多个选项匹配,那么应该根据___________(25)原则进行选择。假设路由表有4个表项如下所示,那么与地址139.17.179.92匹配的表项是____________(26)。(25)
下图所示的二叉树进行顺序存储(根结点编号为1,对于编号为i的结点,其左孩子结点为2i,右孩子结点为2i+1)并用一维数组BT来表示,已知结点X、E和D在数组BT中的下标为分别为1、2、3,可推出结点G、K和H在数组BT中的下标分别为____________
随机试题
女性,32岁。因收割水稻劳累,诉全身肌肉酸痛及发热4天,伴咳嗽、腹痛,咯血1次50一60ml来诊。体检:体温39.2℃,面色苍白,双眼结膜充血,心率140次/min,有奔马律,两肺有湿啰音,腓肠肌有压痛,拟诊为钩端螺旋体病。实验室检查证实为钩端螺旋体病
王某,5岁。偏食、瘦小。门诊就医诊断为营养不良。医生建议纠正饮食习惯,并嘱增加蛋白质膳食,其主要原因是蛋白质在体内可
A、阻断M-胆碱受体B、阻断黑质纹状体多巴胺受体C、阻断中脑边缘叶和中脑皮质通路中多巴胺受体D、阻断α-肾上腺素受体E、阻断结节漏斗通路中多巴胺受体氯丙嗪引起的乳房肿胀、溢乳是由于
没有同类消费品销售价格的,按照规定,如果纳税人自产自用的应税消费品,在计算征收时,没有同类消费品销售价格,应以组成计税价格计算纳税。组成计税价格的计算公式是,组成计税价格=(成本+利润)/(1-消费税税率),下列说法正确的是( )。
下列属于原始凭证的是()。
任何政治体制下,一个政党想要稳定其执政地位,首先是()。
自1900年以来,海平面平均上升了大约18厘米。冰川融化带来的威胁不仅仅使某些知名城市面临被淹没的风险,而且随着北极冰川加速融化,地球重力分布也会受到直接影响。另外,北极的消退冰川和融化永冻土正在大规模泄漏甲烷,这将对全球气候产生重大影响。这段文字意在说明
MargheritaisaLondongirlandarrivingatCapitalwaslikecominghome."IgrewuplisteningtoCapitalRadio,"shesays.Peop
“以崇尚科学为荣,以愚昧无知为耻”,就是要()。
下列软件中,属于系统软件的是
最新回复
(
0
)