问题 填空题

以下程序的输出结果是 【9】 。 #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:语句1case 常量表达式 2:语句2…case 常量表达式 n:语句ndefault:语句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。

判断题
多项选择题