阅读下列程序说明和C程序,将应填入(n)处的字句写在对应栏内。 [说明] 本程序将自然数1,2,……,N2(N=5)按蛇形方式逐个顺序存入N阶矩阵。令n=N-1,则矩阵中的每一元素可用aij标记,其中i,j(0≤i,j≤n)分别为其所在行的行号和所在

admin2009-02-15  37

问题 阅读下列程序说明和C程序,将应填入(n)处的字句写在对应栏内。
[说明]
   本程序将自然数1,2,……,N2(N=5)按蛇形方式逐个顺序存入N阶矩阵。令n=N-1,则矩阵中的每一元素可用aij标记,其中i,j(0≤i,j≤n)分别为其所在行的行号和所在列的列号。蛇形方式顺序存放的方法是从an0开始、到a0n为止,依次填入由1递增的自然数,交替地对每一斜列从左上角向右下角或从右下角向左上角排列。程序的输出为:
           
[程序]
#include <stdio.h>
#include <math.h>
#define SIZE.10
int a[SIZE] [SIZE],k;
void write(int n)  /*输出矩阵*/
{  int i,j;
for(i=0;i<=n;i+ +){
           for(j=0; j<=nj j+ +)
                printf("%4d",a[j]);
           printf("\n");
     }
}
void makeline(int row_start, int col_start, int row_end) /*完成矩阵一条斜线的整数填写*/
{  int i,j, sign;
  sign=((1)> =0)? 1:-1;
  for(i = row_start,j = col_start; (row_end-i) * sign>=0; i+=sign,j+=sign)
   a[j]=(2);
}
void makeArray(int n)   /*完成矩阵每条斜线的整数填写*/
{  int d;
   for(d=1;d<=(3);d+ +)
        if(d< =n+1)
           if(d%2)
               makeline((4));
           else
               makeline(n+1-d,0,n);
        else
           if(d%2)
               makeline((5));
           else
               makeline(0,d-n-1,2*n-d+1);
}
void main()
{  int n, N=5;
   k=1; n=N-1;
   makeArray(n);
   write(n);
}

选项

答案(1) row_end-row_start (2) k++ (3) 2* n+1 (4) n,d-1,n+1-d (5) 2*n-d+1,n,0

解析 本程序中二维数组a[][]用于存放矩阵元素,k表示当前应存放的元素(从1开始递增的某个自然数)。数据的填充按斜对角线进行,n+1阶矩阵的斜对角线有2*n+1条(包括两个单点an0、a0n。函数makeArray对斜对角线进行编号,从矩阵左下角开始依次为d=1,…,2*n,对于每条斜对角线,根据数据在其上的填充方式(左上角到右下角还是右下角到左上角)确定起点行号row_start、列号col_start以及终点行号 row_end,再调用函数makeline为这条线上填数。makeline函数根据row_end-row_start的正负判断数值填充方式。
转载请注明原文地址:https://jikaoti.com/ti/6TW7FFFM
0

最新回复(0)