问答题

【说明】
假定用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:
m=a[k]×10k-2+a[k-1]×10k-3+…+a[3]×10+a[2]
其中a[1]保存该长整数的位数,a[0]保存该长整数的符号:0表示正数,1表示负数。
运算时先决定符号,再进行绝对值运算。对于绝对值相减情况,总是绝对值较大的减去绝对值较小的,以避免出现不够减的情况。注:不考虑溢出情况,即数组足够大。
【函数】
int cmp(int *LA, int *LB);
/*比较长整数LA与LB的绝对值大小*/
/*若LA绝对值较大返回正值,LA较小返回负值,相等则返回0*/
int ADD(int *LA, int*LB, int *LC)
/*计算长整数LA与LB的和,结果存储于LC中*/
/*注意:正数与负数的和相当于正数与负数绝对值的差*/
/*数据有误返回0,正常返回1*/

if(LA==NULL || LB==NULL || LC==NULL)return 0;
int *pA, *pB,i,N,carry,flag;
flag=LA[0]+LB[0];
switch(flag)/*根据参与运算的两个数的符号进行不同的操作*/
case 0:
case 2:
LC[0]=LA[0];/*LA与LB同号,结果符号与LA(LB)相同*/
pA=LA;
pB=LB;
(1) ;
break;
case 1:/*LA与LB异号*/
/*比较两者的绝对值大小,结果符号与较大者相同*/
flag= (2) ;
if(flag>0)/*LA较大*/
LC[0]=LA[0];
pA=LA;
pB=LB;

else if(flag<0)/*LB较大*/
LC[0]=LB[0];
pA=LB;
pB=LA;

else/*LA与LB相等*/
LC[0]=0;
LC[1]=0;
return 1;

flag=-1;
break;
default:
return 0;
break;
/*switch*/
/*绝对值相加减*/
/*注意对于减法pA指向较大数,pB指向较小数,不可能出现不够减的情况*/
(3) ;
N=LA[1]>LB[1]LA[1]:LB[1];
for(i=0;i<N;i++)
if(i>=pA[1])/*LA计算完毕*/
carry+=flag *pB[i+2];

else if(i>=pB[1])/*LB计算完毕*/
carry +=pA[i+2];

else
carry +=pA[i+2]+flag *pB[i+2];

LC[i+2]=Carry%10;
carry /=10;
if( (4) )/*需要借位,针对减法*/
LC[i+2]+=10;
carry--;

/*for*/
if( (5) )/*最高进位,针对加法*/
LC[i+2]=carry;
i++;

if(LC[i+1]==0)i--;严若最高位为零,针对减法*/
LC[1]=i;
return 1;
;/*ADD*/

【参考答案】

(1) flag=1
(2) cmp(LA,LB)
(3) carry=0
(4) LC[......

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

问答题
【说明】 现要编写一个画矩形的程序,目前有两个画图程序: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() 省略具体实现
问答题
【说明】 现要编写一个画矩形的程序,目前有两个画图程序: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() 省略具体实现