java程序开发实用教程_java程序设计实用教程 (第3版) 课后习题答案

【实例简介】

java程序设计实用教程 (第3版) 课后习题答案

2)判断ch是一个十六进制的数字字符

(3)判断ch是一个大写字母

(4)判断ch是一个英文宇母,不论大写和小写

(5)如何将一个十进制的数字字符ch转换成对应的整数类型值

(6)如何将一个十六进制的数字字符ch转换成对应的整数类型值

9.说明for、 while、和do- while三科循环语句的特点和区别?

While语句的特点:“先判断后执行”,当条件淸足时执行循环休

Do-while语句的特点:“先执行后判断”,先执行循环体,再光断条件是否满足

ror语句的特点:“先判断后执行”,但for语句将循环控制变量初始值、循环条件和变

量的变化规律都以表达式形式写在循环体之前

10.分别用for, while,do- while二种循环语句计算一个正数的阶乘

(1 ) for i=1,k=10. 1++)

Int sum=l

Sum-Sum*i;}等价于Sum*=i;

(2)inti=1;

while (i<=10)

int sum=l

Sumsun率i

i++;}

int i=Sum=1

dol

SumeSumF1

i++;} while(<=1)

11.输出以下数字的形式

1)0000

000

122

〖解答〗采用二重循坏的程序如卜。

public class Phalanx

public static void main(String args)

int n=4

/

for(int 1=0; i

for (int j=0: j

System. out print("+((i

Systern.ouL printIng

2)输出下列形式的数字三角阵(当n=4时)

2

12321

1234321

〖解答〗采用二重循环的程序如下。

public class Tower

public static void main(String args)

int n=4

了行数

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

or(int j=l;j<=n-1; j++)

∥导空格

System.out. print(")

for(int j=l; j<=1;j++)

System. out print("+j);

for(int j=1-1:j>0:j

System. out print("+1)

out printIn(

12.下列程序希望用for语句求出∽n累加和并显示,请问程序有错误吗?错在哪里?输出

结果i和s的值分影是多少?

ti=l.n-10.s=0

for(ⅰ=1,<=ni++);

S+=1;

Systcm out pointIn(Sum=1+……+”+n+”=”+s)

有错误,正确的如

int i=ln=los=n

for(i=1, i<

System. out. pointIn(Sum=1+……+”+n+”=”+s

13.编程骁证哥德巴赫猜想。聂德巴赫猜想:

(1)任何大于2的偶数都可以表示为2个紊数之和,如16=3+13,16=5+11

(2)任何大于5的奇数都可以表示为3个数之和,如11=2+2+7,11-3+3+5

〖解答〗程序如下

public class Goldbach

static final int MAX=30

/数据范围

static intl] prime=null

∥存放素数的一维数组

tatic int number.

素数个数,即数组的实际元索个数

public goldbach(int n)

/输出n的哥德巴赫算式

if(prime==null)

It(;

∥偶

while (i

if (is Prime(n-primeli))

System. out. print(n+"=+prime[i+++(n-primeli+")

∥数

while (i

Int 1=1:

∥如果j=0,则会出现重复的算式

hile li

j]<=n/3)

if (isPrime(n-prime[i]-primeljl))

System. out. print(n+="+prime[il++ +prime[++

System. out. printIng

public static void init()

始化数组,筛选法求素数

prime new int[30]:

primero=2

已知的最小素数

number

∥素数个数

iti=l:

/下一个素数应存放的数组下标位置

int k=3:

从最小奇数开始测试,所有偶数不需测试

d

whil(j< number&&(k% primely]=0)M已知素数prme[]测试k

if(j==number)

/k是素数

prime=k

∥将k添加到数组pme中

++;

numbert+

k+=2

∥测试下一个奇数是否是素数

while(k

output(

public static void output

∥输出素数

System. out. printIn("all primes in 2-+MAX+ are:")

for (int 1=0; i< number; i++)

Systcm. out. print(""+primc[iD:

if(i+l)%10==0)

System. out. printIn(

∥每行与10个数

System. out. println( "\nnumber="+lumber)

public static boolean isPrime( int k)判断k是否为素数,即在pine中查找k值

boolean ves=false

int i=0

while (lyes & i<=number & primely]<=k

if(prime==k)

else i++

return yes,

oublic static void main(String args[

for(int i=4; i

new goldbach(i)

for(int i=7; i

w Goldbach(i)

程序运行结果如下

All primes in 2-30are

2357111317192329

number-

0

偶数

4=2

8=3-5

10=3+7

10=5+5

12=5+7

14=3+11

14=7+7

16=3+13

16=5+11

18=5+13

18=7+l1

20=3+1720=7+13

22=3+19

5+1722=11+11

24-5+19

24=7+17

24=l1+13

26=3+23

26=7+1926=13+13

28=5+23

28=l1+17

奇数

7=2+2+3

9=3+3+3

11=2+2+711=3+3-5

13=3+3+7

15-2+2+l115-3+5+715-5+5+5

17=2+2+1317=3+3+1117=5+5+7

19=3+3+1319=3+5+11

21=2+2+1721=3+5+1321=3+7+1121=5+5+1121=7+7+7

23=2+2+1923=3+3+1723=3+7+1323=5+5+1323=5+7+11

25=3+3+1925=3+5+1725=5+7+1325=7+7+l1

27=2+2+2327=3+5+1927=3+7+1727=5+5+1727=7+7+13

29=3+3+2329=3+7+1929=5+5+1929=5+7+17

不能有重复表达式,例妇

19=3+3+1319=3+5+111

2=2+2+1721=3+5+1321=3+7+1121=5+3+1321=5+5+1121=7+3+11

17L

14.Java的数组比C++的数组有哪些优越之处?

【答】Java语言不支持C++的指针类型,对数组的操作只能按照数组方式,不能使用指针。

Java的组都是动态数组,并且是引用数据类型,提高了安全性和简单性。另外,Java语

言具有资溟回收机制,能够自动收回不再使用的资源,一般情況下程序不需要归还数组所占

的内存空间。

15.作为引用数据类型,数组变量与基木数据类型的变量使用时有哪些区别?

【答】数组变量与基木数据类型变量不同点在于,存储单元的分配方式不同,两个变量之间

的赋值方式也不同。基本数据类型变量获得存储单元的方式是静态的.声明了变量后系纨就

为变量分配了存储单元,就可以对变量赋值。两个变量之问的赋值是值本身

数组变量的引用赋值,数组变量保存的是数组的引用,即数组占用的一片连续存储空间

的首地址及长度特性。当声明一个数字变量而未申请空问时,变量是未初始化的,没有地址

及特性值。只有申请了有储空间,才能以下标表示数组元素。

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

【答】程序如下

ublic class Zuizhi i

public static void main(String[ args)

∥TODO自动生成方法存根

int array[=ncw int[ 100]

for(int i=l;i<=30;++i∥仞始化数组

array=i

int max= array:/存最大值

nt min=aray[l]/存最小值

for(int j=2: j<=30; ++j)

{

max=Math. max(max, array LiD

min=Math. min(min, arrayljl>

System. out. printIn("该数组最大值为:"+max);

System. out printIn("该数组最小值为:"+min)

运行结果如下:

该数组最大值为:30

该数组最小值为:1

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

程序如下:

lic class yanghui l

public static void main(String argsID)

int n=

小行数

inl[ table= new int[n+1]

cble[01

∥每行第1个数都为1

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

∥控空制输出n行

for(int j=0

∥输出三角形的一维数组

System.out print("table[jl);

System.out. printIn(

for(inj=:j>0

∥生成下一行数据

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

通式

18.输出下列方阵

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

1267

35813

491214

10111516

程序如下

Public class jmat

Public static void main(String args)

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

510

43石

98712

16151413

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

tblic class jmat

public static void main(String args[D)

int n=4

/阶数

int[n mat= new intnIn

int k=l

/k是自然数,递增变化

for(int 1=0; i

for(int j=0; j<=1;j++)

mat illi=k++

/k先赋值后自加

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

mat[ilil=k++

for dint i=0: i

输出一维数组元素

for(int j=0;K

∥、j是行、列下标

System. out print("+mat[iLiD;

System.out. pr

ntIn(

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

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

证明刀反证法。

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

M[i,4]<=M[ij<=M[*

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

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

Mli,y]<=M[x,jI

2)

而Mxy应在该行上最大,有

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

Mxy应在该列上最小,有

MIx, y<=Mi,yI

4)

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

因而假设有另一个鞍点Mxy是不成立的。由此计明。

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

public class Dort

public static void main( String args[D

in[mat={{l,2,3},{4,56},17,8,9}

for(int i=0; i

∥1出二维数组元素

tor (int j=O; i

i、i是行、列下标

System. out print("+mai[illil

System.oul println;

boolean find -false.

∥找到鞍点标记

Int row

算1行下标

int max=0;

∥记录当前行最大值的列下标

while find & row

max=O-

∥}始设每行第1列值最大

tor (int j=l: j

∥在row行L找最大值

【实例截图】

【核心代码】

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值