阅读以下说明和C程序,回答问题。[说明]下面的程序用Dole Rob算法生成N阶(N为奇数)魔方阵(各行、列、对角线数字之和相等)。该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N2为止。①在第一行的正中插入1。②新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置。③若最近插入的元素是N的整数倍,则选同列的下一行位置为新位置。例如,3阶魔方阵如下所示:8 1 63 5 74 9 2[C程序]include<stdio.h>include<stdlib.h>define SIZE 50main( ){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("%5d", a[row][col]);printf("\n");}}

阅读以下说明和C程序,回答问题。

[说明]

下面的程序用Dole Rob算法生成N阶(N为奇数)魔方阵(各行、列、对角线数字之和相等)。该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N2为止。

①在第一行的正中插入1。

②新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置。

③若最近插入的元素是N的整数倍,则选同列的下一行位置为新位置。

例如,3阶魔方阵如下所示:

8 1 6

3 5 7

4 9 2

[C程序]

include<stdio.h>

include<stdlib.h>

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("%5d", a[row][col]);

printf("\n");

}

}


相关考题:

阅读以下说明和流程图,回答问题1~2,将解答填入对应的解答栏内。[说明]下面的流程图描述了计算自然数1到N(N≥1)之和的过程。[流程图][问题1] 将流程图中的(1)~(3)处补充完整。[问题2] 为使流程图能计算并输出1*3+2*4+…+N*(N+2)的值,A框内应填写(4);为使流程图能计算并输出不大于N的全体奇数之和,B框内应填写(5)。

阅读以下说明和C程序,将应填入(n)处的字句写在对应栏内。【说明】下面的程序用DoleRob算法生成N阶(N为奇数)魔方阵(各行、列、对角线数字之和相等)。该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N2为止。a.在第一行的正中插入1。b.新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置。c.若最近插入的元素是N的整数倍,则选同列的下一行位置为新位置。例如,3阶魔方阵如下所示:8 1 63 5 74 9 2【C程序】include<stdio.h>include<stdlib.h>define SIZE 50main( ){ 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("%5d",a[row][col]);printf("\n");}}

阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。【说明】魔方阵,又叫幻方,在我国古代称为“纵横图”。由1…N2共N2个自然数构成每行、每列及两对角线上各数之和都相等的N×N方阵,这样的方阵就叫做N阶魔方阵。顾名思义,奇阶魔方阵就是N为奇数的幻方。奇数阶魔方阵的生成方法如下:(1)第一个位置在第一行正中。(2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。(3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。例如,当n=3时,魔方阵为:8 1 63 5 74 9 2了解其生成方法后,就可以根据此方法来写出程序了。首先设置int变量i,j,m, n。其中i标记魔方阵的行;j标记魔方阵的列;n表示魔方阵的维数,通过输入得到;通过m递加得到插入的数据。数组a[MAX][MAX]用于存放魔方阵元素。这里预定义了 MAX的大小,没有采用动态分配,在此设置为15,即最大求得15×15阶魔方阵。【程序】include <stdio.h>define MAX 15void main(){int n;int m=1;int i,j;int a[MAX][MAX];printf("Please input the rank of matrix:");scanf("%d",n);i=0;(1)while((2))a[i][j]=m;m++;i--;j++;if((m-1)%n==0 m>1){(3)j=j-1;}if(j>(n-1)) //超出上界(4)if(j>(n-1))(5)}for(i=0;i<n;i++) //输出魔方阵for(j=0;j<n;j++){if(a[i][j]/10==0)printf("%d ",a[i][j]); //对程序无影响,只是使输出的数每一列对齐elseprintf("%d ",a[i][j]);if(j==(n-1))printf("\n");}}

阅读下列程序说明和C++程序,把应填入其中(n)处的字句,写在对应栏内。【说明】阅读下面几段C++程序回答相应问题。比较下面两段程序的优缺点。①for (i=0; i<N; i++ ){if (condition)//DoSomething…else//DoOtherthing…}②if (condition) {for (i =0; i<N; i++ )//DoSomething}else {for (i=0; i <N; i++ )//DoOtherthing…}

阅读以下说明和流程图,回答问题1-2,将解答填入对应的解答栏内。[说明]下面的流程图采用欧几里得算法,实现了计算两正整数最大公约数的功能。给定正整数m和 n,假定m大于等于n,算法的主要步骤为:(1)以n除m并令r为所得的余数;(2)若r等于0,算法结束;n即为所求;(3)将n和r分别赋给m和n,返回步骤(1)。[流程图][问题1] 将流程图中的(1)~(4)处补充完整。[问题2] 若输入的m和n分别为27和21,则A中循环体被执行的次数是(5)。

阅读以下说明和C语言程序,将应填入(n)处的字句写在答题纸的对应栏内。【说明】魔方阵,又叫幻方,在我国古代称为纵横图.由1…N2共N2个自然数构成每行、每列及两对角线上各数之和都相等的N×N方阵,这样的方阵就叫做N阶魔方阵。顾名思义,奇阶魔方阵就是N为奇数的幻方。奇数阶魔方阵的生成方法如下:(1)第一个位置在第一行正中。(2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。(3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。例如,当n=3时,魔方阵为:816357492了解其生成方法后,就可以根据此方法来写出程序了。首先设置int变量i,j,m,n.其中i标记魔方阵的行;j标记魔方阵的列;n表示魔方阵的维数,通过输入得到;通过m递加得到插入的数据。数组a[MAX][MAX]用于存放魔方阵元素。这里预定义了MAX的大小,没有采用动态分配,在此设置为15,即最大求得15×15阶魔方阵。【程序】#include#defineMAX15voidmain(){intn;intm=1;inti,j;inta[MAX][MAX];printf(Pleaseinputtherankofmatrix:);scanf(%d,n);i=0;(1)while((2)){a[i][j]=m;m++;i--;j++;if((m-1)%n==0m1){(3)j=j-1;}if(i0)//超出上界(4)if(j(n-1))//超出右边界(5)}for(i=0;ifor(j=0;j{if(a[i][j]/10==0)printf(%d,a[i][j]);//对程序无影响,只是使输出的数每一列对齐elseprintf(%d,a[i][j]);if(j==(n-1))printf(\n);}}

阅读以下说明,回答问题,将解答填入对应的解答栏内。. [说明] 请完成流程图以描述在数据A(1)至A(10)中求最大数和次大数的程序的算法。并将此改成PAD图。该算法的流程图如下图:

阅读以下说明和C程序,将应填入 (n) 处的字句写在对应栏内。3、【说明】下面的程序用DoleRob算法生成N阶(N为奇数)魔方阵(各行、列、对角线数字之和相等)。该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N2为止。 a.在第一行的正中插入1。 b.新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置。 c.若最近插入的元素是N的整数倍,则选同列的下一行位置为新位置。 例如,3阶魔方阵如下所示: 8 1 6 3 5 7 4 9 2【C程序】 #include<stdio.h> #include<stdlib.h> #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("%5d",a[row][col]); printf("\n"); } }

设A为n阶可逆方阵,x为n维列向量,则向量Ax的模和向量x的模相等.