【Java 语言程序设计(基础篇)第十版 第一章 练习题答案】


前言

本篇文章旨在帮助在学习Java的小白解决一些在教材里遇到的问题,我们以课后习题为下手点,以题带面。


一、第一章 计算机 程序 和Java概述

第一章我们简单了解了计算机基础知识,程序和操作系统,以及Java和万维网的关系,理解了API,JDK,IDE的含义,也配置了自己的编程环境,接下来,我们就是要动手写一些简单的程序,前期我们可以通过抄写一些简单程序来大致了解到我们的Java程序的基本构成,为后期更深入的学习打下基础。在抄写这些程序的时候我们会出现一些常见的错误,这里我们就要学会分析错误是怎么产生的。


在这里插入图片描述
在这里插入图片描述

二、第一章课后习题解析

1.1.(显示三条信息)编写程序,显示Welcome to Java,Welcome to Computer Science 和Programming is fun。

这道题比较简单

代码如下:

/*
	Display three messages
*/
public class Exercise1_1 {
	public static void main(String[] args) {
		System.out.println("Welcome to Java ");
		System.out.println("Welcome to Computer Science ");
		System.out.println("Programming is fun ");
	}
}

1.2.(显示五条信息)编写程序,显示Welcome to Java 五次。

这道题可以像机器一样写成下面这样

public class Exercise1_1 {
	public static void main(String[] args) {
		System.out.println("Welcome to Java ");
		System.out.println("Welcome to Java ");
		System.out.println("Welcome to Java ");
		System.out.println("Welcome to Java ");
		System.out.println("Welcome to Java ");
	}
}

也可以写的非常简单

public class Exercise1_2 {
	public static void main(String[] args) {
		for(int i=0;i<5;i++) {
		System.out.println("Welcom to Java");
		}
	}
}

两个代码输出的结果都一样,但是你更喜欢简单,还是重复简单的工作呢??
答案肯定是简单,所以接下来我先给你们讲点后边学的东西,他叫循环

/*
	This class is for output loop massage
	This exercise can use loop,here is some loop methods:
	1.for loop(know the number of loop):
	Usage: judge first, then execute; If the number of loops is certain, the for loop is usually used
		1.1.int sum = 0;//The intial sum is zero
	 	 for(int i = 0; i<100; i++) {
		 	sum += i +1;//sum = sum + i + 1
		 }
	2.while loop
	Usage: judge first, then execute; When the conditional expression is true, the body of the loop is executed, and then the judgment is made. If the condition does not stand, it may not be executed. Generally used for cycles with uncertain number of cycles
		2.1.int i = 0;
			int sum = 0;
			while(i<100) {
				if(i%3==0) {
					sum += i;
				}
				i++;
			} 
	3.do..weile loop
	Usage: execute first, judge later; It is generally used for loops with uncertain number of cycles. Unlike the while loop, it is executed first and judged later, and will be executed at least once.
		3.1.int i = 0;
			int sum = 0;
			do {
				if(i%3==0 && i%5==0) {
					sum += i;
				}
				i++;
			} while (i<=100);
	4.switch loop
	How to use: Usually used to branch, or to make a choice
		4.1.System.out.println("Please choose the day of the week ");
			System.out.println("Monday Tuesday Wednesday Thursday Friday");
			Scanner inputScanner = Scanner.nextInt(System.in);
			int count = inputScanner.nextScanner();
			switch (count) {
			case 1:
				System.out.println("Today is Monday");
				break;
			case 2:
				System.out.println("Today is Tuesday");
				break;
			case 3:
				System.out.println("Today is Wednesday");
				break;
			case 4:
				System.out.println("Today is Thursday");
				break
			case 5:
				System.out.println("Today is Friday");
				break;
			default:
				System.out.println("In fact today is Sunday");
				break;
			}
	
		
*/

public class Exercise1_2 {
	public static void main(String[] args) {
		for(int i=0;i<5;i++) {
		System.out.println("Welcom to Java");
		}
	}
}

以上代码里有我对该代码的一些知识补充,以后的文章里也都是这样的

1.3 (显示图案)编写一个程序,显示一个Java图案

这道题就老老实实的写,但是这里你得悟到我们在

System.out.println(  );

括号里你输入了几个空格最后我们就会输出几个空格
这道题代码如下:

/*
	Display pattern
*/
public class Exercise1_3 {
	public static void main(String[] args) {
		System.out.println("         J    A      V        V      A        ");
		System.out.println("        J    A A      V      V      A A       ");
		System.out.println("   J   J    AAAAA      V   V       AAAAA      ");
		System.out.println("    J J    A     A       V        A     A     ");
		}
}

1.4 (打印表格)编写程序,显示以下表格:

在这里插入图片描述
这道题比较简单,我们直接像上道题那样,按照他这个格式打出来就行

/*
	Print form
*/
public class Exercise1_4 {
	public static void main(String[] args) {
		System.out.println("a		a^2		a^3");
		System.out.println("1		1		1  ");
		System.out.println("2		4		8  ");
		System.out.println("3		9		27 ");
		System.out.println("4		16		64 ");
	}
}

当然,我也有更简单的方法

package com.one;
/*
	Print form

public class Exercise1_4 {
	public static void main(String[] args) {
		System.out.println("a		a^2		a^3");
		System.out.println("1		1		1  ");
		System.out.println("2		4		8  ");
		System.out.println("3		9		27 ");
		System.out.println("4		16		64 ");
	}
}
*/
public class Exercise1_4 {
	public static void main(String[] args) {
		System.out.println("a		a^2		a^3");
		int j=0;int k=0;
		for(int i=1;i<5;i++) {
			j=i*i;
			k=i*i*i;
			System.out.print( i+"		");
			System.out.print( j+"		");
			System.out.println( k+"		");
		}
	}							
}

这里我用到了上边我介绍的循环,所以循环是非常重要的初学者一定要掌握。

1.5(计算表达式)编写程序,显示以下公式的结果。

在这里插入图片描述
直接上代码:

/*
	Evaluation expression
*/
public class Exercise1_5 {
	public static void main(String[] args) {
		System.out.println((9.5*4.5-2.5*3)/(45.5-3.5));
	}
}

1.6(数列求和)编写程序,显示1+2+3+4+5+6+7+8+9的结果。

用一个小小的循环即可

/*
	Series summation
	use loop
*/
public class Exercise1_6 {
	public static void main(String[] args) {
		int sum = 0;
		for(int i = 0;i<10;i++) {
			sum += i;
		}
		System.out.println(sum);
	}
}

甚至你可以来个进阶版,询问用户要从一叠加到几,然后输出结果,
不难,只是这里需要从控制台读取输入:
Java并不直接支持控制台输入,但是可以使用Scanner类创建它的对象,以读取System.in的输入如下:

Scanner input = new Scanner(System.in);		

可以调用nextDouble()方法来读取一个double值,如下:

double radius = input.nextDouble();		//该语句从键盘读取一个数值,并且将数值赋给radius.

完整代码:

/*
	Series summation
	use loop
*/
import java.util.Scanner;

public class Exercise1_6 {
	public static void main(String[] args) {
		int sum = 0;
		Scanner input =new Scanner(System.in);
		System.out.println("You want to go from one to how many");
		int n =input.nextInt();
		for(int i = 0;i<n;i++) {
			sum += i;
		}
		System.out.println(sum);
	}
}

1.7(近似求p)可以使用以下公式计算p:

在这里插入图片描述
这道题你本来可以很简单的写照着它个的两个公式用简单的

System.out.print();		

在括号里打入两个运算式即可,但是得注意:人家都提醒你了用1.0代替1,是因为我们要得到的答案是一个小数,也就是(浮点数)double,后边会学习到,我们直接输入1的话,我们最后的输出也会是一个(整数型)int,所以我们输入1.0是把我们的数值转化为了double型,结果也会是一个double型
我这里给大家介绍的方法是根据题目所给的计算p的公式,直接计算比较接近真实值的算法。需要用到循环和算法,其中一些式子你可能还看不懂,但是你可以先记住,并且,你需要记住,做题不要只局限于一种方法,我们可以采用多种不同的方法来求解,在学习过程中我们不能偷懒,得多练多写。
如果你感兴趣的话,还可以像上一题那样改写一下程序,让用户输入一个需要求的精度,我们根据用户要求来循环不同的次数,当然是循化越多次越接近真实值。

/*
The approximate o p
*/
public class Exercise1_7 {
	public static void main(String[] args) {
		double z = 0;
		double p = 0;
		int s = 0;
		for (int i = 0; i < 10000000; i++) {
			if (i % 2 == 1) {
				s = -1; 
			} else {
				s = 1;
			}
			z += s * (1.0 / ((2 * i) + 1));
//			z += z;//切记累加不能这样写

		}
		p = 4 * z;
		System.out.println(p);
	}
}
			

1.8(圆的面积和周长)编写程序,使用以下公式计算并显示半径为5.5的圆的面积和周长。

在这里插入图片描述
这道题呢,我们可以串起前面为提到的从控制台读取结合第七题,来做。
这里我先用最简单的方法,做出来,代码如下:

public class Exercise1_8 {
	public static void main(String[] args) {
		double redius =5.5;
		double perimeter;
		double area;
		perimeter = 2*redius*3.1415 ;
		area = redius* redius*3.1415;
		System.out.println("The circumference of the circle is: "+perimeter);
		System.out.println("The area of this circle is: "+area);
	}
}

这里的PI我用简单的3.1415来代替了,我们可以结合第七题把第七题计算的PI拿来用,并且我们用Scanner来获取用户输入的半径,输出面积和周长。
代码如下:

import java.util.Scanner;

public class Exercise1_8 {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		double perimeter;
		double area;
		double z = 0;
		double p = 0;
		int s = 0;
		for (int i = 0; i < 100000000; i++) {
			if (i % 2 == 1) {
				s = -1;
			} else {
				s = 1;
			}
			z += s * (1.0 / ((2 * i) + 1));

		}
		p = 4 * z;//PI is calculated;
		System.out.println("Please enter radius: ");
		Scanner input = new Scanner(System.in);
		double redius = input.nextDouble();
		perimeter = 2 * redius * p;
		area = redius * redius * p;
		System.out.println("The circumference of the circle is: " + perimeter);
		System.out.println("The area of this circle is: " + area);
	}
}

1.9(矩阵的面积和周长)编写程序,使用以下公式计算并显示宽度为4.5,高度为7.9的矩形的面积和周长。

面积=宽✖️高
一般做法,代码如下:

public class Exercise1_9 {
	public static void main(String[] args) {
		double length = 4.5;
		double wide = 7.9;
		double area = length * wide;
		System.out.println("The area of this rectangle is: "+ area);
	}
}

进阶版:只要了解了Scanner也非常容易实现
代码如下:

import java.util.Scanner;

public class Exercise1_9 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("Please enter your length and width :");
		double length = input.nextDouble();
		double wide = input.nextDouble();
		double area = length * wide;
		System.out.println("The area of this rectangle is: " + area);
	}
}

1.10(以英里计的平均速度)假设一个跑步者45分钟30秒跑了14公里。编写一个程序显示以每小时多少英里为单位的平均速度值。(注意,1英里等于1.6公里)

程序如下:

public class Exercise1_10 {
	public static void main(String[] args) {
		double run = 14;
		double time = 45.5/60;
		double miles = run/1.6;
		double average = miles/time;
		System.out.println("The average velocity is: "+average);
	}
}

进阶:用户输入跑了多少路程,和多长时间,我们判断是英里还是公里,然后算出以英里或者公里为单位的平均速度值。
代码如下:

import java.util.*;

public class Exercise1_10 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.println("Please enter how far you have run: ");
		double run = input.nextDouble();
		System.out.println("Please enter unit(1 for kilometers,2 for miles):");
		int unit = input.nextInt();
		System.out.println("Please enter how long you ran(minutes) ");
		double time = input.nextDouble();
		System.out.println("Please select the output units, kilometer input 1, mile input 2");
		double results = input.nextDouble();
		double hour = time/60;
		if (results == 1) {
			if (unit == 1) {
				double miles = run ;
				double average = miles/hour;
				System.out.println("The average velocity is: " + average+"kilometer per hour");
			} else if(unit==2) {
				double miles = run*1.6;
				double average = miles/hour;
				System.out.println("The average velocity is: " + average+"kilometer per hour");
				}
			else {
				System.out.println("Input error, please retype");
			}
		}
		else if (results == 2) {
			if (unit == 1) {
				double miles = run / 1.6;
				double average = miles/hour;
				System.out.println("The average velocity is: " + average+"Miles per hour");
			} else if(unit==2) {
				double miles = run;
				double average = miles/hour;
				System.out.println("The average velocity is: " + average+"Miles per hour");
				}
			else {
				System.out.println("Input error, please retype");
			}
		}
	}
}

1.11(人口估算)美国人口调查局基于以下假设进行人口估算:

  • 每7秒有一个人诞生
  • 每13秒有一个人死亡
  • 每45秒有一个移民迁入
    编写一个程序,显示未来5年的每年的人数。假设当前的人口是312032486,每年有365天。
    这道题不难,主要是能够找到正确的算法,认真分析题目,总结出算法即可,
    代码如下:
public class Exercise1_11 {
	public static void main(String[] args) {
		int population =312032486;
		int year = 365;
		int day =24;
		int hour = 60;
		int minutes = 60;
		double birth,die,remove,endPopukation,seconde;
		for(int i=1;i<=5;i++) {
		seconde = i*year*day*hour*minutes;
		birth =seconde/7;
		die =seconde/13;
		remove =seconde/45;
		endPopukation =population+birth-die+remove;
		System.out.println("第"+i+"年的人口数为:"+endPopukation);
		}
	}
}

1.12(以公里计的平均速度)假设一个跑步者1小时40分钟35秒内跑了24英里。编写一个程序小显示以每小时多少公里为单位的平均速度值。

这道题在1.10时就已经解决了。

1.13(代数,求解2✖️2线性方程)可以使用Cramer规则解下面的2✖️2线性方程组:

在这里插入图片描述
简单题,你要相信你也可以做出来
解决原题:
代码如下:

public class Exercise1_13 {
	public static void main(String[] args) {
		double a,b,c,d,e,f,x,y;
		a =3.4;
		b =50.2;
		c =2.1;
		d =0.55;
		e =44.5;
		f =5.9;
		x = (e*d-b*f)/(a*d-b*c);
		y = (a*f-e*c)/(a*d-b*c);
		System.out.println("X is: "+x);
		System.out.println("Y is: "+y);
	}
}

进阶:用户输入线性方程,输出X,Y的值
代码如下:

import java.util.Scanner;
public class Exercise1_13 {
	public static void main(String[] args) {
		double a,b,c,d,e,f,x,y;
		System.out.println("Please decompose the linear equation into this: ax+by=c ;and going to put in a, b, and c of the two formulas");
		Scanner input = new Scanner(System.in);
		a = input.nextDouble();
		b = input.nextDouble();
		e = input.nextDouble();
		c = input.nextDouble();
		d = input.nextDouble();
		f = input.nextDouble();
		x = (e*d-b*f)/(a*d-b*c);
		y = (a*f-e*c)/(a*d-b*c);
		System.out.println("X is: "+x);
		System.out.println("Y is: "+y);
	}
}

总结

这就是Java 语言程序设计(基础篇)第十版 第一章 练习题答案
如果需要后边题的答案,请关注我,我会持续更新。
如果我哪一步不对,或者你有更简单的方法,欢迎和我讨论。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

️雲野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值