
c语言高手请进,请用C语言帮小弟搞定它,不胜感激!!!如果全对,加分100!!!
方阵的主对角线之上称为“上三角”,设计一个用于填充n(n从键盘读入,约定其取值范围为3~20)阶方阵的上三角区域的程序。填充的规则是:使用1,2,3……的自然数列,从左上角开始,按照顺时针方向螺旋填充。输出时要求每个数据宽度为4、右对齐。
编程可用素材:printf("Please input n: ")、printf("\nResult is:\n")、printf("%4d"...、printf("\n")。
程序的运行效果应类似地如图1所示,图1中的第1个6是从键盘输入的内容。 展开
#include <stdio.h>
#include <malloc.h>
int main()
{
int n,l;
int i,j,t;
printf("Please input n: ");
scanf("%d",&n);
int** mt=(int**)malloc(sizeof(int*)*n);
for(i=0;i<n;i++)
{
mt[i]=(int*)malloc(sizeof(int)*n);
for(j=0;j<n;j++)
{
mt[i][j]=0;
}
}
l=n*(n+1)/2;
i=j=0;
for(t=1;t<=l;)
{
while(i<n&&j<n&&mt[i][j]==0)
{
mt[i][j++]=t++;
}
i++;j-=2;
while(i<n&&j>=0&&mt[i][j]==0)
{
mt[i++][j--]=t++;
}
i-=2;j++;
while(i>=0&&j>=0&&mt[i][j]==0)
{
mt[i--][j]=t++;
}
i++;j++;
}
printf("\nResult is:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(mt[i][j])
printf("%4d",mt[i][j]);
}
printf("\n");
}
for(i=0;i<n;i++)
free(mt[i]);
free(mt);
return 0;
}