JAVA期中练习题

5-1 找素数


(10分)
请编写程序,从键盘输入两个整数m,n,找出等于或大于m的前n个素数。

输入格式:

第一个整数为m,第二个整数为n;中间使用空格隔开。例如:

103 3

输出格式:

从小到大输出找到的等于或大于m的n个素数,每个一行。例如:

103

107

109

输入样例:

9223372036854775839 2

输出样例:

9223372036854775907
9223372036854775931

代码示例:

import java.math.BigInteger;
import java.util.Scanner;
public class Main{
     public static void main(String[] args){
         Scanner in=new Scanner(System.in);
        String sc = in.next();
        BigInteger m = new BigInteger(sc);
        int  n = in.nextInt();              
         int i=0;
         while(i<n){
             if(isPrime(m)){
                 System.out.println(m);
                 i++;
             }
             m=m.add(BigInteger.ONE);
         }
     }
     public static boolean isPrime(BigInteger num) {              
         return num.isProbablePrime(50);
     }
}

5-2 计算正五边形的面积和周长 (10分)


从下列的抽象类shape类扩展出一个正五边形(regular pentagon)类RPentagon,这个类将正五边形的边长作为私有成员,类中包含初始化这个值的构造方法。

public abstract class shape {// 抽象类

/ 抽象方法 求面积 / public abstract double getArea();

/ 抽象方法 求周长 / public abstract double getPerimeter(); }

请编程从键盘输入正五边形的边长值,创建一个正五边形对象,然后输出正五边形的面积和正五边形的周长。计算正五边形的面积公式为: S=5a^2/(4tan(36度))其中a为边长。 或者:S=(1/4)a^2√(25+10√5) 输出结果保留4位小数。

输入格式:

输入正五边形的边长。例如:

5

输出格式:

输出正五边形的面积和周长。第一行输出面积,第二行输出周长。例如: 43.0119

25

输入样例:

16.8

输出样例:

485.5875
84

代码示例:

import java.lang.Math;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
    public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    double a=in.nextDouble();
    Bian b1=new Bian(a);

    DecimalFormat df1 = new DecimalFormat("#.####"); 
    System.out.println(df1.format(b1.getArea()));
    System.out.println(df1.format(b1.getPerimeter()));
    } 
}
abstract class shape{// 抽象类
     public abstract double getArea();
     public abstract double getPerimeter(); 
}
class Bian extends shape{
    private double a;
    public Bian(double a){
        this.a=a;
    }
    public double getArea(){
        double s=a*a/4*(Math.sqrt(25+10*Math.sqrt(5.0)));
        return s;
    }
    public double getPerimeter(){
        return a*5;
    }
}

5-3 简单的计算器 (10分)


编程实现一个简单的计算器,实现两个整数的加、减、乘、除。 注意:输入的数字为整数,可能大于Long.MAX_VALUE (即: 9223372036854775807)

输入格式:

例如输入被除数和除数,除号是“/”:

199818221687230837883277970155607217447/15607605175531087007(除法运算)

输出格式:

12802618943776012921 (输出商)

输入样例:

268757455632088758902114193354244344883-187825044215992922193584201757800947591

输出样例:

80932411416095836708529991596443397292

提示:

一. 当字符串对象str存储的值为”199818221687230837883277970155607217447/15607605175531087007”时,下面的方法可以将str从除号”/”处分割成两个字符串:

String[] ob = str.split(“\D”, 0);

这时,ob[0]的值为”199818221687230837883277970155607217447”;

ob[1]的值为”15607605175531087007”.

二. 如果要检测字符串中是否包含除号’/’,可以用下面的方法检测:

(in1.indexOf(‘/’) != -1)为true,表示包含’/’。
代码示例:

import java.math.BigInteger;
import java.util.Scanner;
public class Main{
    public static void main(String []args){
        int len;
        char symbol = 0;
        Scanner input = new Scanner(System.in);
        String string,formarString = null,laterString = null;
        string = input.nextLine();
        len = string.length();
        for(int i =0 ;i<len ;i++)
        {
            if(string.charAt(i) == '+' || string.charAt(i) == '-' || string.charAt(i) =='*' || string.charAt(i) =='/')
            {
                symbol = string.charAt(i);
                formarString = formar(string,i);
                laterString = later(string,i+1);
            }
        }
        BigInteger a = new BigInteger(formarString);
        BigInteger b = new BigInteger(laterString);
        System.out.println(mothed(a,b,symbol));
    }
    public static String formar(String s,int j){
        String temp;
        temp = s.substring(0,j);
        return temp;
    }
    public  static String later(String s,int j){
        String temp;
        temp = s.substring(j);
        return temp;
    }
    public static BigInteger mothed(BigInteger a,BigInteger b,char symbol){
        BigInteger result = null;
        switch (symbol)
        {
            case '+':
                result = a.add(b);break;
            case '-':
                result =  a.subtract(b);break;
            case '*':
                result = a.multiply(b);break;
            case '/':
                result = a.divide(b);break;
        }
        return result;
    }
}

5-4 求解给定字符串的前缀 (10分)


求解给定字符串的前缀。

输入格式:

输入数目不定的多对字符串,每行两个,以空格分开。 例如:

filename filepath

Tom Jack

输出格式:

返回两个字符串的最大前缀,例如:

The common prefix is file

No common prefix

输入样例:

filename filepath
Tom Jack

输出样例:

The common prefix is file
No common prefix

代码示例:

import java.util.ArrayList;
import java.util.Scanner;
public class Main{

    public static void main(String[] args){
    Scanner in=new Scanner(System.in);  
    String s1="";
    String s2="";
    while(in.hasNext()){
            s1=in.nextLine();
            System.out.println(isPre(s1));
    }
    in.close();
    }
    public static String isPre(String s1){
        String result="";
        String[] stringArr=s1.split(" ");
        String s11=stringArr[0];
        String s12=stringArr[1];
        char[] ch1=s11.toCharArray();
        char[] ch2=s12.toCharArray();
        String list="";
        int sl1=s11.length()<s12.length()?s11.length():s12.length();
        for(int i=0;i<sl1;i++){
            if(ch1[i]!=ch2[i]) break;
            list+=ch1[i];
        }
        if(list=="") result+="No common prefix";
        else result="The common prefix is "+list;
        return result;
    }
}

5-5 找出最大的对象 (10分)


(找出最大的对象)编写一个方法,返回对象数组中最大的对象。方法签名如下:

public static Object max(Comparable[] a)

所有对象都是Comparable接口的实例。对象在数组中的顺序是由compareTo方法决定的。

编写测试程序,从键盘输入5个字符串和5个整数,创建一个由5个字符串构成的数组、一个由5个整数构成的数组。找出数组中最大的字符串、整数并输出。

输入格式:

输入

Xi’an (输入5个字符串,每行一个)

Beijing

ShangHai

GuangZhou

ShenZhen

8 9 12 7 6 (输入5个整数,以空格分隔)

输出格式:

输出 Max string is Xi’an (输出最大的字符串)

Max integer is 12 (输出最大的整数)

输入样例:

France
Japan
German
China
India
6 34 89 168 53

输出样例:

Max string is Japan
Max integer is 168

代码示例:

import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static Object max(Comparable[] a){
    Arrays.sort(a);
    return a[a.length-1];
}
public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    String[] s1=new String[5];
    Integer[] i1=new Integer[5];
    int i=0;
    while(i<5){
        s1[i]=in.next();
        i++;
    }
    int j=0;
    while(j<5){
        i1[j]=in.nextInt();
        j++;
    }
    System.out.println("Max string is "+max(s1));
    System.out.println("Max integer is "+max(i1));
    in.close();
}
}

5-6 使用公历类GregorianCalendar (10分)


使用公历类 GregorianCalendar,公历类 GregorianCalendar有方法setTimeInMillis(long);可以用它来设置从1970年1月1日算起的一个特定时间。请编程从键盘输入一个长整型的值,然后输出对应的年、月和日。例如输入:1234567898765,输出:2009-1-14

输入格式:

输入

1234567898765 (毫秒数)

输出格式:

输出

2009-1-14 (输出年、月和日,实际应该是2月,因为Java API 从0开始计算月份)

输入样例:

1450921070108

输出样例:

2015-11-24

代码示例:

import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class Main {
    public static void main(String[] args){
     Calendar cal=Calendar.getInstance();
     Scanner in = new Scanner(System.in);
     long time = in.nextLong();
     cal.setTimeInMillis(time);
     int year=cal.get(Calendar.YEAR);
     int month=cal.get(Calendar.MONTH);
     int day=cal.get(Calendar.DAY_OF_MONTH);
     System.out.println(year+"-"+month+"-"+day);
    }
}
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值