用指针法对二维数组求~~~急急急~~C语言高手帮忙啊~~

来源:百度知道 编辑:UC知道 时间:2024/05/28 18:13:00
用指针法对二维数组求和。用指针访问二维数组元素,求下面4×5二维数组外围元素的累加和:
37 13 15 21 90
62 19 11 22 18
33 15 19 65 77
77 26 81 16 69
编程分析
定义二维数组a[][],定义指针变量p,使p指向a[0],则指针p+i*N+j指向M*N二维数组元素a[i][j],即 a[i][j]与*(p+i*N+j)等价
对外围数组求和,可以分为两个步骤。首先对首列和末列的所有元素求和,然后再累加除四角元素之外的首行和末行的元素。
编写程序并验证:

#include"stdio.h"
main()
{
int a[4][5]={37,13,15,21,90,62,19,11,22,18,33,15,19,65,77,77,26,81,16,69 };
int *p,sum=0,i,j;

p=a[0];
for(i=0;i<4;i++) //第一列求值
sum+=*(p+i);
for(i=0;i<4;i++) //第四列求值
sum+=*(p+i)+4;
for(j=0;j<5;j++) //第一行求值
sum+=*p+j;
for(j=0;j<5;j++)//第四行求值
sum+=*(p+3)+j;

sum=sum-*p-(*p+4)-*(p+3)-(*(p+3)+4); //处理边界问题,从左到右依次是a[0][0],a[0][4],a[3][0],a[3][4]
printf("%d\n",sum);
}

main()
{
int a[][5]={{37,13,15,21,90},
{62,19,11,22,18},
{33,15,19,65,77},
{77,26,81,16,69}
};
int i,j,sum,*p[];
p=a;
sum=0;
for(i=0;i<4;i++)
for(j=0;j<5;j++)
{
if(j==0||j==5)
sum+=*{p[i]+j};
}
for(i=0;i<4;i++)
for(j=0;j<5;j++)
{
if((i==0||i==3)&&(j>0&&j<4))
sum+=*(p[i]+j);
}