📜  门| GATE-IT-2004 |问题 23(1)

📅  最后修改于: 2023-12-03 15:28:46.067000             🧑  作者: Mango

门(GATE)-IT-2004问题23

该问题出现在2004年的门(GATE)计算机科学和信息技术(IT)考试中,是一道与运算符相关的问题。

题目描述

考虑以下代码片段:

int a = 0, b = 1, c = 2, d = 3;
printf("%d", a++ && b++ || c++ && d++);
printf("%d %d %d %d", a, b, c, d);

输出结果是什么?

(A) 1 1 2 3

(B) 1 1 3 4

(C) 0 2 2 4

(D) 0 1 3 4

解题思路

这是一道关于逻辑运算符的问题,需要了解它们的运算规则。

先看第一行:

printf("%d", a++ && b++ || c++ && d++);

运算符的优先级从高到低依次是:递增/递减、算术运算符、关系运算符、逻辑运算符、赋值运算符。

首先执行 a++ ,结果为0,a变量的值变为1。接着执行 && 运算符,因为左边的操作数为0,所以整个表达式的值为0,不再继续执行右边的 b++ 。因此 b 还是1, c 的值变为2, d 的值不变。接着执行 || 运算符,因为左边的表达式的值为0,所以继续执行右边的 c++ && d++ ,最终得到的结果为1。

所以第一行的输出结果为1。

再看第二行:

printf("%d %d %d %d", a, b, c, d);

因为第一行中的 a++b++ 已经被执行了,所以 a 的值已经变成了1, b 的值也变成了1。

第一个表达式为 0 || c++ && d++ ,因为左边的表达式为0,所以右边的 c++ && d++ 不会执行,所以 c 的值不变, d 的值不变,还是3。

因此第二行的输出结果为 1 1 2 3 ,选项 A 是正确的。

答案

选项 (A) 1 1 2 3 是正确的。

参考资料