一道C语言程序题不是很懂

#include<stdio.h>

int main()

{

int i,x[]={1,3,5,7,9,11,13,15},*p=a+3;

for(i=3;i;i--)

switch(i)

{

case1:

case2:printf("%d",*p++);break;

case3:printf("%d",*(--p));

}

return 0;}

}

答案是5 5 7

过程不是很清楚

一开始,p指向了x[3]的位置,也就是指向了数值为7的位置。

接下来进行三次for循环。

第一次i = 3,根据switch,case(3)的时候需要输出*(--p)的内容,*(--p)是先将p减一个位置,再取他指向的数字。减一个位置,减到了x[2]的位置,这时候p的内容是5,所以第一次输出5.

第二次i = 2,根据switch,case(2)的时候需要输出*p++的内容,*p++是先取p指向的数字,再将p加一个位置。p目前指向x[2],里面的数字是5,所以第二次输出5,同时p++,现在p指向了x[3]的位置。

第三次i=1,根据switch,case(1)的时候,程序什么也不做。但是由于没有break语句,程序继续执行case(2)的指令*p++。和第二次一样,先取p的数值,再对p加一。目前p指向x[3],p的内容是7,所以第三次输出7.同时将p加一,现在p指向了x[4]。

第四次i=0,for循环里面for(i=3; i; i--)中的循环终止条件i已经为0了,所以循环结束。程序也就运行结束了。

综上所述,程序的输出内容分别是5,5,7.

您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632