阿尔卡特笔试题目(一)

来源:互联网 发布:光海君 知乎 编辑:程序博客网 时间:2024/05/29 16:18
上海贝尔阿尔卡特的笔试题目  
  帖几道出来,大家讨论讨论.  
  题目都是英文描述,30-40分钟内完成,时间较紧,可能对部分题目理解有些问题   
    
1、能否实现一个宏来实现sizeof(type),   sizeof(var),   type为基本类型,var   为变量.  
  #define     NEWSIZEOF(x)     sizeof(x)       这样答题是不会得分的。回答不能实现,也是0分。   
// selfsizeof.cpp : 定义控制台应用程序的入口点。
//

#include 
"stdafx.h"
#include 
<iostream>
using namespace std;

#define NEWSIZEOFVAR(x)     ((char*)(&x+1)-(char*)&x) 

int _tmain(int argc, _TCHAR* argv[])
{
    
int rhs = 0;
    
int result = NEWSIZEOFVAR(rhs);
    cout 
<< "the result is " << result;
    
return 0;
}

3、结构体sizeof   的题目。不写了。最后一问:   结构体成员能否进行   16bytes对齐?  
  根据编译器和OS,   在64位OS上结构体内的数据成员可能16bytes   对齐. http://www.vckbase.com/document/viewdoc/?id=1054;http://blog.vckbase.com/panic/archive/2005/04/02/4340.aspx


4、写一个函数reverse一个byte  
  unsigned   char   ByteReverse(unsigned   char   szByte)  
  {    
      unsigned   char   a   =   szByte,    
      unsigned   char   b   =   0;  
      int   i;  
      for(i=0;   i<8;   i++) {  
      b   <<=   1;  
      b   |=   (0x01   &   a);  
      a   >>=   1;  
      }  
      return   b;  
  }   
   
5、写一个函数判断一个整型是不是power   of   2  
  bool   IS_POWEROFTWO(unsigned   int   m)  
  {   
      if(   ((m&(m-1))==0)   &&   m>0   )   //decrease by 1 to remove one "1" in the binary of num at once.
      return   true;  
      else  
      return   false;  
  }   
   
7、2选1  
  写个函数实现反转一个字符串的功能        

// stringReverse.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <iostream>
using namespace std;

/************************************************************************/  
//   函数名称:   Ustrlen  
//   输入参数:   strSource,待求长度字符串;  
//   输出参数:   int,字符串的长度。  
//   描         述:   通过判断字符'/0'来得到字符串的长度  
/************************************************************************/    
int   Ustrlen(const   char   *strSource)  
{  
 //   声明变量  
 int   iLength(0);  
 //   遍历字符串,查找字符'/0'  
 while(*strSource++   !=   '/0')  
 {  
  ++iLength;  
 }  
 //   返回字符串的长度  
 return   iLength;  
}  
/************************************************************************/  
//   函数名称:   _ReversalChar  
//   输入参数:   strSouce,待反转字符串;iStart,旋转字符串开始位置;iEnd,旋转字符串结束位置  
//   输出参数:   char*,反转后字符串的指针;  
//   描         述:   反转iStart到字符串iEnd之间的字符串  
/************************************************************************/  
char*   _ReversalChar(char   *strSouce,int   iStart,int   iEnd)  
{  
 //   反转字符串  
 for(;iEnd   >   iStart;   ++iStart,--iEnd)  
 {  
  char   ch;  
  ch   =   strSouce[iStart];  
  strSouce[iStart]   =   strSouce[iEnd];  
  strSouce[iEnd]   =   ch;  
 }  
 //   返回字符串指针  
 return   strSouce;  
}  

/************************************************************************/  
//   函数名称:   ReversalChar  
//   输入参数:   strSource,待反转字符串  
//   输出参数:   char*,反转字符串后的指针  
//   描         述:   按单词反转字符串  
/************************************************************************/  
char   *   ReversalChar(char   *strSouce)  
{  
 //   获取字符串的长度  
 int   iLength   =   Ustrlen(strSouce);  

 //   反转整个字符串  
 _ReversalChar(strSouce,0,iLength-1);  

 //   声明变量(单词的开始以及结束默认从0开始)  
 int   iStart(0),iEnd(0);  

 //   查找单词  
 //   像上面讨论的查找单词的情况,我们只需要修改这部分,就可以实现对不  
 //   同格式类型单词进行处理,为了更好的通用性,其实最好把查找单词这部分  
 //   作为单独一个函数,或者一个类来处理  
 for(int   i   =   0;   i   <   iLength;   ++i)  
 {  
  //   查找空格分割符号  
  if(strSouce[i]  ==   ' ')  
  {  
   //   找到一个单词  
   iEnd   =   i-1;  
   //   对于只有一个字符的单词比如说(I)没有必要反转  
   if(iStart   <   iEnd)  
   {  
    //   反转单词  
    _ReversalChar(strSouce,iStart,iEnd);  
   }  
   //   记录下一个单词的开始位置  
   iStart   =   i+1;  
  }  
  //   特殊处理几种常见标点符号  
  else   if(strSouce[i]   ==   '!'   ||   strSouce[i]   ==   ','   ||   strSouce[i]   ==   '.')  
  {  
   iStart   =   i+1;  
  }  
 }  
 //   返回反转后的字符串  
 return   strSouce;  
}  

int main ()
{
 char  str []= "I want to be get hired!!!";
 cout << "before reverse " << str << endl;
 cout << "after reverse " << ReversalChar(str) << endl;
 return 0;
}


8、不另外增加存储空间实现如下功能:   a=1,   b=2,   交换a和b的值   
public   int   swap (int   x,int   y){
      x   =   x   +   y;
      y   =   x   -   y;
      x   =   x   -   y;


9、改错题  
  void   f()  
  {  
  unsigned   static   int   i;  
  int   sum   =   0;  
  for(i=0;   i<=100;   i++)  
  sum+=i;  
          return   sum;  
  }  
  去掉static,否则每次调用函数得到的结果都不同,static变量会保留值.  

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 水龙头水流很散怎么办 自来水往外喷水怎么办 手机有骚扰电话怎么办 半夜到南宁机场怎么办 得了水痘坐火车怎么办 香港账户被限制怎么办 司法拍卖车扣分怎么办 速递易已超期怎么办 e栈快递换微信怎么办 e栈快递柜打不开怎么办 小孩耳朵塞东西怎么办 把隐形眼镜吃了怎么办 街道分车位不公平怎么办 服务区修车被宰怎么办 2018高速逃费怎么办 高速不停车卡怎么办 独立显卡显存不够怎么办 rx470d买不到了怎么办? 南方避险基金到期怎么办 高铁票认证失败怎么办 高铁票三个小孩怎么办 12306取消三次后怎么办 外国人护照过期了怎么办 行李丢飞机上怎么办 学生票没次数了怎么办 去美国行李超重怎么办 12306密码找回失败怎么办 12306注册身份重复怎么办 12306身份信息重复怎么办 必修课没有选上怎么办 大学错过了选课怎么办 大学忘记选课了怎么办 火车网上购票儿童票怎么办 售票厅看见小偷怎么办 没赶上火车火车票怎么办 重庆到韩国签证怎么办 重庆去韩国签证怎么办 重庆办韩国签证怎么办 故宫网上预定后怎么办 坐游轮如果晕船怎么办 听听力反应慢怎么办?