赋值语句 程序员面试宝典(1)

来源:互联网 发布:阿里云服务器上传代码 编辑:程序博客网 时间:2024/05/20 17:27

准备花三个月左右的时间把程序员宝典看一遍。

面试例题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