有以下程序 #include <stdio.h> main() { int x=1, y=0, a=0, b=0; switch ( x ) { case 1: switc

admin2021-04-28  46

问题 有以下程序
    #include <stdio.h>
    main()
    {  int   x=1, y=0, a=0, b=0;
       switch ( x )
       {  case 1:
            switch(y)
            {  case 0:  a++;  break;
               case 1:  b++;  break;
            }
          case 2:  a++;  b++;  break;
          case 3:  a++;  b++;
       }
       printf("a=%d, b=%d\n", a, b);
    }
程序的运行结果是

选项 A、a=2,b=2
B、a=2,b=1
C、a=1,b=1
D、a=1,b=0

答案B

解析 C语言还提供了一种用于多分支选择的switch语句,计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。
x=1;进入第一层switch,y=0;进入第二层switch,执行a++;break;后a=1;在进入case 2,(这里case 1:没有break,)执行了a++,b++,由于存在break,则跳出switch,得到a=2,b=1,因此答案为B选项。
左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。1、后置自增运算:k++表示先运算,后自加。 2、前置自增运算:++k表示先自加,后运算。因此,表达式x=0,x+10,x++的计算过程为首先赋值x=0,然后将x加10,但是并不对x进行赋值,最后计算x++,并,根据后置自增运算的计算结果,即为x=0.0。,故答案为C选项。
转载请注明原文地址:https://kaotiyun.com/show/qTtp777K
0

最新回复(0)