嵌套矩阵的生成
2006-02-23 21:43:11| 分类:
C/C++
| 标签:
|举报
|字号大中小 订阅
/*******************\
嵌套矩阵的生成。
如:输入1,2,3,4
将生成以下的矩阵:
--------------
1 1 1 1 1 1 1
1 2 2 2 2 2 1
1 2 3 3 3 2 1
1 2 3 4 3 2 1
1 2 3 3 3 2 1
1 2 2 2 2 2 1
1 1 1 1 1 1 1
--------------
杨明哲 2004/11/24
\*******************/
#define N 5 /*控制输入参数的个数*/
/*#define FILLTEST*/ /*测试函数fill()的开关*/
/*#define DEBUG*/ /*调试开关*/
#include<stdio.h>
void fill(int* from,int* to,int n);
void main()
{
int i,j;
int key[N],data[2*N-1];
/*以下为函数fill()的测试*/
#ifdef FILLTEST
#define FROM 1
#define TO 3
printf("Fill test , from %d to %d\n",FROM,TO);
for(i=0;i<2*N;++i)
{
printf("%d ",i);
data[i]=0;
}
printf("\n");
for(i=0;i<2*N;++i)
{
printf("%d ",data[i]);
}
printf("\n");
fill(&data[FROM],&data[TO],4);
for(i=0;i<2*N;++i)
printf("%d ",data[i]);
printf("\n");
#else
system("cls");
#endif
/*程序的输入部分*/
printf("Please input %d numbers :\n",N);
for(i=0;i<N;++i)
scanf("%d",&key[i]);
printf("The answer is:\n\n");
/*__________主要运算过程____________*/
for(i=0;i<N;++i)
{
fill(&data[i],&data[2*N-i-1],key[i]);
for(j=0;j<(2*N-1);++j)
printf("%d ",data[j]);
#ifdef DEBUG
printf("\t%d\t%d\n",i,key[i]);
#else
printf("\n");
#endif
}
for(i-=2;i>=0;--i)
{
fill(&data[i],&data[2*N-i-1],key[i]);
for(j=0;j<(2*N-1);++j)
printf("%d ",data[j]);
#ifdef DEBUG
printf("\t%d\t%d\n",i,key[i]);
#else
printf("\n");
#endif
}
printf("\n======THE END======\n");
getch();
}
void fill(int* from,int* to,int n)
/*将指针from到to见间的空间填充成n所代表的值(不包括to所指的位置)*/
{
int* p;
#ifdef DEBUG
#include <assert.h>
assert(from<to);
#endif
for(p=from;p<to;p++)
{
*p=n;
}
}
评论这张
转发至微博
转发至微博
评论