(微软2004-11-13的笔试题解析)
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、你觉得下一代浏览器应该添加什么功能?
【题目解析】
??? 当时随便写的,比如安全性,
搜索功能等。
7、给出函数strcmp()的测试
方案 ?? int strcmp(const char * str1, const char *str2)
【题目解析】
??? 主要考查考虑
问题的全面型,我觉得有一个电冰箱测试的例子不错
?我写了几个(仅供参考):
????????????str1????????str2
????????????NULL????????NULL
????????????"a"?????????NULL
????????????NULL????????"a"
????????????"a"???????? "abc"
????????????"abc"???????"acd"
????????????".xj"???????"sefn"
8、测试一个 DVD Player,如果你仅有有限的时间,你会如何做?
【题目解析】
??? 只是说说我的思路,不是标准答案。首先测试基本功能