更多“有以下程序:main(){int i=1, j=2, k=3; if(i++==1&&(++j==3||k++==3))printf("%d%d%d\n" ”相关问题
  • 第1题:

    下列程序的输出结果是( )。 main( ) {int i=1,j=2,k=3; if(i++= =1(++j= =3= =‖k++= =3)) printf("%d%d%d\n",i,J,k); )

    A.1 2 3

    B.2 3 4

    C.2 2 3

    D.2 3 3


    正确答案:D
    本题考查自增运算符“++”、逻辑与运算符“”和逻辑或运算符“‖”。自增运算符“++”出现在变量之前,表示先使用变量的值加1,再使用变量的值进行运算;出现在变量之后,表示先使用变量的值进行运算,再使用变量的值加l。当逻辑与运算符“”两边的运算对象都为真时,逻辑表达式的值才为真;当逻辑或运算符“‖”只要一个值为1,值就为l。根据运算符的优先级,题中应先计算内层括号中的值。++j是先自加后运算,因此运算时j的值等于3,所以表达式++j=3成立,即表达式的值为l;1与任何数都为进行或(11)运算,结果都为1,因此k一3的表达式i++是先运算后自加,因此运算时i为1,所以i++=1成立,自加1后i=2。if语句的条件为真即“1”,所以输出i、j、k的值分别是2,3,3。

  • 第2题:

    下列程序的输出结果是( )。

    main()

    {int i=1,j=2,k=3;

    if(i++==1&&(++j=3‖k++==3))printf("%d%d%d\n",i,j,k);

    }

    A.1 2 3

    B.2 3 4

    C.2 2 3

    D.2 3 3


    正确答案:D
    解析:本题考查自增运算符“++”、逻辑与运算符“&&”和逻辑或运算符“‖”。自增运算符“++”,出现在变量之前(如题中的++n),表示先使变量的值加1,再使用变量的值进行运算;出现在变量之后(如题中的n++),表示先使用变量的值进行运算,再使变量的值加1。当逻辑与运算符"&&"两边的运算对象都为真时,逻辑表达式的值才为真;当逻辑或运算符"‖"左边的运算对象为真时,其值就为真,不用计算其右边的运算对象的值。所以根据运算符的优先级,题中应先计算内层括号中的值。++j是先自加后运算,因此运算时,i的值等于3,所以表达式++j==3成立,即表达式的值为¨由于1与任何数都为进行或(‖)运算,结果都为1,因此k=3;最后计算“&&”之前的表达式,i++是先运算后自加,因此运算时i为1,所以i+==1成立,自加1后i=2。if语句的条件为真即"1",所以输出i、j、k的值分别是2,3,3。

  • 第3题:

    下列程序的输出结果是( )。 main() { int i=1,j=2,k=3; if(i++= =1&&(++j= =3‖k++ = =3)) printf("%d %d %d\n",i,j,k); }

    A.1 2 3

    B.2 3 4

    C.2 2 3

    D.2 3 3


    正确答案:D
    解析:本题考查自增运算符“++”、逻辑与运算符“&&”和逻辑或运算符“‖”。自增运算符“++”,出现在变量之前(如题中的中++n),表示先使变量的值加1,再使用变量的值进行运算:出现在变量之后(如题中的n++),表示先使用变量的值进行运算,再使变量的值加1。当逻辑与运算符“&&”两边的运算对象都为真时,逻辑表达式的值才为真;当逻辑或运算符“‖”左边的运算对象为真时,其值就为真,不用计算其右边的运算对象的值.所以根据运算符的优先级,题中应先计算内层括号中的值。++j是先自加后运算,因此运算时j的值等于3,所以表达式++j=3成立,即表达式的值为1;由于1与任何数都为进行或(‖)运算,结果都为1,因此k=3;最后计算“&&”之前的表达式,i++是先运算后自加,因此运算时i为1,所以i++=1成立,自加1后i=2。if语句的条件为真即“1”,所以输出i、j、k的值分别是2,3,3。

  • 第4题:

    有以下程序: main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf("%d%d%d\n",i,j,k); } 程序运行后的输出结果是 ______。

    A.1 2 3

    B.2 3 4

    C.2 2 3

    D.2 3 3


    正确答案:D
    解析:执行“i++=1&&(++j=||k++=3)”时,表达式“i++=1”的值为真,其值为1,表达式“++j=3”的值为真,根据短路原理,右边的表达式“k++=3”不再进行运算,括号中表达的值为1,作与运算后整个表达式的值也为1,输出i,j,k时,由于未执行过k,所以它们的值分别为为2,3,3。

  • 第5题:

    有以下程序 main() { int i=1, j=2,k=3; if(i++ == l && (++j==3|| k++==3)) printf("%d %d %d\n",i,j,k); 程序运行后的输出结果是

    A.1 2 3

    B.2 3 4

    C.2 2 3

    D.2 3 3


    正确答案:D
    解析:在计算由&&或‖组成的逻辑表达式时一定要注意“短路”现象:&&是逻辑与,要两边的运算分量同时为真的时候表达式的值才为真,否则为假,若&&左边的运算分量为假的时候,无论&&右边的运算分量如何,整个&&表达式的结果都为假,因此C语言会忽略&&右边的表达式;‖(逻辑或)也有同样现象,当‖左边为真时将忽略右边的表达式。本题的关键点在于逻辑表达式i++==1&&(++j)==3‖k++==3的计算。因为‖的优先级最低,所以先计算‖左边的于表达式i++==1&&(++j)==3,而该表达式中&&的优先级最低,所以先计算i++==1,==的优先级低于++,所以最先计算的表达式为i++,该表达式的值为i自增之前的值1,因此子表达式i++==1等价于1==1结果为“真”,此时的&&运算没有被“短路”继续运算右边的(++j)==3子表达式,因为表达式(++j)的值为6自增之后的值3,所以子表达式(++j)==3等价于3==3结果还是“真”。“真”&&“真”的结果为“真”,即‖运算符的左边运算分量为“真”!注意,此时满足了“短路”的条件,C语言将忽略||右边的表达式,而将整个i++==1&&(++j)==3‖k++==3表达式的结果判定为“真”,子表达式k++==3没有被计算,即变量k没有自增!而i和j在前面均有得到自增1的机会,所以,4个选项中选项D符合题意。