JAVA语言程序设计(基础篇)第十版——第四章 数学函数、字符和字符串 编程练习题(参考答案)

 

4.2节 + (4.3~4.6节)

4.2节

4.1(几何:五边形的面积)

import java.util.Scanner;

public class C1 {

	public static void main(String[] args) {
		
		Scanner input=new Scanner(System.in);
		System.out.print("Enter the length from the center to a vertex: ");
		double r=input.nextFloat();
		input.close();
		
		double s=2*r*Math.sin(Math.PI/5);
		
		double area=(5*s*s)/(4*Math.tan(Math.PI/5));
		
		System.out.printf("The area of the pentagon is %5.2f ", area);
		
		
	}

}

*4.2(几何:最大圆距离)

这题难就难在如何将从控制台接收的一个字符串将它分割,就是将字符串里的( , )逗号字符和()空格字符删掉。

也就是如何从一个字符串里获取子串的问题,我还特地去百度了一下(,)逗号的 Unicode值为:' \u002C ' .

然后将分割得到的数值型字符串转化为数值,就没什么难点了(#^.^#)

import java.util.Scanner;

public class C2 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		//用字符串接收s1、s2
		System.out.print("Enter point 1 (latitude and longitude) in degrees: ");
		String s1=input.nextLine();
		System.out.print("Enter point 2 (latitude and longitude) in degrees: ");
		String s2=input.nextLine();
		//input.close();
		
		String s11="";
		String s12="";
		
		//以','字符逗号为分割点,将s1字符串分为两部分
		if(s1.length()!=0 && !s1.equals("")) {
			for(int i=0;i<s1.length();i++) {
				if(s1.charAt(i) == '\u002C') {
					s11=s1.substring(0,i);
					s12=s1.substring(i+1);
				}
			}
		}
		
		//用trim()方法删去字符串两边的空白字符
		String s5=s11.trim();
		String s6=s12.trim();
		
		//将数值型的字符串 转换为 数值
		double degree1=Double.parseDouble(s5);
		double degree2=Double.parseDouble(s6);
		
		
		
		String s21="";
		String s22="";
		
		//以','字符逗号为分割点,将s2字符串分为两部分
		if(s2.length()!=0 && !s2.equals("")) {
			for(int i=0;i<s2.length();i++) {
				if(s2.charAt(i) == '\u002C') {
					s21=s2.substring(0,i);
					s22=s2.substring(i+1);
				}
			}
		}
		
		//用trim()方法删去字符串两边的空白字符
		String s7=s21.trim();
		String s8=s22.trim();
		
		//将数值型的字符串 转换为 数值
		double degree3=Double.parseDouble(s7);
		double degree4=Double.parseDouble(s8);
		
/*上面代码是完成input.nextLine()方法在控制台的接收,
		并将 数值型字符串 转换为  数值,进行下面的计算		*/

		
//下面的代码是完成公式套用计算
		double x1=Math.toRadians(degree1);
		double y1=Math.toRadians(degree2);
		double x2=Math.toRadians(degree3);
		double y2=Math.toRadians(degree4);
		
		double d= 6371.01 * Math.acos(Math.sin(x1)*Math.sin(x2) 
				+ Math.cos(x1)*Math.cos(x2)*Math.cos(y1-y2))  ;
		
		System.out.println("The distance between the two points is " + d +" km ");
	
	
	
	
	
	}

}

*4.3(几何:估算面积)

首先找出个地方的经纬度:

Atlanta 亚特兰大 美国 北纬:33°46' 西经:84°25'
Orlando 奥兰多 美国 北纬:28°3' 西经:81°22'

地名:Savannah     纬度:31.9714   经度:-81.0716

地名:Charlotte      纬度:35.2731    经度:-80.9571

然后给地名先标个点,以致等会儿计算时不会混淆

第某个点:某地名(纬度,经度)

第一个点:Atlanta(33.46, 84.25)

第二个点:Orlando(28.3, 81.22)

第三个点:Savannah(31.9714, -81.0716 )

第四个点:Charlotte(35.2731, -80.9571)

其实没啥难度,也就是找公式、找经纬度麻烦些。

import java.util.Scanner;

public class C3 {

	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		//用字符串接收s1、s2、s3、s4
		System.out.print("Enter point 1 (latitude and longitude) in degrees: ");
		String s1=input.nextLine();
		System.out.print("Enter point 2 (latitude and longitude) in degrees: ");
		String s2=input.nextLine();
		System.out.print("Enter point 3 (latitude and longitude) in degrees: ");
		String s3=input.nextLine();
		System.out.print("Enter point 4 (latitude and longitude) in degrees: ");
		String s4=input.nextLine();
		input.close();

//以下是 处理s1字符串···············································
		String s11="";
		String s12="";
		
		//以','字符逗号为分割点,将s1字符串分为两部分
		if(s1.length()!=0 && !s1.equals("")) {
			for(int i=0;i<s1.length();i++) {
				if(s1.charAt(i) == '\u002C') {
					s11=s1.substring(0,i);
					s12=s1.substring(i+1);
				}
			}
		}
		
		//用trim()方法删去字符串两边的空白字符
		String s5=s11.trim();
		String s6=s12.trim();
		
		//将数值型的字符串 转换为 数值
		double degree1=Double.parseDouble(s5);
		double degree2=Double.parseDouble(s6);
		
//以下是 处理s2字符串···············································
				String s21="";
				String s22="";
				
				//以','字符逗号为分割点,将s2字符串分为两部分
				if(s2.length()!=0 && !s2.equals("")) {
					for(int i=0;i<s2.length();i++) {
						if(s2.charAt(i) == '\u002C') {
							s21=s2.substring(0,i);
							s22=s2.substring(i+1);
						}
					}
				}
				
				//用trim()方法删去字符串两边的空白字符
				String s7=s21.trim();
				String s8=s22.trim();
				
				//将数值型的字符串 转换为 数值
				double degree3=Double.parseDouble(s7);
				double degree4=Double.parseDouble(s8);		
				
//以下是 处理s3字符串···············································
				String s31="";
				String s32="";
				
				//以','字符逗号为分割点,将s3字符串分为两部分
				if(s3.length()!=0 && !s3.equals("")) {
					for(int i=0;i<s3.length();i++) {
						if(s3.charAt(i) == '\u002C') {
							s31=s3.substring(0,i);
							s32=s3.substring(i+1);
						}
					}
				}
				
				//用trim()方法删去字符串两边的空白字符
				String s9=s31.trim();
				String s10=s32.trim();
				
				//将数值型的字符串 转换为 数值
				double degree5=Double.parseDouble(s9);
				double degree6=Double.parseDouble(s10);
				
//以下是 处理s4字符串···············································
				Str
  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值