Java面向对象程序设计 教程课后答案(3)

2021-09-24 14:49

【答】数组变量与基本数据类型变量不同点在于,存储单元的分配方式不同,两个变量之间的赋值方式也不同。基本数据类型变量获得存储单元的方式是静态的,声明了变量后系统就为变量分配了存储单元,就可以对变量赋值。两个变量之间的赋值是值本身。

数组变量的引用赋值,数组变量保存的是数组的引用,即数组占用的一片连续存储空间的首地址及长度特性。当声明一个数字变量而未申请空间时,变量是未初始化的,没有地址及特性值。只有申请了存储空间,才能以下标表示数组元素。

16.求一组数中的最大值和最小值。

【答】程序如下:

public class Zuizhi {

public static void main(String[] args)

{ // TODO 自动生成方法存根 int array[]=new int[100]; for(int i=1;i<=30;++i)//初始化数组 array[i]=i; int max=array[1];//保存最大值 int min=array[1];//保存最小值 for(int j=2;j<=30;++j) { max=Math.max(max, array[j]); min=Math.min(min, array[j]); } System.out.println("该数组最大值为:"+max); System.out.println("该数组最小值为:"+min);

}

}

运行结果如下:

该数组最大值为:30

该数组最小值为:1

17.采用一维数组输出杨辉三角形。

程序如下:

public class Yanghui1

{ public static void main(String args[])

{ int n=10; //n表示行数

int[] table = new int[n+1];

table[0]=1; //每行第1个数都为1

for (int i=1;i<=n;i++) //控制输出n行

{ for (int j=0;j<i;j++)

System.out.print(" "+table[j]);

System.out.println();

for (int j=i;j>0;j--)

table[j]=table[j-1]+table[j];

} }}

18.输出下列方阵:

(1) 输出如下形式的数字方阵(当n=4时):

1 2 6 7

3 5 8 13

4 9 12 14

10 11 15 16

程序如下:

Public class Jmat

{ Public static void main(String args[]){}}

(2)输出如下形式的数字方阵(当n=4时):

1 2 5 10

4 3 6 11

9 8 7 12 16 15 14 13

〖解答〗采用二维数组的程序如下。

public class Jmat

{ public static void main(String args[])

{ int n=4;

int[][] mat = new int[n][n];

int k=1;

for (int i=0;i<n;i++)

{ for (int j=0;j<=i;j++)

mat[j][i] = k++;

for (int j=i-1;j>=0;j--)

mat[i][j] = k++;

}

for (int i=0;i<mat.length;i++)

//输出三角形的一维数组 生成下一行数据 //通式 //阶数 是自然数,递增变化 //k先赋值后自加 //输出二维数组元素 // //k

{ for (int j=0;j<mat[i].length;j++) //i、j是行、列下标

System.out.print(" "+mat[i][j]);

System.out.println(); } }}

19.找出一个二维数组的鞍点,即该位置的元素在该行上最大,在列上最小。也可能没有暗点。

〖命题〗一个二维数组如果有鞍点,那么它只有一个鞍点。

〖证明〗反证法。

设该二维数组已有一个鞍点,为M[i,j],则有

M[i,*] <= M[i,j] <= M[*,j]

即i行上的所有元素均小于j列上的所有元素。

假设有另一个鞍点M[x,y],由(1)式知 (1)

M[i,y] <= M[x,j] (2)

而M[x,y]应在该行上最大,有

M[x,y] >= M[x,j]

M[x,y]应在该列上最小,有

M[x,y] <= M[i,y]

根据(2)式,显然(3)和(4)式是不可能同时成立的。

因而假设有另一个鞍点M[x,y]是不成立的。由此证明。

〖解答〗采用二维数组的程序如下。

public class Dort

{ public static void main(String args[])

{ int[][] mat = {{1,2,3},{4,5,6},{7,8,9}};

for (int i=0;i<mat.length;i++) //输出二维数组元素 { for (int j=0;j<mat[i].length;j++) //i、j是行、列下标

System.out.print(" "+mat[i][j]);

System.out.println();

}

boolean find = false; //找到鞍点标记

int row=0; //第1行下标

int max=0; //记录当前行最大值的列下标 while (!find && row<mat.length)

{

max=0; //初始设每行第1列值最大 (3) (4) for (int j=1;j<mat[row].length;j++) //在row行上找最大值 if (mat[row][j]>mat[row][max]) //mat[row][max]为该行最大值 max = j;

boolean yes = true; //再判断mat[row][max]是否在列上最小

int j=0;

while (yes && j<mat.length)

{ if (j!=row && mat[j][max]<mat[row][max]) //在列上找到更小值,则不是鞍点 yes = false;

j++;

}

if (yes)

find = true;

else

row++;

}

if (find)

System.out.println("The dort: "+mat[row][max]);

else

System.out.println("The dort: null"); }

20.设一个一维数组的元素值为:7,4,8,9,1和5,请输出具有以下内容的方阵:

4 8 9 1 5

7 4 8 9 1

1 5 7 4 8 9

9 1 5 7 4 8

8 9 1 5 7 4

4 8 9 1 5 7

【答】程序如下:

public class Shift

{ public static void main(String args[])

{ int table[] = {7,4,8,9,1,5};

System.out.println("左移:");

Java面向对象程序设计 教程课后答案(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:企业法 名词解释 简答

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: