C語言蛇形矩陣2
阿新 • • 發佈:2019-02-14
#include<stdio.h> #include<malloc.h> int main() { int **p=NULL; int n,i,j,k=1,q=0,line; printf("請輸入矩陣的行數:"); scanf("%d",&n); if((p=(int**)malloc(sizeof(int**)*n))==NULL)//根據行數分配記憶體,分配雙指標 { printf("不能分配記憶體!!!\n"); return 1; } for(i=0;i<n;i++) { if((p[i]=(int*)malloc(sizeof(int*)*n))==NULL)//為每一行分配指標,每一行有n個數 { printf("不能分配記憶體!!!\n"); return 1; } } for(i=0,j=0;k<=n*n;q++)//q是斜線上i+j相等的值,例如p[0][2],p[1][1],p[2][0]中q的值為2; { if(q%2==0)//如果q是偶數,就從下往上開始賦值 { for(line=i;line>=0;line--) { if(q-line<n)//防止陣列越界,比如宣告4*4的陣列當i=0,q=5時,q-line為5,越界了 p[line][q-line]=k++; } } else//如果q是奇數,就從上往下開始賦值 { for(line=0;line<=i;line++) { if(q-line<n) p[line][q-line]=k++; } } if(i<n-1) { i++;//防止陣列越界i,j的值最大為n-1,而q的值最大為2*(n-1) j++; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%-6d",p[i][j]); } printf("\n"); } for(i=0;i<n;i++)//分別釋放每一行的指標 { free(p[i]); p[i]=NULL; } free(p);//釋放雙指標 p=NULL; return 0; }