java程序设计实用教程第3版课后答案.docx

上传人:b****1 文档编号:1164298 上传时间:2023-04-30 格式:DOCX 页数:68 大小:152.98KB
下载 相关 举报
java程序设计实用教程第3版课后答案.docx_第1页
第1页 / 共68页
java程序设计实用教程第3版课后答案.docx_第2页
第2页 / 共68页
java程序设计实用教程第3版课后答案.docx_第3页
第3页 / 共68页
java程序设计实用教程第3版课后答案.docx_第4页
第4页 / 共68页
java程序设计实用教程第3版课后答案.docx_第5页
第5页 / 共68页
java程序设计实用教程第3版课后答案.docx_第6页
第6页 / 共68页
java程序设计实用教程第3版课后答案.docx_第7页
第7页 / 共68页
java程序设计实用教程第3版课后答案.docx_第8页
第8页 / 共68页
java程序设计实用教程第3版课后答案.docx_第9页
第9页 / 共68页
java程序设计实用教程第3版课后答案.docx_第10页
第10页 / 共68页
java程序设计实用教程第3版课后答案.docx_第11页
第11页 / 共68页
java程序设计实用教程第3版课后答案.docx_第12页
第12页 / 共68页
java程序设计实用教程第3版课后答案.docx_第13页
第13页 / 共68页
java程序设计实用教程第3版课后答案.docx_第14页
第14页 / 共68页
java程序设计实用教程第3版课后答案.docx_第15页
第15页 / 共68页
java程序设计实用教程第3版课后答案.docx_第16页
第16页 / 共68页
java程序设计实用教程第3版课后答案.docx_第17页
第17页 / 共68页
java程序设计实用教程第3版课后答案.docx_第18页
第18页 / 共68页
java程序设计实用教程第3版课后答案.docx_第19页
第19页 / 共68页
java程序设计实用教程第3版课后答案.docx_第20页
第20页 / 共68页
亲,该文档总共68页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

java程序设计实用教程第3版课后答案.docx

《java程序设计实用教程第3版课后答案.docx》由会员分享,可在线阅读,更多相关《java程序设计实用教程第3版课后答案.docx(68页珍藏版)》请在冰点文库上搜索。

java程序设计实用教程第3版课后答案.docx

java程序设计实用教程第3版课后答案

第一章

1.Java具有那些适合在Internet环境中的特点?

【答】简单性和完全面向对象,平台无关性,安全性和可靠性,多线程,高效的网络编程。

2.Java保留、放弃了C/C++语言中哪些语法和面向对象机制?

为什么需要这样做?

【答】在语法规则方面,Java语言放弃了全程变量、goto语句、宏定义、全局函数以及结构、联合和指针数据类型,使Java语言更简单、更精练。

在面向对象概念方面,Java语言放弃了多元继承、友元类和运算符重载,采用“单重继承+接口”的方式代替多重继承,提供语言级的内存自动管理和异常处理方式,使Java语言更健壮、更安全、更高效。

3.Java对原程序文件的命名规则有什么要求?

源程序文件编译后生成什么文件?

【答】要求:

源程序文件与类同名,文件扩展名为.java;编译后生成字节码文件(*.class)。

4.Java程序的运行机制是怎样的?

与C++或其他语言有什么不同?

【答】Java的每一个类都有一个class文件和它对应,Java在程序的启动的时候将程序运行需要用到的类加载到虚拟机中,根据Java的虚拟机规范进行连接(动态连接),程序的组装是在运行的时候完成的

C++和其他的编译型的语言一样,它的程序的组装方式是一种传统的组装方式。

C++在编译的时候生成适用于某一平台的二进制代码,在连接的时候找到需要调用的库,然后将这些库中的代码连接进可执行程序之中,生成的可执行程序运行速度非常的快,但是可执行代码已经变成了一个整体,不可能再分开

5.什么是平台无关性?

Java是怎样实现平台无关性的?

【答】平台无关性即Java程序的运行不依赖于操作系统。

Java采用虚拟机技术实现平台无关性。

程序由虚拟机解释执行,不同的操作系统上运行不同版本的Java虚拟机。

6.Java应用程序由哪两种形式?

他们的运行方式有什么不同?

【答】Application和applet两种形式,其中application是能够独立运行的应用程序,既可以以DOS的命令方式运行,也可以以图形用户界面方式运行。

Applet是可以嵌入页面的最小应用程序,不能独立运行,必须嵌入超文本中,由浏览器显示运行。

7.什么是解释执行?

Java怎样解释执行两种应用程序?

【答】解释执行即将字节码解释成本地机器码并执行。

Java源程序文件经编译后生成字节码文件,若是application应用程序,则将字节码文件交由Java解释器解释执行,最后在windows操作系统上运行。

若是applet应用程序,则将字节码文件嵌入超文本文件并下载到web浏览器上,最后由windows操作系统中的Java虚拟机运行。

8.作为一个软件开发人员,应该具备那些基础知识用以开发windows应用程序?

【答】略

第2章

1.标示符和关键字在定义和使用方面有何区别?

【答】定义方面:

标示符是用户定义的、以字母开头的字母数字序列,关键字是由Java语言定义的、具有特定含义的英文单词。

使用方面:

标示符用于命名变量、常量、类、对象等元素,每一个关键字都有特定的含义,不能被赋予别的含义。

2.Java语言的基本数据类型有哪些?

引用数据类型有哪些?

【答】基本数据类型有:

整数类型byte、short、int、long,浮点数类型float、double,字符类型char,布尔类型boolean;引用数据类型包括数组(array)、类(class)和接口(interface)

3.试分析基本数据类型与引用数据类型的主要特点,并说明使用这两种变量有哪些差别?

【答】基本数据类型的变量保存数据值,而引用数据类型的变量保存地址。

4.算术运算、关系运算、逻辑运算和位运算各有哪些运算符?

【答】算术运算:

单目运算符有+(正)、—(负)、++(自增)、——(自减),双目运算符有+(加)、—(减)、*(乘)、/(除)、%(取余)

关系运算:

=(等于)、!

=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)都是双目运算

逻辑运算:

&(与)、|(或)、!

(非)、^(异或)、&&(条件与)、||(条件或),其中!

是单目运算,其它都是双目运算

位运算:

~(非)、&(与)、|(或)、^(异或)、<<(左移位)、>>(右移位)、>>>(无符号移位)

5.程序中为什么需要常量和变量?

声明常量或变量时,为什么必须给出其所属的数据类型?

【答】在程序中使用的数据大多需要经常变化,用常量值表示显然不够,因此每一种算法语言都提供常量和变量来存储数据。

为了确定常量或变量的数据性质、取值范围、以及它们占用的内存单元的字节数和它们参加的合法运算和操作。

6.什么是变量的作用域,声明变量时,如何确定变量的作用域?

【答】变量的作用域是指其作用范围。

变量声明的位置决定了它的作用域

7.设i是一个整数类型变量,写出下列问题对应的表达式?

(1)判断i为奇数或偶数;

【答】i%2==0//取值为true时是偶数,否则是奇数

(2)判断i的值是否在0~9之间;

【答】(i>0)&&(i<9)

8.设ch是一个字符变量,写出下列问题对应的表达式

(1)判断ch是一个十进制的数字字符

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

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

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

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

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

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

While语句的特点:

“先判断后执行”,当条件满足时执行循环体

Do-while语句的特点:

“先执行后判断”,先执行循环体,再判断条件是否满足

For语句的特点:

“先判断后执行”,但for语句将循环控制变量初始值、循环条件和变量的变化规律都以表达式形式写在循环体之前。

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

(1)for(i=1,i<=10,i++){

intSum=1;

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

(2)inti=1;

while(i<=10){

intSum=1;

Sum=Sum*i;

i++;}

inti=Sum=1;

do{

Sum=Sum*i;

i++;}while(i<=10);

11.输出以下数字的形式;

(1)0000

0111

0122

0123

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

publicclassPhalanx

{

publicstaticvoidmain(Stringargs[])

{

intn=4;//阶数

for(inti=0;i

{

for(intj=0;j

System.out.print(""+((i

i:

j));

System.out.println();

}

}

}

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

1

121

12321

1234321

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

publicclassTower

{

publicstaticvoidmain(Stringargs[])

{

intn=4;//行数

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

{

for(intj=1;j<=n-i;j++)//前导空格

System.out.print("");

for(intj=1;j<=i;j++)

System.out.print(""+j);

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

System.out.print(""+j);

System.out.println();

}

}

}

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

错在哪里?

输出结果i和s的值分别是多少?

inti=1,n=10,s=0;

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

s+=i;

System.out.pointln(“Sum=1+……+”+n+”=”+s);

有错误,正确的如下

inti=1,n=10,s=0;

for(i=1,i<=n,i++)

s+=i;

System.out.pointln(“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

〖解答〗程序如下。

publicclassGoldbach

{

staticfinalintMAX=30;//数据范围

staticint[]prime=null;//存放素数的一维数组

staticintnumber;//素数个数,即数组的实际元素个数

publicGoldbach(intn)//输出n的哥德巴赫算式

{

if(prime==null)

init();

if(n%2==0)//偶数

{

inti=0;

while(i

{

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

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

i++;

}

}

else//奇数

{

inti=0;

while(i

{

intj=i;//如果j=0,则会出现重复的算式

while(j

{

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

System.out.print(n+"="+prime[i]+"+"+prime[j]+"+"+(n-prime[i]-prime[j])+"");

j++;

}

i++;

}

}

System.out.println();

}

publicstaticvoidinit()//初始化数组,筛选法求素数

{

prime=newint[30];

prime[0]=2;//已知的最小素数

number=1;//素数个数

inti=1;//下一个素数应存放的数组下标位置

intk=3;//从最小奇数开始测试,所有偶数不需测试

do

{

intj=0;

while((j

=0))//用已知素数prime[j]测试k

j++;

if(j==number)//k是素数

{

prime[i]=k;//将k添加到数组prime中

i++;

number++;

}

k+=2;//测试下一个奇数是否是素数

}while(k

output();

}

publicstaticvoidoutput()//输出素数

{

System.out.println("Allprimesin2~"+MAX+"are:

");

for(inti=0;i

{

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

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

System.out.println();//每行写10个数

}

System.out.println("\nnumber="+number);

}

publicstaticbooleanisPrime(intk)//判断k是否为素数,即在prime中查找k值

{

booleanyes=false;

inti=0;

while(!

yes&&i<=number&&prime[i]<=k)

if(prime[i]==k)

yes=true;

elsei++;

returnyes;

}

publicstaticvoidmain(Stringargs[])

{

for(inti=4;i

newGoldbach(i);

for(inti=7;i

newGoldbach(i);

}

}

程序运行结果如下:

Allprimesin2~30are:

2357111317192329

number=10

偶数

4=2+2

6=3+3

8=3+5

10=3+710=5+5

12=5+7

14=3+1114=7+7

16=3+1316=5+11

18=5+1318=7+11

20=3+1720=7+13

22=3+1922=5+1722=11+11

24=5+1924=7+1724=11+13

26=3+2326=7+1926=13+13

28=5+2328=11+17

奇数

7=2+2+3

9=2+2+59=3+3+3

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

13=3+3+7

15=2+2+1115=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+11

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+1119=5+3+11

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

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

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

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

另外,Java语言具有资源回收机制,能够自动收回不再使用的资源,一般情况下程序不需要归还数组所占的内存空间。

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

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

基本数据类型变量获得存储单元的方式是静态的,声明了变量后系统就为变量分配了存储单元,就可以对变量赋值。

两个变量之间的赋值是值本身。

数组变量的引用赋值,数组变量保存的是数组的引用,即数组占用的一片连续存储空间的首地址及长度特性。

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

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

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

【答】程序如下:

publicclassZuizhi{

publicstaticvoidmain(String[]args)

{

//TODO自动生成方法存根

intarray[]=newint[100];

for(inti=1;i<=30;++i)//初始化数组

array[i]=i;

intmax=array[1];//保存最大值

intmin=array[1];//保存最小值

for(intj=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.采用一维数组输出杨辉三角形。

程序如下:

publicclassYanghui1

{

publicstaticvoidmain(Stringargs[])

{

intn=10;//n表示行数

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

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

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

{

for(intj=0;j

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

System.out.println();

for(intj=i;j>0;j--)//生成下一行数据

table[j]=table[j-1]+table[j];//通式

}

}

}

18.输出下列方阵:

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

1267

35813

491214

10111516

程序如下:

PublicclassJmat

{

Publicstaticvoidmain(Stringargs[]){

}

}

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

12510

43611

98712

16151413

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

publicclassJmat

{

publicstaticvoidmain(Stringargs[])

{

intn=4;//阶数

int[][]mat=newint[n][n];

intk=1;//k是自然数,递增变化

for(inti=0;i

{

for(intj=0;j<=i;j++)

mat[j][i]=k++;//k先赋值后自加

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

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

}

for(inti=0;i

{

for(intj=0;j

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

System.out.println();

}

}

}

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

也可能没有暗点。

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

〖证明〗反证法。

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

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

(1)

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

假设有另一个鞍点M[x,y],由

(1)式知

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

(2)

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

M[x,y]>=M[x,j](3)

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

M[x,y]<=M[i,y](4)

根据

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

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

由此证明。

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

publicclassDort

{

publicstaticvoidmain(Stringargs[])

{

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

for(inti=0;i

{

for(intj=0;j

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

System.out.println();

}

booleanfind=false;//找到鞍点标记

introw=0;//第1行下标

intmax=0;//记录当前行最大值的列下标

while(!

find&&row

{

max=0;//初始设每行第1列值最大

for(intj=1;j

if(mat[row][j]>mat[row][max])//mat[row][max]为该行最大值

max=j;

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

intj=0;

while(yes&&j

{

if(j!

=row&&mat[j][max]

yes=false;

j++;

}

if(yes)

find=true;

else

row++;

}

if(find)

System.out.println("Thedort:

"+mat[row][max]);

else

System.out.println("Thedort:

null");

}

20.设一个一维数组的元素值为:

7,4,8,9,1和5,请输出具有以下内容的方阵:

748915

574891

157489

915748

891574

489157

【答】程序如下:

publicclassShift

{

publicstaticvoidmain(Stringargs[])

{

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

System.out.println("左移:

");

for(inti=0;i

{

for(intj=0;j

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

System.out.println();

}

Sys

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2