微软笔试题和面试题答案解析与答案(一)

编辑:李老师高考志愿助手

  微软部分笔试题解析与答案,也许对你会有所启发

  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);

  p = &b[1];

  funb(p);

  for(i = 0; i<3; i++)

  printf("%d,",b);

  }

  【题目解析】

  结果是:

  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、你觉得下一代浏览器应该添加什么功能?

  【题目解析】

  当时随便写的,比如安全性,搜索功能等。

中国点击率最高的一篇文章 !