您好,登錄后才能下訂單哦!
首先,說到輸出矩陣無論什么水平的人都會認(rèn)為使用數(shù)組最為方便,所以這里說明的是利用多維數(shù)組的實現(xiàn)。
首先是算法需要的變量定義
int i,j,n,sum;
printf("請輸入矩陣的行列長度:\n");
scanf("%d",&n);
int juzhen[n][n];
memset(juzhen,0,sizeof(juzhen));
sum=1;
其次就是核心算法,此程序核心在于如何寫入元素到定義的數(shù)組中,要實現(xiàn)回型的數(shù)據(jù)遞增,就必須使用不同的方法的輸入不同方向遞增的數(shù)據(jù);
還有這里要注意數(shù)組的定義,是從0號下標(biāo)開始填入元素(當(dāng)然從下標(biāo)為一的元素開始也是可以的,此方法類似不予說明);
另外在換方向輸入的時候還要注意前一方向已經(jīng)輸入數(shù)據(jù)的數(shù)組元素不能再輸入,于是使用if語句以區(qū)分是否填充過數(shù)據(jù)(這里需要提前將數(shù)組全部置零,使用了memset函數(shù),此函數(shù)需要頭文件string.h)。
這里定義了for語句實現(xiàn)的四種方向的輸入
for(i=0;i<n/2;i++)
{
for(j=0;j<n-1;j++)//向右
{
if(juzhen[i][j]==0)
juzhen[i][j]=sum++;
}
for(j=i;j<n-1;j++)//向下
{
if(juzhen[j][n-1-i]==0)
juzhen[j][n-1-i]=sum++;
}
for(j=n-i-1;j>i;j--)//向左
{
if(juzhen[n-1-i][j]==0)
juzhen[n-1-i][j]=sum++;
}
for(j=n-1-i;j>i;j--)//向上
{
if(juzhen[j][i]==0)
juzhen[j][i]=sum++;
}
最后在對輸入的數(shù)字做區(qū)分,當(dāng)N階矩陣是一個偶數(shù)階的矩陣時沒有矩陣中心元素,但是奇數(shù)階矩陣有,語句如下
if(n%2==1)
juzhen[(n-1)/2][(n-1)/2]=sum++;
最后對數(shù)組進(jìn)行輸出
for(i=0;i<=n-1;i++)
for(j=0;j<=n-1;j++)
{
printf("%4d",juzhen[i][j]);
if(j==n-1)
printf("\n");
}
完整源代碼如下
```
#include<string.h>
#include<stdio.h>
int main()
{
int i,j,n,sum;
printf("請輸入矩陣的行列長度:\n");
scanf("%d",&n);
int juzhen[n][n];
memset(juzhen,0,sizeof(juzhen));
sum=1;
for(i=0;i<n/2;i++)
{
for(j=0;j<n-1;j++)//向右
{
if(juzhen[i][j]==0)
juzhen[i][j]=sum++;
}
for(j=i;j<n-1;j++)//向下
{
if(juzhen[j][n-1-i]==0)
juzhen[j][n-1-i]=sum++;
}
for(j=n-i-1;j>i;j--)//向左
{
if(juzhen[n-1-i][j]==0)
juzhen[n-1-i][j]=sum++;
}
for(j=n-1-i;j>i;j--)//向上
{
if(juzhen[j][i]==0)
juzhen[j][i]=sum++;
}
}
if(n%2==1)
juzhen[(n-1)/2][(n-1)/2]=sum++;
for(i=0;i<=n-1;i++)
for(j=0;j<=n-1;j++)
{
printf("%4d",juzhen[i][j]);
if(j==n-1)
printf("\n");
}
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。