【实例简介】
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找最大值
【实例截图】
【核心代码】