以下程序的输出结果是【 】。 #include <stdio.h> main() { int j,a[]={1,3,5,7,9,11,13,15},*P=a+5; for(j=3; j;j-) { swi

admin2009-08-25  22

问题 以下程序的输出结果是【 】。
#include <stdio.h>
   main()
     {  int j,a[]={1,3,5,7,9,11,13,15},*P=a+5;
         for(j=3; j;j-)
       {  switch(i)
             { case 1:
           case 2: printf("%d",*p++); break;
              case 3: printf("%d",* (-p));
            }
        }
    }

选项

答案9911

解析 switch语句的一般格式如下:
switch(表达式)
{case 常量表达式 1:语句1
case 常量表达式 2:语句2

case 常量表达式 n:语句n
default:语句n+1}
switch语句在执行的先计算表达式的值,当表达式的值与某—个case后面的常量表达式的值相等时,就执行此case后面的语句系列。由于“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断,所以当根据switch后面表达式的值找到匹配的入口标号时,就从此标号开始执行下去,不再进行判断,直到在执行某个case分支后,遇到break语句才会跳出switch结构,即终止switch语句的执行。
本题定义并初始化了一个一维数组a,同时将指针变量p指向了a[5]的地址。在for循环中,首先j=3,执行case3后面的语句,由于--p是将p的地址前移一位,所以*(--p)的值为a[4]的值,即输出9;当j=2时,执行case2后面的语句。由于 *p++中++与*同优先级,结合方向为自右而左,因此它等价于*(p++),作用是先得到p指向的变量的值(即*p),然后再使p+1赋给p,所以j=2时先输出a[4]的值9,再使得p指向a[5]的地址;当j=1时,执行case1后面的语句,由于case1后面没有终业语句,所以继续执行case2后面的语句,此时*p的值即a[5]的值,所以输出11,然后p地址后移。故本程序的输出结果为9911。
转载请注明原文地址:https://jikaoti.com/ti/CbI0FFFM
0

最新回复(0)