首页 > 试题广场 >

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

[单选题]
以下程序的输出结果是()。
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
有括号先进行括号里面的运算左边是--a就是先进行自减运算a=2;后面是b++,先将b的值传入进行==比较,2等于2,然后进行b自加一等于3,然由于相等所以条件判读结果为--a所以a再次自减1为1赋给i,所以i为1;j=a++;同理将a传给j后a再自增所以传的是1给j,然后a自增为2;k等于b等于3.
发表于 2017-11-14 21:40:38 回复(1)
主要考点就是a++先执行语句再自加,++a先自加再执行语句
发表于 2017-09-25 10:01:46 回复(0)
考查条件表达式、赋值运算符、自增(减)运算符,the C programme-2.12指出:三目运算符优先级高于赋值运算符,低于自增(减)运算符;其中自增(减)运算符、赋值运算符按照从右向左结合规则、等号运算符及三目运算符按照从左向右的结合规则;
向条件表达式中括号内:
--a:2,b:2, 条件为真,执行--a;b++;//b:3,a:1
条件表达式简化为i =a;//即i=1;
j =a++,k=b;//a先赋值再自增,j=1,a=2,k=3;
结合规则不太好理解,有理解可补充~——~
编辑于 2020-04-28 11:15:51 回复(1)
最烦这种题了     想起了谭浩强的书里面的
发表于 2019-09-04 15:51:48 回复(1)
++b未执行
发表于 2017-09-20 22:41:22 回复(2)
这里的++b没有执行 是因为前面的已经为真了,故后面的就不需要执行
发表于 2023-01-09 09:06:45 回复(1)
为啥k=3呢,++b不执行了吧
发表于 2018-08-28 11:13:33 回复(0)
j为啥不是2?
发表于 2024-03-09 10:36:38 回复(0)
这个题对理解前置与后置++或--挺不错的,--a第一次执行后变成了2,b++第一次执行后还是2,然后三目运算符,传到下一层是--a,2-1变成了1,此时上面执行的b++在第四行被k接住成了3,因此输出就是1,1,3
发表于 2019-10-17 17:31:24 回复(0)