编程珠玑第三章3.7习题(1-4)
2016-08-24 22:23
393 查看
1.收税问题。
关注收税区间段的起始部分,结束部分,及此区间的税率;因为收税区间段都是每500$一个间隔且税率也随着收税区间的提高每次加上0.01;因而很容易得到下面的循环累加程序。
2.k阶常系数线性递归函数定义的级数问题
An=C1*An-1+C2*An-2+……+CkAn-k+Ck+1;
其中,C1,C2,….,Ck+1为实数,编写一个程序,其输入为k,A1,…,Ak,C1,…,Ck+1和m,至少输出为A1至Am
代码如下
运行前进行配置,我实在myeclipse(eclipse类似),右击在run as 选择run configuration,进行如下配置
所以我的配置中设置k=4;a1,a2,a3,a4分别是1,2,3,4;c1到c5全为1;m=8;
3.可以当个游戏写写看,只要将26个字母分别图形化表示即可。对于每个字母控制输出的空格及及用于表示字母的基本符号的个数,还有行数等等
4.编写处理如下日期问题的函数:给定两个日期,计算两者之间的天数;给定一个日期,返回值为周几;给定月和年,使用字符数组输出该月的日历
这里偷了点懒,用了Date的getTime函数,其实完全可以自己写的,但是有轮子不必自己造,Java甚至还有Calendar类,但是我发现使用有点问题就自己写了。
关注收税区间段的起始部分,结束部分,及此区间的税率;因为收税区间段都是每500$一个间隔且税率也随着收税区间的提高每次加上0.01;因而很容易得到下面的循环累加程序。
package chapter3; public class t1 { public static float getTax(int income){ float taxRate=0.14f; float tax=0; int cur_taxed_range_start=2200;//表示当前收税的区间段的开始部分 while(income>cur_taxed_range_start){ if(income>cur_taxed_range_start+500){ tax+=500*taxRate; taxRate+=0.01; cur_taxed_range_start+=500; } else{ tax+=(income-cur_taxed_range_start)*taxRate; break;//跳出循环,不可能再到下一个收税区间了 } } return tax; } public static void main(String args[]){ System.out.println(getTax(3400)); System.out.println(getTax(4000)); } }
2.k阶常系数线性递归函数定义的级数问题
An=C1*An-1+C2*An-2+……+CkAn-k+Ck+1;
其中,C1,C2,….,Ck+1为实数,编写一个程序,其输入为k,A1,…,Ak,C1,…,Ck+1和m,至少输出为A1至Am
代码如下
package chapter3; public class t2 { public static int computeAn(int a[],int n,int c[]){ for(int i=1;i<c.length-1;i++){ a +=c[i]*a[n-i]; } a +=c[c.length-1]; return a ; } public static void main(String [] args){ int k=Integer.valueOf(args[0]); int m=Integer.valueOf(args[2*k+2]); int a[]=new int[m+1]; for(int i=1;i<=k;i++){ a[i]=Integer.valueOf(args[i]); } int c[]=new int[k+2]; for(int i=1;i<k+2;i++){ c[i]=Integer.valueOf(args[k+i]); } if(m>k){ for(int i=k+1;i<=m;i++){ computeAn(a, i, c); } } for(int i=1;i<=m;i++){ System.out.print(a[i]+" "); } } }
运行前进行配置,我实在myeclipse(eclipse类似),右击在run as 选择run configuration,进行如下配置
所以我的配置中设置k=4;a1,a2,a3,a4分别是1,2,3,4;c1到c5全为1;m=8;
3.可以当个游戏写写看,只要将26个字母分别图形化表示即可。对于每个字母控制输出的空格及及用于表示字母的基本符号的个数,还有行数等等
4.编写处理如下日期问题的函数:给定两个日期,计算两者之间的天数;给定一个日期,返回值为周几;给定月和年,使用字符数组输出该月的日历
这里偷了点懒,用了Date的getTime函数,其实完全可以自己写的,但是有轮子不必自己造,Java甚至还有Calendar类,但是我发现使用有点问题就自己写了。
package chapter3; import java.util.Date; public class t3 { public static boolean judgeYear(int year){//如果是闰年返回true if(( year%100!=0 && year%4==0 )||(year%400==0)){ return true; } return false; } public static int getMonthDays(int month){ switch (month) { case 2: return 28; case 4: case 6: case 9: case 11: return 30; default: return 31; } } public static void main(String [] args){ Date date1=new Date(2016,8,21);//假定知道2016年8月21日为星期日 Date date2=new Date(2016,8,1); long d1=date1.getTime(); long d2=date2.getTime(); long days; long oneDayMil=1000*3600*24; if(d1>d2) days=(d1-d2)/oneDayMil; else { days=(d2-d1)/oneDayMil; } System.out.println(days); int rest=(int) (days%7); String[] weeks={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"}; if(d1-d2>oneDayMil){ rest=(7-rest)%7;//日期date2如果是前面的话,就需要倒着数,因此用7减一下,又怕刚好是前面的相差的七天整数倍,导致rest=0,从而数组下标溢出,所以对7取模 } int year=date2.getYear(); int month=date2.getMonth(); int ds; System.out.println(year+"-"+month+"-"+date2.getDate()+"是"+weeks[rest]); if(month==2){ if(judgeYear(year)){ ds=29; } else { ds=28; } } else{ ds=getMonthDays(month); } System.out.println(year+"年"+month+"月"); System.out.println(" 07 01 02 03 04 05 06"); for(int i=0;i<rest*4;i++){ System.out.print(" "); } int count=rest; for(int i=1;i<=ds;i++) { if(i<10) System.out.print(" 0"+i+" "); else { System.out.print(" "+i+" "); } count++; if(count==7){ System.out.println(); count=0; } } } }
相关文章推荐
- 编程珠玑第三章习题3.7(5-8)
- 《编程珠玑》习题练习In Python——第三章 数据决定程序结构
- 编程珠玑:第三章 数据决定程序结构 习题解答
- 编程珠玑第三章习题1
- 编程珠玑之第三章习题1
- 编程珠玑第三章课后习题
- 编程珠玑第三章习题答案
- 编程珠玑(第三章)中的有趣的一道练习题(习题8):seven-segment devices
- C++primer第三章习题3.7
- 【第三周】第三章习题3.7
- 编程珠玑之第三章习题2
- 编程珠玑 第二版 第三章 习题答案
- 编程珠玑第二版第三章习题(Java)
- 编程珠玑第三章习题
- 1201: 华科版C语言程序设计教程(第二版)课后习题3.7
- java2 实用教程 第三版 第三章 习题 6
- 快学Scala习题解答—第三章 数组相关操作
- 《C++ Primer》第五版课后习题解答_第三章(3)(21-29)
- 编程珠玑第二版第四章习题(Java)
- 第三章习题