📜  门| GATE CS 2008 |问题15(1)

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

门 | GATE CS 2008 |问题15

这是关于 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;
}

该程序的输出是什么?

  1. i=-2, j=2, k=0, m=1
  2. i=-2, j=3, k=1, m=1
  3. i=-2, j=3, k=0, m=1
  4. 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格式

可以使用上面的分析,返回一个类似下面的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;
}

该程序的输出是什么?

  1. i=-2, j=2, k=0, m=1
  2. i=-2, j=3, k=1, m=1
  3. i=-2, j=3, k=0, m=1
  4. 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。