自考教材《java语言程序设计》第二章习题解答.doc_第1页
自考教材《java语言程序设计》第二章习题解答.doc_第2页
自考教材《java语言程序设计》第二章习题解答.doc_第3页
自考教材《java语言程序设计》第二章习题解答.doc_第4页
自考教材《java语言程序设计》第二章习题解答.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章习题解答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 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=102.5编写一个程序,示意前缀+与后缀+的区别,前缀与后缀的区别。分析:其实只是在程序中简单地使用这两类自增、自减运算符就可以了,打印出运算前后的值就可以了,同学们可以自行写出,这里只给出参考程序:public class Xt25 public static void main(String args) int i=7,j=5,k=10,n=8,x,y; System.out.print(变量i的值为+i); x=i+; System.out.println(,执行赋值运算x=i+后,x的值为+x+,i的值为+i);/提示注意print和println的差别,并注意本题整体输入效果! System.out.print(变量j的值为+j); y=+j; System.out.println(,执行赋值运算y=+j后,y的值为+y+,j的值为+j); System.out.print(变量k的值为+k); x=k-; System.out.println(,执行赋值运算x=k-后,x的值为+x+,k的值为+k); System.out.print(变量n的值为+n); y=-n; System.out.println(,执行赋值运算x=-n后,y的值为+y+,n的值为+n); 程序运行结果:变量i的值为7,执行赋值运算x=i+后,x的值为7,i的值为8变量j的值为5,执行赋值运算y=+j后,y的值为6,j的值为6变量k的值为10,执行赋值运算x=k-后,x的值为10,k的值为9变量n的值为8,执行赋值运算x=-n后,y的值为7,n的值为72.6 若一个数恰好等于它的因子之和,则这个数称为“完全数”。编写程序求1000之内的所有完全数。分析:若一个自然数,它所有的真因子(即除了自身以外的约数)的和恰好等于它本身,这种数叫做完全数。求出所有真因子是解题的关键。package wanquanshu;/定义程序包名public class Xt26 /定义本题的类名public static void main(String args) System.out.println(1000以内的完全数有:);/先输出一个标题for(int i=1;i=1000;i+)int sum=0;for(int j=1;ji;j+)/此循环逐个找出每个i的真因子并计算其和存放在sum变量中if(i%j=0) sum+=j;if(sum=i)/如果sum等于i,则其为“完全数”/System.out.println(1000以内的完全数有:);System.out.print(sum+t);System.out.println(n);程序运行结果1000以内的完全数有:6284962.7 编写输入正实数x,求平方不超过x的最大整数n,并输出。分析:本题完全可以模仿教材例2.15中的处理方法:即在for循环中将表达式2设置为测试循环变量k是否满足其平方值小于等于输入的正实数i,最后一次循环中,其循环变量必定是要求的“最大整数”,而循环体可以为空,什么也不做,因为我们只是对循环变量感兴趣。此外,为了判定输入的数的合法性,可以使用”try.catch”语句。import javax.swing.JOptionPane;public class Xt27 public static void main(String args) int n,x;String result=(String)JOptionPane.showInputDialog(null,请输入一个正整数,输入对话框,JOptionPane.PLAIN_MESSAGE,null,null,null);/输入对话框try /使用异常处理测试输入的数是否合法x = Integer.parseInt(result);/将输入字符串转换为整数catch( NumberFormatException e ) System.out.println(输入非法字符,程序结束!);return;if (x 1)System.out.println(输入的数不是正实数,程序结束!);return;else for(n=1;n*n=x;n+)/使用for循环,循环体为空,只是使用循环变量 ; n=n-1;/因为出循环时循环变量n的值恰好比能满足不等式n*n=x的n值大1(比最后一次正常执行循环时的循环变量大1) System.out.println(平方不超过+x+的最大整数是+n);除了使用循环体为空的for循环完成本题外,还可以直接使用数学函数完成,将上述程序中else后面的内容改为如下所示:int n = (int) (Math.sqrt(i);/使用平方根函数System.out.println(平方不超过+i+的最大整数,n=+n+;); * * * * * * * * * *2.8 输入正整数n,输出由n行n列星号字符组成的三角形图案。以下是n=4的图案。 分析:此题可借鉴例2.14。import javax.swing.JOptionPane;public class Xt28 public static void main(String args) int x,i,j,k,space=20;/设第一行星号从第20个字符位置开始String result=(String)JOptionPane.showInputDialog(null,请输入一个正整数,输入对话框,JOptionPane.PLAIN_MESSAGE,null,null,null); /输入对话框try /使用异常处理测试输入的数是否合法x = Integer.parseInt(result);catch( NumberFormatException e ) System.out.println(输入非法字符,程序结束!);return;if (x 1)System.out.println(输入的数不是正实数,程序结束!);return;else for(i=1;i=x;i+,space-=2)/使用for循环输出x行星号,第1行1个,第2行2个,依次类推,共输出x行每行的相互两个星号间有一个空格for(j=1;j=space;j+)System.out.print( );/每行(第i行)先输出space个空格for(k=1;k=i;k+)System.out.print( *);/接着刚才的space个星号再输出i一个空格和i一个星号,至此,一行输出结束System.out.println(n);/换行,为输出下一行做准备 2.9 设有整型变量x和y的值分别为5和110。试指出执行了以下循环语句后,变量x和y的值分别试多少?1)while(x=1);解:x=18; y=0; (循环体总共执行8次)2.10 水仙花数是一个n(=3)位数字的数,它等于每个数字的n次幂之和。例如153是一个水仙花数,。试编写一个程序,求小于999的所有水仙花数。分析:先用for循环将数n有各位取出来,再进行计算。此为本题关键!思考:能否用while循环?解法1与解法2哪种通用性强?解法1public class Xt210_1 public static void main(String args) int i,a,b,c; for(i=100; i999; i+)/此循环要求熟记!,可类推到千位、万位、十万位. a = i/100;/取出百位 b = (i-a*100)/10;/取出十位 c = (i-a*100-b*10);/取出个位 if( i = (a*a*a + b*b*b + c*c*c) ) System.out.println(小于999的3位数中+i+是水仙花数); 解法2:使用while循环,并使用判断函数,函数返回值为逻辑型数据,将要判断的数作为参数。判断函数里要用到数组和Math函数pow(a,b),该函数返回参数a的b次幂不限定要判断的数只有3位数,可以大于3位,故只能使用不定次数的while循环。在主函数中调用该函数,主函数中对设置输入对话框并对输入的数进行合法性判断。import javax.swing.JOptionPane;public class Xt210_2 public static void main(String args) /从键盘输入一个大于100的整数,求出小于它的所有水仙花数 int x;String result=(String)JOptionPane.showInputDialog(null,请输入一个大于等于100的正整数,输入对话框,JOptionPane.PLAIN_MESSAGE,null,null,null); /输入对话框try /使用异常处理测试输入的数是否合法x = Integer.parseInt(result);/将输入字符串转换为整数catch( NumberFormatException e ) System.out.println(输入非法字符,程序结束!);return;if (x 100)System.out.println(输入的数不大于100,程序结束!);return;elseSystem.out.println(你输入的数是+x+,所有小于它的水仙花数如下:);for (int i = 100; i 0)/ 通过循环得到m每个位上的数,存到数组中aamount = m % 10;/取余数m = m / 10;/整除10amount+;int sum = 0;for (int j = 0; j amount; j+)/ 累加每位上的数的位数次方sum += Math.pow(aj, amount);/这里使用math函数计算if (number = sum)/ 如果累加的和等于这个数本身,则他是水仙花数,返回真return true;elsereturn false;如果输入的数是78963.则程序运行结果为你输入的数是78963,所有小于它的水仙花数如下:153是水仙花数370是水仙花数371是水仙花数407是水仙花数1634是水仙花数8208是水仙花数9474是水仙花数54748是水仙花数2.11 编程序解百鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡。求鸡翁、鸡母、和鸡雏个几何?分析:如果全习鸡翁,则 只能买20只,全买鸡母,只能买33.3333只,全买鸡雏,最多允许买100只(理论上可买300只)。因此各循环变量的范围就确定了。public class Xt211 public static void main(String args) int a,b,c,k;k=0;for(a = 0; a=20; a+) for(b=0; b34; b+) for(c=0; c1e-6)/不定次数循环,最后一项小于1e-6时停止循环s=1.0/m;/使用1.0做分子是因为s的数据类型为双精度浮点数,如果只写1,则此处的值将为整数,不合题目要求e+=s;/每次求和送变量en+;/n每次自增1 m*=n;/计算阶乘,此处是采用累乘的方式获得阶乘,为下一次循环计算s的值做好准备,注意学习此技巧 System.out.println(自然对数底e的近似值为:+e+,精度为0.000001,最后一项为“1/+n-1+!”);/注意为什么n要减1? 运行结果自然对数底e的近似值为:2.7182818011463845,精度为0.000001,最后一项为“1/10!”解法2:使用专门的函数计算数的阶乘,在主函数中调用此函数public class Xt212_2 public static void main(String args) /主函数int n=1;double s=1.0,e=1.0;while (s1e-6)s=1.0/factorial(n);/调用计算阶乘的函数factoriale+=s;/将每次项进行累加送变量e中n+; System.out.println(自然对数底e的近似值为:+e+,精度为0.000001,最后一项为“1/+n-1+!”);/注意为什么n要减1?static double factorial(int a)/计算阶乘的函数,要求很熟练地使用 double f = 1.0;for (int j = 1; j args_v)/使用不定次数的循环,循环检测条件为计算的项的值大于控制精度 temp=4.0/n;/temp存储每项运算结果 pi+=sign*temp;/计算各项值并累加后送pi变量中 n+=2;/保持n值为奇数:3,5,7,.(在第一次循环中n值为1) sign=-sign;/每次更改符号 loop+;/记录循环次数,即计算的项数 System.out.print(pi_args+是计算+loop+项后的结果,);/输出循环次数即计算项数 return pi;/返回函数值给调用者 运行结果3.14是计算624项后的结果,四舍五入前的值为3.13999009051615863.141是计算1686项后的结果,四舍五入前的值为3.14099953383175423.1415是计算10782项后的结果,四舍五入前的值为3.14149990641877033.14159是计算375434项后的结果,四舍五入前的值为3.14158999000573542.14 回文整数是指正读法和反读相同的整数,编写一个程序,输入一个整数,判断他是否为回文整数。分析:本题的关键在判断回文数的方法。可以用循环不断对10取方法得到各位上的数字和该数的总位数,并将各位上的数存入数组中,为后面判断是否回文作铺垫,循环的维持条件是不断整除10且结果不为0,要注意记录下循环次数,此次数就是要判断的数的位数。再以此位数作为循环次数,在循环中对数组进行检测看是否是回文数。以上工作可以放在一个函数中做。此外,还应像2.10题那样对用户输入的要判断的数进行合法性检查。import javax.swing.JOptionPane;public class Xt214 public static void main(String args) int x;boolean yesno;String result=(String)JOptionPane.showInputDialog(null,请输入一个大于等于1的正整数,输入对话框,JOptionPane.PLAIN_MESSAGE,null,null,null);try /使用异常处理测试输入的数是否合法x = Integer.parseInt(result);/将输入字符串转换为整数catch( NumberFormatException e ) JOptionPane.showMessageDialog(null, 输入非法字符,程序结束,错误警告, JOptionPane.ERROR_MESSAGE);return;if (x 0) / 不定次循环把整数的各个位上的数存到数组里ai = test % 10;/对10取余数test = test / 10;/整除10i+;/ 累计整数位数for (int j = 0; j i; j+)if (aj != ai - j - 1)/ 有对应不相等的,肯定不是,直接跳出并返回falsereturn false;return true;/ 如果一直相等,则if里边的语句不能被执行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论