填空题

[说明]
喜迎2012年伦敦夏季奥运会!以下[C程序代码]能将一个给定汉字(例如,奥运会的“会”字)的点阵逆时针旋转90度,并输出旋转前后的点阵数据及字形。
图8-8是汉字“会”字的16×16点阵字形,用数字0表示空白位置,用数字1表示非空白位置,“会”字的第1行即可表示成如下的0,1序列。
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
若将它看做一个字的16个位,则“会”字的第1行可以用16进制数的0100来表示。同理,“会”字的第2行可以用16进制数的0240表示,第3行可以用16进制数的0420表示,……。以此类推,用16个双字节整型数即可存放一个汉字点阵字形。“会”字的点阵数据及字形如图8-8的左半部分所示。
将一个汉字逆时针旋转90度,就是把该汉字点阵的最右列作为旋转后新点阵的第1行,次最右列作为旋转后新点阵的第2行,……,以形成一个旋转后的点阵字形。图8-8的右半部分就是将“会”字逆时针旋转90度后的点阵数据和字形(提示:读者可将书本顺时针旋转90度,以查看旋转90度后的点阵字形)。
在[C程序代码]中,数组old中存放着“会”字的16个双字节整型点阵数据。函数turnleft能将该点阵数据逆时针旋转90度,旋转后的点阵数据存放在数组new中。函数display能将旋转前后的点阵数据加以编辑,用点字符“.”表示值为0的位,用字符“x”表示值为1的位,从而将旋转前后的点阵按行输出其16进制的数据及字形,如图8-8所示。


[C程序代码]
#include <stdio.h>
#define EMPTY ’.’
#define NONEMPTY ’x’
#define LEFT 0
#define RIGHT 1
main ()
static unsigned old[16]= 0x0100,0x0240,0x0420,0x0810,0x1004,0x23c2,
0x4001,0x8ff8,0x0100,0x0200,0x0400,0x0800,
0x1000,0x2004,0x7ffe,0x0001
;
unsigned new[16];
turnleft( old, new ) ;
display( old,new );
turnleft(old,new)
unsigned old[],new[];
int row, k;
for ( row=0;row<16;row++ )
for ( (1) ;k<16;k++ )
new[row] | =(( old[k]>> (2) ) &1) << (3) ;

display( old, new )
unsicned *old,*new;
char out[2] [17],letter[2];
int row,col;
letter[0] = EMPTY;
letter[1] = NONEMPTY;
out[LEFT] [16]=out[RIGHT] [16]= (4) ;
for ( row = 0;row<16;row++,old++,new++ )
for ( col = 0;coi<16;++col )
out[LEFT] [col] = letter[ ( (5) ) &1];
out[RIGHT] [col] = letter[ ( (6) ) &1];

printf("\n %4x %s ",*old,&out[LEFT] [0])
printf(" %4x %s",*new,&out[RIGHT] [0]) ;

【参考答案】

k=0,new[row]=0
(B) row
(C) AE-k
(D) ’\0’
......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

填空题
[说明] 某绘图系统中有两个画矩形的程序DP1和DP2。程序DP1用函数draw a line(x1,y1,x2,y2)画一条直线,程序DP2则用函数drawline(x1,x2,y1,y2)画一条直线。当实例化矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。若将“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)和具体实现不同,则将这种应用称为Bridge(桥接)模式。图8-9显示了该系统与矩形绘制相关的各个类之间的关系。系统始终只处理3个对象:Shape对象、Drawing对象,以及DP1或DP2对象。以下是C++语言的实现过程,能够正确编译通过。 [C++程序] class DP1 public: static void draw a line(double x1,double y1,double x2,double y2) … 省略具体实现 ; class DP2 public: static void drawline(double x1,double x2,double y1,double y2) 省略具体实现 ; Class Drawing Public: virtual void drawLine(double x1, double y1, double x2, double y2)=0; ; class V1Drawing:public Drawing public: void drawLine(double x1,double y1,double x2,double y2) DP1::draw_a_line(x1,y1,X2,y2); ; class V2Drawing:public Drawing public: void drawLine(double x1, double y1, double x2, double y2) (1) ; ; class Shape Private: (2) _dp; Public: Shape(Drawing *dp); (3) void draw()=0; void drawLine(double x1,double y1,double x2,double y2) ; ; Shape::Shape(Drawing *dp) _dp=dp; void Shape::drawLine(double x1,double y1,double x2,double y2) 画一条直线 (4) ; class Rectangle:public (5) private: double _x1,_y1,_x2, _y2; public: Rectangle(Drawing *dp,double x1,double y1,double x2,double y2); void draw(); ; Rectangle::Rectangle(Drawing *dp,double x1,double y1,double x2,double y2) : (6) _x1=x1; _y1=y1;_x2=x2;_y2=y2; void Rectangle::draw() … 省略具体实现