求解 C语言题(附带说明 谢谢)

下面程序的输出是_______请附带说明,谢谢了#definePR(ar)printf("%d\n",ar)main(){intj,a[]={1,3,5,7,9,11,1... 下面程序的输出是_______ 请附带说明,谢谢了

#define PR(ar) printf("%d\n",ar)
main()
{
int j,a[]={1,3,5,7,9,11,13,15},*p=a+5;
for(j=3;j;j--)
{
switch(j)
{
case 1:
case 2: PR(*p++);break;
case 3: PR(*(--p));
}
}
}
展开
 我来答
zhongjiacong
2010-05-20 · TA获得超过243个赞
知道小有建树答主
回答量:72
采纳率:0%
帮助的人:0
展开全部

#define PR(ar) printf("%d\n",ar)//PR是个打印宏函数

main()

{

   int j,a[]={1,3,5,7,9,11,13,15},*p=a+5;//*p等于a+5表示*p指向a[ 5 ],即11

   for(j=3;j;j--)//直到j减为0,停止,中间共循环了3次

     {

       switch(j)//3次循环,分别执行了case 3,case 2,case 1

       {

         case 1://因为后面没有break,所以继续向后执行

 //再次回到case2,此时仍然是使用值后再自加1,但此时使用值已被加1,所以指向了a[ 5 ],即11,然后自加1,遇break结束

         case 2: PR(*p++);break;//p++表示使用值后再自加1,所以使用值为上一次的值,即9,然后自加1,遇break结束

         case 3: PR(*(--p));//--p表示自减1后再使用值,所以自减后*(--p)指向a[ 5 ]前面那个数,即9,switch结束

       }

     }

   //扩展,此时printf( "%d\n", *p );会输出13

}

亲爱的老爷
2010-05-20 · TA获得超过264个赞
知道小有建树答主
回答量:164
采纳率:100%
帮助的人:176万
展开全部
#define PR(ar) printf("%d\n",ar) //宏定义 以后凡是出现PR(ar)的地方全用pirnt("%d\n",ar)代替
main()
{
int j,a[]={1,3,5,7,9,11,13,15},*p=a+5;//定义数组a,指针p指向数组的头+5那个数,也就是11
for(j=3;j;j--) //j=3开始
{
switch(j)
{
case 1://第三次case1没有语句执行case2,先打印,此时p指向11,在移动指针
case 2: PR(*p++);break;//第二次先打印,还是9,然后p+1,后break结束
case 3: PR(*(--p));//第一次执行printf("%d\n",(*--p))也就是先使p-1再打印,就是11的前一个9,然后结束
}
}
}

9
9
11
结束后指针指向13
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3d0a516d3
2010-05-20 · 超过15用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:45.4万
展开全部
输出:
9
9
11
int *p=a+5;此时p是指向数组a里面的第六个元素11;
进入for循环
j=3,case 3:输出*(--p),p自减一次,指向9,所以输出9;
j=2,case 2:输出*p++,先取值,再自加!所以输出9,break,继续下一次循 环,然后p自加,此时p指向11;
j=1,case 1,什么也没干,接着case 2,就输出11,break,跳出循环!

就是这样子的!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
贝阿小2B
2010-05-20
知道答主
回答量:39
采纳率:0%
帮助的人:22.4万
展开全部
9
9
11

我也是新手,不知道对不对。感觉是这样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式