见了一个比较有意思的C程序设计题目:
从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。例如:
输入数字2,则程序输出:
1 2
4 3
输入数字3,则程序输出:
1 2 3
8 9 4
7 6 5
输入数字4,则程序输出:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
——————————————————————————–
大前提条件(即在此条件下解题)
解题所涉及的知识:结构、数组、指针、标准输入输出、文件操作(只是说最多只会涉及到这么多,此题不一定全部涉及到)
允许使用ANSI C++特性。允许使用STL类库。
(不允许使用MFC类库,ATL类库)
然后自己也写了一个,代码写的并不是很好,甚至有些臃肿,但是最基本的功能还是达到了,呵呵。
#include “stdio.h”
#include “stdlib.h”
int *p=NULL,n;
main()
{
void import();
void func();
void exp(int *z);
printf(“请输入数组长度:”);
scanf(“%d”,&n);
p=(int *)malloc(n*n*sizeof(int)+1);
func();
exp(p);
system(“pause”);
}
void func()
{
int i,j,t,m,k=1,n1=n,n2=n;
for(i=0; i<=n*n; i++)
*(p+i)=0;
for(t=0,i=0,j=0,m=0; t<n*n; t++)
{
exp(p);
if(k==1)
{
*(p+j*n+i++)=t+1;
m++;
if(m>=n2)
{
k=2;
m=0;
j++;
i–;
n1–;
continue;
}
}
if(k==2)
{
*(p+j*n+i)=t+1;
m++;
j++;
if(m>=n1)
{
k=3;
m=0;
j–;
i–;
n2–;
continue;
}
}
if(k==3)
{
*(p+j*n+i–)=t+1;
m++;
if(m>=n2)
{
k=4;
m=0;
i++;
j–;
n1–;
continue;
}
}
if(k==4)
{
*(p+j*n+i)=t+1;
m++;
j–;
if(m>=n1)
{
k=1;
m=0;
i++;
j++;
n2–;
}
}
}
}
void exp(int *z)
{
int i,j,c;
for(c=1; c<6000; c++);
system(“cls”);
for(i=0,j=1; i<n*n; i++,j++)
{
printf(“%-4d”,*(z+i));
if(j==n)
{
puts(“”);
j=0;
}
}
}
运行结果: