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

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

    A.1,1,2

    B.2,2,1

    C.2,2,2

    D.2,2,3


    正确答案:C
    解析:首先计算if语句后面的表达式值,先计算运算符&&前面括号里的“||”运算。在“||”运算中先计算j++,值为1(j的值为2),为真,后面的k++将不再计算,k的值依旧为2。计算&&后面的表达式i++,值为1(i的值变为2)。整个表达式的值为真,所以执行后面的输出语句,最后输出的i、j和k的值为2、2和2。

  • 第2题:

    有以下程序 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符合题意。

  • 第3题:

    有以下程序 main() { int i=1,j=1,k=2; if((j++‖k++)&&i++) printf("%d,%d,%dn",i,j,k); } 执行后输出结果是()。

    A.1,1,2

    B.2,2,1

    C.2,2,2

    D.2,2,3


    C 解析:程序中for循环了三次,第一次i=O,执行switch语句中case0:分支,直到遇到default语句,退出switch,这里共执行了3个输出语句分别输出0、0、0,第二次循环i=1,switch语句中没有匹配的分支,故只执行default语句输出1,退出switch语句;第三次循环i=2,从switch语句中的case2:开始执行,共执行了两个输出语句输出2、2。最后输出的结果为000122。所以, 4个选项中选项C符合题意。

  • 第4题:

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

    A.1,1,2

    B.2,2,1

    C.2,2,2

    D.2,2,3


    正确答案:C
    解析:首先计算if语句后面的表达式值,先计算运算符&&前面括号里的||运算。在||运算中先计算j++,值为1(j的值为2),为真,后面的k++将不再计算,k的值依旧为2。计算&&后面的表达式i++,值为1(i的值变为2)。整个表达式的值为真,所以执行后面的输出语句,最后输出的i,j和k的值为2、2和2。所以,C选项为所选。

  • 第5题:

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

    A.1,1,2

    B.2,2,1

    C.2,2,2

    D.2,2,3


    正确答案:C
    解析:该题目的关键是要搞清楚“&&”和“‖”两个逻辑运算符的运算功能。运算符“&&”和“‖”是双目运算符,要求有两个运算量。且规定逻辑与运算中,只有前面运算量的值为真时,才需要判别后面的值。只要前面为假,就不必判别后面的值。而逻辑或则为只要前为真,就不必判别后面的值;只有前为假,才判别后。本题中j++值为真,不进行k++的运算,所以k的值保持不变。