Java实验一 Java语言基础(12题)

文章目录:

[1、我国历法中的天干、地支和生肖的排列是有规律的。天干的顺序是"甲乙丙丁戊己庚辛壬癸",地支的顺序是"子丑寅卯辰巳午未申酉戌亥",生肖的顺序是"鼠牛虎兔龙蛇马羊猴鸡狗猪"。天干、地支、生肖的计算方法非常简单:将年份减去3后除以10得到余数是几,就对应于天干中的第几位;将年份减去3后除以12得到余数是几,则对应于地支中的第几位;生肖的计算方法和地支完全一致。例如,对2006年而言,将数字2006减去3后是2003,除以10后的余数是3,对应于天干中的第三位"丙";将2003除以12的余数是11,所以对应地支中的倒数第二位"戌"。由此可知,2006年是"丙戌"年,生肖是"狗"。根据以上思路,用Java写一个程序。程序提供一个声明形式为"public void getInfo(int year)"的方法,此方法接收一个int类型的代表年份的数字,然后计算并打印出相关信息](#1、我国历法中的天干、地支和生肖的排列是有规律的。天干的顺序是“甲乙丙丁戊己庚辛壬癸”,地支的顺序是“子丑寅卯辰巳午未申酉戌亥”,生肖的顺序是“鼠牛虎兔龙蛇马羊猴鸡狗猪”。天干、地支、生肖的计算方法非常简单:将年份减去3后除以10得到余数是几,就对应于天干中的第几位;将年份减去3后除以12得到余数是几,则对应于地支中的第几位;生肖的计算方法和地支完全一致。例如,对2006年而言,将数字2006减去3后是2003,除以10后的余数是3,对应于天干中的第三位“丙”;将2003除以12的余数是11,所以对应地支中的倒数第二位“戌”。由此可知,2006年是“丙戌”年,生肖是“狗”。根据以上思路,用Java写一个程序。程序提供一个声明形式为“public void getInfo(int year)”的方法,此方法接收一个int类型的代表年份的数字,然后计算并打印出相关信息)

2、1980年,我国制定了"信息交换汉字编码字符集及其交换码标准GB2312---1980"。GB2312将汉字表分为94个区,每个区94个位,这种编码称为区位码。GB2312收录的汉字分成两级:第一级是常用汉字,共3755个,置于16~55区;第二级是次常用汉字,共3008个,置于56~87区。一、二级的所有汉字从16区~87区,总共有72个区。每个区可编码94个汉字,故72个区理论上能编码的汉字总量是72×94=6768个。但因为一级汉字的编码到5589截止,5590、5591、5592、5593、5594这5个编码没有使用,所以72个区实际编码的汉字总数是72×94-5=6763个

[3、报数游戏。A、B、C、D、E、F、G、H共8人站成一排,按图2.3所示的方法从1开始报数。编写一个Java程序,找出谁先报到19 431 0057?](#3、报数游戏。A、B、C、D、E、F、G、H共8人站成一排,按图2.3所示的方法从1开始报数。编写一个Java程序,找出谁先报到19 431 0057?)

[4、用迭代法求正数n的平方根x,a由命令行参数给出。求平方根的迭代公式为xn+1=0.5×(xn+a/xn),要求前后两次求出的x的差的绝对值小于10-5。 x的迭代初始值为a/2](#4、用迭代法求正数n的平方根x,a由命令行参数给出。求平方根的迭代公式为xn+1=0.5×(xn+a/xn),要求前后两次求出的x的差的绝对值小于10-5。 x的迭代初始值为a/2)

[5、两个羽毛球队进行比赛,各出3人。甲队为A、B、C 3人,乙队为x、y、z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单。A说他不和x比,C说他不和x、z比。请编写一个Java程序找出3对赛手的名单](#5、两个羽毛球队进行比赛,各出3人。甲队为A、B、C 3人,乙队为x、y、z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单。A说他不和x比,C说他不和x、z比。请编写一个Java程序找出3对赛手的名单)

6、奇妙的算式。有人用字母代替十进制数字写出下面的算式。请编写一个Java程序,找出这些字母代表的数字

7、猴子吃桃问题。一天,一只小猴子摘下一堆桃子,当即吃去一半,还觉得不过瘾,又多吃了一个。第二天接着吃了前一天剩下的一半,馋不忍罢又多吃了一个。以后每天如此。到第10天小猴子去吃时,只剩下一个桃子了。问小猴子共摘了多少个桃子?

8、编写并测试以下递归方法,递归公式为

9、某火车站规定:在旅游旺季7~9月份,如果订票20张及其以上者,优惠票价的10%;20张以下,优惠5%;在旅游淡季1~6月份、10~12月份,订票20张及其以上者,优惠20%,20张以下,优惠10%。编写一个Java程序能够根据月份和旅客订票张数决定优惠率

[10、编写一Java程序,计算cosx=1-+- +...,精确到第n项,误差小于0.000 1,x的值由键盘输入](#10、编写一Java程序,计算cosx=1-+- +…,精确到第n项,误差小于0.000 1,x的值由键盘输入)

11、编写一个通用方法,在给出的一维数组中查找一个数,找到时输出已找到某数,未找到时输出未找到某数

12、定义一个4行4列的double型二维数组。创建一个方法显示数组并计算任意给定的行、给定的列、主对角线和副对角线的和以及数组中的最大值


1、我国历法中的天干、地支和生肖的排列是有规律的。天干的顺序是"甲乙丙丁戊己庚辛壬癸",地支的顺序是"子丑寅卯辰巳午未申酉戌亥",生肖的顺序是"鼠牛虎兔龙蛇马羊猴鸡狗猪"。天干、地支、生肖的计算方法非常简单:将年份减去3后除以10得到余数是几,就对应于天干中的第几位;将年份减去3后除以12得到余数是几,则对应于地支中的第几位;生肖的计算方法和地支完全一致。例如,对2006年而言,将数字2006减去3后是2003,除以10后的余数是3,对应于天干中的第三位"丙";将2003除以12的余数是11,所以对应地支中的倒数第二位"戌"。由此可知,2006年是"丙戌"年,生肖是"狗"。根据以上思路,用Java写一个程序。程序提供一个声明形式为"public void getInfo(int year)"的方法,此方法接收一个int类型的代表年份的数字,然后计算并打印出相关信息

package com;

import java.util.Scanner;

public class day1
{


    public static void main(String[] args)
    {
        char []天干 = {'甲','乙','丙','丁','戊','己','庚','辛','壬','癸'};
        char []地支 = {'子','丑','寅','卯','辰','巳','午','未','申','酉','戌','亥'};
        char []生肖 = {'鼠','牛','虎','兔','龙','蛇','马','羊','猴','鸡','狗','猪'};
        int year;
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入年份:");
        year = scanner.nextInt();
        System.out.println("你输入的年份为:"+year);
        System.out.println("当年的天干地支为:"+天干[((year-3)%10)-1]+地支[((year-3)%12)-1]);
        System.out.println("当年所对应的生肖为:"+生肖[((year-3)%12)-1]);
    }

}

2、1980年,我国制定了"信息交换汉字编码字符集及其交换码标准GB2312---1980"。GB2312将汉字表分为94个区,每个区94个位,这种编码称为区位码。GB2312收录的汉字分成两级:第一级是常用汉字,共3755个,置于16~55区;第二级是次常用汉字,共3008个,置于56~87区。一、二级的所有汉字从16区~87区,总共有72个区。每个区可编码94个汉字,故72个区理论上能编码的汉字总量是72×94=6768个。但因为一级汉字的编码到5589截止,5590、5591、5592、5593、5594这5个编码没有使用,所以72个区实际编码的汉字总数是72×94-5=6763个

编写程序,实现的功能是:将所有的一级汉字的区位码打印来,并在区位码后面跟上其汉字本身。每打印8个汉字的相关信息后换行。

操作提示:使用for循环嵌套,外层循环从16~55,内层循环从l~94。注意在适当时使用break退出循环。定义一个拥有两个元素的byte类型数组,将区码加上十进制数160并赋给数组下标为0的元素;将位码加上十进制数160并赋给数组下标为1的元素。赋值时注意类型的强制转换。当byte数组的两个元素都取得值后,使用java.1ang.String类的"public String(byte[]bytes)"构造形式即可得到一个特定汉字。

package com;

import java.util.Scanner;
import java.lang.String;
public class day1
{
    public static void main(String[] args)
    {
        int k=0;
        byte bytes[]=new byte[2];//定义一个拥有两个元素的byte类型数组
        String word="";

        for (int i=16;i<=55;i++)
        {
            for (int j=1;j<=94;j++)
            {
                //将区码加上十进制数160并赋给数组下标为0的元素
                bytes[0]=(byte)(i+160);
                //将位码加上十进制数160并赋给数组下标为1的元素
                bytes[1]=(byte)(j+160);

                word=new String(bytes);//赋值时注意类型的强制转换
                System.out.print(i+""+String.format("%02d",j));//当byte数组的两个元素都取得值后
                System.out.print(word);

                //5590、5591、5592、5593、5594这5个编码没有使用
                if (i==55 && j>=89)
                {
                    break;
                }

                k++;
                if (k%10==0)
                {
                    System.out.println();
                }
            }
        }
    }

}

3、报数游戏。A、B、C、D、E、F、G、H共8人站成一排,按图2.3所示的方法从1开始报数。编写一个Java程序,找出谁先报到19 431 0057?

package com;

import java.util.Scanner;
import java.lang.String;
public class day1
{
    public static void main(String[] args)
    {
        char []AH={'A','B','C','D','E','F','G','H'};
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个数:");
        int sc = scanner.nextInt();
        int a = sc/7;
        int b = sc%7;
        if (a%2==0){
            System.out.println("现报道的是:"+AH[b-1]);
        }else {
            System.out.println("现报道的是:"+AH[8-b]);
        }
    }

}

4、用迭代法求正数n的平方根x,a由命令行参数给出。求平方根的迭代公式为xn+1=0.5×(xn+a/xn),要求前后两次求出的x的差的绝对值小于10-5。 x的迭代初始值为a/2

package com;

import java.util.Scanner;
import java.lang.String;
public class day1
{
    public static void main(String[] args)
    {
        double sum;
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入a的值:");
        double a = scanner.nextDouble();
        double x=a/2,h1=0,h2=0;
        do{
            h1=0.5*(x+a/x);
            x=h1;
            h2=0.5*(x+a/x);
            x=h2;
            sum=Math.abs(h1-h2);
        }while (sum>0.000001);
        System.out.println("h1:"+h1+"     "+"h2:"+h2);
        System.out.println("差值k="+sum);
    }

}

5、两个羽毛球队进行比赛,各出3人。甲队为A、B、C 3人,乙队为x、y、z 3人。已抽签决定比赛名单。有人向队员打听比赛的名单。A说他不和x比,C说他不和x、z比。请编写一个Java程序找出3对赛手的名单

package com;

import java.util.Scanner;
import java.lang.String;
// A!=X  C!=X C!Z  找出3对赛手的名单
//C-Y  A-Z B-X
public class day1
{
    public static void main(String[] args)
    {

        char i,j,k;
        for (i='x';i<='z';i++)
        {
            for (j='x';j<='z';j++)
            {
                if (i!=j)
                {
                    for (k='x';k<='z';k++)
                    {
                        if (i!=k && j!=k)
                        {
                            if (i!='x' && k!='x' && k!='z')
                            {
                                System.out.println("A--"+i+"\n"+"B--"+j+"\n"+"C--"+k);
                            }
                        }
                    }
                }
            }
        }

       /* char []ch1={'A','B','C'};
        char []ch2={'x','y','z'};

           *//*
            A与x[舍] A与z
            B与x B与y[舍]  B与z[舍]
            C与y*//*
        for (int i=0;i<=2;i++){
            for (int j=0;j<=2;j++)
            {
                if ((i==0 && j==1) || (i==2&&j==0) || (i==2&&j==2))
                {

                }
                else
                    {
                    System.out.println(ch1[i]+"与"+ch2[j]);
                }
            }
        }*/
    }

}

6、奇妙的算式。有人用字母代替十进制数字写出下面的算式。请编写一个Java程序,找出这些字母代表的数字

提示:每个字母代表值为0, 1, 2, 3, 4, 5, ..., 9中的一个。使用四重穷举。

package com;

import java.util.Scanner;
import java.lang.String;
public class day1
{
    public static void main(String[] args)
    {
        int []A={0,1,2,3,4,5,6,7,8,9};
        int []E={0,1,2,3,4,5,6,7,8,9};
        int []G={0,1,2,3,4,5,6,7,8,9};
        int []L={0,1,2,3,4,5,6,7,8,9};
        int count=0;

        for (int e=0;e<E.length;e++){
            for (int g=0;g<G.length;g++){
                for (int a=0;a<A.length;a++){
                    for (int l=0;l<L.length;l++){
                        int x1=E[e]*1000;
                        int x2=G[g]*100;
                        int x3=A[a]*10;
                        int x4=L[l]*1;
                        int sum=x1+x2+x3+x4;

                        int y1=L[l]*1000;
                        int y2=G[g]*100;
                        int y3=A[a]*10;
                        int y4=E[e]*1;
                        int end=y1+y2+y3+y4;
                        if (end==sum*L[l]){
                            System.out.print(E[e]+""+G[g]+""+A[a]+""+L[l]+"\t");
                            count++;
                            if (count%17==0) System.out.println();
                        }
                    }
                }
            }
        }
    }

}

7、猴子吃桃问题。一天,一只小猴子摘下一堆桃子,当即吃去一半,还觉得不过瘾,又多吃了一个。第二天接着吃了前一天剩下的一半,馋不忍罢又多吃了一个。以后每天如此。到第10天小猴子去吃时,只剩下一个桃子了。问小猴子共摘了多少个桃子?

package com;

import java.util.Scanner;
import java.lang.String;
public class day1
{
    public static void main(String[] args)
    {
        int count=1;
        System.out.print("每一天的桃子数为:");
        for (int i=9;i>0;i--)
        {
            count=(count+1)*2;
            System.out.print(count+"个"+"    ");
        }
    }

}

8、编写并测试以下递归方法,递归公式为

package com;

import java.util.Scanner;

public class day1 {
    static float p(int n,int x)
    {
        float sum;
        if (n == 0)
        {
            sum = 1;
        } else
        {
            if (n == 1)
            {
                sum = x;
            } else
            {
                sum = ((2 * n - 1) * x * p(n - 1, x) - (n - 1) * p(n - 2, x)) / n;
            }
        }
        return sum;
    }

    public static void main(String[] args) {
        float sum;


        Scanner sc = new Scanner(System.in);
        System.out.println("请输入n:");
        int n = sc.nextInt();
        System.out.println("请输入x:");
        int x = sc.nextInt();

        sum = p(n,x);

        System.out.println("结果为:"+sum);

    }

}

9、某火车站规定:在旅游旺季7~9月份,如果订票20张及其以上者,优惠票价的10%;20张以下,优惠5%;在旅游淡季1~6月份、10~12月份,订票20张及其以上者,优惠20%,20张以下,优惠10%。编写一个Java程序能够根据月份和旅客订票张数决定优惠率

package com;

import java.util.Scanner;
import java.lang.String;
public class day1
{
    public static void main(String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入月份:");
        int mth = scanner.nextInt();
        System.out.print("亲输入票数:");
        int count = scanner.nextInt();
        if (mth>=7 && mth<=9){
            if (count>=20){
                System.out.println("    "+"优惠票价10%");
            }else {
                System.out.println("    "+"优惠票价5%");
            }
        }else {
            if (count>=20){
                System.out.println("    "+"优惠票价20%");
            }else {
                System.out.println("    "+"优惠票价优惠10%");
            }
        }
    }

}

10、编写一Java程序,计算cosx=1-+- +...,精确到第n项,误差小于0.000 1,x的值由键盘输入

package com;

import java.util.Scanner;
import java.lang.String;
public class day1
{
    public static void main(String[] args)
    {
        System.out.print("请输入x的值:");
        Scanner scanner = new Scanner(System.in);
        double sc = scanner.nextDouble();

        double cosx=1;
        double m=1;
        do{
            for (int i=2;;i++)
            {
                m=(2*i)*(2*i-1);
                cosx+=-((sc*sc)/m);
                if (cosx<0.00001)
                {
                    break;
                }
            }

        }while(cosx>0.00001);
        System.out.println("cosx="+cosx);
    }

}

11、编写一个通用方法,在给出的一维数组中查找一个数,找到时输出已找到某数,未找到时输出未找到某数

package com;

import java.util.Scanner;
import java.lang.String;
public class day1
{
    public static void main(String[] args)
    {
        int []arr=new int[10];
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入10个数!");
        for (int i=0;i<arr.length;i++){
            arr[i]=scanner.nextInt();
        }
        System.out.println("清输入要查找的数字:");
        int m = scanner.nextInt();
        for (int i=0;i<arr.length;i++){
            if (arr[i]==m){
                System.out.println("该数在数组中下标为"+i);
            }else System.out.println("err");
        }
    }

}

12、定义一个4行4列的double型二维数组。创建一个方法显示数组并计算任意给定的行、给定的列、主对角线和副对角线的和以及数组中的最大值

package com;

import java.util.Scanner;
import java.lang.String;
public class day1
{
    public static void main(String[] args)
    {
        int arr[][]=new int[4][4];
        Scanner scanner = new Scanner(System.in);
        System.out.println("请从键盘输入16个数:");
        for (int i=0;i< arr.length;i++){
            for (int j=0;j<arr[i].length;j++){
                arr[i][j]=scanner.nextInt();
            }
        }

        System.out.println("你输入的数组为:");
        for (int i=0;i<arr.length;i++){
            for (int j=0;j<arr[i].length;j++){
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }
        System.out.println("请输入要计算的行号:");
        int rw = (scanner.nextInt()-1);
        int RWcount=0;
        for (int i=0;i<arr[rw].length;i++){
            RWcount+=arr[rw][i];
        }
        System.out.println(RWcount);

        System.out.println("请输入要计算的列号:");
        int cl = (scanner.nextInt()-1);
        int CLcount=0;
        for (int i=0;i<arr[cl].length;i++){
            CLcount+=arr[i][cl];
        }
        System.out.println(CLcount);

        System.out.println("主对角线和为:");
        int Ccount=0;
        Ccount=arr[0][0]+arr[1][1]+arr[2][2]+arr[3][3];
        System.out.println(Ccount);

        System.out.println("副对角线和为:");
        int Rount=0;
        Rount=arr[0][3]+arr[1][2]+arr[2][1]+arr[3][0];
        System.out.println(Rount);
    }

}
相关推荐
路在脚下@19 分钟前
spring boot的配置文件属性注入到类的静态属性
java·spring boot·sql
森屿Serien22 分钟前
Spring Boot常用注解
java·spring boot·后端
轻口味1 小时前
命名空间与模块化概述
开发语言·前端·javascript
前端小小王1 小时前
React Hooks
前端·javascript·react.js
苹果醋31 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
迷途小码农零零发2 小时前
react中使用ResizeObserver来观察元素的size变化
前端·javascript·react.js
Hello.Reader2 小时前
深入解析 Apache APISIX
java·apache
娃哈哈哈哈呀2 小时前
vue中的css深度选择器v-deep 配合!important
前端·css·vue.js
菠萝蚊鸭2 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel