微軟部分筆試題解析與答案,也許對你會有所啟發(fā)
1、求函數(shù)返回值,輸入x=9999;
int func(x)
{
int countx = 0;
while(x)
{
countx ++;
x = x&(x-1);
}
return countx;
}
【試題解析】
解這道題的時(shí)候,如果拿出一個(gè)二進(jìn)制數(shù)來分析就會容易的多了,x=x&(x-1)實(shí)際上就是把x的二進(jìn)制形式的最后一個(gè)“1”變成“0”,x的二進(jìn)制形式有多少個(gè)“1”循環(huán)就執(zhí)行多少次。
9999/256 = 39 余 15,把這兩個(gè)數(shù)分別轉(zhuǎn)化一下就很快了
39 = 32 + 4 + 2 +1 = 00100111
15 = 0F = 00001111
所以 9999=0010011100001111,共有8個(gè)1,答案就是 8 了
2、實(shí)現(xiàn)以下程序,以方便binary search.
.要有處理錯(cuò)誤語句
.隊(duì)列的分配的大小是固定的MAX_LEN,由第二個(gè)參數(shù)輸入
.不能復(fù)制隊(duì)列
insert (int *arr, //隊(duì)列
size_l len, // 隊(duì)列大小
size_l count, //隊(duì)列元素的數(shù)目
int varl //要處理的數(shù)據(jù)
)返回插入數(shù)據(jù)的索引
remove(int *arr,size_l len,size_l count,int varl)返回刪除元素的索引
search(int *arr,size_l len,size_l count,int varl)返回搜索道元素的索引
【試題解析】
略。數(shù)據(jù)結(jié)構(gòu)書上都有的。
3、堆棧R,從頂?shù)降?{2,4,6,8,10},逐個(gè)取出放入隊(duì)列Q中 ,再從Q中逐個(gè)取出放入R中,問現(xiàn)在堆棧R中從頂?shù)降椎捻樞颉?/p>
【試題解析】
這個(gè)也不用了吧,{10,8,6,4,2}
4、寫出程序的結(jié)果:___________
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);
}
【題目解析】
結(jié)果是:
4,3,4,2,3,9
(*p)++; 也就是a[0]++;
funa(p);中的 a[0]++ 是將 main 中的數(shù)組 a[0]++,
數(shù)組 a 中只有第一個(gè)元素加了兩次 1 ,
p = &b[1];把p指向了數(shù)組 b 的第二個(gè)元素
funb(p);中的 b[1]+=5 是將 main 中的數(shù)組 b[2]+=5
數(shù)組 b 中的第三個(gè)元素加了 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)
如果在函數(shù)體內(nèi)不需要改變字符串的內(nèi)容,最好加上 const 以免誤修改字符串內(nèi)容
、 char * pBuffer = NULL;
指針聲明的時(shí)候最好賦初值 NULL
、 if ( !pBuffer ) return -1;
開辟空間之后沒有檢查是否成功,沒有錯(cuò)誤檢查
、 if ( strlen(Str)>(MAX_PATH_LENGTH-1) ) return -2;
沒有檢查新開辟的空間能否容納傳進(jìn)來的字符串,否則有可能越界
、 *pBuffer
題中的原意是當(dāng)?shù)阶址┪驳臅r(shí)候跳出循環(huán),所以應(yīng)該是取字符串的內(nèi)容
、 同⑤
、 delete pBuffer; pBuffer=NULL;
沒有釋放新開辟的空間,會造成內(nèi)存泄漏
6、你覺得下一代瀏覽器應(yīng)該添加什么功能?
【題目解析】
當(dāng)時(shí)隨便寫的,比如安全性,搜索功能等。