微软笔试题一

http://kongjian.baidu.com/ahli/blog/item/c0f1b13542d24e8fa61e1298.html

1 、求函数返回值,输入x=9999;
int func(x)
{
    int countx = 0;
    while(x)
     {
         countx ++;
         x = x&(x-1);
     }
return countx;
}
【试题解析】
    解这道题的时候,如果拿出一个二进制数来分析就会容易的多了, x=x&(x-1) 实际上就是把 x 的二进制形式的最后一个“ 1 ”变成“ 0 ”, x 的二进制形式有多少个“ 1 ”循环就执行多少次。

9999/256 = 39 余 15 ,把这两个数分别转化一下就很快了
39 = 32 + 4 + 2 +1 = 00100111
15 = 0F = 00001111
所以 9999=0010011100001111 ,共有 8 个 1 ,答案就是 8 了

2 、实现以下程序,以方便binary search.
. 要有处理错误语句
. 队列的分配的大小是固定的 MAX_LEN, 由第二个参数输入
. 不能复制队列
insert (int *arr, // 队列
size_l len, // 队列大小
size_l count, // 队列元素的数目
int varl // 要处理的数据
) 返回插入数据的索引
remove(int *arr,size_l len,size_l count,int varl) 返回删除元素的索引
search(int *arr,size_l len,size_l count,int varl) 返回搜索道元素的索引
【试题解析】
    略。数据结构书上都有的。

3 、堆栈R, 从顶到底:{2,4,6,8,10}, 逐个取出放入队列Q ,再从Q 中逐个取出放入R 中,问现在堆栈R 中从顶到底的顺序。
【试题解析】
    这个也不用了吧, {10,8,6,4,2}

4 、写出程序的结果:___________
int funa(int *a)
{
a[0] ++;
}

int funb(int b[])
{
b[1] += 5;
}

main()
{
   int a[5] = {2,3,4,5,6};
   int b[5] = {2,3,4,5,6};
   int *p;
p = &a[0];
(*p)++;
    funa(p);
for(int i = 0; i<3; i++)
printf("%d,",a[i]);
p = &b[1];
    funb(p);
for(i = 0; i<3; i++)
printf("%d,",b[i]);
}
【题目解析】
结果是:
4,3,4,2,3,9

(*p)++; 也就是 a[0]++ ;
funa(p); 中的 a[0]++ 是将 main 中的数组 a[0]++ ,
数组 a 中只有第一个元素加了两次 1 ,

p = &b[1]; 把 p 指向了数组 b 的第二个元素
funb(p); 中的 b[1]+=5 是将 main 中的数组 b[2]+=5
数组 b 中的第三个元素加了 5


5 、找出下面程序的 BUG
int CopyStringAndCount(char * Str)
{
    int nCount = 0;
    char * pBuffer;
  
     pBuffer = new char[MAX_PATH_LENGTH];
    

    
     strcpy(pBuffer, Str);

    for ( ; pBuffer ; pBuffer++ )
        if ( pBuffer =='//' ) nCount ++;
    
    
    return nCount;
}

【题目解析】
① (const char * Str)
   如果在函数体内不需要改变字符串的内容,最好加上 const 以免误修改字符串内容
② char * pBuffer = NULL;
   指针声明的时候最好赋初值 NULL
③ if ( !pBuffer ) return -1;
   开辟空间之后没有检查是否成功,没有错误检查
④ if ( strlen(Str)>(MAX_PATH_LENGTH-1) ) return -2;
   没有检查新开辟的空间能否容纳传进来的字符串,否则有可能越界
⑤ *pBuffer
    题中的原意是当到字符串末尾的时候跳出循环,所以应该是取字符串的内容
⑥ 同⑤
⑦ delete pBuffer; pBuffer=NULL;
    没有释放新开辟的空间,会造成内存泄漏


6 、你觉得下一代浏览器应该添加什么功能?
【题目解析】
    当时随便写的,比如安全性,搜索功能等。

http://blog.csdn.net/tvtvtvtv/archive/2006/11/22/1404692.aspx
1, 程序输出或者找错:
struct S {
    int i;
    int * p;
};
void main()
{
    S s;
    int * p = &s.i;
    p[0] = 4;
    p[1] = 3;
    s.p = p;
    s.p[1] = 1;
    s.p[0] = 2;
}
问程序会在哪一行死掉。

2, int calc(int a, int b)
{
    if(a >= b)
        return (a==b)?a:b;
    else
        return a+b+calc(++a, --b);
}
问calc(1, 5)等于? 15

3,

abcdef*2=cdefab
cdefab*2=efabcd
每个字母代表一个数字
abcdef=?

2 编程题
2。1 写一个CircularQueue()
2。2 写一个Merge函数。把两个排序的链表合并。
难点是两个链表一个从小到大排,另一个反向。

3 设计(可用中文)
1 设计一个密码对话框。问如何设计,有什么规范,如何测试等
2 Web搜索引擎测试。
 
4 是一个测试函数 int atoi( const char * string ) 字符串转换倒一个整数
 列举出所有的情况。 可以用中文
 
5 要用英文做答
5。1 你有什么新奇的想法,最好是软件方面
5。2 让一个员工开发一个功能,但是他不重视。如何搞定。

6,
罗马数字共有七个,即     
 I(1),V(5),X(10),L(50),C(100),D(500),M(1000)。     
   
 按照下面三条规则可以表示任意正整数。     
   
 重复数次:一个罗马数字重复几次,就表示这个数的几倍。     
   
 右加左减:在一个较大的罗马数字的右边记上一个较小的罗马数字,     
 表示大数字加小数字。在一个较大的数字的左边记上一个较小的罗     
 马数字,表示大数字减小数字。但是,左减不能跨越等级。     
 比如,99不可以用IC表示,用XCIX表示   
   
 基本数字Ⅰ、X    、C    中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个,比如40不能用XXXX,而用XL表示  
  设计一个函数 , 100( 包括 100) 以内的整数转换成罗马数字 , 超过 100 不考虑  
int    itor(int   n,char*   buf,int   bufLength)  
 其中,n是要转换的整数,buf是要输出的字符串,bufLength是buf的字符长度  
 成功,返回0,否则,返回    -1; 

1, Implement   a   string   class   in   C++   with   basic   functionality   like   comparison,   concatenation 串联,    input   and   output.   Please   also   provide   some   test   cases   and   using   scenarios   (sample   code   of   using   this   class).  
   
 Please    do   not   use   MFC,   STL   and   other   libraries   in   your   implementation.  
  
2, Implement   a   single-direction   linked   list   sorting   algorithm.   Please   first   define   the   data   structure   of   linked   list   and   then   implement   the   sorting   algorithm.    
   
     
   
 3.    (Optional)   what   is   your   understanding   of   web,   HTML   and   XML?   Please   don't   write   too   much   content,   feel   free   to   use   bullets.  
 

以下题目请注意错误处理:   
 1、用非递归算法实现求N个数的最大公约数   
 2、设计一数据结构,实现对单词(限于a到z的26个字母)的存储,并可实现查询,如输入"ab",则返回所有以ab开头的单词.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值