阅读以下函数说明和Java代码,[说明]现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2

题目

阅读以下函数说明和Java代码,

[说明]

现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2,y1,y2)画一条直线。当实例化矩形时,确定使用DPI还是DP2。

为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图7-1显示了各个类间的关系。

[图7-1]

这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是JAvA语言实现,能够正确编译通过。

[Java代码]

//DP1.Java文件

public class DPI{

static public void draw_a_line(double x1,double y1,

double x2,double y2){

//省略具体实现

}

}

//DP2.java文件

public class DP2{

static public void drawline(double x1,double y1,

double x2,double y2){

//省略具体实现

}

}

//Drawing.java文件

(1) public class Drawing{

abstract public void drawLine(double x1,double y1,double x2,double y2);

}

//V1Drawing.java文件

public class V1Drawing extends Drawing{

public void drawLine(double x1,double y1,double x2,double y2){

DP1.draw_a_line(x1,y1,x2,y2);

}

}

//V2Drawing.java文件

public class V2Drawing extends Drawing{

public void drawLine(double x1,double y1,

double x2,double y2){//画一条直线

(2);

}

}

//Shape.java文件

abstract public class Shape{

abstract public void draw();

private (3) dp;

Shape(Drawing dp){

_dp=dp;

}

protected void drawLine(double x1,double y1,

double x2,double y2){

(4);

}

}

//Rectangle.java文件

public class Rectangle extends Shape{

private double_x1,_x2,_y1,_y2;

public Rectangle(Drawing dp,

double x1,double y1,

double x2,double y2){

(5);

_x1=x1;_x2=x2;

_y1=y1;_y2=y2;

}

public void draw(){

//省略具体实现

}

}

(1)

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

如果在X1、X2单元格中已分别存放"计算机应用能力考核"和"应用",那么函数FIND(X2,X1,1)的值是。


答案:7

第2题:

阅读下列函数说明和C代码,填入(n)处。

[说明]

以下C语言程序实现了生成从里到外是连续的自然数排列的回旋矩阵,矩阵形式如下:

7 6 5 16

8 1 4 15

9 2 3 14

10 11 12 13

程序的变量说明如下:

x1:矩阵上边界;

x2:矩阵下边界;

y1:矩阵左边界;

y2:矩阵右边界;

s:数组元素升降标记,s等于1为升,s等于-1为降;

a[]:存放矩阵元素的数组。

仔细阅读C语言程序源码,将(n)处的语句补充完整。(注:每处仅一个语句)

[C程序]

include<stdio.h>

void main ( )

{

const int N=20;

int i=0,j=0,a[N][N],n;

int m,x1,x2,y1,y2,s;

while (1)

{

Printf ("\ninput matrix row N( N>=2): ");

scanf ("%d",&n);

printf ("\n");

if (n>=2)

break;

}

m=n*n;

x1=0; y1=0; x2=n; y2=n;

if(n%2==0)

{j=n-1; y2=n-1; s=1;}

else

{i=n-1; y1=1; s=-1; }

while (1)

{

if (s==1)

{

for (i; i<x2; i++) a[i][j]=m--;

i--;

j--;

(1)

for (j;j>=y1;j--) a[i][j]=m--;

j++;

i--;

y1++;

(2)

}

else

{

for (i;i>=x1;i--)

a[i][j]=m--;

i++;

j++;

(3)

for (j;j<y2;j++)

(4)

(5)

i++;

(6)

S=i;

}

if (m<1) break;

}

for (i=O;i<n; i++)

{

for (j=O;j<n;j++)

printf ("%6d",a[i][j]);

printf ("\n");

}

printf ("\n");

}


正确答案:(1)x2--; (2)s=-1; (3)x1++; (4)a[i][j]=m--; (5)j--; (6)y2--;
(1)x2--; (2)s=-1; (3)x1++; (4)a[i][j]=m--; (5)j--; (6)y2--; 解析:自然数排列的回旋矩阵是一个经典程序设计题目。本题中生成的是一个从里到外是连续的自然数排列的回旋矩阵。仔细阅读代码,能够发现(1)处应该为矩阵下边界递减;(2)处应该为数组元素递减状态,即为降;(3)处应该为矩阵上边界递增;(4)处应该为存放矩阵元素的数组中的数据递减;(5)处应该为数组元素的列序号递减,即j--;(6)矩阵右边界递减。

第3题:

已知x1(t)和x2(t)的傅里叶变换分别为X1(f)和X2(f),则卷积x1(t)*x2(t)的傅里叶变换为()。

A、X1(f)X2(f)

B、X1(f)*X2(f)

C、X1(-f)X2(-f)

D、X1(-f)*X2(-f)


参考答案:A

第4题:

阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。

【说明】

编写程序,对于从键盘输入的3个实数a、b、c,计算实系数一元二次方程的根并输出所求的根。

【函数】

include<sldio.h>

include<sldlib.h>

include<math.h>

Main()

{

float a,b,c,delta,x1,x2;

printf("Enter a,b,c");

scanf("%f%f%f",&a,&b,&c));

if((1))

if((2))

printf("Input error!\n");

else

printf("The single root is%f\n",(3));

else

{

delta=b*b-4*a*c;

if((4))

{

x1=(-b+sqrt(delta))/(2*a);

x2=(-b-sqrt(delta))/(2*a);

printf("x1=%8.2f\nx2=%8.2f\n",x1,x2,);

}

else if(delta==0)

printf("x1=x2=%8.2f\n",(5);

else

{

Printf("z2=%8.2f+%8.2f*i\n",-b/(2*a),sqrt(-delta)/)(2*abs(a)));

Printf("z2=%8.2f-%8.2f*i\n",-b/(2*a),sqrt(-delta)/(2*abs(a)));

}

}

}


正确答案:(1)a==0 (2)b==0 (3)-c/b (4)delta>0(或b*b-4*a*c>0) (5)-b/(2*a)(或-b/2/a)
(1)a==0 (2)b==0 (3)-c/b (4)delta>0(或b*b-4*a*c>0) (5)-b/(2*a)(或-b/2/a) 解析:本题考查我们如何用键盘输入字符,编程求一元二次方程的根及输出。
对于如何求出一元二次方程的根,是解决这个题目的关键。首先我们来回忆一下数学中求一元二次方程根的方法。在数学中求一元二次方程根的步骤如下:
第一步是确定方程是否为一元二次方程,这需要判断二次方系数和一次方系数是否为0,如果都为0,则方程有错。如果只是二次方系数为零,则方程为一元一次方程,方程有一个解。
第二步是用=b*b-4*a*c与0的关系来判断解的个数,如果>0,方程有2个不同的解;如果=0,方程有一个解;而0时,方程无解。
第三步才是求解。
现在我们来看主函数,在主函数中,首先声明了一些实数变量,其中变量a、b、c分别存放我们从键盘输入的3个实数,而detal中存放的是的值,x1、x2中存放方程根的值。
接下来是从键盘输入3个值,作为一元二次方程的系数,在对一元二次方程求解以前我们需要考虑系数值为0的情况,因此,第(1)空应该填a==0,第(2)空应该填 b==0。
在a等于0而b不等于0的情况下,方程为一元一次方程,可以直接用-c/b求得其解,第(3)空明显是要输出这个解。
再往下看,程序计算了的值,那么接下来应该是判断与0的关系了,从程序中可以看出,方程在第(4)空的条件下有两个解,那么第(4)空应该填delta>0。而第(5)空是在delta=0的条件下方程的解,因此第(5)空应该填-b/(2*a)。

第5题:

有关绘图,下面的说法正确的是( )。 Ⅰ:drawArt(int x,int y,int width,int height,ing stanAngle,int arcAngle)是用来指定在矩形的边界内从起始角度到结束角度之间画弧。 Ⅱ:drawLine(int x1,int y1,int x2,int y2)用来绘制从点(x1,y1)到(x2,y2)的线段。当计算出线段上点的坐标不是整数时,向该点的右下方取整。 Ⅲ:drawRet(int x,int y,int width,int height)绘制指定矩形的轮廓。 Ⅳ:drawPloygon(Polygon p)绘制由特定的点指定的多边形。

A.Ⅱ、Ⅲ

B.Ⅱ、Ⅲ、Ⅳ

C.Ⅰ、Ⅱ

D.Ⅰ、Ⅲ、Ⅳ


正确答案:D
解析:Graphics类有一些常用的绘图方法,用来绘制弧、直线、矩形横几何图形。drawLine(intx1,inty1,intx2,inty2)用来绘制从点(x1,y1)到(x2,y2)的线段。当计算出线段上的点的坐标不是整数时,向该点的左下方取整。

第6题:

阅读以下函数说明和Java代码,将应填入(n)处的字句写在对应栏内。

【说明】

现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2,y1,y2)画一条直线。当实例画矩形时,确定使用DP1还是DP2。

为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图9-6显示了各个类间的关系。

这样,系统始终只处理3个对象:Shape对象、Drawing对象、DP1或DP2对象。以下是 Java语言实现,能够正确编译通过。

【Java代码】

//DP1.java文件

public class DP1{

static public void draw_a line(double x1,double y1,

double x2,double y2){

//省略具体实现

}

}

//DP2.java文件

public class DP2{

static public void drawline(double x1,double y1,

double x2,double y2){

//省略具体实现

}

}

//Drawing.java文件

(1) public class Drawing{

abstract public void drawLine(double x1, double y1, double x2, double y2);

}

//V1Drawing.java文件

public class V1Drawing extends Drawing{

public void drawLine(double x1, double y1, double x2, double y2){

DP1.draw_a_line(x1,y1,x2,y2);

}

}

//V2Drawing.java文件

public class V2Drawing extends Drawing{

public void drawLine(double x1,double y1,

double x2, double y2)(//画一条直线

(2);

}

}

//Shape.java文件

abstract public class Shape{

abstract public void draw();

private (3) _dp;

Shape(Drawing dp){

_dp=dp;

}

protected void drawLine(double x1,double y1,

double x2, double y2){

(4);

}

}

//Rectangle.java文件

public class Rectangle extends Shape{

private double_x1,_x2,_y1,_y2;

public Rectangle(Drawing dp,

double x1,double y1,

double x2,double y2){

(5);

_x1=x1;_x2=x2;

_y1=y1;_y2=y2;

}

public void draw(){

//省略具体实现

}

}


正确答案:(1) abstract (2) DP2.drawline(x1x2y1y2) (3) Drawing (4) _dp.drawLine(x1y1x2y2)
(1) abstract (2) DP2.drawline(x1,x2,y1,y2) (3) Drawing (4) _dp.drawLine(x1,y1,x2,y2) 解析:由类Drawing的drawLine()方法是abstract的,因此Drawing要么是接口,要么是抽象类,在此为抽象类,故空(1)应填abstract。
空(2)是调用DP2系统的相应方法,可参照DP1的对应函数的函数体,但要注意参数不完全相同,应填DP2.drawline(x1,x2,y1,y2)。
_dP属性是用来存储Drawing对象的,参照Shape的构造函数可确认这一点,空(3)应填 Drawing。
Shape类的drawLine方法是通过调用Drawing对应的方法来实现所需要的功能,因此空(4)应填_dp.drawLine(x1,y1,x2,y2)。
空(5)显然是基类构造函数,应填super(dp)。
(5) super(dp)

第7题:

阅读以下说明和C++代码,

[说明]

现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1,y1,x2,y2)画一条直线,DP2则用drawline(x1,x2,y1,y2)画一条直线。当实例化矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图6-1显示了各个类间的关系。

[图6-1]

这样,系统始终只处理3个对象:Shape对象、Drawingg对象、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:

(1) 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){

(2)

}

};

class Shape{

privatc:

(3) dp;

public:

Shape(Drawing*dp);

virtual 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 Shape{

privatc:

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)

: (5)

{

_x1=x1;_y1=yl;_x2=x2;_y2=y2;

}

void Rectangle::draw()

{

//省略具体实现

}

(1)


正确答案:virtual
virtual 解析:由函数drawLine()结尾的“=0”易知,空(1)应填virtual。

第8题:

请补充main函数,该函数的功能是求方程ax2+bx+c=0的两个实数根。方程的系数a、b、c从键盘输入,如果判别式 (disc=b2-4ac)小于0,则要求重新输入a、b、c的值。

例如,当a=1,b=2,c=1时,方程的两个根分别是x1=-1.00, x2=-1.00。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

include"math.h"

include <stdio.h>

main()

{

float a,b,C,disc,X1,x2;

clrscr();

do

{

printf("Input a,b,C:");

scanf("%f,%f,%f",&a,&b,ac);

disc=b*b-4*a*c;

if(disc<0)

printf("disc=%f\n Input again!

\n",disc);

}while(【 】);

printf("****+* the result *+*****\n");

x1=【 】;

x2=【 】;

printf("\nx1=%6.2f\nx2=%6.2f\n",x1/x2);

}


正确答案:disc0 (-b+sqrt(disc))/(2*a) (-b-sqd(disc))/(2*a)
disc0 (-b+sqrt(disc))/(2*a) (-b-sqd(disc))/(2*a) 解析:第一空:题目要求当判别式disc小于0时,要重新输入a、b、c的值,所以do--while循环的执行条件是disc0。
第二空:方程ax2+bx+c=0的一个实数根是:。第三空:方程ax2+bx+c=0的另一个实数根是:

第9题:

如果一个直线控件在窗体上呈现为一条垂直线,则可以确定的是( )。A.它的Y1、Y2属性的值相等SXB

如果一个直线控件在窗体上呈现为一条垂直线,则可以确定的是( )。

A.它的Y1、Y2属性的值相等

B.它的 X1、X2属性的值相等

C.它的X1、Y1属性的值分别与X2、Y2属性的值相等

D.它的 X1、X2属性的值分别与Y1、Y2属性的值相等


正确答案:B
B。【解析】当直线控件在窗体呈现垂直时,它的x1和X2属性应该相同,因为坐标是从左上角开始算起的。横向为X轴,纵向为Y轴。

第10题:

阅读以下说明和c++代码,将应填入(n)处的字句写在对应栏内。

【说明】

现要编写一个画矩形的程序,目前有两个画图程序:DP1和DP2,DP1用函数draw_a_line(x1, y1,x2,y2)画一条直线,DF2则用drawline(x1,x2,y1,y2)画一条直线。当实例画矩形时,确定使用DP1还是DP2。为了适应变化,包括“不同类型的形状”和“不同类型的画图程序”,将抽象部分与实现部分分离,使它们可以独立地变化。这里,“抽象部分”对应“形状”,“实现 部分”对应“画图”,与一般的接口(抽象方法)与具体实现不同。这种应用称为Bridge(桥接)模式。图9-7显示了各个类间的关系。

这样,系统始终只处理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:

(1) 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){

(2);

}

};

class Shape{

private:

(3) _dp;

public:

Shape(Drawing *dp);

virtual 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 Shape{

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)

:(5)

{

_x1=x1;_y1=y1;_x2=x2;_y2=y2;

}

void Rectangle::draw()

{

//省略具体实现

}


正确答案:(1) virtual (2) DP2::drawline(x1x2y1y2) (3) Drawing (4) _dp->drawLine(x1y1x2y2) (5) Shape(dp)
(1) virtual (2) DP2::drawline(x1,x2,y1,y2) (3) Drawing (4) _dp->drawLine(x1,y1,x2,y2) (5) Shape(dp) 解析:由函数drawLine()结尾的“=0”易知,空(1)应填virtual。
空(2)是调用DP2系统的相应方法,可参照DP1的对应函数的函数体,但要注意参数不完全相同,应填DP2::drawline(x1,x2,y1,y2)。
_dp属性是用来存储Drawing对象的,参照Shape的构造函数可确认这一点,空(3)应填 Drawing*。
Shape类的drawLine方法是通过调用Drawing对应的方法来实现所需要的功能,因此空(4)应填_dp->drawLine(x1,y1,x2,y2)。
空(5)显然是基类构造函数,应填Shape(dp)。

更多相关问题