程序设计基础概念1

程序设计基础概念之

赋值语句:

面试例题1: 下面C++代码的输出结果是什么?

//C/C++ code
int i = 1;
void main()
{
	int i = i;
}
A.main()里的i是一个未定义值
B.main()里的i值为1
C.编译器不允许这种做法
D.main()里的i值为0

解析:当面试者看到int i=i;的时候,可能会认为编译器不允许这种写法,即无法通过编译。
但是在C++中,这样做是完全合法的,只是不合理而已。下面来分析是如何不合理的,在int i=i,
i变量从声明的那一刻就是可见的了,但是main()里面的i不是1,因为它与外面的i无关,
所以就不能用i去初始化i,因此main()里面的i(指的是右边的i)是一个未定义的值。
在VS2017中编译通过,不能运行,但是有编译警告:
warning C4700: 使用了未初始化的局部变量“i”

所以答案是 A

面试例题2:下面程序的输出结果是多少?

#include <iostream>
using namespace std;
int main()
{ 
	int x = 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是10 。
	 x == (y=z) 是先把z的值赋值给y,在比较x与y的值是否相等,无论x与y的值是否相等,
		x的值都不会改变,所以x还是10 。
	 x = (y==z) 是先判断y与z的值是否相等,如果相等,结果是1,赋值给x;
		否则,结果是0,赋值给x。得到x是1 。
	 x = (y&z) 是先y与z进行按位与运算。再将结果赋值给x,所以x是3 。
	 x = (y&&z) 是先把y与z进行与运算,当且仅当y与z都为真时,返回一个布尔值,
		x为真,也就是1 。
	 x = (y|z) 是先把y与z进行按位或运算,再把结果赋值给x,所以x结果是7 。
	 x = (y||z) 是将y与z进行或运算,再将结果赋值给x,所以x的值是1 。

所以答案是: 10,10,1,3,1,7,1。

面试例题3:以下代码结果是多少?

#include <iostream>
using namespace std;
int func(int x)
{
	int count = 0;
	while (x)
	{
		count++;
		x = x & (x - 1);
	}
	return count;
}

int main()
{
	cout << func(9999) << endl;
	return 0;
}

解析:这里func函数的作用是返回 x转换成二进制后,其中含有1的数量。
	 只要知道这一点,就很好解答了。将9999转换成二进制是:10011100001111,
	 1的个数是8。

所以答案是8

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值