准备花三个月左右的时间把程序员宝典看一遍。
面试例题1: Whatdoes the following program print?
#include <iostream>
Using namespacestd;
Int main()
{
Intx=2,y,z;
X*=(y=z=5);cout<<x<<endl;
Z=3;
X==(y=z);cout<<x<<endl;
X=(y==z);cout<<x<<endl;
X=(y&z);cout<<x<<endl;
X=(y&&z);cout<<x<<endl;
Y=4;
X=(y|z);cout<<x<<endl;
X=(y||z);cout<<x<<endl;
Return 0;
}
解析: X*=(y=z=5);将5赋值给z,z赋值给y,然后将x=x*y; 则 x=2*5=10;
X==(y=z); cout<<x<<endl; 将z赋值给y,然后再判断x是否和y相等,不论等不等都不改变x的值,x=10
X=(y==z); cout<<x<<endl;因为y此时等于z所以x=1;
X=(y&z); cout<<x<<endl; y和z都是3,011,两个011&011 按位与,则不变仍为011 则x=3
X=(y&&z);cout<<x<<endl; 判断y和z是否为真,此时y和z都是3 故y&&z==1则x=1
Y=4;
X=(y|z); cout<<x<<endl; 将y和z按位或,y=100z=011 则y|z=111=7 则x=7
X=(y||z); cout<<x<<endl; y和z有一个为真就为真则x=1;
综上: 输出的结果是 10 10 1 3 1 7 1
面试题2: whatdoes the following program print?
#include <iostream>
Using namespace std;
Int Vac=3;
Int main()
{
Int Vac=10;
::Vac++;
Cout<<::Vac<<endl;
Cout<<Vac<<endl;
Return 0;
}
4 10
What will be the output of the followingcode(assume the necessary include files are present)?
Int i=3,j=4;
i?i++:++j;
printf(“%d %d\n”,i,j);
4,4
面试题4: 一下的代码输出什么?
Int i=1,j=2;
Int k=i+++j;
Cout<<k<<endl;
解析: i+++j首先结合i++,然后再+j,但是i++是事后计算的,
也就是说首先计算i+j然后i++;所以k的和为1+2=3;然后i才自增到2,所以结果为3
如果是intk=++i+j;则i先自增,然后再加上j。结果为4
面试题5:x=x+1,x+=1,x++,哪个效率高? 为什么?
解析: x=x+1效率最低,因为他的执行过程如下:
(1) 读取右x的地址
(2) X+1
(3) 读取做x的地址,编译器并不认为左右x的地址相同
(4) 将右值传递给左边的
X+=1其次,其执行过程如下
(1) 读取右x的地址
(2) X+1
(3) 将得到的值在传递给x(因为x的地址已经读出)
X+=效率最高,其执行过程
(1) 读取右x的地址
(2) X自增1
面试题6
What will be the output of the following Ccode?
#define product(x) (x*x)
Int main()
{
Inti=3,j,k;
J=product(i++);
K=project(++i);
Printf(“j=%d,k=%d”,j,k);
Return 0;
}
解析:project(i++)=i++*i++; i=3 所以j=9,但是i已经累计到了5了。
Project(++i)=++i*++i,要求先累加i然后再相乘,所以此时i=7,49;
面试题 7
If there are “int a=5,b=3;”, The value of aand b are ___ and ___ after execute “!a&&b++”.
解析:因为!a为假,所以!a&&b++为假,!a后面的运算都不计算了。所以a=5 b=3