急~~~请问如何用c语言将给定二维数组加上一个全部为1的外框?

来源:百度知道 编辑:UC知道 时间:2024/05/15 06:23:46
如a[3][3]=2 3 4
2 1 3
4 8 9
用c语言将上数组变成a[5][5]=1 1 1 1 1
1 2 3 4 1
1 2 1 3 1
1 4 8 9 1
1 1 1 1 1
急~~跪谢~~~

我的一个习惯:首先给你一个思路:
(1)你有一个已知二维数组:OldAarry[m][n].(m,n是常量)。
(2)加一个“1”字的外套,就表示会变成新的二维数组:NewArray[m+2][n+2].此时你可以用“1”来初始化整个新数组。
memset(NewArray,"1",sizeof(NewArray));//此函数memset为C库函数,你不会用的话,可查MSDN。
(3) 现在将旧的数组填充进来。如下
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
NewArray[i][j]=OldArray[i-1][j-1];
(4) 现在你可以打印你的新数组NewArray[m+2][n+2]了。
当然,你会打印你的旧数组,就一定会打印新数组了,我就是写具体代码了。

当然了,还有一种笨方法,就是按一类一类的元素一个一个填入,此法效率太低了,不可能用。所以不说了。
回答完毕。

void Fun(int **p, int row, int col, int **q)
{
for (int i=0; i<row+2; i++)
{
for (int j=0; j<col+2; j++)
{
if ((i==0)||(j==0)||(i==row+1)||(j==col+1))
*(int *)q = 1;
else
{
*(int *)q = *(int *)p;
p++;
}
q++;
}
}

}
int main()
{
int a[3][3] = {2, 3, 4, 2, 1, 3, 4, 8, 9};
int b[5][5];
memset(b, 0, 5*5*sizeof(int));
Fun((int **)a,