[简答题]
阅读以下说明和Java源程序,将应填入(n)处的字句写在对应栏内。
【说明】
以下程序能够计算三角形、矩形和正方形的周长并输出。
程序由5个类组成:AreaTest是主类,类Triangle、Rectangle和Square分别表示三角形、矩形和正方形,抽象类Figure提供了一个计算周长的抽象方法。
【程序】
public class girthTest{
public static void main (String args[]){
Figure[]figures={
new
Triangle (2,3,3),new Rectangle(5,8),new Square(5)
};
for(int
i=0;i<figures.length;i++){
System.out.println(figures[i]+"girth="+figures[i].getGirth( ));
}
}
}
public abstract class Figure{
public
abstract double getGirth( );
}
public class
Rectangle extends (1) {
double
height;
double width;
public Rectangle(double height,double width){
this.height=height;
this.width=width;
}
public String toString( ){
return "Rectangle:height="+height+",width="+width+":";
}
public double getGirth( ){
return (2) ;
}
}
[填空题]
阅读以下说明和C代码,将应填入 (n) 处的字句写在对应栏内。
[说明]
下面程序用来将打乱的单词还原为原来的次序,比如将rty还原为try。单词的原来次序存储于wordlist.txt文件中,原则上可用穷举法(rty对应的穷举为:rty、ryt、try、tyr、ytr、yrt),但考虑到破译速度,采用如下方法。
注意到单词列表中不存在组成字符完全相同的单词(如Hack12与Hack21包含完全相同的字符),因此将单词中的字符进行重组再进行比较,例如,try单词重组为rty(按ASCⅡ码顺序),这样不管打乱的单词是什么顺序,只要是由r、t、y三个字母组成的均破译为try,大大提高破译速度。程序中借助二叉排序树以进一步提高查找效率,二叉排序树左子树(如果有)上的节点对应的值均小于根节点的值,右子树(如果有)上的节点对应的值均大于根节点的值。
函数中使用的符号定义如下:
#define NumberofWords 1275//单词总数
#define MaxLength 10//最长单词所含字符数
char WordList[NumberofWords][MaxLength];//存储单词列表
int cmp(Node *q,Node *p);//q与p比较。p小,返回负值;P大返回正值:相等,返回0
typedef struct Node(//二叉树节点
char *eleLetters;//重组后的字符串
int index;//对应单词表中的下标
struct Node *lChiId,*rChiid;//左右子节点
Node;
[C代码]
void reCompose(Node *p,char *temp)
//重纰,亦即将temp字符串中的字符升序排序,存储于p节点中
//采用直接插入排序法
char c;
strcpy(p->eleLetters,temp);//
int len=strlen(tem
[填空题]阅读以下说明和C代码,将应填入 (n) 处的字句写在对应栏内。
[说明]
函数combine(a,b,c)是计算两个整数的组合数。由于计算结果可能超出10ng整型的可表示范围,故采用数组方式存储,例如:k位长整数m用数组c[]存储结构如下:m=c[k]×10k-1+c[k-1]×10k-2+…+c[2]×10+c[1],利用c[0]存储长整数m的位数,即c[0]=k。数组的每个元素只存储长整数m的一位数字,长整数运算时,产生的中间结果的某位数字可能会大于9,这是就应该调用format将其归整,使数组中的每个元素始终只存储长整数的一位数字。
整数a和b(a>b)的组合数为:[*],其中u1=a,u2]=a-1,…,ub=a-b+1,d1=1,d2=2,…,db=b。为了计算上述分式,先从u1,u2,…,ub中去掉d1×d2×…×db的因子,得到新的u1,u2,…,ub,然后再将它们相乘。
[函数]
#define NAXN 100
int gcd(int a,int b)//求两个整数a和b的最大公因子
if(a<b)
intC=a;a=b;b=c;
for(inti=b;i>=2;i--)
if( (1) )return i;
return 1;
void format(int *a)//将长整数数组归整
int i;
for(i=1;i<a[0]||a[i]>=10;i++)
if(i>=a[0]) (2) ;
a[i+1]+=a[i]/10;
a[i]=a[i]%10;
[填空题]阅读以下说明和Java程序,将应填入 (n) 处的字句写在对应栏内。
[说明]
下面程序实现十进制向其它进制的转换。
[Java程序]
ClasS Node{
int data;
Node next;
}
class Transform{
private Node top;
public void print( ){
Node p;
while(top!=null){
P=top;
if(P.data>9)
System.out.print((char)(P.data+55));
else
System.out.print(p.data);
top=p.next;
}
}
public void Trans(int d,int i){//d为数字;i为进制
int m;
(1) n=false;
Node p;
while(d>0){
(2) ;
d=d/i;
p=new Node( );
if( (3) ){
p.data=m;
(4) ;
top=P;
n=true;
}
else{
p.data=m;
(5) ;
top=P;
}
}
}
}
[填空题]阅读以下说明和Jrdva代码,将应填入 (n) 处的字句写在对应栏内。
[说明]
在销售系统中常常需要打印销售票据,有时需要在一般的票据基础上打印脚注。这样就需要动态地添加一些额外的职责。如下展示了Decorator(修饰)模式。SalesOrder对象使用一个SalesTicket对象打印销售票据。图6-1显示了各个类间的关系。以下是Java语言实现,能够正确编译通过。
[图6-1]
[*]
[Java代码]
//Component.java文件
public (1) class Component
abstract publ ic void prtTicket( );
//salesTicket.java文件
public class SalesTicket extends Component
public void prtTicket( )
//Sales ticket printing code here
System.out.printin("SalesTicket");
//Decorator.java文件
publ ic abstract class Decorator extends Component
public void prtTicket( )
if(myComp!=null)myComp.prtTicket( );
private (2) myComp;
public Decorator(Component myC)
myComp=myC;
//Footer.java文件
public class Footer extends Decorator
public Footer(Component myC)
(3) ;
public void prtTicket( )
(4)