厦理Java期末训练题【附带每题答案,非标准但可通过PTA】

这是一系列关于厦理Java课程的期末训练题,涵盖了从基础到进阶的各种题目,包括数字处理、字符串操作、面向对象编程、异常处理等方面。每个题目都有详细的要求和解决方案,适合Java初学者巩固知识。
摘要由CSDN通过智能技术生成

7-1 古埃及探秘-金字塔

金字塔是继99乘法表决之后的一个经典图形排列题
要求用户可以自主控制塔身的层数, 完成如下金字体样式;

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

import java.util.Scanner;
public class Main {
   
	public static void main(String[] args) {
   
		Scanner sca = new Scanner(System.in);
		int a = sca.nextInt();
		for(int i =  1; i<=  a ; i++)
		{
   
			for(int j = 1;j<=a-i;j++)
			{
   
				System.out.print(" ");
			}
			for(int k = 1 ; k<=2*i-1;k++)
			{
   
				System.out.print("*");
			}
			System.out.println();
		}
}
}

7-2 jmu-Java-01入门-第一个PAT上Java程序

本题目要求读入若干对整数a和b,然后输出它们的和。

输入格式:
在一行中给出一对整数a和b。 以下输入样例只有两对,实际测试数据可能有多对值。

输出格式:
对每一组输入,如果a的绝对值>1000,输出|a|>1000,否则输出a+b的值。
在这里插入图片描述

import java.util.Scanner;
public class Main {
   
	public static void main(String[] args) {
   
		Scanner sca = new Scanner(System.in);
		while(true)
		{
   
		int a = sca.nextInt();
		int b = sca.nextInt();
		if(Math.abs(a)>1000)
		{
   
			System.out.println("|a|>1000");
		}
		else
		{
   
			System.out.println(a+b);
		}
		}
}
}

3 jmu-Java-01入门-取数字 (2分)

本题目要求读入若干个代表整数的字符串,然后将其转化为整数。

如果该数>=10000且<=20000,则依次输出其对应的二进制字符串、八进制字符串、十六进制字符串。

否则将字符串中的每个数字抽取出来,然后将所有数字加总求和。

提示:参考jdk文档的Integer,
在这里插入图片描述

import java.util.Scanner;
public class Main {
   
	public static void main(String[] args) {
   
		Scanner sca = new Scanner(System.in);
		int a = 0 ;
		while(sca.hasNext())
		{
   
			int sum = 0 ,num=0;
			String s =  sca.nextLine();
			a=Integer.parseInt(s);
			if(a>=10000 && a<=20000)
			{
   
				System.out.print(Integer.toBinaryString(a)+","+Integer.toOctalString(a)+","+Integer.toHexString(a));
			}
			else
			{
   
				char [] str = s.toCharArray();
				if(a<0)
				{
   
					for(int i=0;i<str.length;i++)
					{
   
					  if (s.charAt(i)=='-')
		                    {
   
		                        continue;
		                    }
						System.out.print(str[i]+" ");
						sum+=str[i]-'0';
					}
					System.out.print(sum);
				}
				else
				{
   
					for(int j=0;j<str.length;j++)
					{
   
						System.out.print(str[j]+" ");
						sum+=str[j]-'0';
					}
					System.out.print(sum);
				}
			}
			System.out.println();
		}
}
}

7-4 jmu-Java-01入门-取数字浮点数 (2分)

本题目要求读入若干以回车结束的字符串表示的整数或者浮点数,然后将每个数中的所有数字全部加总求和。

输入格式:
每行一个整数或者浮点数。保证在浮点数范围内。

输出格式:
整数或者浮点数中的数字之和。题目保证和在整型范围内。
在这里插入图片描述

import java.util.Scanner;
public class Main {
   
	public static void main(String[] args) {
   
		// TODO Auto-generated method stub
		Scanner sca = new Scanner(System.in);
		while(true)
		{
   
			String s =sca.nextLine();
			char [] ch =s.toCharArray();
			int sum = 0 ;
			for(int i = 0 ; i<ch.length;i++)
			{
   
				if(ch[i]=='-' || ch[i]=='.')
				{
   
				}
				else
				{
   
					int temp = Integer.parseInt(String.valueOf(ch[i]));
					sum += temp;
				}
			}
			System.out.println(sum);
		}
	}
}

-5 jmu-Java-01入门-开根号 (20分)

使用逐步逼近法对给定数值x求开根号。

逐步逼近法说明:从0开始逐步累加步长值。

步长=0.0001,epsilon(误差)=0.0001

循环继续的条件:

平方值<x 且 |x-平方值| > epsilon

###说明与参考

  1. 数值输出保留6位小数,使用System.out.printf("%.6f\n")
  2. 求平方,参考Math.pow函数。
  3. 输入值<0时,返回Double.NaN

输入格式:
任意数值

输出格式:
对每一组输入,在一行中输出其开根号。保留6位小数
在这里插入图片描述

import java.util.Scanner;
public class Main {
   
	public static void main(String[] args) {
   
	Scanner sca = new Scanner(System.in);
	double long1=0.0001;
	double epsilon = 0.0001;
	double i;
	double x;
	while(sca.hasNext())
	{
   
		x=sca.nextDouble();
		if(x<0)
		{
   
			System.out.println("NaN");
		}
		else
		{
   
			for(i=0;(i*i <x) && (Math.abs(x-i*i) > epsilon);i+=long1)
			{
   
			}
			System.out.printf("%.6f",i);
			System.out.println();
		}
	}
	}
}

7-6 校园竞赛-十位评委 (10分)

题目要求:

我们学院经常组织各项技能比赛,例如电脑文化节中Flash作品比赛,台下有10位评委来评判参赛者的作品,评委打分:0-100分的整数,参赛者最终得分是去掉一个最高分,去掉一个最低分,所剩分数的平均分。

要求设计一个软件,可以连续输入10位评委的成绩,并且可以无限次计算参赛者的成绩(提示,不退出即可继续输入下一批成绩)

输入格式:
90 100 80 70 65 86 77 89 91 73

输出格式:
100 65 82
在这里插入图片描述

import java.util.Scanner;
public class Main {
   
	public static void main(String[] args) {
   
		// TODO Auto-generated method stub
		Scanner sca = new Scanner(System.in);
		while(true)
		{
   
			int[] score = new int[10];
			for(int i=0;i<score.length;i++)
			{
   
				score[i] = sca.nextInt();
			}
			int min=score[0],max = score[0];
			for(int i = 1;i<score.length;i++)
			{
   
				if(score[i]>max)
				{
   
					max=score[i];
				}
				if(score[i]<min)
				{
   
					min=score[i];
				}
			}
			System.out.println(max+" "+min);
			for(int i=1;i<score.length;i++)
			{
   
				if(score[i]==max)
				{
   
					score[i]=0;
				}
				if(score[i]==min)
				{
   
					score[i]=0;
				}
			}
			int sum=0;
			for(int a:score)
			{
   
				sum+=a;
			}
			System.out.println(sum/8);
		}
	}
}

7-2 jmu-Java-02基本语法-01-综合小测验 (10分)

运行程序后可以输入4个选项,分别为:fib,sort,search,getBirthDate

**fib:**根据输入n,打印斐波那契数列。比如输入:3,输出:1 1 2

sort:**输入一串数字,然后进行排序并输出,注意数组元素输出的格式为使用[ ]包括。提示:**可直接使用函数Arrays相关方法处理输出。

search:**如果找到返回所找到的位置,如果没找到,返回-1。提示:**可以先对数组排序,然后使用Arrays相关函数进行查找。

getBirthDate:输入n个身份证,然后把输入的n个身份号的年月日抽取出来,按年-月-日格式输出。

当输入不是这几个字符串(fib,sort,search,getBirthDate)的时候,显示exit并退出程序。

注意:在处理输入的时候,尽量全部使用Scanner的**nextLine()**方法接收输入,不要将nextLine()与其它next方法混用,否则可能会出现行尾回车换行未处理影响下次输入的情况。

参考:jdk文档的Arrays,String
在这里插入图片描述

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
   
    public static int count=0;
    public static void fib(int n){
   
        int a=1;
        int b=1;
        if (n==1){
   
            System.out.println("1");
            return;
        }else if (n==2){
   
            System.out.println("1 1");
            return;
        }else if (n==0){
   
            return;
        } else {
   
            System.out.print("1 1 ");
        }
        int tem;
        for (int i=2;i<n-1;i++){
   
            tem=a+b;
            System.out.print(tem+" ");
            a=b;
            b=tem;
        }
        System.out.println(a+b);
        return;
    }
    public static void main(String[] args) {
   
        Scanner sc=new Scanner(System.in);
        int a[]=new int[1];
        while (true){
   
            String str=sc.nextLine();
            if (str.equals("fib")){
   
                count=0;
                int b=Integer.valueOf(sc.nextLine());
                fib(b);
            }else if (str.equals("sort")){
   
                String s[]=sc.nextLine().split(" ");
                a=new int[s.length];
                for (int i=0;i<s.length;i++){
   
                    a[i]=Integer.valueOf(s[i]);
                }
                Arrays.sort(a);
                System.out.println(Arrays.toString(a));
            }else if (str.equals("search")){
   
                int  b=Integer.valueOf(sc.nextLine());
                int flag=0;
                for (int i =0;i<a.length;i++){
   
                    if (a[i]==b){
   
                        flag=1;
                        System.out.println(i);
                        break;
                    }
                }
                if (flag==0){
   
                    System.out.println(-1);
                }
            }else if (str.equals("getBirthDate")){
   
                int time=Integer.valueOf(sc.nextLine());
                for (int i=0;i<time;i++){
   
                    String bir=sc.nextLine();
                    String bem=bir.substring(6,14);
                    System.out.println(bir.substring(6,10)+"-"+bir.substring(10,12)+"-"+bir.substring(12,14));
                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值