下面是一个Applet程序,其功能是构造n阶魔方阵,魔方阵是这样一个方阵,它的每一行,每一列和对角线之和均相等,例如3阶魔方阵为8 1 63 5 74 9 2要求用Applet实现上述魔方阵。窗口中包括提示栏,提示输入0~15之间的奇数;输入框,输入方阵的阶数;按钮;点击则输出魔方阵;画布用于输出结果。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。注意:不改动程序的结构,不得增行或删行。源程序文件代码清单如下:import java.awt.*;import java.awt.event.

题目

下面是一个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


相似考题

1.阅读以下说明和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");}}

4.阅读以下说明和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==0&&m>1){(3)j=j-1;}if(i<0)//超出上界(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");}}

参考答案和解析
正确答案:btn.addActionListener(this) a[1][j]=1 int k=2;k=n*n;k++
btn.addActionListener(this) a[1][j]=1 int k=2;k=n*n;k++ 解析:本题主要考查Applet图形界面编程和 for循环语句的使用以及对数组的操作。解题关键是明白魔方阵的基本原理,并能看得懂这个问题的算法,熟悉数组操作,for循环语句以及Applet界面构件及其事件处理机制。魔方阵的排列规律是:首先将1放在第一行中间一列;然后从2开始直到n*n为止。各数依次按如下规则存放:每一个数存放的行比前一个数的行数减1、列数加1;如果上一个数的行数为1,则下一个数的行数为n;当上一个数的列数为n时,下一个数的列数应改为1,行数减1;如果按以上规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。本题中,第1处,事件监听器应该是btn对象的,不是pane对象;第 2处,应该按照上述规则第一条,将1放在第一行中间一列:第2处,循环变量应该从2开始,如果是1得不到正确答案。
更多“下面是一个Applet程序,其功能是构造n阶魔方阵,魔方阵是这样一个方阵,它的每一行,每一列和对角线 ”相关问题
  • 第1题:

    某公司举办运动会,参赛的员工组成一个正方形方阵,若减少方阵的一列和一行,则会减少23 人,那么,该方阵应由( )名员工组成。

    A.169
    B.144
    C.196
    D.225

    答案:B
    解析:
    原方阵每边人数为(23+1)/2=12,则原方阵有=144 人。

  • 第2题:

    任意的一个n阶方阵一定可以相似一个对角阵。


    设A=(a ij ) n×n ,采用数学归纳法来证明. 当n=1时,定理显然成立.假设n=k-1时定理成立,下面证明n=k时定理也成立. 设A=(a ij ) k×k 的k个特征值为λ 1 ,λ 2 ,…,λ k ,且对应于特征值λ 1 的一个特征向量为x 1 ∈C k ,扩充向量x 1 为向量空间C k 的基,并记增加的向量为x 2 ,…,x k .令P 1 =[x 1 ,x 2 ,…,x k ],则P 1 可逆,且有 AP1=[Ax 1 Ax 2 … Ax k ]=[λ 1 x 1 Ax 2 … Ax k ]. 由于Ax j ∈C k (j=2,…,n),所以Ax j 可由C k 的基x 1 ,x 2 ,…,x k 线性表示,即 Ax j =b 1j x 1 +b 2j x 2 +…+b kj x k (j=2,…,k). 于是 记A 1 为上式右端矩阵右下角的k-1阶子矩阵,则上式可写为 易见,A 1 的k-1个特征值为λ 2 ,…,λ k .对于k-1阶矩阵A 1 ,由归纳法假设,有k-1阶可逆矩阵Q,使得 令 ,P=P 1 P 2 则有 根据归纳法原理.对于任意正整数n,定理成立. 证毕.

  • 第3题:

    n 阶方阵 A 与对角阵相似的充要条件是

    A.方阵 A 有 n 个互不相同的特征值

    B.方阵 A 有 n 个线性无关的特征向量

    C.方阵 A 是对称矩阵

    D.方阵 A 的特征向量两两正交

    E.方阵 A 是实矩阵

    F.方阵 A 的特征值是实数


    A 有n个线性无关的特征向量

  • 第4题:

    对称矩阵是一个n阶方阵,其元素满足:aij==aji (0≤i,j≤n-1)。


    正确

  • 第5题:

    【简答题】下面是一个5*5的螺旋方阵。按照逆时针方向旋进n*n螺旋方阵,编程输出。 1 16 15 14 13 2 17 24 23 12 3 18 25 22 11 4 19 20 21 10 5 6 7 8 9


    错误