📅  最后修改于: 2023-12-03 15:12:35.781000             🧑  作者: Mango
这是关于 GATE CS 2008 的第 15 个问题,考察了编程知识。
考虑以下 C++ 程序:
#include<iostream>
int main()
{
int i=-3,j=2,k=0,m;
m=++i&&++j||++k;
std::cout<<"i="<<i<<", j="<<j<<", k="<<k<<", m="<<m<<"\n";
return 0;
}
该程序的输出是什么?
i=-2, j=2, k=0, m=1
i=-2, j=3, k=1, m=1
i=-2, j=3, k=0, m=1
i=-2, j=2, k=1, m=1
这段代码使用了自增运算符和逻辑运算符。
首先,i=-3
,所以 ++i
的值是 -2
。同样地,j
的值是 2
,所以 ++j
的值是 3
。
然后,这是一个逻辑或运算符,||
。基于先前的运算,++i
不为零,因此整个表达式为 "true || ++k"
。true ||
部分被短路,不需要再执行。
所以,k
的值不会改变,仍为 0
,而 m
的值是 1
。
答案是选项 3。
可以使用上面的分析,返回一个类似下面的markdown格式的字符串:
# 门 | GATE CS 2008 |问题15
这是关于 GATE CS 2008 的第 15 个问题,考察了编程知识。
## 问题描述
考虑以下 C++ 程序:
```c++
#include<iostream>
int main()
{
int i=-3,j=2,k=0,m;
m=++i&&++j||++k;
std::cout<<"i="<<i<<", j="<<j<<", k="<<k<<", m="<<m<<"\n";
return 0;
}
该程序的输出是什么?
i=-2, j=2, k=0, m=1
i=-2, j=3, k=1, m=1
i=-2, j=3, k=0, m=1
i=-2, j=2, k=1, m=1
这段代码使用了自增运算符和逻辑运算符。
首先,i=-3
,所以 ++i
的值是 -2
。同样地,j
的值是 2
,所以 ++j
的值是 3
。
然后,这是一个逻辑或运算符,||
。基于先前的运算,++i
不为零,因此整个表达式为 "true || ++k"
。true ||
部分被短路,不需要再执行。
所以,k
的值不会改变,仍为 0
,而 m
的值是 1
。
答案是选项 3。