第1题
用二维数组实现“魔方阵”的打印,所谓“魔方阵”是指组成元素是自然数1到n2的n×n阶方阵,满足每一行、每一列和对角线上的元素之和均相等的方阵。例如:
8 1 6
3 5 7
4 9 2
就是一个三阶的魔方阵。现在要求编程实现任意输入一个自然数n,打印出相应的n阶魔方阵。
第4题
阅读以下说明和C语言程序,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
魔方阵,又叫幻方,在我国古代称为"纵横图".由1…N2共N2个自然数构成每行、每列及两对角线上各数之和都相等的N×N方阵,这样的方阵就叫做N阶魔方阵。顾名思义,奇阶魔方阵就是N为奇数的幻方。
奇数阶魔方阵的生成方法如下:
(1)第一个位置在第一行正中。
(2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。
(3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。例如,当n=3时,魔方阵为:
816
357
492
了解其生成方法后,就可以根据此方法来写出程序了。首先设置int变量i,j,m,n.其中i标记魔方阵的行;j标记魔方阵的列;n表示魔方阵的维数,通过输入得到;通过m递加得到插入的数据。数组a[MAX][MAX]用于存放魔方阵元素。这里预定义了MAX的大小,没有采用动态分配,在此设置为15,即最大求得15×15阶魔方阵。
【程序】
#include
#defineMAX15
voidmain()
{
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==0&&m>1)
{
(3)
j=j-1;
}
if(i<0)//超出上界
(4)
if(j>(n-1))//超出右边界
(5)
}
for(i=0;i
for(j=0;j
{
if(a[i][j]/10==0)
printf("%d",a[i][j]);//对程序无影响,只是使输出的数每一列对齐
else
printf("%d",a[i][j]);
if(j==(n-1))
printf("\n");
}
}
第5题
下面是一个Applet程序,其功能是构造n阶魔方阵,魔方阵是这样一个方阵,它的每一行,每一列和对角线之和均相等,例如3阶魔方阵为
8 1 6
3 5 7
4 9 2
要求用Applet实现上述魔方阵。窗口中包括提示栏,提示输入0~15之间的奇数;输入框,输入方阵的阶数;按钮;点击则输出魔方阵;画布用于输出结果。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。
注意:不改动程序的结构,不得增行或删行。
源程序文件代码清单如下:
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.lang.Math.*;
/*
<applet code="ex10_3.class" width=800 height=400>
</applet>
*/
public class ex10_3 extends Applet implements ActionListener
{
Panel pane=new Panel();
drawWnd dw;
Label 11 = new Label("输入(0~15的奇数): ");
TextField tf1 = new TextField(5);
Button btn = new Button("OK");
int[] [] a=new int[16] [16];
int n=15;
public void init()
{
pane.setLayout(new FlowLayout(FlowLayout.CENTER, 25,5));
pane.add(11);
pane.add(tf1);
pane.add(btn);
pane.addActionListener(this);
add("North",pane);
dw=new drawWnd();
add("South",dw);
}
class drawWnd extends Canvas
{
drawWnd ()
{
setSize(300,300);
setBackground(Color.GRAY);
}
public void paint(Graphics g)
{
g.setColor(Color. GREEN);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
g.drawString(Integer.toString(a[i] [j]),i*20,j*20);
}
}
public void actionPerformed(ActionEvent ae)
}
try{
n=Integer.parseInt (tf1.getText ());
int i=1, j=1;
for (i=1;i<=n;i++)
for (j=1; j<=n; j++)
a[i] [j]=0;
j=n/2+1;
a[i] [j]=1;
for (int k=1; k<=n*n; k++)
{
i--;
j++;
if((i<1)&&(j>n))
{
i=i+2;
j--;
}
else
{
if (i<1)
i=n;
if (j>n)
j=1;
}
if (a[i] [j]==0)
a[i] [j]=k;
else{
i=i+2;
j--;
a[i] [j]=k;
}
}
dw. repaint ();
}
catch (NumberFormatException nfe)
&n
第6题
阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。
【说明】
魔方阵,又叫幻方,在我国古代称为“纵横图”。由1…N2共N2个自然数构成每行、每列及两对角线上各数之和都相等的N×N方阵,这样的方阵就叫做N阶魔方阵。顾名思义,奇阶魔方阵就是N为奇数的幻方。
奇数阶魔方阵的生成方法如下:
(1)第一个位置在第一行正中。
(2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。
(3)若最近一个插入元素为N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数据n,然后打印由自然数1到n2的自然数构成的魔方阵(n为奇数)。例如,当n=3时,魔方阵为:
8 1 6
3 5 7
4 9 2
了解其生成方法后,就可以根据此方法来写出程序了。首先设置int变量i,j,m, n。其中i标记魔方阵的行;j标记魔方阵的列;n表示魔方阵的维数,通过输入得到;通过m递加得到插入的数据。数组a[MAX][MAX]用于存放魔方阵元素。这里预定义了 MAX的大小,没有采用动态分配,在此设置为15,即最大求得15×15阶魔方阵。
【程序】
include <stdio.h>
define MAX 15
void 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]); //对程序无影响,只是使输出的数每一列对齐
else
printf("%d ",a[i][j]);
if(j==(n-1))
printf("\n");
}
}
第7题
8 1 6
3 5 7
4 9 2
要求用Applet实现上述魔方阵。窗口中包括提示栏,提示输入0~15之间的奇数;输入框,输入方阵的阶数;按钮;点击则输出魔方阵;画布用于输出结果。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。
注意:不改动程序的结构,不得增行或删行。
源程序文件代码清单如下:
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import java.lang.Math.*;
/*
<applet code="ex10_3.class" width=800 height=400>
</applet>
*/
public class ex10_3 extends Applet implements ActionListener
{
Panel pane=new Panel();
drawWnd dw;
Label 11 = new Label("输入(0~15的奇数): ");
TextField tf1 = new TextField(5);
Button btn = new Button("OK");
int[] [] a=new int[16] [16];
int n=15;
public void init()
{
pane.setLayout(new FlowLayout(FlowLayout.CENTER, 25,5));
pane.add(11);
pane.add(tf1);
pane.add(btn);
pane.addActionListener(this);
add("North",pane);
dw=new drawWnd();
add("South",dw);
}
class drawWnd extends Canvas
{
drawWnd ()
{
setSize(300,300);
setBackground(Color.GRAY);
}
public void paint(Graphics g)
{
g.setColor(Color. GREEN);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
g.drawString(Integer.toString(a[i] [j]),i*20,j*20);
}
}
public void actionPerformed(ActionEvent ae)
}
try{
n=Integer.parseInt (tf1.getText ());
int i=1, j=1;
for (i=1;i<=n;i++)
for (j=1; j<=n; j++)
a[i] [j]=0;
j=n/2+1;
a[i] [j]=1;
for (int k=1; k<=n*n; k++)
{
i--;
j++;
if((i<1)&&(j>n))
{
i=i+2;
j--;
}
else
{
if (i<1)
i=n;
if (j>n)
j=1;
}
if (a[i] [j]==0)
a[i] [j]=k;
else{
i=i+2;
j--;
a[i] [j]=k;
}
}
dw. repaint ();
}
catch (NumberFormatException nfe)
&n
为了保护您的账号安全,请在“上学吧”公众号进行验证,点击“官网服务”-“账号验证”后输入验证码“”完成验证,验证成功后方可继续查看答案!