程序分析问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 11:43:07
下面程序的输出结果是什么?如何分析?
main()
{ int i,b,c,a[]={1,10,-3,-21,7,13},*p_b,*p_c;
b=c=1;p_b=p_c=a;
for (i=1;i<6;i++)
{ if(b<*(a+i)) {b=*(a+i);p_b=&a[i];}
If(c>*(a+i)) {c=*(a+i);p_c=&a[i];}
}
i=*a; *a=*p;*p_b=i; i=*(a+5); *(a+5)=*p_c; *p_c=i;
print(“%d,%d, %d, %d, %d, %d\n”,a[0] ,a[1] ,a[2] ,a[3] ,a[4] ,a[5]);
}

为了清楚简单的回答你的问题,我就直接根据你的程序来回答了。

根据你给出的源代码,我稍微改了下:
#include <stdio.h>

void main()
{
int i,b,c,a[]={1,10,-3,-21,7,13},*p_b,*p_c;
b=c=1;p_b=p_c=a;
for(i=1;i<6;i++) //此函数主要是想找出数组a的最大和最小值
{
if(b<*(a+i))
{
b=*(a+i); //找到a中最大值赋给b
p_b=&a[i]; //并用p_b指向最大值a[i]的地址
}
if(c>*(a+i))
{
c=*(a+i); //找到a中最小值赋给c
p_c=&a[i]; //并用p_c指向最小值a[i]的地址
}
}
i = *a; //把a[0]的值(a[0] = 1)赋给i
//啰嗦一句:*a与a[0]等价
//*(a + i)与a[i]等价
*a=*p_b; //将a中最大值赋给a[0](由于p_b是a中最大值的地址,
//所以*p_b就是a中最大值的值)
*p_b=i; //再将初始a[0]中的值(a[0] = 1)赋给p_b
i=*(a+5); //让i = a[5](a[5] = 13)
*(a+5)=*p_c; //把a中最小值赋给a[5]
*p_c=i;