A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 电玩 中级黑马   /  2013-4-19 22:32  /  8058 人查看  /  112 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 电玩 于 2013-4-20 12:00 编辑

要成为一个实力强劲的码农,光看视频是不够的,还需要不断的敲代码,敲代码,敲代码。
敲代码要有意义,要有思想。所以,以问题驱动的方式敲代码是最有效的。
在这个帖子里,我打算将《java语言程序设计》(美 Y.Danilei Liang)这本书中的编程练习题敲一遍。


请管理员有空改改我的名字
目前ID:电玩
改名ID:戴伟

评分

参与人数 3技术分 +1 黑马币 +24 收起 理由
王怀亮 + 12 加油
曹睿翔 + 12 不占你楼层,继续加油,会不定期为你加技术.
HM汪磊 + 1 赞一个!

查看全部评分

112 个回复

倒序浏览
本帖最后由 电玩 于 2013-4-24 11:38 编辑

第一章很简单,所以从第二章 基本程序设计 开始。
      《Java语言程序设计:基础篇(原书第8版)》第2章基本程序设计,本章将学习如何编程解决实际问题。通过这些问题,你将学到如何利用基本数据类型、变量、常量、运算符、表达式以及输入/输出来进行基本的程序设计。

2.1(将摄氏温度转换为华氏温度) 编写程序,从控制台读入double型的摄氏温度,然后将其转换为华氏温度,并且显示结果,转换公式如下所示:
     fahrenheit=(9/5)*celsius +32     (华氏温度=(9/5)*摄氏度+32)
提示: 在java中,9/5的结果是1,但是9.0/5的结果是1.8
回复 使用道具 举报
import java.util.Scanner;
public class  CelsiusToFahrenheit
{
        public static void main(String[] args)
        {
                Scanner input=new Scanner(System.in);
                System.out.print("请输入一个摄氏温度:");
                double celsius=input.nextDouble();

                double fahrenheit=(9.0/5)*celsius +32 ;
        System.out.print(celsius+"摄氏温度是"+fahrenheit+"华氏温度");
        }
}
/*输出的内容:
请输入一个摄氏温度:43
43.0摄氏温度是109.4华氏温度
*/
回复 使用道具 举报
本帖最后由 电玩 于 2013-4-19 23:37 编辑

2.2(计算圆柱体的体积)编写程序,读入圆柱体的半径和高,并使用下列公式计算圆柱的体积:
   面积=半径*半径*π(3.14159)
  体积=面积*高
回复 使用道具 举报
import java.util.Scanner;  //导入工具
public class  VolumeOfCylinder //圆柱体体积
{
        public static void main(String[] args)
        {
                final double PI=3.14159;//定义π的常量值

                Scanner input=new Scanner(System.in);
                System.out.print("请输入一个半径和一个高度:");
                double radius=input.nextDouble();//输入半径
        double height=input.nextDouble();//输入高度

                double area=radius*radius*PI;//计算面积
        double volume=area*height;   //计算体积
                System.out.println("面积是"+area+",体积是"+volume);
        }
}
/*
请输入一个半径和一个高度:5.5 12
面积是95.0330975,体积是1140.39717
*/
回复 使用道具 举报
2.3(将英尺转换为米)编写程序,读入英尺数,将其转换为米数并显示结果。一英尺等于0.305米。
回复 使用道具 举报
电玩 中级黑马 2013-4-20 12:14:34
7#
import java.util.Scanner;
public class FeetToMeters03  //英尺转换为米
{
        public static void main(String[] args)
        {
        Scanner input=new Scanner(System.in);
                System.out.print("请输入一个英尺数:");
                double feet=input.nextDouble();//接收英尺数

        double meters=feet*0.305;  //计算米
                System.out.println(feet+"英尺等于"+meters+"米。");
        }
}
/*
请输入一个英尺数:16
16.0英尺等于4.88米。
*/
回复 使用道具 举报
电玩 中级黑马 2013-4-20 12:20:46
8#
2.4(将磅转换为千克)编写程序,将磅数转换为千克数。程序提示用户输入磅数,然后转换为千克并显示结果。
1磅等于0.454千克。

import java.util.Scanner;
public class PoundsToKilograms04  //磅转换为千克
{
        public static void main(String[] args)
        {
        Scanner input=new Scanner(System.in);
                System.out.print("请输入一个镑数:");
                double pounds=input.nextDouble();//接收磅数

        double kilograms=pounds*0.454;  //计算千克
                System.out.println(pounds+"磅等于"+kilograms+"千克。");
        }
}
/*
请输入一个镑数:55.5
55.5磅等于25.197千克。
*/
回复 使用道具 举报
电玩 中级黑马 2013-4-20 12:27:21
9#
本帖最后由 电玩 于 2013-4-21 11:35 编辑

2.5(财务应用程序:计算小费)编写一个程序,读入一笔费用与酬金率,计算酬金和总钱数。
例如:如果用户输入10作为费用,15%作为酬金率,计算结果显示酬金为$1.5,总费用$11.5.

import java.util.Scanner;
public class CalculateTip05  //计算小费
{
public static void main(String[] args)
{
        Scanner input=new Scanner(System.in);
  System.out.print("请输入一笔费用和酬金率:");
  double calculate=input.nextDouble();//接收费用数
        double rate=input.nextDouble();//接收酬金率
        double tips=calculate*(rate/100);  //计算酬金(小费)
  double total=calculate+tips;//总费用
  System.out.println("酬金(小费)是"+(int)(tips*100)/100.0+",总费用是"+(int)(total*100)/100.0);//保留小数点后的两位数
}
}
/*
请输入一笔费用和酬金率:15.69 15
酬金(小费)是2.35,总费用是18.04
*/
回复 使用道具 举报
有没有原书的电子稿啊
回复 使用道具 举报
本帖最后由 电玩 于 2013-4-20 15:59 编辑

有的。Java语言程序设计-进阶篇(原书第8版。  http://download.csdn.net/detail/lx76939412/4768179
http://download.csdn.net/download/lx76939412/4768171  Java语言程序设计-基础篇(原书第8版   

去csdn下载吧。资源太大,我不好上传。
回复 使用道具 举报
希望您坚持住,加油!!!!
回复 使用道具 举报
本帖最后由 电玩 于 2013-4-21 12:17 编辑

谢谢斑竹的鼓励!

2.6(求一个整数个位数的和)编写程序,读取一个在0和1000之间的整数,并将该整数的各位数字相加。
例如:整数是932,各位数字之和为14.
提示:利用运算符%分解数字,然后使用运算符/去掉分解出来的数字。例如 932%10=2,     932/10=93.

import java.util.Scanner;
class   IntegerNumberAnd06  //整数各位数之和,取名不容易,得动用google翻译
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入一个0到1000之间的整数:");
  int number=input.nextInt();//接收整数
int singleDigit=number%10;//得到各位数
int tenDigit=(number/10)%10; //得到十位数
int hundredDigit=number/100; //得到百位数
  System.out.println("这个整数各位数之和是:"+(singleDigit+tenDigit+hundredDigit));
}
}
/*
请输入一个0到1000之间的整数:999
这个整数各位数之和是:27
*/
回复 使用道具 举报
本帖最后由 电玩 于 2013-4-21 12:34 编辑

2.7(求出年数)编写程序,提示用户输入分钟数(例如十亿)然后显示这些分钟代表多少年和多少天。
为了简化问题,假设一年365天。

import java.util.Scanner;
public class  YearsDays07 //求出年数和天数
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入分钟数:");
  int minutes=input.nextInt();//接收分钟数
        int years=minutes/(60*24)/365;  //得到年数
  int days=minutes/(60*24)-years*365;//得到剩余天数
  System.out.println(minutes+"分钟相当于"+years+"年,和"+days+"天。");
}
}
/*
请输入分钟数:1000000000
1000000000分钟相当于1902年,和214天。
*/
回复 使用道具 举报
本帖最后由 电玩 于 2013-4-21 18:34 编辑

2.8(求ASCII码对应的字符)编写程序接收一个ASCII码(从0到128的整数),然后显示它所代表的字符。
例如:如果用户输入的是97,程序显示的是字符a.

import java.util.Scanner;
public class  ASCIICharacters08 //ASCII对应的字符
{
public static void main(String[] args)
{
        Scanner input=new Scanner(System.in);
  System.out.print("请输入一个0到128的整数:");
  int number=input.nextInt();//接收整数
  char ch=(char)number;
        System.out.println(number+" 这个整数,ASCII码所对应的字符是  "+ch);
}
}
/*
请输入一个0到128的整数:69
69 这个整数,ASCII码所对应的字符是  E
*/
回复 使用道具 举报
本帖最后由 电玩 于 2013-4-21 19:17 编辑

2.9(财务应用程序:货币单位)改写程序清单2-10,解决将double型值转换为int型值时可能会造成精度损失的问题。输入的输入值是一个整数,则其最后两位代表的是分币值。
例如:1156就表示的是11美元56美分。

//程序清单2-10 美元整钱兑零 讨厌的美国硬币分这么多种,怪不得在美国只能把整数找零钱。像中国补零数的,他们是心算不来的。
//(美国的货币单位为美元(Dollar),1美元等于100美分。纸币面额最小为1美元,1美元以下用硬币,硬币有25美分(Quarter)、10美分(Dime,一角)、5美分(Nickel)、1美分(Cent))
import java.util.Scanner;
class  ComputerChange  //整钱兑零
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
        System.out.print("请输入一个钱数,例如11.56:");
  double amount=input.nextDouble();//接收钱数  11.56
  int centsAmount=(int)(amount*100);//转换为以分币为单位的数量 1156
  int dollars=centsAmount/100;  //得到美元数  11
        centsAmount=centsAmount%100;//剩下的以分币为单位的数量 56 centsAmount=centsAmount-dollars*100;
        int quarters=centsAmount/25;//得到25美分的数量值  2
        centsAmount=centsAmount%25;//剩下的以分币为单位的数量 6 centsAmount=centsAmount-quarters*25;
     
  int dimes=centsAmount/10;//得到10美分的数量值 0
  centsAmount=centsAmount%10;//剩下的以分币为单位的数量 6 centsAmount=centsAmount-dimes*10;
  int nickels= centsAmount/5;//得到5美分的数量值 1
  centsAmount=centsAmount%5;//剩下的以分币为单位的数量 1 centsAmount=centsAmount-nickels*5;
  int pennies=centsAmount;//得到1美分的数量值 1
  System.out.println("你的钱数"+amount+"可以兑换\n"+
   "\t"+dollars+" 个1美元\n"+
      "\t"+quarters+"  个25美分\n"+
   "\t"+dimes+"  个10美分\n"+
   "\t"+nickels+"  个5美分\n"+
   "\t"+pennies+"  个1美分\n");

}
}
/*
请输入一个钱数,例如11.56:11.56
你的钱数11.56可以兑换
        11 个1美元
        2  个25美分
        0  个10美分
        1  个5美分
        1  个1美分
*/


//比课本的要简单的多
import java.util.Scanner;
class  ComputerChange09  //整钱兑零
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
        System.out.print("请输入一个钱数,例如11.56:");
  double amount=input.nextDouble();//接收钱数  11.56
  int centsAmount=(int)(amount*100);//转换为以分币为单位的数量 1156 这样就不会损失double转为int的精度
  int dollars=centsAmount/100;  //得到美元数  11
        centsAmount=centsAmount%100;//剩下的以分币为单位的数量 56 centsAmount=centsAmount-dollars*100;
        System.out.println("你的钱数"+amount+"是"+dollars+"美元"+centsAmount+"美分。");
}
}
/*
请输入一个钱数,例如11.56:11.56
你的钱数11.56是11美元56美分。
*/
回复 使用道具 举报
本帖最后由 电玩 于 2013-4-21 19:33 编辑

2.10(使用图形用户界面输入)改写程序清单2-10,使用图形界面进行输入和输出。  (毕向东老师的第22天课才讲到的图形界面,这本书第一章就用了)


import javax.swing.JOptionPane;
class  ComputerChangeDialog10  //整钱兑零
{
public static void main(String[] args)
{
  String amountString=JOptionPane.showInputDialog("请输入一个钱数,例如11.56:");//接收钱数  11.56
  double amount=Double.parseDouble(amountString);//接收钱数  11.56
  int centsAmount=(int)(amount*100);//转换为以分币为单位的数量 1156
  int dollars=centsAmount/100;  //得到美元数  11
        centsAmount=centsAmount%100;//剩下的以分币为单位的数量 56 centsAmount=centsAmount-dollars*100;
        int quarters=centsAmount/25;//得到25美分的数量值  2
        centsAmount=centsAmount%25;//剩下的以分币为单位的数量 6 centsAmount=centsAmount-quarters*25;
     
  int dimes=centsAmount/10;//得到10美分的数量值 0
  centsAmount=centsAmount%10;//剩下的以分币为单位的数量 6 centsAmount=centsAmount-dimes*10;
  int nickels= centsAmount/5;//得到5美分的数量值 1
  centsAmount=centsAmount%5;//剩下的以分币为单位的数量 1 centsAmount=centsAmount-nickels*5;
  int pennies=centsAmount;//得到1美分的数量值 1
  String output="你的钱数"+amount+"可以兑换\n"+
   "\t"+dollars+" 个1美元\n"+
      "\t"+quarters+"  个25美分\n"+
   "\t"+dimes+"  个10美分\n"+
   "\t"+nickels+"  个5美分\n"+
   "\t"+pennies+"  个1美分\n";
JOptionPane.showMessageDialog(null,output);
}
}

截图02.png (7.33 KB, 下载次数: 39)

截图02.png

截图03.png (7.5 KB, 下载次数: 40)

截图03.png

截图04.png (9.48 KB, 下载次数: 43)

截图04.png
回复 使用道具 举报
本帖最后由 电玩 于 2013-4-22 00:08 编辑

2.11(财务应用程序:工资单)编写程序,读入下列信息并打印工资单:
雇员的名字(例如 张三)
每周工作小时数(例如 10)
每小时工资(例如 6.75)
联邦所得税税率(例如 20%)
州所得税税率(例如 9%)
编写两种版本的程序:(1)使用对话框获取输入并显示输出;
                    (2)使用控制台进行输入和输出。

实现第二种:
import java.util.Scanner;
public class  Payroll11 //工资单
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入雇员的姓名:");
  String name=input.next();//接收一个字符串 姓名
  System.out.print("请输入他每周工作的小时数:");
        double hours=input.nextDouble();//接收小时数
  System.out.print("请输入他每小时的工资:");
        double hourlyWage=input.nextDouble();//时薪
  System.out.print("请输入联邦所得税税率:");
        double federalTaxRate=input.nextDouble();//税率
  System.out.print("请输入州所得税税率:");
        double stateTaxRate=input.nextDouble();
        double total=hourlyWage*hours;//总工资
        System.out.println("------------------我是一条分割线---------------------------");
        System.out.print("雇员的姓名:"+name+"\n"+
      "每周工作时间:"+hours+"\n"+
   "时薪:  "+"$"+hourlyWage+"\n"+
   "工资总额:"+"$"+total+"\n"+
   "扣税:\n"+
       "\t"+"联邦所得税税率"+(federalTaxRate)+": $"+total*federalTaxRate+"\n"+
          "\t"+"州所得税税率"+(stateTaxRate)+": $"+(int)(total*stateTaxRate*100)/100.0+"\n"+
   "净工资:"+": $"+(int)(total*(1-federalTaxRate-stateTaxRate)*100)/100.0
   );
    }
}
/*
请输入雇员的姓名:张三
请输入他每周工作的小时数:10
请输入他每小时的工资:6.75
请输入联邦所得税税率:0.20
请输入州所得税税率:0.09
------------------我是一条分割线---------------------------
雇员的姓名:张三
每周工作时间:10.0
时薪:  $6.75
工资总额:$67.5
扣税:
        联邦所得税税率0.2: $13.5
        州所得税税率0.09: $6.07
净工资:: $47.92
*/

第一种实现:
import javax.swing.JOptionPane;
public class  PayrollDialog11 //工资单
{
public static void main(String[] args)
{
  
  String name=JOptionPane.showInputDialog("请输入雇员的姓名:");//接收一个字符串 姓名
        
        String hoursString=JOptionPane.showInputDialog("请输入他每周工作的小时数:");
  double hours=Double.parseDouble(hoursString);//接收小时数
        String hourlyWageString=JOptionPane.showInputDialog("请输入他每小时的工资:");
  double hourlyWage=Double.parseDouble(hourlyWageString);//时薪
        String federalTaxRateString=JOptionPane.showInputDialog("请输入联邦所得税税率:");
  double federalTaxRate=Double.parseDouble(federalTaxRateString);//税率
        String stateTaxRateString=JOptionPane.showInputDialog("请输入州所得税税率:");
  double stateTaxRate=Double.parseDouble(stateTaxRateString);
        double total=hourlyWage*hours;//总工资
        
        String output="雇员的姓名:"+name+"\n"+
      "每周工作时间:"+hours+"\n"+
   "时薪:  "+"$"+hourlyWage+"\n"+
   "工资总额:"+"$"+total+"\n"+
   "扣税:\n"+
       "\t"+"联邦所得税税率"+(federalTaxRate)+": $"+total*federalTaxRate+"\n"+
          "\t"+"州所得税税率"+(stateTaxRate)+": $"+(int)(total*stateTaxRate*100)/100.0+"\n"+
   "净工资:"+" $"+(int)(total*(1-federalTaxRate-stateTaxRate)*100)/100.0;
  JOptionPane.showMessageDialog(null,output);
    }
}

更多图片 小图 大图
组图打开中,请稍候......
回复 使用道具 举报
本帖最后由 电玩 于 2013-4-22 09:56 编辑

2.12(财务应用程序:计算利息)如果你知道收支余额和年利率的百分比,你就可以使用下面的公式计算下个月要支付的利息额:
                         利息额=收支余额*(年利率/1200)
编写程序,读取收支余额和年百分利率,显示两个版本的下个利息:
(1)使用控制台进行输入和输出;
(2)使用对话框获取输入并显示输出。

第一种实现:
import java.util.Scanner;
public class ComputeInterest12  //计算利息
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入您收支余额和年利率(3相当于3%):");
  double balance=input.nextDouble();//接收收支平衡后的余额
  double interestRate=input.nextDouble();//接收年利息率
  double interests=balance*(interestRate/1200);          //  应付的下个月利息
  System.out.println("应付的下个月利息是"+(int)(interests*100)/100.0+"元。");
}
}
/*
请输入您收支余额和年利率(3相当于3%):1000 3.5
应付的下个月利息是2.91
*/

第二种实现:
import javax.swing.JOptionPane;
public class ComputeInterestDialog12  //计算利息
{
public static void main(String[] args)
{
  String balanceString=JOptionPane.showInputDialog("请输入您的收支余额:");
  double balance=Double.parseDouble(balanceString);//接收收支平衡后的余额
  
  String interestRateString=JOptionPane.showInputDialog("请输入您的年利率(3相当于3%):");
  double interestRate=Double.parseDouble(interestRateString);//接收年利息率
  double interests=balance*(interestRate/1200);          //  应付的下个月利息
  String output="应付的下个月利息是"+(int)(interests*100)/100.0+"元。";
        JOptionPane.showMessageDialog(null,output);
}
}


截图11.png (7.06 KB, 下载次数: 35)

截图11.png

截图12.png (7.39 KB, 下载次数: 43)

截图12.png

截图13.png (7.23 KB, 下载次数: 46)

截图13.png
回复 使用道具 举报
本帖最后由 电玩 于 2013-4-23 22:45 编辑

2.13(财务应用程序:计算未来投资值)编写程序,读取投资总额、年利率和年数,然后使用下面的公式显示未来投资金额:
futureInvestmentValue=investmentAmount*(1+annuallyInterestRate)[sup]numberOfYears*12
[/sup]
例如:如果输入的投资金额为1000,年利率为3.25%,年数为1,那么未来投资额为1032.98.
提示:使用方法Math.pow(a,b)来计算a的b次幂。


import java.util.Scanner;
public class FutureInvestmentValue13  //计算未来投资金额
{
public static void main(String[] args)
{
  Scanner input=new Scanner(System.in);
  System.out.print("请输入您的投资总额:");
  double investmentAmount=input.nextDouble();//接收投资总额
        System.out.print("请输入您的年利率:");
  double interestRate=input.nextDouble();//接收年利息率
        System.out.print("请输入您的年数:");
  double years=input.nextDouble();//接收年数
double futureInvestmentValue=investmentAmount*Math.pow(1+interestRate/100,years*12);//未来投资金额
  
  System.out.println("您的未来投资金额是"+(int)(futureInvestmentValue*100)/100.0+"元。");
}
}
/* 为什么答案的未来投资金额是 1032.98????经过思考只有annuallyInterestRate  为月利息才行。Math.pow(1+interestRate/100/12,years*12);//
请输入您的投资总额:1000
请输入您的年利率:3.25
请输入您的年数:1
您的未来投资金额是1467.84元。
*/

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 加分不多,继续努力,分配好每天的学习量,.

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马