08年上半年软考程序员考试下午试题

发布时间:2012-07-19 共12页

试题三(共 15 分)

  阅读以下说明和C程序,将应填入 (n) 处的字句写在答题纸的对应栏内。[说明说明]说明说明下面的程序用 Dole Rob算法生成N阶(N为奇数)魔方阵 (各行、列、对角线数字2之和相等)。

  该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N 为止:
  a. 在第一行的正中插入 1;
  b. 新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置;
  c. 若最近插入的元素是N的整数倍,则选同列的下一行位置为新位置。

例如,3阶魔方阵如下所示:
8   1   6
3   5   7
4   9   2

 [C程序程序]
#include   
#include  
#define SIZE  50  
main( ) 
 {    int row, col, n, value;     
      int a[SIZE+1][SIZE+1];     /*不使用下标为 0的元素*/  
     printf("请输入要输出魔方阵的阶数 n(奇数, <%d):n=", SIZE);  
     scanf("%d",&n);    
     if (!(n % 2)||n < 1 ||   (1)  ) { 
        printf("输入数据有误!\n");      exit(0); 
     } 
     row = 1;      col = (n+1)/2;      value = 1;  
     while(value <=   (2)  )  {  
              a[row][col] = value;  
              /*计算下一位置*/ 
              if(value%n != 0){   
                   row--;    (3)  ;   
                   if(row < 1) row = n;  
                   if(col > n)   (4)  ;  
              }  
              else  row++;  
              value =   (5)  ;  
       } 
       printf("\n%d 阶魔方阵如下所示:\n\n",n);  
       for(row = 1; row <= n; row++){  
           for(col = 1; col <= n; col++)  
               printf("]",a[row][col]);  
           printf("\n");  
       }  

2008年上半年 程序员 下午试卷 第 4 页 (共 12 页)

百分百考试网 考试宝典

立即免费试用