《Java语言程序设计一》课后习题答案全集.docx
《《Java语言程序设计一》课后习题答案全集.docx》由会员分享,可在线阅读,更多相关《《Java语言程序设计一》课后习题答案全集.docx(262页珍藏版)》请在冰豆网上搜索。
《Java语言程序设计一》课后习题答案全集
1.1 指出JAVA语言的主要特点和JAVA程序的执行过程.
答:
(1)强类型;
(2)编译和解释;
(3)自动无用内存回收功能;
(4)面向对象;
(5)与平台无关;
(6)安全性;
(7)分布式计算;
(8)多线程;
程序执行过程如图所示:
编写源文件,编译器编译源文件转换成字节码,解释器执行字节码。
1。
2说出开发与运行JAVA程序的重要步骤。
答:
(1)编写源文件:
使用一个文本编译器,如Edit或记事本,不可以使用Word。
将编好的源文件保存起来,源文件的扩展名必须是。
java;
(2)编译Java源文件:
使用Java编译器(javac。
exe)编译源文件得到字节码文件;
(3)运行Java程序:
Java程序分为两类——Java应用程序必须通过Java解释器(java.exe)来解释执行其字节码文件;Java小应用程序必须通过支持Java标准的浏览器来解释执行。
1.3如何区分应用程序和小应用程序?
答:
应用程序在与源文件名字相同的类中,有main()方法,该方法代表应用程序的入口;小应用程序必须有一个Applet类的子类,该类称作主类,必须用public修饰.
1.4说出JAVA源文件的命名规则。
答:
源文件命名规则和类命名规则一样,所有的单词首字母都用大写字母,且必须和源文件的public类同名。
1。
6JAVA语言使用什么字符集?
共有多少个不同的字符?
答:
Java语言使用Unicode字符集,共有65535个字符。
1。
7JAVA语言标识符的命名规则是什么?
(1)由字母(包括英文字母、下划线字符、美元字符、文字字符)和数字字符组成
(2)限定标识符的第一个字符不能是数字字符
(3)不能和关键字重名
(4)长度不能超过255个字符
1.8JAVA有那些基本数据类型,它们的常量又是如何书写的?
数据类型
关键字
字节数
默认值
常量举例
范围
逻辑类型
布尔型
boolean
1
false
false,true
false,true
字符型
char
2
0
a,我,ぽ
0~ 65535
整数类型
字节性
byte
1
0
12,13,45
—128~127
短整型
short
2
0
12,13,45
—32768~32767
整型
int
8
0
12,13,45
-2E31 ~ 2E31—1
长整型
long
8
0L
12L,13L,45L
—2E63 ~ 2E63-1
浮点类型
单精度浮点
float
4
0F
12。
345F,6。
7891F
-10E38 ~ —10E-38
10E-38 ~10E38
双精度浮点
double
8
0D
12.345D,6.7891D
-10E308~-10E—308
10E-308~10E308
1。
9指出下列内容哪些是JAVA语言的整型常量,哪些是浮点数类型常量,哪些两者都不是.
整型常量:
4)0xABCL,8)003,10)077,12)056L
浮点数类型常量:
3)-1E-31,5)。
32E31 13)0.,14).0
两者都不是:
1),2),6),7),9),11)
第二章运算和语句
2。
1 Java的字符能参加算术运算吗?
可以。
(1)字符与整型数据运算,结果为整型数据,只能赋给整型变量,如果附给字符型变量会损失精度,需要强制类型装换;
(2)字符与字符运算,结果为字符型数据,可以直接赋给字符型或整型变量。
2.2占字节多的变量能直接赋值给占字节少的变量么?
答:
不能直接赋值,需要强制类型转换。
2.3试用Java语言表达式描述以下数学计算式或逻辑条件:
1)
解:
V=(4。
0/3)*Math.PI*Math.pow(r,3);
2)
解:
R=1。
0 / (1.0/R1+1.0/R2);
3)
解:
y= Math.pow(x,5)+Math.pow(x,3)+6;
4)
解:
F=1.0*M1* M2/(R *R);
5)
解:
Math.sin(x)/a *x+Math.abs( Math。
cos(π *x/ 2));
6)0<a〈10
解:
a> 0&& a<10
7)条件 x=1与y=2有且只有一个成立.
解:
(x==1&&y!
=2)|| (x!
=1&& y==2)
2。
4设在求以下表达式之前,整型变量a的值是4,试指出在求了以下表达式之后,变量a、b和c的值.
1)
解:
a=5;b=16;
2);
解:
a=5;c=10
2.6若一个数恰好等于它的因子之和,则这个数称为“完全数”。
编写程序求1000之内的所有完全数。
分析:
若一个自然数,它所有的真因子(即除了自身以外的约数)的和恰好等于它本身,这种数叫做完全数。
例如6=1+2+3;28=1+2+4+7+14
程序运行结果:
/**
* @author段智敏
*/
public classWork2_6{ﻩ
publicstaticvoidmain(String[]args) {
ﻩﻩStringresultString =”1000以内,完全数有:
";//最后结果字符串
ﻩﻩfor (inti =1; i〈=1000;i++){
ﻩﻩﻩif(isPerfectNumber(i)){
ﻩresultString +=i+",";
ﻩ}
ﻩ}
ﻩﻩSystem.out.println(resultString);
}
ﻩprivatestaticbooleanisPerfectNumber(int number){
ﻩintsum=0;//因子的和
ﻩStringstr = newString(”");
for (inti=1;i〈number;i++){
ﻩif(number%i ==0){
sum +=i;
ﻩﻩﻩstr+=i+ ”+";
}
ﻩ}
ﻩif(sum==number){//如果因子之和,等于本身,则是完数
ﻩstr=str.substring(0, str。
length()-1);// 去掉字符串最后一个多余的“+”;
ﻩSystem.out。
println(number +"的因子有:
"+str);
ﻩﻩreturntrue;
ﻩ}ﻩ
ﻩreturn false;ﻩ
}
}
2.7编写输入正实数x,求平方不超过x的最大整数n,并输出。
程序运行结果:
第一种命令行方式输入
importjava。
util.Scanner;
/**
*编写输入正实数x,求平方不超过x的最大整数n,并输出。
<BR〉
* 命令行方式,输入正实数,输出结果<BR>
*@author段智敏
*/
publicclassWork2_7_1
{
ﻩpublicstaticvoid main(String[] args)
ﻩ{
ﻩScannerconsoleScanner =newScanner(System。
in);
ﻩSystem.out。
print(”请输入正实数X:
");
ﻩStringstr= consoleScanner。
next();
ﻩintnumber= -1;
ﻩﻩtry
ﻩ{
number=Integer.parseInt(str);
}
ﻩcatch(NumberFormatExceptione)
ﻩ{
ﻩﻩSystem.out.println(”输入非法字符,程序结束!
!
!
");
ﻩﻩﻩreturn;
}
ﻩif(number<1)
ﻩﻩﻩSystem.out。
println("输入的数不是正实数,程序结束!
!
!
”);
ﻩelse
ﻩ{
ﻩﻩintn =(int)(Math。
sqrt(number));
ﻩSystem。
out.println("平方不超过"+number+"的最大整数,n=”+n+";”);
ﻩ}
}
}
第二种窗口方式输入
运行结果如下图:
/**
* 编写输入正实数x,求平方不超过x的最大整数n,并输出。
*弹出窗口方式
*@author 段智敏
*/
importjavax.swing.JOptionPane;
publicclass Work2_7_2
{
ﻩprivateintnumber;
ﻩ
publicWork2_7_2()
ﻩ{
ﻩnumber=this。
getIntegerNumber("请输入一个正实数",1);
ﻩif(number<1)
ﻩﻩreturn;//非法,程序结束
ﻩintn =(int) (Math.sqrt(number));
ﻩﻩshowResult("平方不超过" +number+"的最大整数\nn="+ n+";");
ﻩ}
ﻩ
ﻩ/**
ﻩ*通过图形界面,得到符合规则的正整数的方法
*@parammessage—在弹出的对话框中,显示提示信息message
ﻩ * @parammin—要求此数必须大于等于min
*/
ﻩpublicintgetIntegerNumber(String message,intmin)
{
Stringstr=JOptionPane。
showInputDialog(null,”请输入一个正整数",”提示信息”,
ﻩJOptionPane.INFORMATION_MESSAGE);
ﻩintnumber= —1;
ﻩtry
{
ﻩﻩnumber=Integer。
parseInt(str);//得到输入的正整数
ﻩ}
ﻩcatch(Exceptione)
ﻩ{
ﻩﻩJOptionPane.showMessageDialog(null,"输入非数字字符\n程序结束","错误警告",
ﻩﻩﻩJOptionPane。
ERROR_MESSAGE);
ﻩreturn —1;//输入的不是数字字符,程序结束
ﻩ}
ﻩﻩ
if(number< min)
ﻩﻩ{
ﻩJOptionPane.showMessageDialog(null,"输入的数不符合规则,不是正整数\n程序结束”,
ﻩﻩ”错误警告",JOptionPane.ERROR_MESSAGE);
ﻩﻩﻩreturn—1;//输入的数不是大于2的正整数时候,程序结束
ﻩ}
else
ﻩﻩreturn number;
ﻩ}
ﻩ
ﻩ/**
ﻩ *弹出对话框,显示结果
ﻩ*@param str-需要显示的字符串
*/
publicvoidshowResult(Stringstr)
ﻩ{
ﻩJOptionPane.showMessageDialog(null,str,”输出结果",
ﻩJOptionPane。
INFORMATION_MESSAGE);
}
ﻩpublicstatic voidmain(String[]args)
{
new Work2_7_2();
}
}
2.8输入正整数n,输出由n行n列星号字符组成的三角形图案.
程序运行结果:
源代码文件:
Work2_8.java
importjava.util.*;
/**
*输入正整数n,输出由n行n列星号字符组成的三角形图案。
*@author段智敏
*/
publicclassWork2_8
{
ﻩpublicstaticvoidmain(Stringargs[])
ﻩ{
ScannerconsoleScanner =newScanner(System.in);
ﻩﻩSystem.out。
print("请输入正整数n:
”);
ﻩStringstr = consoleScanner。
next();
ﻩint n=—1;
ﻩtry
ﻩ{
n=Integer.parseInt(str);
ﻩ}
ﻩﻩcatch(NumberFormatExceptione)
ﻩ{
System.out。
println("输入非法字符,程序结束!
!
!
”);
ﻩreturn;
ﻩ}
ﻩif (n〈1)
ﻩSystem.out.println(”输入的数不是正实数,程序结束!
!
!
”);
ﻩelse
ﻩ{
ﻩfor(inti=0;i<n;i++)
ﻩ{
ﻩfor(intj=0;j〈n—i-1;j++)
ﻩﻩ{
ﻩﻩSystem.out.print(" ");
ﻩﻩﻩﻩ}
ﻩﻩﻩfor(intk=0;k〈i+1;k++)
ﻩﻩﻩ{
ﻩSystem.out。
print("*");
ﻩﻩﻩ}
ﻩﻩSystem.out。
println();
ﻩ}
ﻩﻩ}
}
}
2.9设有整型变量x和y的值分别为5和110。
试指出执行了以下循环语句后,变量x和y的值分别多少?
1)while(x〈=y)x*=2;
解:
x=160;y=110;
2)do{x=y/x;y=y-x;}while(y〉=1);
解:
x=18; y=0;
2。
10求小于999的所有水仙花数。
程序运行结果:
源代码文件:
Work2_10.java
/**
* 求小于999的所有水仙花数
*@author段智敏
*/
publicclass Work2_10
{
ﻩpublicstatic voidmain(String[]args){
ﻩﻩString resultString=newString("1000之前的所有水仙花数有:
");//用来存结果的字符串
ﻩfor(inti= 100; i<999;i++)
{
ﻩﻩif(isNarcissusNumber(i))
ﻩﻩresultString+=" ”+i;
ﻩ}
ﻩﻩSystem。
out.println(resultString。
substring(0,resultString.length()-1));
}
public staticbooleanisNarcissusNumber(intm)// 判断是否是水仙花数的方法
{
ﻩintnumber=m;//把m存起来
ﻩint a[]=newint[100];//用来存n每个位上的数
ﻩint amount=0;//表示n的位数
ﻩﻩwhile(m>0)// 通过循环得到m每个位上的数,存到数组中
ﻩ{
ﻩa[amount]=m %10;
ﻩﻩm =m/10;
ﻩﻩamount++;
ﻩ}
ﻩﻩintsum =0;
ﻩfor (intj=0;j〈amount; j++)//累加每位上的数的位数次方
ﻩ{
ﻩsum+= Math.pow(a[j],amount);
ﻩﻩ}
if(number== sum)//如果累加的和等于这个数本身,则他是水仙花数,返回真
ﻩreturn true;
returnfalse;
ﻩ}
2。
11编程序解百鸡问题:
鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
百钱买百鸡.求鸡翁、鸡母和鸡雏各几何?
程序运行结果:
源代码文件:
Work2_11.java
/**
*鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。
〈BR〉
*百钱买百鸡。
求鸡翁、鸡母和鸡雏各几何.〈BR>
*@author段智敏
*/
public classWork2_11
{
publicstaticvoidmain(String args[])
ﻩ{
ﻩﻩfor(int i =0; i<=100;i++)
ﻩ{
for(intj=0;j〈=100; j++)
{
ﻩﻩfor (int k=0;k 〈=100;k+=3)//鸡雏的个数必须使3的倍数
ﻩ{
ﻩif(((5*i+3*j +k/3)==100)&&(i+j+ k== 100))
ﻩﻩﻩSystem.out.println(”鸡翁:
”+ i+”;鸡母:
”+j+";鸡雏:
"ﻩ+ k);
ﻩﻩ}
ﻩ}
ﻩ}
ﻩ}
}
2。
12编写程序,按下面的公式计算自然对数底e的值:
e=1+1/1!
+1/2!
+1/3!
+1/4!
+.。
.。
..
/**
*按公式计算:
e=1+1/1!
+1/2!
+1/3!
+1/4!
+.。
。
..。
*@author段智敏
*/
public classWork2_12
{
publicstaticvoidmain(String args[])
ﻩ{
ﻩﻩintn =1000;// 计算精度
ﻩdoublee=1。
0;
ﻩfor(inti=1;i〈=n;i++)
{
ﻩe=e+1.0 /Work2_12.factorial(i);
}
ﻩSystem。
out。
println(”e=”+e);
}
/**
*计算阶乘的静态方法
*@param—需要计算阶乘的数
ﻩ* @return-最后结果
ﻩ*/
ﻩstaticdoublefactorial(inta)
ﻩ{
ﻩdouble f=1.0;
ﻩfor(intj=1; j<=a;j++)
ﻩf =f* j;
ﻩreturn f;
ﻩ}
}
2.13 编写程序,用如下公式计算圆周率PI的近似值:
PI=4-4/3+4/5—4/7+4/9-4/11.。
.
程序运行结果:
源代码文件:
Work2_13。
java
/**
* 圆周率计算
* @author 段智敏
*/
public classWork2_13
{
publicstatic voidmain(String args[])
{
ﻩintnum =1000000;//控制计算的项数,越高,越准确
ﻩSystem.out.println(”用公式计算圆周率,\n计算" +num+”项后圆周率的近似值为"
ﻩ+ Work2_13.getPai(num));
ﻩ
ﻩSystem。
out.println(”3。
14是第”+Work2_13.getIndex(3。
14)+"项,\t\t值为:
"
ﻩ+Work2_13。
getPai(Work2_13。
getIndex(3。
14)));
ﻩ
ﻩSystem.out.println(”3。
141是第"+Work2_13.getIndex(3.141)+”项,\t值为:
”
ﻩﻩ+ Work2_13。
getPai(Work2_13.getIndex(3.141)));
ﻩ
ﻩSystem.out。
println("3。
1415是第"+Work2_13.getIndex(3.1415)+ "项,\t值为:
”
ﻩﻩﻩ+Work2_13。
getPai(Work2_13。
getIndex(3.1415)));
ﻩﻩ
ﻩSystem.out。
println("3.14159是第"+Work2_13.getIndex(3.14159)+”项,\t值为:
"
ﻩﻩﻩ+Work2_13.getPai(Work2_13.getIndex(3。
14159)));
ﻩ}
ﻩ
/**
ﻩ*根据给出的数值,得到需要计算多少项才能得到这个数值
*
*@param p -数值
ﻩ * @return- 项数
*/
publicstatic doublegetIndex(double p)
{
ﻩﻩintr=1, num =1000000;// 控制计算的项数,越高,越准确
doublei = 1.0,pai= 0.0, t=1.0;
while(r < num)
{
ﻩﻩpai=pai+(4.0/i) *t;
ﻩt=-t;
ﻩﻩﻩi=i+2;
ﻩr++;
ﻩif(pai〉= p&&pai〈=(p+0.000001))
ﻩﻩbreak;
ﻩﻩ}
ﻩﻩreturn r;
ﻩ}
ﻩ/**
ﻩ*根据给出的数,按公式进行计算圆周率
*@paramnum—公式项数
*@return返回按公式计算出的圆周率
*/
ﻩpublicstaticdouble getPai(doublenum)
{
intr=1;
ﻩdoublei= 1。
0, pai=0.0, t=1。
0;
ﻩwhile(r<num)
ﻩﻩ{
pai= pai+(4.0/i)* t;
t= —t;
ﻩi=i+2;
r++;
ﻩ}
return pai;
ﻩ}
}
2.14回文整数是指正读法和反读相同的整数,编写一个程序,输入一个整数,判断他是否为回文整数。
程序运行结果:
import javax.swing。
JOptionPane;
/**
*输入整数,判断是否是回文整数
*@author段智敏
*/
public classWork2_14
{
ﻩprivate intnumber;
ﻩ
publicWork2_14()
ﻩ{
ﻩﻩnumber=getIntegerNumber("输入一个正整数n",1);//要求是〉=1的整数
ﻩif(number <0)
ﻩreturn;
ﻩif(isPalindrome(number))
ﻩﻩshowResult("输入的正整数 “"+number+""是回文数");
ﻩelse
ﻩshowResult("输入的正整数 “" +number + ""不是回文数");
ﻩ}
ﻩ/**
ﻩ* 判断是否是回文数
ﻩ*@paramnumber—需要判断的正整数