给定程序中,函数FUN的功能是建立一个N*M的矩阵,矩阵元素的规律是:最外层元素的值全部为1,从外向

发布时间:2021-03-07 22:55:47

给定程序中,函数FUN的功能是建立一个N*M的矩阵,矩阵元素的规律是:最外层元素的值全部为1,从外向内第二元素的值全部为2,第三层全部为3,一次类推,例如,若N=5,生成矩阵为:1 1 1 1 1 1 2 2 2 11 2 3 2 11 2 2 2 11 1 1 1 1 C语言程序

网友回答

#include
const int m=10,n=10;
void main()
{int i,j,x,y,p;
int a[n][m];
if(m======以下答案可供参考======
供参考答案1:
#include
#define N 5 //数组的行数
#define M 6 //数组的列数
main()
{int i,j,a[N][M]={0};//先将数组值均赋值为0
for(j=0;j{ for(i=0;i { if(a[j][i]==0)//if语句,当赋值为0时改变其值为第几维,不为0时不改变其值(下同)
a[j][i]=j+1;
if(a[N-1-j][i]==0)
a[N-1-j][i]=j+1;}
for(i=0;i {if(a[i][j]==0)
a[i][j]=j+1;
if(a[i][M-1-j]==0)
a[i][M-1-j]=j+1; }
}for(i=0;i{for(j=0;j printf(%2d,a[i][j]);//输出数组元素
printf(\n);}
}我想的方法是先将数组所有元素赋值为0;在将第一圈赋值为1;第二圈赋值为2 ............。
通过值不为0就不改变其值,等于0的就把其值赋值为其圈数!
不知道有什么简单的方法没?可以讨论讨论!
谢谢下面的朋友给我的修改,那样效率能更高!但我运行了一下,当N>2M时就不能正确输出了!可能还有你没有想到的地方。根据你的提示将程序修改如下,效率更高!
#include
#define N 15 //数组的行数
#define M 15 //数组的列数
main()
{int i,j,a[N][M]={0};//先将数组值均赋值为0
for(j=0;j{ for(i=j;i{if(a[j][i]==0)//if语句,当赋值为0时改变其值为第几维,不为0时不改变其值(下同)
a[j][i]=j+1;
if(a[N-1-j][i]==0)
a[N-1-j][i]=j+1;}
for(i=j;i {if(a[i][j]==0)
a[i][j]=j+1;
if(a[i][M-1-j]==0)
a[i][M-1-j]=j+1; }
}for(i=0;i{for(j=0;j printf(%2d,a[i][j]);//输出数组元素
printf(\n);}
}供参考答案2:#include
const int m=10,n=10;
void main()
{int i,j,x,y,p;
int a[n][m];
p=nfor(i=0;i{ x=i for(j=0;j { y=j
以上问题属网友观点,不代表本站立场,仅供参考!