趣味编程100例(部分)(2)

2019-03-11 15:23

double sr=input.nextDouble();

System.out.println(\应交个人所得税:\调用计算所得税方法

}

public static double getTax(double sal) {

double t=0; //t代表应交税款

double b=sal-3500; //b代表应纳税所得额 if(b<=500) //计算级数1的税款 {

t=b*0.05; return t; }

else if(b<=2000) //计算级数2的税款 {

t=25+(b-500)*0.1; return t; }

else if(b<=5000) //计算级数3的税款 {

t=175+(b-2000)*0.15; return t; }

else if(b<=20000) //计算级数4的税款 {

t=625+(b-5000)*0.2; return t; }

else if(b<=40000) //计算级数5的税款 {

t=3625+(b-20000)*0.25; return t; }

else if(b<=60000) //计算级数6的税款 {

t=8625+(b-40000)*0.3; return t; }

else if(b<=80000) //计算级数7的税款 {

t=14625+(b-60000)*0.35; return t; }

else if(b<=100000) //计算级数8的税款

{

t=21625+(b-80000)*0.4; return t; }

else //计算级数9的税款

{

t=29625+(b-100000)*0.45; return t; } } }

(4)运行结果

运行程序,结果如图2.2所示。

3.扩展训练

前面的代码,在计算每个级数的税款时,都直接加上一个扣除累计数,扣除累计数是我们写代码前,慢慢计算出来的,这个需要不少时间哟,如果级数的分段数字重新划分或每级的税率修改了,那么又要重新算一遍,是不是很麻烦,我们可以尝试把分级的数据段和税款放到数组里,让程序自己来算。参考代码如下:

import java.util.Scanner;

public class ch2_2_2 {

public static void main(String[] args) {

Scanner in=new Scanner(System.in); int s;

int sum=0;

//salary存放分级标准

int salary[]={0,500,2000,5000,20000,40000,60000,80000,100000}; //rate存放分级税率

int rate[]={5,10,15,20,25,30,35,40,45};

System.out.print(\请输入月收入:\

s=in.nextInt();

s=s-3500; //扣除基数

int index=0; //记录级数

//循环查找,属于哪一级,index记录下标

for(int i=0;i

if(s

index=i; //找到后记录下标

break; } }

System.out.println(\级别:\ //循环计算扣除累计数

for(int i=0;i

sum=sum+(int)((salary[i+1]-salary[i])*rate[i]*0.01); }

//计算最终税款

sum=sum+(int)((s-salary[index-1])*rate[index-1]*0.01); System.out.print(\交税总额:\ } }

2.3 存 钱 问 题 1.问题描述

父亲准备为小龙的四年大学生活一次性储蓄一笔钱,使用整存零取的方式,控制小龙每月月初取1000元准备这个月使用。假设银行整存零取的年息为1.71%,请算出父亲至少需要存入多少钱才行。 2.问题分析

这个问题是一个典型的递推问题,分析存钱和取钱的过程,我们可以采用逆推的方法。4年48个月,每月取1000元,最后一个月正好取完。我们可以采用一个数组存放每个月剩余的钱数,那么最后一个月连本带息为1000,即第48个月数组里的值为1000。 第47个月的存折里钱为:取走的1000元生活费+下个月1000月的本金,即: 1000+第48个月的钱数/(1+0.00171/12)

依次类推可以求出第46、45、??、第1个月的钱数:

第46个月的存折里钱为:1000+第47个月的钱数/(1+0.00171/12) 第45个月的存折里钱为:1000+第46个月的钱数/(1+0.00171/12)

??

第1个月的存折里钱为:1000+第2个月的钱数/(1+0.00171/12) 通过以上的递推就可以求出最初存款的钱数。 (1)确定程序框架

通过前面的分析,我们就可以写出程序框架了。代码如下:

public class ch2_3 {

public static final double MONEYRATE=0.0171; public static void main(String[] args) {

...

for(int i=47;i>0;i--) {

//通过循环逆推出前一个月的剩余存款 } ... } }

(2)写出递推公式

通过前面的问题分析,我们很容易得到递推公式,如下:

money[i-1]=1000+money[i]/(1+MONEYRATE/12);

(3)完整程序

现在我们就需要把刚才的程序进行组合,构成我们的完整程序:

public class ch2_3 {

public static final double MONEYRATE=0.0171; 存款利率

public static void main(String[] args) {

//定义一个长度为48的数组,用来装每个月月初还剩下的存款 double money[]=new double[48]; //最后一个月月初1000元

money[47]=1000;

System.out.printf(\月初的剩余存款数为:%.2f\\n\ //通过循环逆推出前一个月的剩余存款

for(int i=47;i>0;i--) {

money[i-1]=1000+money[i]/(1+MONEYRATE/12); System.out.printf(\月初的剩余存

款//数

为:%.2f\\n\

}

//算出最初要存入的钱,即第一个剩余存款数

System.out.printf(\最初要存入%.2f元。\ } }

2.4 赛 场 统 分 1.问题描述

在编程竞赛中,有10个评委为参赛的选手打分,分数为0~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。 2.问题分析

这是一个典型的求最大值、最小值问题,为方便数据处理,我们可以把10个评委的打分放到数组里,然后通过循环打擂的原则,把最大值、最小值求出来,同时累加求和,这样一次循环就能实现。 (1)确定程序框架

通过前面的问题描述,我们可以首先循环输入10个分数,然后求出最大值、最小值,最后累加求和,算出平均分。程序的框架如下:

public class ch2_4 {

public static void main(String[] args) {

...

//循环录入10个人的分数

//通过打擂求出最大值、最小值 //累加求和 //输出结果

} }

(2)循环录入分数

通过一个循环语句,很容易实现,代码如下:

for(i=0;i<10;i++) {

System.out.print(\请输入第\分数:\ Scanner input=new Scanner(System.in); X[i]=input.nextInt(); }


趣味编程100例(部分)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:南昌二中参观学习心得体会

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: