C 程序的输出 |第 49 组(运营商)
Perquisite : C 中的运算符
1.以下程序的输出是什么?
#include
int main(void)
{
int i = 40 >> 5 << 3 >> 2 << 1;
printf("%d", i);
return 0;
}
选项:
1. 4 2. 0
3. 40 4. 1
Answer : (1)
说明:答案是选项(1)。这里首先 40 >> 5 表示 40 / 32 即 1,然后 1 2 带来 2,然后 2 << 1 变成 4。
有关详细信息,请参阅位移运算符
2.以下程序的输出是什么?
#include
int main(void)
{
int i = 10 > 9 > 7 < 8;
printf("%d", i);
return 0;
}
选项:
1. 1 2. 20
3. 10 4. 0
Answer : (1)
说明:答案是选项(1)。这里 10 > 9 返回 1,然后 1>7 返回 0 然后 0<8 返回 1。
3.下面程序的输出是什么?
#include
int main(void)
{
int x = 4, y = 4, z = 4;
if (x == y == z) {
printf("Hello");
} else {
printf("GEEKS");
}
return 0;
}
选项:
1. Hello 2. 0
3. 1 4. GEEKS
Answer : (4)
说明:答案是选项(4)。这里 x == y 比较给出 1,返回的 1 与 z 进行比较,z 为假并返回 0。因此它打印 GEEKS。
4.以下程序的输出是什么?
#include
int main(void)
{
int x = 10, y = 15;
x ^= y ^= x ^= y;
printf("%d%d", x, y);
return 0;
}
选项:
1. 44 2. 1510
3. 55 4. 45
Answer : (2)
说明:答案是选项(2)。在上面的例子中,x 和 y 使用复合赋值运算符在单行语句中互换,其计算顺序是从右到左。因此,值 y 与 x 异或并将结果分配给 x(即 x=15)。在第二个复合赋值运算符, 5 与 y 进行异或运算,结果赋值给 y(即 y=5)。最后,y 再次与 x 异或,结果分配给 x,x 变为 10。因此,两者交换。
5.以下程序的输出是什么?
#include
int main(void)
{
int a;
int i = 4;
a = 24 || --i;
printf("%d %d", a, i);
return 0;
}
选项:
1. 1 4 2. 4 4
3. 4 1 4. 1 1
Answer : (1)
说明:答案是选项(1)。这里的 24||–i 返回 1 因为逻辑 ||如果任何一个条件为真,运算符返回 1,并且当第一个条件返回真时不计算 –i。