CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

今天的面试题,大家讨论一下!

楼主quanbaoxiao(永不言败)2006-04-05 23:30:09 在 C/C++ / C++ 语言 提问

第一题:  
  /*  
  typedef   struct   _mf  
  {  
  int   a   ;  
  int   b   ;  
  char   c   ;  
  int   d   ;  
  }mf   ;  
     
  在vc下默认设置时输出多少?  
  int   main(int   argc,   char*   argv[])  
  {  
  do    
  {  
  cout   <<   &(((mf*)0)->d)<<endl   ;  
  }   while(0);  
  return   0;  
  }  
   
   
  */  
   
  第二题  
  /*  
  class     CA  
  {  
  int   a   ;  
  ~CA(){}  
  };  
   
  class   CB  
  {  
  int   b   ;  
  virtual   ~CB(){}  
  };  
   
  int   main()  
  {  
   
  cout   <<   sizeof(CA)-sizeof(CB)   ?   1   :   0   <<endl   ;  
  }*/  
   
   
  /*  
   
  第三题  
  把Fun转为非递归  
  void   Fun(int   *n   ,   int   nn)  
  {  
   
  if(nn==0)  
  return   ;  
  for(int   i   =   0   ;   i<nn-1   ;   ++i)  
  {  
  if(n[i]>n[i+1])  
  {//一下几行代码具体的记不起了  
  n[i]   +=   n[i+1]   ;  
  n[i+1]   =   n[i]   -   n[i+1]   ;  
  n[i]       -=   n[i+1]   ;    
  }  
  }  
   
  Fun(n+1   ,   nn-1)   ;  
  }  
   
  一下是我的答案,不过他要求高效率,不知道还什么高效方法?  
  void   Fun2(int   *n   ,   int   nn)  
  {  
  for(int   i=0   ;   i<nn-1   ;   ++i)  
  for(int   j=i   ;   j<nn-1   ;   ++j)  
  if(n[j]>n[j+1])  
  {  
  n[j]   +=   n[j+1]   ;  
  n[j+1]   =   n[j]   -   n[j+1]   ;  
  n[j]       -=   n[j+1]   ;    
  }  
  }  
   
  */  
   
  第四题:  
  在c下实现两个数的交换,模拟c++的模板功能  
  一下是我的答案,不过他要求高效率,不知道还什么高效方法?  
  void   Ex(void   *a   ,   void   *b   ,   int   type_len)  
  {  
  char   *pa   =   (char*)a   ;  
  char   *pb   =   (char*)b   ;  
  for(int   i=0   ;   i<type_len   ;   ++i)  
  {  
  *(pa+i)   +=   *(pb+i)   ;  
  *(pb+i)   =   *(pa+i)   -   *(pb+i)   ;  
  *(pa+i)   =   *(pa+i)   -   *(pb+i)   ;  
  }  
  }  
   
  int   main()  
  {  
  int   a   =   1   ;    
  int   b   =   2   ;  
  Ex((void*)&a   ,   (void*)&b   ,   sizeof(a))   ;  
  cout   <<a<<"   "<<b   <<endl   ;  
  }  
  */  
   
   
  第五题:  
  输出一个整数的2的指数和表达式  
  一下是我的答案,不过他要求高效率,不知道还什么高效方法?  
  /*  
  void   OutPutEx(int   num)  
  {  
  int   count   ;  
  int   result   ;  
  while(num>0)  
  {  
  count   =   0     ;  
  result   =   1   ;  
  while(result<=num)  
  {  
  result   *=   2   ;  
  ++count   ;  
  }  
  if(result>num)  
  {  
  result   /=   2   ;  
  --count   ;  
  }  
  num   -=   result   ;  
  if(num!=0)  
  cout<<2<<"^"<<count<<"+"   ;  
  else  
  cout<<2<<"^"<<count<<endl   ;  
   
  }  
   
   
  }  
   
  int   main()  
  {  
  int   a   =   13   ;  
  OutPutEx(a)   ;  
  return   1   ;  
  }  
  */ 问题点数:0、回复次数:25Top

1 楼sms88(白板http://shop34112882.taobao.com)回复于 2006-04-05 23:47:03 得分 0

upTop

2 楼sms88(白板http://shop34112882.taobao.com)回复于 2006-04-05 23:50:05 得分 0

第五题:  
  输出一个整数的2的指数和表达式  
   
  取这个数的最低为,然后右一位,再取这个数的最低位,如此下去Top

3 楼cutenoob(cute )回复于 2006-04-05 23:57:51 得分 0

顶下....Top

4 楼quanbaoxiao(永不言败)回复于 2006-04-06 00:26:07 得分 0

第五题经sms88提示改进如下,不知道还有没有什么方法?  
   
  void   OutPutEx(int   num)  
  {  
  int   count   =   0   ;  
  int   len   =   sizeof(num)*8   ;  
  while(--len)  
  {  
  if(num&1)  
  if(num>>1)  
  cout<<2<<"^"<<count<<"+"   ;  
  else  
  cout<<2<<"^"<<count   ;  
  num   >>=   1   ;  
  ++count   ;  
  }  
  }  
  Top

5 楼fdimim(猿莫求愚√))回复于 2006-04-06 01:22:54 得分 0

第二题是通不过编译的Top

6 楼fdimim(猿莫求愚√))回复于 2006-04-06 01:30:52 得分 0

第四题既然知道内存地址和长度,用memcpy更快吗?Top

7 楼tianrolin(睡不醒还睡)回复于 2006-04-06 01:49:41 得分 0

To:fdimim(一百零一步||)    
  第二题在sizeof(CA)-sizeof(CB)?   1   :   0   外面加上一对括号就能通过编译了.  
   
  程序输出1,对虚函数的概念还比较模糊,期待强人给个解释。Top

8 楼quanbaoxiao(永不言败)回复于 2006-04-06 09:11:44 得分 0

CB前面多了个虚拟函数地址指针Top

9 楼quanbaoxiao(永不言败)回复于 2006-04-06 09:16:13 得分 0

第四题  
  if里面本来是用异或来做的。类似下面,但是具体不是很记得了。  
  n[j]   ^=   n[j+1]   ;  
  n[j+1]   ^=   n[j]   ;  
  n[j]       =   n[j+1]   ;    
  我觉得if里面的代码应该影响不大,递归和非递归应该都是一样的直接copy过来就是了  
  第二个for应该是for(int   j=i   ;   j<nn-1-1   ;   ++j)Top

10 楼crescentg(我找不到改昵称的地方了,谁教教我呀)回复于 2006-04-06 09:52:48 得分 0

第一题  
   
  对齐的问题  
  typedef   struct   _mf  
  {  
  int   a   ;               4  
  int   b   ;               4  
  char   c   ;             4  
  int   d   ;               4  
  }mf   ;  
   
  将地址0转换为mf指针  
   
  d  
  Top

11 楼crescentg(我找不到改昵称的地方了,谁教教我呀)回复于 2006-04-06 09:53:30 得分 0

&(((mf*)0)->d)输出d的地址  
   
  0向后偏移12个字节      
   
  结果0x0000000CTop

12 楼uniuei(学VC呢)回复于 2006-04-06 10:07:57 得分 0

不懂呀,为什么char会占4字节?Top

13 楼thinkinnight(逍遥)回复于 2006-04-06 10:10:53 得分 0

不懂呀,为什么char会占4字节?  
  ----------------------------------  
  编译器会自动进行字节对齐  
  Top

14 楼ugg(逸学堂(exuetang.net))回复于 2006-04-06 10:21:35 得分 0

第一题:  
  12,地址标示应该是0x0CTop

15 楼tfq2002(天涯闲游)回复于 2006-04-06 10:24:51 得分 0

第五题:楼主只要把第一个while   改为if语句就很高效了  
   
  第一个while   将造成程序死循环Top

16 楼quanbaoxiao(永不言败)回复于 2006-04-06 10:52:54 得分 0

怎么会死循环呢?num是变的。  
  这种方法效率不高,还是用移位快。  
  void   OutPutEx(int   num)  
  {  
  int   count   =   0   ;  
  int   len   =   sizeof(num)*8-1   ;  
  while(--len)  
  {  
  if(num&1)  
  if(num>>1)  
  cout<<2<<"^"<<count<<"+"   ;  
  else  
  cout<<2<<"^"<<count   ;  
  num   >>=   1   ;  
  ++count   ;  
  }  
  }  
  Top

17 楼romanticlife(充满生活的味道)回复于 2006-04-06 12:33:00 得分 0

C++太有意思了。  
  学习  
  1Top

18 楼no111(哈里路亚)回复于 2006-04-06 16:14:17 得分 0

第三地莫非是排序??可是有问题啊,笔误?Top

19 楼iamwiner(烛泪)回复于 2006-04-06 18:20:14 得分 0

markTop

20 楼quanbaoxiao(永不言败)回复于 2006-04-06 21:09:53 得分 0

应该是排序,不过原来他是用异或来做的,我记得不是很清楚了,不知道用异或怎么交换两个数。但又好像不是排序来的。当时没注意看,而且那里也不用改的。Top

21 楼pepsi_fei(可乐)回复于 2006-04-06 22:37:29 得分 0

看了这么多高手的程序.获益匪浅.  
  不知道有没有人能介绍一些学c++的好书?  
   
  速成的和提高的.Top

22 楼judely(蓝山|西堤岛|卡布奇诺)回复于 2006-04-07 00:03:09 得分 0

学习`~~Top

23 楼threeleafzerg007(三叶虫)回复于 2006-04-07 01:55:56 得分 0

异或怎么交换两个数,  
  很简单  
  int   a,b;  
  a   =   1,b   =   2;  
  a^=b;  
  b^=a;  
  a^=b;  
  交换好了Top

24 楼threeleafzerg007(三叶虫)回复于 2006-04-07 01:58:00 得分 0

第二题,原来是用递归实现冒泡排序Top

25 楼ErrorBox(天知道)回复于 2006-04-07 02:14:41 得分 0

学习中!Top

相关问题

关键词

得分解答快速导航

  • 帖主:quanbaoxiao

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo