阅读以下说明和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大返回正值:相等,返回0typedef 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(temp);int i,j,k;for(i=0;i<len-1;i++){k=i;for(j=i+1;j<lan;j++){if(p->eleLetters[j]<P->eleLetters[k])k=J;}if( (1) ){C=P->eleLetters[i];P->eleLetters[i]=P->eleLetters[k];P->eleLetters[k]=c;}//if}//for};int find(Node &root,char *temp)//在二叉排序树root中查找与temp匹配的单词。//若匹配返回相应单词在WordList中下标;若查找失败,返回-1{Node *P,*q;int flag;P= (2) ;//临时存储reCompose(p,temp);//将temp重组q=&root;while((flag= (3) )&&q !=NULL){if(flag<0){//搜索左子树q=q->lChiid;}else(//搜索右子树q=q->rChild;}}//whileif(flag==0){//找到匹配的,保存下标return (4) ;}}if( (5) ){//查找失败printf("cant unscramble the following word:%s",temp);;return -1;}}; (2)处填()。
查看答案
①在走向茫茫宇宙的过程中,神通广大的航天器是人类征服宇宙的最有力的武器。航天器可分为无人和载人两种。无人航天器包括人造地球卫星、空间探测器和空间平台等;载人航天器包括载人飞船、空间站、航天飞机、空天飞机等。其中,正在研究的“空天飞机”,有人将其誉为21世纪的“全能超级明星”。空天飞机是美国国家航天委员会正在设计的一种最新型的航天交通工具,它的全称是“国家航天航空飞机”。在理论上,它结合了航空、航天两大领域的技术精华,既有水平起飞、水平降落和可重复使用的航空技术的优点,又具有高速、高空等航天技术优点,是集航空、航天一体化的高技术密集的航空交通工具,具有极为诱人的发展前景。②目前,英、法、德、日等国家已经各自推出了自己的开发计划,在空天飞机的研究上展开了激烈的竞争,从而在全球掀起了一股“空天飞机热”,引起了世界的普遍关注。专家认为,空天飞机的投入使用,将给未来的空间计划带来更加光明的前景,将使人们的空间旅行和航空观念发生革命性的变化。③空天飞机可以水平起飞,采用航空喷气发动机和火箭发动机两种推进系统,可谓是“空”和“天”的完美结合。它具有异乎寻常的性能。最高时速达3万千米,这是第一宇宙速度。绕地飞行高度从零高度直达200千米以上的绕地轨道高度。起降方便,不受“发射窗口”天气和起降地带的限制。一机多用,既可作为太空作业平台,又可从事太空和常规军事活动。最重要的是,空天飞机较之现今的航天飞机发射有效载荷入轨的费用要低90%,而且不需要规模庞大、设备复杂的航天发射场。至于在太空中完成航天飞机能完成的发射、回收、维修卫星和飞船等航天器的任务,就更加简便易行了。④空天飞机将是人类在21世纪最引人注目的研究课题。在繁星点点的夜里,当我们仰望黑漆漆的夜空,看到划过的一道流光,或许就是人类乘坐空天飞机在太空飞行的轨迹。 第三段是怎样说明空天飞机“异乎寻常的性能”的?
阅读下列说明和C程序,将应填入 (n) 处的字句写在对应栏中。[说明]借助一个栈结构,可实现二叉树的非递归遍历算法。InOrderTraverse数实现中序非递归遍历,遍历过程如下:若不是空树,根节点入栈,进入左子树;若已经是空树,则栈顶元素出栈,访问该元素(根节点),进入该节点的右子树,继续直到遍历完成。函数中使用的预定义符号如下:typedef struct BiTNode{int data;struct BiTNode *iChiid,*rChiid;} BiTNode,*BiTree;typedef struct SNode{/*链栈的节点类型*/BiTree elem;struct SNode *next;}SNode;[函数]int InOrderTraverse(BiTree root){BiTree P;SNode *q,*stop=NULL;/*不带头节点的单链表作为栈的存储结构*/P=root;while(p !=NULL || stop !=NULL){if( (1) ){ /*不是空树*/q=(SNode*)malloc(sizeof q);if(q==NULL)return-1;/*根节点指针入栈*/(2) ;q->elem=P;stop=q;P= (3) ; /*进入根的左子树*/}else{q=stop;(4) ; /*栈顶元素出栈*/printf("%d|,q->elem->data); /*防问根节点*/P= (5) ; /*进入根的右子树*/free(q); /*释放原栈顶元素*/}/*if*/}/*while*/return 0;}/*InOrderTraverse*/ (4)处填()。
阅读下列函数说明和C++代码,将应填入 (n) 处的字句写在对应栏内。[说明]在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(包括不用的功能)都要全面初始化的话,会导致应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。以下示例展示了Proxy(代理)模式,PrinterProxy类执行一些比较“轻”的方法,需要真正执行“重”的方法时才初始化Print类。图5-1显示了各个类间的关系。[图5-1][C++代码]class Printable{public:virtual void setPrinterName(string name)=0;virtual string getprinterName()=0;virtual void print(string name)=0;};class Printer:public Printable{private:string name;public:Printer(string name){cout<<"正在产生Printer的对象实例"<<endl;this->name=name;}void setPrinterName(string name){this->name=name;}string getPrinterName(){return name;}void print(string msg){cout<<"======="<<name<<"==========="<<endl;cout<<msg<<endl;}};class printerproxy :public (1) {private:String name;Printer *real;public:PrinterProxy(string name){(2) =NULL;this->name=name;}void setPrinterName(string name){if( (3) )real->setPrinterName(name);this->name=name;}string getPrinterName(){return name;}void print(string msg){(4) ;real->print(msg);}void realize(){if(real==NULL)real= (5) ;}}; (3)处填()。
阅读下列函数说明和C++代码,将应填入 (n) 处的字句写在对应栏内。[说明]在一些大型系统中,大多数的功能在初始化时要花费很多时间,如果在启动的时候,所有功能(包括不用的功能)都要全面初始化的话,会导致应用软件要花很多时间才能启动。因此常将程序设计成到了实际要使用某种功能的阶段才初始化该功能。以下示例展示了Proxy(代理)模式,PrinterProxy类执行一些比较“轻”的方法,需要真正执行“重”的方法时才初始化Print类。图5-1显示了各个类间的关系。[图5-1][C++代码]class Printable{public:virtual void setPrinterName(string name)=0;virtual string getprinterName()=0;virtual void print(string name)=0;};class Printer:public Printable{private:string name;public:Printer(string name){cout<<"正在产生Printer的对象实例"<<endl;this->name=name;}void setPrinterName(string name){this->name=name;}string getPrinterName(){return name;}void print(string msg){cout<<"======="<<name<<"==========="<<endl;cout<<msg<<endl;}};class printerproxy :public (1) {private:String name;Printer *real;public:PrinterProxy(string name){(2) =NULL;this->name=name;}void setPrinterName(string name){if( (3) )real->setPrinterName(name);this->name=name;}string getPrinterName(){return name;}void print(string msg){(4) ;real->print(msg);}void realize(){if(real==NULL)real= (5) ;}}; (4)处填()。