您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C、C++数据结构机试题
一:已知类String的原型为:classString{public:String(constchar*str=NULL);//普通构造函数String(constString);//拷贝构造函数~String(void);//析构函数String&operator=(constString);//赋值构造函数private:char*m_data;//用于保存字符串};请编写String的上述4个函数。答案:版本1//String的析构函数String::~String(void)//3分{delete[]m_data;//由于m_data是内部数据类型,也可以写成deletem_data;}String::String(constchar*str){if(str==NULL){m_data=newchar[1];//若能加NULL判断则更好*m_data=‘{post.content}’;}else{intlength=strlen(str);m_data=newchar[length+1];//若能加NULL判断则更好strcpy(m_data,str);}}//拷贝构造函数String::String(constString&other){intlength=strlen(other.m_data);m_data=newchar[length+1];//若能加NULL判断则更好strcpy(m_data,other.m_data);}//赋值函数String&String:operate=(constString&other){//(1)检查自赋值if(this==&other)return*this;//(2)释放原有的内存资源delete[]m_data;//(3)分配新的内存资源,并复制内容intlength=strlen(other.m_data);m_data=newchar[length+1];//若能加NULL判断则更好strcpy(m_data,other.m_data);//(4)返回本对象的引用return*this;}版本2String::String(constchar*str){if(str){memset(m_data,0,strlen(m_data));strcpy(m_data,str);}else*m_data=0;}String::String(constString){strcpy(m_data,copy.m_data);}String&String:operator=(constString){if(this==)retrun*this;strcpy(m_data,copy.m_data);return*this;}版本3String::String(constchar*str){if(m_data)delete[]m_data;if(str){m_data=newchar[strlen(str)];memset(m_data,0,strlen(m_data));strcpy(m_data,str);}else*m_data=0;}String::String(constString){if(m_data)delete[]m_data;m_data=newchar[strlen(copy.m_data+1)]strcpy(m_data,copy.m_data);}String&String:operator=(constString){if(this==)retrun*this;if(m_data)delete[]m_data;m_data=newchar[strlen(copy.m_data+1)]strcpy(m_data,copy.m_data);return*this;}~String::String(void){if(m_data)delete[]m_data;}二:改错题,只能在原来的基础上增加代码,不能删除代码#include#includevoidfoo(intage,char*b){b=(char*)malloc(64);sprintf(b,YourAgeis%d,age);}intmain(){char*f;foo(23,f);printf(%s\n,f);}答案版本1#include#includevoidfoo(intage,char**b){*b=(char*)malloc(64);sprintf(*b,YourAgeis%d,age);}intmain(){char**f;foo(23,f);printf(%s\n,**f);return0;}版本2#include#includevoidfoo(intage,char*&b){b=(char*)malloc(64);sprintf(b,YourAgeis%d,age);}intmain(){char*f;foo(23,f);printf(%s\n,f);free(f);//不要忘了free;}三:有程序片断如下intmain(){intI=20;pid_tpid=5;if((pid=fork())0){I=50;printf(%d\n,I);(1)}elseif(pid==0){printf(%d\n,I);(2)}}请问该程序用的是进程方式还是线程方式,并说明进程与线程的区别:请问该程序输出什么结果?无参考答案L四、constantpointerpointsforStringpointerpointsforconstantstring五、下面等价的是:Ainti=0if(i){printf(hello,world);}Binti=1;intj=2;if(i==1||j==2){printf(hello,world);}CBooleanb1=true;Booleanb2=true;if(b1==b2){printf(hello,world);}Dinti=1;intj=2;if(i==1&|j==2){printf(hello,world);}六、排序二叉树插入一个节点或双向链表的实现四~六为IBM面试题。七、指针++的含义和用法八、stack和heap的分配,rt-os的特点、同步的方式九、怎样避免内存泄漏的问题十、编程实现十进制数转化为十六进制输出,不准用任何已经定义的库函数,比方说String,Math。inttoHex(int)联想笔试题联想笔试题1.设计函数intatoi(char*s)。2.inti=(j=4,k=8,l=16,m=32);printf(“%d”,i);输出是多少?3.解释局部变量、全局变量和静态变量的含义。4.解释堆和栈的区别。5.论述含参数的宏与函数的优缺点。C/C++软件工程师笔试题=.49465581,程序设计(可以用自然语言来描述,不编程):C/C++源代码中,检查花括弧(是(与),{与})是否匹配,若不匹配,则输出不匹配花括弧所在的行与列。2,巧排数字,将1,2,...,19,20这20个数字排成一排,使得相邻的两个数字之和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。3,打印一个N*N的方阵,N为每边字符的个数(3〈N〈20),要求最外层为X,第二层为Y,从第三层起每层依次打印数字0,1,2,3,...例子:当N=5,打印出下面的图形:XXXXXXYYYXXY0YXXYYYXXXXXXC/C++面试题集(1)c/c++面试题yepizi发表于2006-8-1123:21:00Coolbear转载于2006-10-021.引言本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的意见。许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中的2分。读者可从本文看到strcpy函数从2分到10分解答的例子,看看自己属于什么样的层次(coolbear注:我觉得那个2分的答案我都未必能答上)。此外,还有一些面试题考查面试者敏捷的思维能力。分析这些面试题,本身包含很强的趣味性;而作为一名研发人员,通过对这些面试题的深入剖析则可进一步增强自身的内功。2.找错题试题1:voidtest1(){charstring[10];char*str1=0123456789;strcpy(string,str1);}试题2:voidtest2(){charstring[10],str1[10];inti;for(i=0;i<10;i++){str1[i]='a';}strcpy(string,str1);}试题3:voidtest3(char*str1){charstring[10];if(strlen(str1)<=10){strcpy(string,str1);}}解答:试题1字符串str1需要11个字节才能存放下(包括末尾的’\0’),而string只有10个字节的空间,strcpy会导致数组越界;对试题2,如果面试者指出字符数组str1不能在数组内结束可以给3分;如果面试者指出strcpy(string,str1)调用使得从str1内存起复制到string内存起所复制的字节数具有不确定性可以给7分,在此基础上指出库函数strcpy工作方式的给10分;对试题3,if(strlen(str1)<=10)应改为if(strlen(str1)<10),因为strlen的结果未统计’\0’所占用的1个字节。剖析:(Coolbear:char*和char[]都可以表示字符串,用strlen(constchar*)函数求字符串长度时,都不计算'\0'所占的1个字节。不同之处在于给char*赋值时可以加上'\0',也可以不加,二者等价;但是对于char[],必须在初始化时显式加上'\0',否则,判断字符串结束会出现问题。chararray[5]={'1','2','3','4','\0'}strlen(array)=4)考查对基本功的掌握:(1)字符串以’\0’结尾;(2)对数组越界把握的敏感度;(3)库函数strcpy的工作方式,如果编写一个标准strcpy函数的总分值为10,下面给出几个不同得分的答案:2分voidstrcpy(char*strDest,char*strSrc){while((*strDest++=*strSrc++)!=‘\0’);}4分voidstrcpy(char*strDest,constchar*strSrc)//将源字符串加const,表明其为输入参数,加2分{while((*strDest++=*strSrc++)!=‘\0’);}7分voidstrcpy(char*strDest,constchar*strSrc){//对源地址和目的地址加非0断言,加3分assert((strDest!=NULL)&&(strSrc!=NULL));while((*strDest++=*strSrc++)!=‘\0’);}10分//为了实现链式操作,将目的地址返回,加3分!char*strcpy(char*strDest,constchar*strSrc){assert((strDest!=NULL)&&(strSrc!=NULL));char*address=strDest;while((*strDest++=*strSrc++)!=‘\0’);returnaddress;}从2分到10分的几个答案我们可以清楚的看到,小小的strcpy竟然暗藏着这么多玄机,真不是盖的!需要多么扎实的基本功才能写一个完美的strcpy啊!(4)对strl
本文标题:C、C++数据结构机试题
链接地址:https://www.777doc.com/doc-4418474 .html