C语言:从键盘输入n(正整数n<10),在屏幕上显示从左上角起由外向里的右旋方阵,怎么写?
代码文本:
#include "stdio.h"
#include <stdlib.h>
int main(int argc,char *argv[]){
int **p,*q,n,i,t,x,m;
printf("Enter n(int 10>n>0)...\nn=");
if(scanf("%d",&n)==1 && n>0 && n<10){
q=(int *)malloc(sizeof(int)*n*n);
if(q && (p=(int **)malloc(sizeof(int *)*n))){
for(i=0;i<n;p[i]=q+n*i++);
for(m=n>>1,t=x=1;t<=m;t++){//形成顺旋
for(i=t-1;i<n-t;i++)//左至右
p[t-1][i]=x++;
for(i=t-1;i<n-t;i++)//上至下
p[i][n-t]=x++;
for(i=n-t;i>=t;i--)//右至左
p[n-t][i]=x++;
for(i=n-t;i>=t;i--)//下至上
p[i][t-1]=x++;
}
if(n&1)//奇数时处理最后一个数
p[t=n>>1][t]=x;
for(i=0;i<n;i++){
for(t=0;t<n;printf("%3d",p[i][t++]));
putchar('\n');
}
free(q);
free(p);
}
else{
printf("Application memory failure, exit...\n");
if(q)
free(q);
if(p)
free(p);
}
}
else
printf("Input error, exit...\n");
return 0;
}