抬起头来做人①那一年,那个小男孩不过八九岁。一天,他拿着一张筹款卡回家,很认真地对妈妈说:“学校要筹款,每个学生都要捐钱。”②对小孩子来说,直接想到的“人”就是自己的家长。③小男孩的妈妈取出5块钱,交给他,然后在筹款卡上签名。小男孩静静地看着妈妈签名,想说什么,却没开口。妈妈注意到了,问他:“怎么啦”④小男孩低着头说:“昨天,同学们把筹款卡交给老师时,捐的都是100块、50块。”⑤小男孩就读的是当地著名的“贵族学校”,校门外,每天都有小轿车等候放学的学生。小男孩的班级是排在全年级最前面的。班上的同学,不是家里捐献较多,就是成绩较好。当然,小男孩不属于前者。⑥那一天,小男孩说,不是想和同学比多,也不是自卑。他一向都认真对待老师交代的功课,这一次,也想把自己的“功课”做好。况且,学校还举行班级筹款比赛,他的班已领先了,他不想拖累整班。⑦妈妈把小男孩的头托起来说:“不要低头,要知道,你同学的家庭背景,非富则贵。我们必须量力而为,我们所捐的5块钱,其实比他们的500块钱还要多。你是学生,只要以自己的品学尽力为校争光,就是对学校最好的贡献了。”⑧第二天,小男孩抬起头,从座位走出去,把筹款卡交给老师。当老师在班上宣读每位同学的筹款成绩时,小男孩还是抬起头来。自此以后,小男孩在达官贵人、富贾豪绅的面前,一直抬起头来做人。⑨妈妈说的那一番话,深深地刻在小男孩心里。那是生平第一次,他面临由金钱来估量人的“成绩”的无言教育。非常幸运,就在这第一次,他学习到“捐”的意义,以及别人所不能“捐”到的、自己独一无二的价值。 阅读第⑧段,回答下面的问题。(1)简要说说画线句“自此以后,小男孩在达官贵人、富贾豪绅的面前,一直抬起头来做人”的深刻含义。(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大返回正值:相等,返回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;}}; (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) ;}}; (1)处填()。
阅读以下说明和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;}}; (1)处填()。
阅读下列说明和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*/ (1)处填()。