C、c笔试面试题

上传人:缘*** 文档编号:333289282 上传时间:2022-09-01 格式:PDF 页数:50 大小:8.14MB
返回 下载 相关 举报
C、c笔试面试题_第1页
第1页 / 共50页
C、c笔试面试题_第2页
第2页 / 共50页
C、c笔试面试题_第3页
第3页 / 共50页
C、c笔试面试题_第4页
第4页 / 共50页
C、c笔试面试题_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《C、c笔试面试题》由会员分享,可在线阅读,更多相关《C、c笔试面试题(50页珍藏版)》请在金锄头文库上搜索。

1、C、C+笔试面试题1.以下三条输出语句分别输出什么?C易char strl=abe;char str2=abc;const char str3=abc;const char str4=abc;const char*str5=abc;const char*str6=abc;cout boolalpha (strl=str2)endl;/输出什么?cout boolalpha (str3=str4)endl;/输出什么?cout boolalpha (str5=str6)=0;-i)/反向遍历 array 数组cout arrayi array。其次vector:size_type被定义为unsi

2、gned in t,即无符号数,这样做为循环变量的i 为 0 时再减1就会变成最大的整数,导致循环失去控制。3.以下两条输出语句分别输出什么?C+难float a=l.Of;cout (int)a endl;cout (int&)a endl;cout boolalpha (int)a=(int&)a)endl;/输出什么?float b=O.Of;cout (int)b endl;cout (int&)b endl;cout boolalpha (int)b=(int&)b)endl;/输出什么?答:分别输出false和true。注意转换的应用。(int)a实际上是以浮点数a 为参数构造了一

3、个整型数,该整数的值是1,(int&)a则是告诉编译器将a 当作整数看(并没有做任何实质上的转换)。因为1 以整数形式存放和以浮点形式存放其内存数据是不一样的,因此两者不等。对 b 的两种转换意义同上,但是。的整数形式和浮点形式其内存数据是一样的,因此在这种特殊情形下,两者相等(仅仅在数值意义上)。注意,程序的输出会显示(int&)a=1065353216,这个值是怎么来的呢?前面已经说了,1 以浮点数形式存放在内存中,按 ieee754规定,其内容为0 x0000803F(已考虑字节反序)。这也就是a 这个变量所占据的内存单元的值。当(int&)a出现时,它相当于告诉它的上下文:把这块地址当

4、做整数看待!不要管它原来是什么。”这样,内容0X0000803F按整数解释,其值正好就是1065353216(十进制数)。通过查看汇编代码可以证实(int)a相当于重新构造了一个值等于a 的整型数”之说,而(int&)的作用则仅仅是表达了一个类型信息,意义在于为cout 及=选择正确的重载版本。4.以下代码有什么问题?C+易 struct TestTest(in t)Test()void fun();void main(void)Test a(l);a.fun();Test b();b.fun();答:变量b定义出错。按默认构造函数定义对象,不需要加括号。5.以下代码有什么问题?C+易cout

5、 (true?l:nl)temp;unsigned int const size2=temp;char str2 size2;答:str2定义出错,size2非编译器期间常量,而数组定义要求长度必须为编译期常量。9.以下代码中的输出语句输出0吗,为什么?C+易 struct CLSint m_i;CLS(int i):m_i(i)CLS()(CLS(O);?);CLS obj;cout obj.mj endl;答:不能。在默认构造函数内部再调用带参的构造函数属用户行为而非编译器行为,亦即仅执行函数调用,而不会执行其后的初始化表达式。只有在生成对象时,初始化表达式才会随相应的构造函数一起调用。1

6、0.C+中的空类,默认产生哪些类成员函数?C+易 答:class Empty(public:Empty();/缺省构造函数Empty(const Empty&);/拷贝构造函数Empty();/析构函数Empty&operator=(const Empty&);/赋值运算符Empty*operator&();/取址运算符const Empty*operator)const;/取址运算符 const;11.写一个函数,完成内存之间的拷贝。考虑问题是否全面答:void*mymemcpy(void*dest,const void*src,size_t count)char*pdest=static_

7、cast(dest);const char*psrc=static_cast(src);if(pdestpsrc&pdestpsrc+cout)能考虑到这种情况就行了for(size_t i=count-l;i!=-l;i)pdesti=psrci;?elsefor(size_t i=0;icount;+i)pdesti=psrci;return dest;?12.以下代码中的两个sizeof用法有问题吗?C易 void UpperCase(char str)/将 s tr中的小写字母转换成大写字母for(size_t i=0;isizeof(str)/sizeof(str0);+i)if(a

8、=stri&stri=z)stri-=(a-A);?char str=aBcDe;cout str 字符长度为:sizeof(str)/sizeof(str0)endl;UpperCase(str);cout str endl;答:函数内的sizeof有问题。根据语法,sizeof如用于数组,只能测出静态数组的大小,无法检测动态分配的或外部数组大小。函数外的str是一个静态定义的数组,因此其大小为6,函数内的str实际只是一个指向字符串的指针,没有任何额外的与数组相关的信息,因此sizeof作用于上只将其当指针看,一个指针为4 个字节,因此返回4。13.非 C+内建型别A 和 B,在哪几种情况

9、下B 能隐式转化为A?C+中等答:a.class B:public A ./B 公有继承自A,可以是间接继承的b.class B operator A();/B实现了隐式转化为A 的转化c.class A A(const B&);)A 实现了 non-explicit的参数为B(可以有其他带默认值的参数)构造函数d.A&operator=(const A&);/赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个int Strcmp(char*strl,char*str2)str2i)b=l;break;else if(strlistr2i)b=-l;break;)i+;return b;)

10、L 说出下面这个程序的运行结果,并简要叙述其理由:char bufl10=hello;char buf210=hello;if(bufl=buf2)printf(equal!);else printf(not equal!);因为bufl,buf2分配了不同的内存块,而比较的是数组名,实际上是两个分别指向数组起始元素地址的指针。2.指出下面这段程序中存在一些什么问题:int loop,a5;int*p=a;for(loop=0;loop 0)*strdest+=*strsrc+;return address;int strcmp(const char*strl,const char*str2)

11、(assert(strl!=NULL)&(str2!=NULL);int ret=0;while(!(ret=(unsigned char*)*strl-(unsigned char*)*str2)&(*str2)strl+;str2+;if(ret 0)ret=1;else if(ret 0)ret=-1;return ret;int strlen(const char*str)assert(str!=NULL);int len=0;while(0!=*str+)len+;return len;?类 string的构造函数string:string(const char*str)if(str

12、=NULL)m_data=new charl;*m_data=0;elseint length=strlen(str);m_data=new charstr+1;strcpy(m_data,str);)string的析构函数string:string()delete m_data;string的拷贝构造函数string:string(const string&other)int len=strlen(other.m_data);m_data=new charlen+1;strcpy(m_dataz other.m_data);)string的赋值函数string&string:operator

13、=(const strings other)(if(this=&other)return*this;delete m_data;int len=strlen(other.m_data);m_data=new charlen+1;strcpy(m_data,other.m_data);return*this;不用任何局部和全局变量实现int strlen(char*a)int strlen(char*a)if(0=*a)return 0;elsereturn 1 +strlen(a+1);l)sizeof相关系列问题2)const相关系列问题3)大量林锐书的习题,以及各种变种这三个几乎是每次必出

14、现下面的这些是程序相关题,很多都是以前有讨论过的,还请各位大侠能整理个比较适合做面试时答案的解答,多谢了.最好能给出讨论链接,让我等后辈有学习的机会.1)求出相似度的算法.2)写出二分查找的代码.int binary_search(int*arr,int key,int n)int low=0;int high=n-1;int mid;while(low k)high=mid-1;else if(arrfmid 0)ret=1;else if(ret next;while(ps!=NULL)pe-next=ps-next;ps-next=head;head=ps;ps=pe-next;)9)循

15、环链表的节点对换和删除。*10)将一个数字字符串转换为数字.”1234“-1234#i ncludeusing namespace std;int f(char*s)int k=0;while(*s)k=10*k+(*s+),0;return k;int main()int digit=f(4567);coutdigit0)*pbTo+=*pbForm+;return pvTo;?出现次数相当频繁.笔试:1)写一个内存拷贝函数,不用任何库函数.就是前些时候本版讨论的那个问题.void*memcpy(void*pvTo,const void*pvFrom,size_t size)assert(p

16、vTo!=NULL)&(pvFrom!=NULL);byte*pbTo=pvTo;byte*pbFrom=pbFrom;while(size 0)*pbTo+=*pbFrom+;?return pvTo;?2)将一个单链表逆序.(这个问题是个常规的数据结构问题.不过不小心时会损失效率)3)客房预定的问题.根据客户报的人数,客房等级来从预备的客房中选择出所有符合要求的客房号.客户没有要求等级时,只考虑人数因素就可以了.要考虑有些客房已经预定的情况.(写代码是要考虑好彼此的效率)4)对于一个无序序列进行二分查找线排序再查找5)将一个数字字符串转换为数字.1234-1234int convert(char*str)int k=0;while(*str!=0)k=k*10+*s+-O;)return k;?6)在文件(调用库函数创建的,不用考虑数据库的方式)中读入信息(包括职工号,职工产量).根据输入的信息(包括职工号,职工产量).检测是否有相同的职工号记录,如有,则增加其产量.如没有,则创建新的记录.最后的记录排序的依据是职工产量(降序),如果产量相同,则按职工号(升序).(具体的题目记不太

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号