信管网每日一练
软件设计师 - 每日一练 导航

软件设计师案例分析每日一练试题(2024/3/21)

2024年03月22日来源:信管网 作者:cnitpm

软件设计师案例分析当天每日一练试题地址:www.cnitpm.com/exam/ExamDayAL.aspx?t1=4

往期软件设计师每日一练试题汇总:www.cnitpm.com/class/27/e4_1.html

软件设计师案例分析每日一练试题(2024/3/21)在线测试:www.cnitpm.com/exam/ExamDayAL.aspx?t1=4&day=2024/3/21

点击查看:更多软件设计师习题与指导

软件设计师案例分析每日一练试题内容(2024/3/21)

试题五
阅读以下说明和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[i]->draw(shapes[i]);  printf("\n");  } /*
纵制数组中图形*/
for( i = 1; i >= 0; i-- )  shapes[i]->destroy(shapes[i]);   /* 销毁
数组中图形*/
return 0;
}
【运行结果】
P(2,3)
(5)
Circle destoryed !
Point destoryed !

信管网试题答案与解析:www.cnitpm.com/st/2456118617.html

信管网考友试题答案分享:

信管网试题答案与解析:www.cnitpm.com/st/2456118617.html

温馨提示:因考试政策、内容不断变化与调整,信管网提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

分享至:

信管网 - 信息系统项目管理专业网站

下载APP-在线学习

培训课程

0元畅享

考试题库

免费资料

客服咨询