阿里巴巴集团 2011届实习生招聘 技术笔试卷——C++部分
C&C++部分
选择题(每题5分)
{
int count=0; int m=779;
while(m)
{count++; m=m&(m-1);}
printf("%d\n",count); return 0;
}
请问最终输出的count值为( )
A: 3 B:4 C:5 D:8
注解by Snowwolf_Yang:这个题目实际上是求解m转换为二进行制形式中1的个数,m=m&(m-1)每执行一次就消除一个1
更多求解二进制形式中1的个数的方法 http://www.cnblogs.com/graphics/archive/2010/06/21/1752421.html
2、在32位操作系统中,我们定义如下变量
int (*n)[10];
请问调用函数sizeof(n),返回值为( ) A: 4 B:40 C:8 D:80
注解by Snowwolf_Yang:这是n实际是一个 int**类型的数据。所以n实际上是一个指针,指针即地址,对于32位机器来说一个地址为4字节。
3、int main(void)
{
int i=1; int j=i++;
if((i++>++j) && (++i == j)) i+=j;
printf("%d\n",i); return 0;
}
请问最终输出的i值为( ) A: 2 B:3 C:4 D:5
注解by Snowwolf_Yang:++i是使用i之前先使i加一,i++是使用i之后再加一.如果不能理解,那么可以理解为++i是先计算,再操作,i++是后计算,先操作。
是在执行完在if语句之前i = 2;j=1;if(i++>++j&&)是if(2>2)判断失败,后执行一次i+1,所以i=3
4、以下叙述中正确的是( )
A:可以在一个函数中定义另一个函数 B:main()函数必须放在其他函数之前
C:构成C++语言程序的基本单位是类 D:所有被调用的函数一定要在调用之前进行定义
注解by Snowwolf_Yang:很明显其他都是错的。A中,可以在一个函数中声明一个函数,但不能定义
综合题(每题15分)
有10亿个数,这些数的值都在0~1000万之内。请使用定义一个数据结构实现这些数字的存储,并实现函数 get_bigger_count( unsigned value ),输入一个值value,返回这10亿个数中比value值大的数的数目。
要求:不能使用STL,请尽量考虑性能与资源的占用。