C语言的学习问题 31(P183-8)

来源:百度知道 编辑:UC知道 时间:2024/06/22 08:14:38
求输出结果啊
希望说得详细一点啊
谢谢

#include <stdio.h>
#define PR(ar) printf("ar=%d",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));
}
}

谢谢啊

#include <stdio.h>/*如果程序中用到系统提供的输入输出函数*/
#define PR(ar) printf("ar=%d",ar)/*设一个预处理输出命令*/
main()
{ int j,a[]={1,3,5,7,9,11,13,15}, *p=a+5; /*进入mian窗口函数进行计算,有整型的j和整型一维数组a[],还有一个指针*p。*/
for (j=3;j;j--)/*接下来进入for循环,把j=3开始,限制条件没有,j--也就是先调用现在的j然后做j=j-1。*/
switch(j) /*然后是switch多分支判断语句,当j=1时无事继续,当j=2时调用预处理命令并做*p++和break跳出,当j=3时调用预处理命令并作*(--p)*/
{ case 1:
case 2:PR(*P++); break;
case 3:pr(*(--p));
}
}
我不明白你的*p=a+5是什么意思还是*p=a[5]?还是说*p=a+5是*p=a[4]因为a[]是从0开始去的0、1、2、3、4整好5个
要是我认为的那样走第一遍循环的话因为*p=a[4],j=3所以直接走到case 3:pr(*(--p));则*p=a[3],pr(ar)=pr(a[3]),ar=a[3],a[3]=7打印7
走第二遍循环*p=a[3],j=2所以直接走到case 2:PR(*P++); break;则先取*p在做*P++ ,*p=a[3],pr(ar)=pr(a[3]),ar=a[3],a[3]=7打印7因为有break所以跳出此次循环
走第三遍循环*p=a[4],j=1所以直接走到case 1:因为case 1:无作用走下一个选择case 2:PR(*P++); break;则先取*p在做*P++ ,*p=a[4],pr(ar)=pr(a[4]),ar=a[4],a[4]=9打印9因为有break所以跳出此次循环
走第四遍