您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 嵌入式软件工程师笔试题_
//6******************************************************//构造N个结点的单链表返回链表头指针,要求链表中各结点顺序//与结点数据输入顺序相反,例如输入1,2,3,4,5,形成的链表为//head-54321,补充程序#defineN10typedefstructNode{intdata;structNode*next;}NODE;intGet_Data(inti);//定义省略Node*Create_u(){inti;NODE*p,*Head=NULL;for(i=0;iN;i++){VP=NewNODE;P-Data=Get_Data(i);___p-next=Head-next;______Head=p_____;}returnHead;}//7**********************************************//N个结点链表,每个结点中存放一个字符,判断链表存放的字符是否//中心对称,即abccba或abcba,补充程序typedefstructNode{intdata;structNode*next;}NODE;boolIs_symmeic(NODE*head,*intn){charD[N];inti,d;_____d=n/2___;for(i=0;id;i++){D[i]=head-data;head=head-next;}if(_____head!=NULL&&_1==n%2___){head=head-next;}while(head){_____--i__________;if(D[i]!=head-data){returnfalse;}head=head-next;}returntrue;}//8*************************************//str中只含有大写和小写字母函数change_move(char*str)将字符串中大写改成*并//移到前面小写后返回*的个数//如AabBdcYY改为*****abd,返回5intchang_move(char*str){intlen,i,curstr=-1;len=strlen(str);for(i=len-1;i=0;i--){if(str[i]='A'&&str[i]='Z'){str[i]='*';if(cursor==-1){cursor=i;}elseif(cursori){_____________;str[i]='*';_____________;}}return____________;}//9***********************************************//求两个字符串的第一个公共子串,并返回该子串//如:abcdefgehiaacdef**gehi//第一个为cdef;不许用strcmp()char*Maxf(char*str1,char*str2){}3.二维数组空间的动态申请a.简单的,已经有一维,如char(*c)[5];c=newchar[n][5];//n为已定义的行数b.二维的int**p;p=newint*[m_row];//创建行指针for(inti=0;im_row;i++)//为每一行分配空间p[i]=newint[m_cols];写到某一个函数中:voidgetmemory(int**&p,intm_row,intm_cols){p=newint*[m_row];//创建行指针for(inti=0;im_row;i++)//为每一行分配空间p[i]=newint[m_cols];}释放空间:voiddeletememory(int**&p,intm_row){//释放每一行所分配的空间for(inti=0;im_row;i++)delete[]x[i];//释放行指针delete[]x;x=0;via嵌入式笔试两题-|yingwang294发表于2006-10-3110:40:00以下是威盛嵌入式笔试的最后两道小题题一:原题如下:改程序,并确定运行结果#includestdio.h#includestring.h#includemalloc.hchar*getstring(void){charp[]=helloeveryone;returnp;}char*getmemory(void){return(char*)malloc(10);}intmain(intargc,char*argv[]){char*p=getmemory();strcpy(p,helloworld);printf(%s,p);printf(%s,getstring());return0;}这个主要是charp[]前少一个static...题二:读程序,写出运行结果#includestdio.h#includestring.h#includemalloc.h#includeassert.htypedefstruct{intvalue;chartype;}head_t;这是什么东西啊?typedefstruct{head_thead;intpara;}message_t;voidmain(void){message_t*message=NULL;head_t*head=NULL;message=(message_t*)malloc(sizeof(message_t));assert(message);//测试的条件不成立则终止程序memset(message,0,sizeof(message_t));message-para=100;message-head.type='a';head=(head_t*)message;head-value++;head-type++;printf(message-head.value=%d,message-head.type=%c,message-para=%d\n,message-head.value,message-head.type,message-para);free(message);return;}#includeiostream#includestringusingnamespacestd;classStudent{public:Student(){}Student(conststring&nm,intsc=0):name(nm),score(sc){}voidset_student(conststring&nm,intsc=0){name=nm;score=sc;}conststring&get_name()const{returnname;}intget_score()const{returnscore;}private:stringname;intscore;};//outputstudent'snameandscorevoidoutput_student(constStudent&student){coutstudent.get_name()\t;coutstudent.get_score()endl;}intmain(){Studentstu(Wang,85);output_student(stu);}设计了一个类Student,数据成员有name和score,有两个构造函数,有一个设置成员数据函数set_student(),各有一个取得name和score的函数get_name()和get_score()。请注意get_name()和get_score()后面都加了const,而set_student()后面没有(也不能有const)。首先说一点题外话,为什么get_name()前面也加const。如果没有前后两个const的话,get_name()返回的是对私有数据成员name的引用,所以通过这个引用可以改变私有成员name的值,如Studentstu(Wang,85);stu.get_name()=Li;即把name由原来的Wang变成了Li,而这不是我们希望的发生的。所以在get_name()前面加const避免这种情况的发生。那么,get_name()和get_score()这两个后面应该加const的成员函数,如果没有const修饰的话可不可以呢?回答是可以!但是这样做的代价是:const对象将不能再调用这两个非const成员函数了。如conststring&get_name();//这两个函数都应该设成const型intget_score();voidoutput_student(constStudent&student){coutstudent.get_name()\t;//如果get_name()和get_score()是非const成员函数,这一句和下一句调用是错误的coutstudent.get_score()endl;}由于参数student表示的是一个对constStudent型对象的引用,所以student不能调用非const成员函数如set_student()。如果get_name()和get_score()成员函数也变成非const型,那么上面的student.get_name()和student.get_score()的使用就是非法的,这样就会给我们处理问题造成困难。因此,我们没有理由反对使用const,该加const时就应该加上const,这样使成员函数除了非const的对象之外,const对象也能够调用它。c/C++通用Makefile本文提供了一个用于对C/C++程序进行编译和连接以产生可执行程序的通用Makefile。在使用Makefile之前,只需对它进行一些简单的设置即可;而且一经设置,即使以后对源程序文件有所增减一般也不再需要改动Makefile。因此,即便是一个没有学习过Makefile书写规则的人,也可以为自己的C/C++程序快速建立一个可工作的Makefile。这个Makefile可以在GNUMake和GCC编译器下正常工作。但是不能保证对于其它版本的Make和编译器也能正常工作。如果你发现了本文中的错误,或者对本文有什么感想或建议,可通过whyglinuxAThotmailDOTcom邮箱和作者联系。此Makefile的使用方法如下:1.程序目录的组织尽量将自己的源程序集中在一个目录中,并且把Makefile和源程序放在一起,这样用起来比较方便。当然,也可以将源程序分类存放在不同的目录中。在程序目录中创建一个名为Makefile的文本文件,将后面列出的Makefile的内容复制到这个文件中。(注意:在复制的过程中,Makfile中各命令前面的Tab字符有可能被转换成若干个空格。这种情况下需要把Makefile命令前面的这些空格替换为一个Tab。)将当前工作目录切换到Makefile所在的目录。目前,这个Makefile只支持在当前目录中的调用,不支持当前目录和Makefile所在的路径不是同一目录的情况。2.指定可执行文件程序编译和连接成功后产生的可执行文件在Makefile中的PROGRAM变量中设定。这一项不能为空。为自己程序的可执行文件起一个有意义的名子吧。3.指定源程序要编译的源程序由其所在的路径和文件的扩展名两项来确定。由于头文件是通过包含来使用的,所以在这里说的源程序不应包含头文件。程序所在的路径在SRCDIRS中设定。如果源程序分布在不同的目录中,那么需要在SRCDIRS中一一指定,并且路径名之间用空格分隔。4.Makefile目标(Targets)下面是关于这个Makefile提供的目标以及它所完成的功能:omake编译和连接程序。相当于makeall。omakeobjs仅仅编译程序产生.o目标文件,不进行连接(一般很少单独使用)。omakec
本文标题:嵌入式软件工程师笔试题_
链接地址:https://www.777doc.com/doc-2517903 .html