Java-lab-01-grammer

本文介绍了Java编程实验,包括矩阵转置、查找1000以内完数、自由落体模拟、BMI计算、日期天数判断以及随机数排序,展示了基础编程技巧和算法运用。
摘要由CSDN通过智能技术生成

Java-lab-01-grammer

实验01(01)矩阵转置

/*
  (20分)
实现(3*3)二维数组的转置题目描述
输入一个(3*3)整数二维数组,转置后输出。
输入描述
在一行输入9个整数,以空格分开
输出描述
输出转置后的(3*3)二维数组
输入样例
1 2 3 4 5 6 7 8 9
输出样例
1 4 7
2 5 8
3 6 9
 */
import java.util.Scanner;

public class Ex01_Two_Array_Transposition {
    public static void main(String[] args) {
        int array[][] = new int[3][3];
        int tempArray[][] = new int[3][3];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                array[i][j] = sc.nextInt();
            }
        }
        // 赋值一个新的数组就好
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                tempArray[j][i] = array[i][j];
            }
        }
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.print(tempArray[i][j] + " ");
            }
            System.out.println();
        }
    }
}

实验01(02)完数

/*
题目描述
一个数如果恰好等于它的因子之和,这个数就称为“完数”,
例如,6的因子为1、2、3,而6=1+2+3,因此6就是完数。
编程找出1000以内的所有完数
输入描述
无
输出描述
1000以内的所有完数
输入样例
无
输出样例
6
28
496
 */
import java.util.Scanner;

//
public class Ex02_Perfect_Number {
    public static void getFactor(int num) {
        int j = 2;
        while (j <= num) {
            if (num % j == 0) {
                // 先除了
                num = num / j;
                // 这时候j就是因子
                System.out.println(j);
            } else {
                j++;
            }
        }
    }

    // 不是求最大公约数
    // 而是求因子!
    public static void main(String[] args) {
        for (int i = 1; i < 1000; i++) {
            int sum = 0;
            for (int j = 1; j < i; j++) {
                if (i % j == 0) {
                    sum = sum + j;
                }
            }
            if (sum == i) {
                System.out.println(i);
            }
        }
    }
}

实验01(03)自由落体

/*
3.   (20分)


小球自由落体后反弹,计算路线和反弹高度。题目描述
一弹跳小球从120米高度自由落下,每次落地后反跳回原高度的一半;计算n次落地经过的路线总长度和下次反弹的高度。
输入描述
输入第几次落下
输出描述
输出经过的路线总长度和下次反弹的高度。
(中文冒号,数据保留两位小数)
输入样例
5
输出样例
总运动距离为:345.00m
下次反弹高度为:3.75m
 */
import java.util.Scanner;
public class Ex03_Free_Falling_Body {
    public static void main(String[] args) {
        float H0 = 120;
        float sum = 0;
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        for(int i=0;i<num;i++){
            sum = sum + H0 + H0/2;
            H0 = H0/2;
        }
        sum = sum - H0;
        System.out.printf("总运动距离为:%.2fm\n",sum);
        System.out.printf("下次反弹高度为:%.2fm\n",H0);
    }
}

实验01(04)BMI

4.   (20分)


编写一个程序,用于计算体质指数BMI,并打印结果。题目描述
编写一个程序,用于计算体质指数BMI,并打印结果。
BMI = 体重(kg)除以身高(m)的平方
BMI结果:
偏瘦:<18.5
正常:< 25
偏胖:< 28
肥胖:>=28
输入描述
输入身高 体重值
输出描述
输出体质指数BMI
输入样例
75  1.72
输出样例
您的体重偏胖!
 */
import java.util.Scanner;

public class Ex04_BMI {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        float weight = sc.nextFloat();
        float height = sc.nextFloat();
        float IBM = weight / height / height;
        if (IBM < 18.5)
            System.out.println("您的体重偏瘦!");
        else if (IBM < 25)
            System.out.println("您的体重正常!");
        else if (IBM < 28)
            System.out.println("您的体重偏胖!");
        else
            System.out.println("您的体重肥胖!");
    }
}

实验01(05)今年第几天?

/*
5.   (20分)


输入日期数据,并按要求输出显示题目描述
输入日期数据,计算出这是一年中的第几天,并按要求输出显示。注意闰年的区别。
输入描述
输入时间日期,用空格分开
输出描述
分别按格式输出日期,和在一年中的天数
输入样例
2019  8 30
输出样例
你输入的是2019年8月30日
这是2019年的第242天
 */
import java.util.Scanner;

public class Ex05_Time {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int year = sc.nextInt();
        int month = sc.nextInt();
        int day = sc.nextInt();
        int num = 0;
        switch (month) {
        case 1:
            num = day;
            break;
        case 2:
            num = 31 + day;
            break;
        case 3:
            num = 31 + 28 + day;
            break;
        case 4:
            num = 31 + 28 + 31 + day;
            break;
        case 5:
            num = 31 + 28 + 31 + 30 + day;
            break;
        case 6:
            num = 31 + 28 + 31 + 30 + 31 + day;
            break;
        case 7:
            num = 31 + 28 + 31 + 30 + 31 + 30 + day;
            break;
        case 8:
            num = 31 + 28 + 31 + 30 + 31 + 30 + 31 + day;
            break;
        case 9:
            num = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + day;
            break;
        case 10:
            num = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day;
            break;
        case 11:
            num = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day;
            break;
        case 12:
            num = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day;
            break;
        default:
            break;
        }

        if ((year % 100 != 0 && year % 4 == 0 || (year % 400 == 0)) && (month > 2))
            num++;
        System.out.printf("你输入的是%d年%d月%d日\n", year, month, day);
        System.out.printf("这是%d年的第%d天\n", year, num);
    }
}

实验01(06)随机数和排序

/*
6.   (0分)
随机生成数字并排序题目描述
随机生成100个0-1000之间的整数,并按照从小到大的顺序排序显示,排序算法自选。
输入描述
无
输出描述
按每行10个数据输出显示
输入样例
无
输出样例
无(因数据随机产生,要求通过就行,不要在意分数)
 */
import java.util.Random;

public class Ex06_Random_Sort {
    public static void main(String[] args) {
        Random rd = new Random();
        // 动态数组
        // 括号[]在前面
        int array[] = new int[100];
        for (int i = 0; i < 100; i++) {
            array[i] = rd.nextInt(1000);
            if (i % 10 == 0 && i != 1) {
                System.out.println();
            }
        }
        // 排序
        for (int i = 0; i < 100; i++) {
            for (int j = i; j < 100; j++) {
                if (array[i] > array[j]) {
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }
            }
        }
        for (int i = 0; i < 100; i++) {
            System.out.print(array[i] + " ");
            if ((i + 1) % 10 == 0 && i != 0) {
                System.out.println();
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bmNkotc2AECynaY6

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

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

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

打赏作者

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

抵扣说明:

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

余额充值