1. boolean类型变量可以存储值true或false。
2. 关系操作符(<、<=、==、!=、>、>=)产生一个布尔值。
3.选择语句用于可选择的动作路径的编程。选择语句有以下几种类型:单分支if语句、双分支if-else语句、嵌套if语句、多分支if-else语句、switch语句和条件表达式。
4.各种if语句都是基于布尔表达式来控制决定的。根据表达式的值是true或false,这些语句选择两种可能路径中的一种。
5.布尔操作符&&、||、|和^对布尔值和布尔变量进行计算。
6.当对p1&&p2求值时,Java先求p1的值,如果p1为true,再对p2求值;如果p1为false,就不再对p2求值。当对p1||p2求值时,Java先求p1的值,如果p1为false,再对p2求值;如果p1为true,就不再对p2求值。因此,&&也称为条件与操作符或短路与操作符,而||也称为条件或操作符或短路或操作符。
7.switch语句根据char、byte、short、int或者String类型的switch表达式来进行控制决定。
8.在switch语句中,关键字break是可选的,但它通常用在每个分支的结尾,以中止执行switch语句的剩余部分。如果没有出现break语句,则执行接下来的case语句。
9.表达式中的操作符按照括号、操作符优先级以及操作符结合规则所确定的次序进行求值。
10. 括号用于强制求值的顺序以任何顺序进行。
11.具有更高级优先权的操作符更早地进行操作。对于同样优先级的操作符,它们的结合规则确定操作的顺序。
12. 除开赋值操作符的所有二元操作符都是左结合的,赋值操作符是右结合的。
测试题
在线回答本章测试题,地址为www.cs.armstrong.edu/liang/intro10e/quiz.html。
编程练习题
教学提示 对于每一个练习题,都应在编码之前仔细地分析问题的需求及设计解题策略。
调试提示 在寻求帮助之前,将程序读和解释给自己听。然后通过手动使用几个具有代表性的输入,或者使用某个IDE调试器来跟踪程序。通过调试自己编程中的错误,来学习如何编程。
3.2节
3.1 (代数:解一元二次方程)可以使用下面的公式求一元二次方程ax2+bx+c=0的两个根:
b2-4ac称作一元二次方程的判别式。如果它是正值,那么一元二次方程就有两个实数根。
如果它为0,方程式就只有一个根。如果它是负值,方程式无实根。
编写程序,提示用户输入a、b和c的值,并且显示基于判别式的结果。如果这个判别式为正,显示两个根。如果判别式为0,显示一个根。否则,显示“The equation has no real roots”(该方程式无实数根)。
注意:可以使用Math.pow(x,0.5)来计算 。下面是一些运行示例。
3.2 (游戏:三个数的加法)程序清单3-1中的程序产生两个整数,并提示用户输入这两个整数的和。修改该程序使之能产生三个一位整数,然后提示用户输入这三个整数的和。
3.3 (代数:求解2×2线性方程)可以使用编程练习题1.13中给出的Cramer规则解线性方程组:
编写程序,提示用户输入a、b、c、d、e和f,然后显示结果。如果ad-bc为0,报告消息“The equation has no solution”(方程式无解)。
3.4 (随机月份)编写一个随机产生1和12之间整数的程序,并且根据数字1,2,…,12显示相应的英文月份:January, February,…,December。
3.5 (找到将来的日期)编写一个程序,提示用户输入代表今天日期的数字(周日为0,周一为1,……,周六为6)。同时,提示用户输入一个今天之后的天数,作为代表将来某天的数字,然后显示这天是星期几。下面是一个运行示例:
3.6 (医疗应用程序:BMI)修改程序清单3-4,让用户输入重量、英尺和英寸。例如:一个人身高是5英尺10英寸,输入的英尺值就是5、英寸值为10。下面是一个运行示例:
3.7 (财务应用程序:整钱兑零)修改程序清单2-10,使之只显示非零的币值单位,用单词的单数形式显示一个单位,例如1 dollar and 1 penny(1美元和1美分);用单词的复数形式显示多于一个单位的值,例如2 dollars and 3 pennies(2美元和3美分)。
3.8 (对三个整数排序)编写程序,提示用户输入三个整数。以非降序的形式显示这三个整数。
3.9 (商业:检查ISBN-10)ISBN-10(国际标准书号)以前是一个10位整数d1d2d3d4d5d6d7d8d9d10,最后的一位d10是校验和,它是使用下面的公式用另外9个数计算出来的:
(d1 × 1 + d2 × 2 + d3 × 3 + d4 × 4 + d5 × 5 + d6 × 6 + d7 × 7 + d8 × 8 + d9 × 9) % 11
如果校验和为10,那么按照ISBN-10的习惯,最后一位应该表示为X。编写程序,提示用户输入前9个数,然后显示10位ISBN(包括前面起始位置的0)。程序应该读取一个整数输入。以下是一个运行示例:
3.10 (游戏:加法测验)程序清单3-3随机产生一个减法问题。修改这个程序,随机产生一个计算两个小于100的整数的加法问题。
3.8~3.16节
3.11 (给出一个月的总天数)编写程序,提示用户输入月份和年份,然后显示这个月的天数。例如:如果用户输入的月份是2而年份是2012,那么程序应该显示“February 2012 has 29 days”(2012年2月有29天)。如果用户输入的月份为3而年份为2015,那么程序就应该显示“March 2015 has 31 days”(2015年3月有31天)。
3.12 (回文数字)编写一个程序,提示用户输入一个三位的整数,然后确定它是否回文数字。当从左到右,以及从右到左都是一样的话,这个数字称为回文数。下面是程序的一个运行示例:
3.13 (财务应用程序:计算税款)程序清单3-5给出了计算单身登记人税款的源代码。将程序清单3-5补充完整,从而计算所有登记的婚姻状态的税款。
3.14 (游戏:猜硬币的正反面)编写程序,让用户猜一猜是硬币的正面还是反面。这个程序随机产生一个整数0或者1,它们分别表示硬币的正面和反面。程序提示用户输入一个猜测值,然后报告这个猜测值是正确的还是错误的。
3.15 (游戏:彩票)修改程序清单3-8,产生三位整数的彩票。程序提示用户输入一个三位整数,然后依照下面的规则判定用户是否赢得奖金:
1)如果用户输入的所有数匹配彩票的确切顺序,奖金是10 000美元。
2)如果用户输入的所有数匹配彩票的所有数字,奖金是3 000美元。
3)如果用户输入的其中一个数匹配彩票号码中的一个数,奖金是1 000美元。
3.16 (随机点)编写程序,显示矩形中一个随机点的坐标。矩形中心位于(0,0)、宽100、高200。
3.17 (游戏:剪刀、石头、布)编写可以玩流行的剪刀–石头–布游戏的程序。(剪刀可以剪布,石头可以砸剪刀,而布可以包石头。)程序提示用户随机产生一个数,这个数为0、1或者2,分别表示石头、剪刀和布。程序提示用户输入值0、1或者2,然后显示一条消息,表明用户和计算机谁赢了游戏,谁输了游戏,或是打成平手。下面是运行示例:
3.18 (运输成本)一个运输公司使用下面的函数,根据运输重量(以磅为单位)来计算运输成本(以美元计算)。
编写一个程序,提示用户输入包裹重量,显示运输成本。如果重量大于20,显示一条消息“the package cannot be shipped”。
3.19 (计算三角形的周长)编写程序,读取三角形的三条边,如果输入值合法就计算这个三角形的周长;否则,显示这些输入值不合法。如果任意两条边的和大于第三边,那么输入值都是合法的。
3.20 (科学:风寒温度)编程练习题2.17给出计算风寒温度的公式。这个公式适用于温度在华氏-58°到41°之间,并且风速大于或等于2的情况。编写一个程序,提示用户输入一个温度值和一个风速值。如果输入值是合法的,那么显示风寒温度,否则显示一条消息,表明温度或风速是不合法数值。
综合题
3.21 (科学:某天是星期几)泽勒一致性是由克里斯汀·泽勒开发的用于计算某天是星期几的算法。这个公式是:
其中:
h是一个星期中的某一天(0为星期六;1为星期天;2为星期一;3为星期二;4为星期三;5为星期四;6为星期五)。
q是某月的第几天。
m是月份(3为三月,4为四月,...,12为十二月)。一月和二月分别记为上一年的13和14月。
j是世纪数(即||)。
k是该世纪的第几年(即year%100)。
注意,公式中的除法执行一个整数相除。编写程序,提示用户输入年、月和该月的哪一天,然后显示它是一周中的星期几。下面是一些运行示例:
提示:一月和二月在这个公式里是用13和14表示的。所以需要将用户输入的月份1转换为13,将用户输入的月份2转换为14,同时将年份改为前一年。
3.22 (几何:点是否在圆内?)编写程序,提示用户输入一个点(x,y),然后检查这个点是否在以原点(0,0)为圆心、半径为10的圆内。例如:(4,5)是圆内的一点,而(9,9)是圆外的一点,如图3-7a所示。
提示:如果一个点到(0,0)的距离小于或等于10,那么该点就在圆内,计算距离的公式是,使用各种情况来测试你的程序。以下是两个运行示例。
3.23 (几何:点是否在矩形内?)编写程序,提示用户输入点(x,y),然后检测该点是否在以原点(0,0)为中心、宽为10、高为5的矩形中。例如:(2,2)在矩形内,而(6,4)在矩形外,如图3-7b所示。
提示:如果一个点到点(0,0)的水平距离小于等于10/2且到点(0,0)的垂直距离小于等于5.0/2,该点就在矩形内,使用各种情况来测试你的程序。
这里有两个运行示例:
3.24 (游戏:挑一张牌)编写程序,模拟从一副52张的牌中选择一张牌。程序应该显示牌的大小(Ace、2、3、4、5、6、7、8、9、10、Jack、Queen、King)以及牌的花色(Clubs(黑梅花)、Diamonds(红方块)、Hearts(红心)、Spades(黑桃))。下面是这个程序的运行示例:
3.25 (几何:交点)第一条直线上面的两个点是(x1,y1)和(x2,y2),第二条直线的两个点是(x3,y3)和(x4,y4),如图3-8a、图3-8b所示。两条直线的交点可以通过下面的线性方程组求解:
(y1 - y2) x - (x1 - x2) y = (y1 - y2) x1 - (x1 - x2) y1
(y3 - y4) x - (x3 - x4) y = (y3 - y4) x3 - (x3 - x4) y3
这个线性方程组可以应用Cramer规则求解(见编程练习题3.3)。如果方程无解,则两条直线平行(图3-8c)。
编写一个程序,提示用户输入这四个点,然后显示它们的交点。下面是这个程序的运行示例:
3.26 (使用操作符&&、||和^)编写一个程序,提示用户输入一个整数值,然后判定它是否能被5和6整除,是否能被5或6整除,以及是否能被5或6整除但是不能同时被它们整除。下面是这个程序的运行示例:
3.27 (几何:点是否在三角形内?)假设一个直角三角形放在一个平面上,如下图所示。直角点在(0,0)处,其他两个点分别在(200,0)和(0,100)处。编写程序,提示用户输入一个点的x坐标和y坐标,然后判定这个点是否在该三角形内。下面是运行示例:
3.28 (几何:两个矩形)编写一个程序,提示用户输入两个矩形中点的x坐标和y坐标以及它们的宽度和高度,然后判定第二个矩形是在第一个矩形内,还是和第一个矩形重叠,如图3-9所示。
3.29 (几何:两个圆)编写程序,提示用户输入两个圆的中心坐标和各自的半径值,然后决定第二个圆是在第一个圆内,还是和第一个圆重叠,如图3-10所示。
提示:如果两个圆心的距离≤|r1-r2|,就认为circle2在circle1内;如果两个圆心的距离≤r1+r2,就认为circle2和circle1重叠。
3.30 (当前时间)修改编程练习题2.8,以12小时时钟制显示小时数。这里是一个运行示例:
3.31 (金融:货币兑换)编写一个程序,提示用户输入从美元到人民币的兑换汇率。提示用户输入0表示从美元兑换为人民币,输入1表示从人民币兑换为美元。继而提示用户输入美元数量或者人民币数量,分别兑换为另外一种货币。下面是运行示例:
3.32 (几何:点的位置)给定一个从点p0(x0,y0)到p1(x1,p1)的有向线段,可以使用下面的条件来确定点p2(x2,y2)是在线段的左侧、右侧,或者在该直线上(见图3-11):
编写一个程序,提示用户输入三个点p0、p1和p2,显示p2是否在从p0到p1的线段左侧、右侧,或者在该直线上。下面是运行示例:
3.33 (金融:比较成本)假设你要通过两种不同的包裹运输大米。你将乐于编写一个程序来比较成本,该程序提示用户输入每个包裹的重量和价格,然后显示具有更好价格的包裹。下面是一个运行示例:
3.34 (几何:线段上的点)编程练习题3.32显示了如何测试一个点是否在一个无限长的直线上。修改编程练习题3.32,测试一个点是否在一个线段上。编写一个程序,提示用户输入三个点p0、p1和p2,显示p2是否在从p0到p1的线段上。这里是一些运行示例: