首页 > 试题广场 >

以下程序的输出结果是( )? main() {int

[单选题]
以下程序的输出结果是(   )?
int main() {
    int i, j, k, a = 3, b = 2;
    i = (--a == b++) ? --a : ++b;
    j = a++;
    k = b;
    printf("i=%d,j=%d,k=%d\n", i, j, k);
    return 0;
}

  • i=2,j=1,k=3
  • i=1,j=1,k=2
  • i=4,j=2,k=4
  • i=1,j=1,k=3
三目运算符也有短路问题
发表于 2018-12-03 19:56:26 回复(1)
更多回答
--a == b++ 由于a先自减所以a = 2和b=2相等为真,所以i = --a,而不会计算++b,所以b只加了一次
最后i=1,j=1,k=3
发表于 2018-05-06 23:29:21 回复(1)
发表于 2020-08-05 12:08:02 回复(0)
i--是把i作为表达式的结果,++i是把i+1作为表达式的结果,所以j=a++相当于j=a;a++
发表于 2022-10-21 18:24:27 回复(0)
该题考察有符号优先级,及前置++,后置++区别 i=(--a == b++)?--a:++b; ()优先级高 --a是2, b++是2,(--a == b++)是判断语句为真。则i=1,执行下一个--a是1 j=a++; k=b; 后置++,j=1,a=2,k=2
发表于 2017-09-07 15:17:05 回复(1)
20年前谭浩强是神,现在谭浩强就是司马东西!
发表于 2022-04-01 23:40:38 回复(0)
判断语句中的--a和b++执行的结果会被保留下来,并参与到后面的程序
发表于 2021-01-27 12:49:32 回复(0)
--a=b++ 所以a先--,a=2,然后a=b,b++,变成3 然后运算__a,a=1
发表于 2018-08-06 12:32:38 回复(0)
我选a,😭😭😭
编辑于 2024-04-02 09:48:59 回复(0)
三目运算符中判断时候的--是影响这个变量的而不是判断结束就恢复。
发表于 2021-09-29 08:48:45 回复(0)
a=3 ,——a先减1等于2 ,——a=b++ 后b++加1等于3 ,三目运算得——a,i=1,j=a++也等于1,k=3选D
发表于 2021-05-03 17:56:26 回复(0)
j=++a先算++再求表达式,j=a++先求表达式再++
发表于 2021-03-09 12:52:25 回复(0)
a++:表达式的值为a原先的值,a的值为原值再+1 --a:表达式的值为a减1的值,a的值为原值再-1
发表于 2018-07-23 19:59:18 回复(0)