java语言程序设计课后答案 郞波 第二版 清华大学出版社

java语言程序设计课后答案 郞波 第二版 清华大学出版社,第1张

我有

Java面向对象程序设计

清华大学出版社

(编著 耿祥义 张跃平)

习题解答

建议使用文档结构图

(选择Word菜单→视图→文档结构图)

习题1

1.James Gosling

2.

(1)使用一个文本编辑器编写源文件。

(2)使用Java编译器(javac.exe)编译Java源程序,得到字节码文件。

(3)使用Java解释器(java.exe)运行Java程序

3.Java的源文件是由若干个书写形式互相独立的类组成的。

应用程序中可以没有public类,若有的话至多可以有一个public类。

4.系统环境path D\jdk\bin

系统环境classpath D\jdk\jre\lib\rt.jar.

5. B

6. Java源文件的扩展名是.java。Java字节码的扩展名是.class。

7. D

8.(1)Speak.java

(2)生成两个字节码文件,这些字节码文件的名字Speak.class 和 Xiti8.class

(3)java Xiti8

(4)执行java Speak的错误提示

Exception in thread "main" java.lang.NoSuchMethodError: main

执行java xiti8得到的错误提示

Exception in thread "main" java.lang.NoClassDefFoundError: xiti8 (wrong name: Xiti8)

执行java Xiti8.class得到的错误提示

Exception in thread "main" java.lang.NoClassDefFoundError: Xiti8/class

执行java Xiti8得到的输出结果

I'm glad to meet you

9.属于 *** 作题,解答略。

习题2

1. D

2.【代码1】 【代码2】 错误 //【代码3】更正为 float z=6.89F

3.float型常量后面必须要有后缀“f”或“F”。

对于double常量,后面可以有后缀“d”或“D”,但允许省略该后缀。

4.public class Xiti4{

public static void main (String args[ ]){

char ch1='你',ch2='我',ch3='他'

System.out.println("\""+ch1+"\"的位置:"+(int)ch1)

System.out.println("\""+ch2+"\"的位置:"+(int)ch2)

System.out.println("\""+ch3+"\"的位置:"+(int)ch3)

}

}

5.数组名字.length

6.数组名字.length

7. 【代码1】A,65

【代码2】-127

【代码3】 123456.783,123456.78312

8.

【代码1】false

【代码2】true

【代码3】false

【代码4】3

【代码5】4.4

【代码6】8.8

习题3

输出110

if-else语句书写的不够规范,复合语句缺少大括号“{}”,代码不够清晰。

2.你好好酷!!

3.

public class Xiti3_3

{

public static void main (String args[ ]){

int startPosition=0,endPosition=0

char cStart='а',cEnd='я'

startPosition=(int)cStart //cStart做int型转换据运算,并将结果赋值给startPosition

endPosition=(int)cEnd //cEnd做int型转换运算,并将结果赋值给endPosition

System.out.println("俄文字母表:")

for(int i=startPositioni<=endPositioni++){

char c='\0'

c=(char)i //i做char型转换运算,并将结果赋值给c

System.out.print(" "+c)

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

System.out.println("")

}

}

}

4.

public class Xiti4

{ public static void main(String args[])

{ double sum=0,a=1

int i=1

while(i<=20)

{ sum=sum+a

i++

a=a*i

}

System.out.println("sum="+sum)

}

}

5.

class Xiti5

{ public static void main(String args[])

{ int i,j

for(j=2j<=100j++)

{ for(i=2i<=j/2i++)

{ if(j%i==0)

break

}

if(i>j/2)

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

}

}

}

}

6.

class Xiti6

{ public static void main(String args[])

{ double sum=0,a=1,i=1

while(i<=20)

{ sum=sum+a

i++

a=(1.0/i)*a

}

System.out.println("使用while循环计算的sum="+sum)

for(sum=0,i=1,a=1i<=20i++)

{ a=a*(1.0/i)

sum=sum+a

}

System.out.println("使用for循环计算的sum="+sum)

}

}

7.

public class Xiti7

{ public static void main(String args[])

{ int sum=0,i,j

for(i=1i<=1000i++)

{ for(j=1,sum=0j<ij++)

{ if(i%j==0)

sum=sum+j

}

if(sum==i)

System.out.println("完数:"+i)

}

}

}

8.方法之一

import java.util.Scanner

public class Xiti8

{ public static void main (String args[ ]){

System.out.println("请输入两个非零正整数,每输入一个数回车确认")

Scanner reader=new Scanner(System.in)

int m=0,n=0,temp=0,gy=0,gb=0,a,b

a=m = reader.nextInt()

b=n = reader.nextInt()

if(m<n)

{ temp=m

m=n

n=temp

}

int r=m%n

while(r!=0)

{ n=m

m=r

r=m%n

}

gy=n

gb=a*b/gy

System.out.println("最大公约数 :"+gy)

System.out.println("最小公倍数 :"+gb)

}

}

8.方法之二

import java.util.Scanner

public class Xiti8 {

public static void main (String args[ ]){

System.out.println("请输入两个非零正整数,每输入一个数回车确认")

Scanner reader=new Scanner(System.in)

int m=0,n=0,t=0,gy=0,gb=0

m = reader.nextInt()

n = reader.nextInt()

if(m>n){

t=m

m=n

n=t

}

for(int i=1i<=mi++){

if(m%i==0 &&n%i==0){

gy=i

}

}

gb=m*n/gy

System.out.println(m+","+n+"的最大公约数为 "+gy)

System.out.println(m+","+n+"的最小公倍数为 "+gb)

}

}

9.

public class Xiti9

{ public static void main(String args[])

{ int n=1

long sum=0,t=1

t=n*t

while(true)

{ sum=sum+t

if(sum>9999)

break

n++

t=n*t

}

System.out.println("满足条件的最大整数:"+(n-1))

}

}// 1至7的阶乘和是sum=5913.0// 1至8的阶乘和是sum=46233.0

习题4

1.用该类创建对象时。

2.所谓方法重载是在一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者是参数的类型不同。构造方法可以重载。

3. 可以。不可以。

4.不可以。

5.成员变量又分为实例变量和类变量,用static修饰的变量是类变量。那么类变量和实例变量有什么区别呢?一个类通过使用new运算符可以创建多个不同的对象,不同的对象的实例变量将被分配不同的内存空间;如果类中的成员变量有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其它对象的这个类变量。也就是说对象共享类变量。

6.C,D

7.【代码1】,【代码4】

8.sum=-100

9.27

10. **20

##100

习题5

1. 如果子类和父类在同一个包中,那么子类自然地继承了其父类中不是private的成员变量作为自己的成员变量,并且也自然地继承了父类中不是private的方法作为自己的方法。继承的成员或方法的访问权限保持不变。如果子类和父类不在同一个包中,那么子类继承了父类的protected、public成员变量做为子类的成员变量,并且继承了父类的protected、public方法为子类的方法,继承的成员或方法的访问权限保持不变。如果子类和父类不在同一个包里,子类不能继承父类的友好变量和友好方法。

只要子类中声明的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变量。

子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同,子类如此定义的方法称作子类重写的方法。子类通过方法的重写可以隐藏继承的方法。

2.不可以。

3.abstract类。

4.假设B类是A类子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到A类的对象中时,称这个A类对象是子类对象的上转型对象。

5.可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中。那么该接口变量就可以调用被类实现的接口中的方法。

6.A,C,D

7.15.0

8.0

8.98.0

12

9.

class A

{ public final void f()

{ char cStart='a',cEnd='z'

for(char c=cStartc<=cEndc++)

{ System.out.print(" "+c)

}

}

}

class B extends A

{ public void g()

{ char cStart='α',cEnd='ω'

for(char c=cStartc<=cEndc++)

{ System.out.print(" "+c)

}

}

}

public class Xiti9

{ public static void main (String args[ ])

{ B b=new B()

b.f()

b.g()

}

}

10.

class A

{ public int f(int a,int b){

if(b<a)

{ int temp=0

temp=a

a=b

b=temp

}

int r=b%a

while(r!=0)

{ b=a

a=r

r=b%a

}

return a

}

}

class B extends A

{ public int f(int a,int b)

{ int division=super.f(a,b)

return (a*b)/division

}

}

public class Xiti10

{ public static void main (String args[ ])

{ A a=new A()

B b=new B()

System.out.println("最大公约数 :"+a.f(36,24))

System.out.println("最小公倍数 :"+b.f(36,24))

}

}

习题6

1.仍然有效。

2.可以。

3.不可以。

4.大家好,祝工作顺利!

5. 96

乘数超过99

习题7

1.

(1)Strategy是接口。

(2)Army不是抽象类。

(3)Army和Strategy是关联关系。

(4)StrategyA, StrategyB、StrategyC与Strategy是实现关系。

2.

3.

4.例子13的设计符合开-闭原则。

5.例子17的设计符合开-闭原则。

习题8

采用新增的策略为选手计算得分。

增加新的具体策略StrategyFour。StrategyFour类将double computeScore(double [] a)方法实现为去掉数组a的元素中的一个最大值和一个最小值,然后计算剩余元素的几何平均值。

import java.util.Arrays

public class StrategyFour implements ComputableStrategy {

public double computeScore(double [] a) {

if(a.length<=2)

return 0

double score=0,multi=1

Arrays.sort(a)

int n=a.length-2

for(int i=1i<a.length-1i++) {

multi=multi*a[i]

}

score=Math.pow(multi,1.0/n)

return score

}

}

2.

(1)策略(Strategy)PrintCharacter.java

public interface PrintCharacter{

public abstract void printTable(char [] a,char[] b)

}

(2) 具体策略

PrintStrategyOne.java

public class PrintStrategyOne implements PrintCharacter {

public void printTable(char [] a,char[] b) {

for(int i=0i<a.lengthi++) {

System.out.print(a[i]+",")

}

for(int i=0i<b.lengthi++) {

System.out.print(b[i]+",")

}

System.out.println("")

}

}

PrintStrategyTwo.java

public class PrintStrategyTwo implements PrintCharacter {

public void printTable(char [] a,char[] b) {

for(int i=0i<a.lengthi++) {

System.out.print(b[i]+","+a[i]+",")

}

}

}

(3)上下文 PrintGame.java

public class PrintGame {

PrintCharacter strategy

public void setStrategy(PrintCharacter strategy) {

this.strategy=strategy

}

public void getPersonScore(char[] a,char[] b){

if(strategy==null)

System.out.println("sorry!")

else

strategy.printTable(a,b)

}

}

应用以上策略:

public class Application {

public static void main(String args[]) {

char [] a=new char[26]

char [] b=new char[26]

for(int i=0i<=25i++){

a[i]=(char)('a'+i)

}

for(int i=0i<=25i++){

b[i]=(char)('A'+i)

}

PrintGame game=new PrintGame() //上下文对象

game.setStrategy(new PrintStrategyOne()) //上下文对象使用策略一

System.out.println("方案1:")

game.getPersonScore(a,b)

game.setStrategy(new PrintStrategyTwo()) //上下文对象使用策略二

System.out.println("方案2:")

game.getPersonScore(a,b)

}

}

3.参照本章8.3.3自主完成。

习题9

1.A,B,D

2. Love:Game

3.13

abc夏日

4.13579

5.9javaHello

6.

public class Xiti6 {

public static void main (String args[ ]) {

String s1,s2,s3,t1="ABCDabcd"

System.out.println("字符串原来是这个样子: "+t1)

s1=t1.toUpperCase()

System.out.println("字符串中的小写字母变成大写是这个样子: "+s1)

s2=t1.toLowerCase()

System.out.println("字符串中的大写字母变成小写是这个样子: "+s2)

s3=s1.concat(s2)

System.out.println("大写字符串连接小写字符串是这个样子: "+s3)

}

}

7.

class Xiti7

{ public static void main(String args[ ])

{ String s ="中华人民共和国"

char a=s.charAt(0)

char b=s.charAt(6)

System.out.println("第一个字符: "+a)

System.out.println("最后一个字符: "+b)

}

}

8.

import java.util.*

class Xiti8

{ public static void main(String args[]){

int year,month

System.out.println("请输入年份和月份,每输入一个数回车确认")

Scanner reader=new Scanner(System.in)

year= reader.nextInt()

month= reader.nextInt()

String [] day=new String[42]

System.out.println(" 日 一 二 三 四 五 六")

Calendar rili=Calendar.getInstance()

rili.set(year,month-1,1)//将日历翻到year年month月1日,注意0表示一月...11表示十二月

int 星期几=rili.get(Calendar.DAY_OF_WEEK)-1

int dayAmount=0

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)

dayAmount=31

if(month==4||month==6||month==9||month==11)

dayAmount=30

if(month==2)

if(((year%4==0)&&(year%100!=0))||(year%400==0))

dayAmount=29

else

dayAmount=28

for(int i=0i<星期几i++)

day[i]=""

for(int i=星期几,n=1i<星期几+dayAmounti++){

if(n<=9)

day[i]=String.valueOf(n)+" "

else

day[i]=String.valueOf(n)

n++

}

for(int i=星期几+dayAmounti<42i++)

day[i]=""

for(int i=0i<星期几i++)

{ day[i]="**"

}

for(int i=0i<day.lengthi++)

{ if(i%7==0)

{ System.out.println("")

}

System.out.print(" "+day[i])

}

}

}

9.

import java.util.*

class Xiti9

{ public static void main(String args[]){

int year1,month1,day1,year2,month2,day2

Scanner reader=new Scanner(System.in)

System.out.println("请输入第一个日期的年份 月份 日期 ,每输入一个数回车确认")

year1= reader.nextInt()

month1= reader.nextInt()

day1= reader.nextInt()

System.out.println("请输入第二个日期的年份 月份 日期 ,每输入一个数回车确认")

year2= reader.nextInt()

month2= reader.nextInt()

day2= reader.nextInt()

Calendar calendar=Calendar.getInstance()

calendar.set(year1,month1,day1)

long timeYear1=calendar.getTimeInMillis()

calendar.set(year2,month2,day2)

long timeYear2=calendar.getTimeInMillis()

long 相隔天数=Math.abs((timeYear1-timeYear2)/(1000*60*60*24))

System.out.println(""+year1+"年"+month1+"月"+day1+"日和"+

year2+"年"+month2+"月"+day2+"日相隔"+相隔天数+"天")

}

}

全部都给你

希望那个可以帮助到你 祝你学习成功

《C程序设计语言(第2版·新版)》([美] Brian W. Kernighan)电子书网盘下载免费在线阅读

链接: https://pan.baidu.com/s/1txJqYzmjYS-BSw43eLWrnQ

提取码: sejp  

书名:C程序设计语言(第2版·新版)

作者:[美] Brian W. Kernighan

译者:徐宝文

豆瓣评分:9.4

出版社:机械工业出版社

出版年份:2004-1

页数:258

内容简介:

在计算机发展的历史上,没有哪一种程序设计语言像C语言这样应用广泛。本书作者是C语言的设计者之一Dennis M. Ritchie和著名计算机科学家Brian W. Kernighan合著的一本介绍C语言的权威经典著作。我们现在见到的大量论述C语言程序设计的教材和专著均以此书为蓝本。

原著第1版中介绍的C语言成为后来广泛使用的C语言版本——标准C的基础。人们熟知的“hello,World"程序就是由本书首次引入的,现在,这一程序已经成为众多程序设计语言入门的第一课。原著第2版根据1987年制定的ANSIC标准做了适当的修订.引入了最新的语言形式,并增加了新的示例,通过简洁的描述、典型的示例,作者全面、系统、准确地讲述了C语言的各个特性以及程序设计的基本方法。

对于计算机从业人员来说,本书是一本必读的程序设计语言方面的参考书。

作者简介:

Brian W. Kernighan,贝尔实验室计算科学研究中心高级研究人员,著名的计算机科学家。参加了UNIX系统、C语言、AWK语言和许多其他系统的开发,同时出版了许多在计算机领域具有影响的著作,如《The Elements of Programming Style》《The Practice of Programming》《The UNIX Programming Environment》《The AWK Language》《Software Tools》等。

Dennis M. Ritchie,1967年加入贝尔实验室。他和 Ken L. Thompson 两人共同设计并实现的C语言改变了程序设计语言发展的轨迹,是程序设计语言发展过程中的一个重要里程碑。与此同时,他们还设计并实现了UNIX *** 作系统。正是由于这两项巨大贡献,Dennis M. Ritchie 于1983年获得了计算机界的最高奖——图灵奖。此外,他还获得了ACM、IEEE、贝尔实验室等授予的多种奖项.。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7751142.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存