Java编码基础笔试题

匿名网友 匿名网友 发布于: 2015-08-30 00:00:00
阅读 153 收藏 0 点赞 0 评论 0

一、基本程序执行

  1. 打印如下效果

*****************************

* hello,world *

*****************************

 

二、数据类型和变量和基本运算符

  1. 华氏温度和摄氏温度互相转换,从华氏度变成摄氏度你只要减去32,乘以5再除以9就行了,将摄氏度转成华氏度,直接乘以9,除以5,再加上32即行。

    double f = 100; // 华氏温度

    double c = 37; // 摄氏温度

    // 华氏温度转摄氏温度

    System.out.println((f – 32.0) * 5 / 9);

    // 摄氏温度转华氏温度

    System.out.println(c * 9.0 / 5 + 32);

  2. 已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序。

    int a = 3;

    int b = 5;

    int tmp = a;//临时变量

    a = b;

    b = tmp;        

    System.out.println(“a=” + a);

    System.out.println(“b=” + b);

  3. 不用第三方变量,将ab两个变量的值互换

    int a = 3;

    int b = 5;

    a=a+b; //用a获得总和

    b=a-b; //得到旧a值赋给b

    a=a-b; //得到旧b值赋给a

    System.out.println(“a=” + a);

    System.out.println(“b=” + b);

  4. 输入一个任意的浮点数,例如3.123456789,保留其两位小数输出,无需四舍五入

    //创建输入流

    Scanner input = new Scanner(System.in);

    //得到输入的浮点数

    double d = input.nextDouble();

    //将浮点数乘以100(保留2位)后取整,再除以100.0还原成浮点数

    System.out.println((int) (d * 100) / 100.0 );

  5. 输入一个任意的5位整数,将它保留到百位,无需四舍五入

Scanner scanner = new Scanner(System.in);

    int i = scanner.nextInt();

System.out.println(i / 100 * 100);

  1. 输入一个01000的整数,求各位数的和,例如345的结果是3+4+512

    注:分解数字既可以先除后模也可以先模后除

    Scanner scan = new Scanner(System.in);

    int i = scan.nextInt();

    //分解数字

    int x1 = i / 1000;

    int x2 = i / 100 % 10;

    int x3 = i / 10 % 10;

    int x4 = i % 10;        

    System.out.println(x1 + x2 + x3 + x4);

  2. 输入一个任意的大写字母A~Z,转换为小写字母,(后面再练习输入一个字符串,大写全部转换为小写)

    char c = ‘A’;

    System.out.println((char) (c + 32) );//32即小写对应字母

  3. 分页显示练习:定义一个常量,设定数据总记录数为73条(随时可以变化),一页20条记录(随时可以变化),输入页码,打印记录总数,共几页,当前是第几页,当前记录从第n条到第n

    final int rowcount = 73;//总记录数

    final int pagesize = 20;//一页多少条

    Scanner scan = new Scanner(System.in);

    int page = scan.nextInt();//输入页码

    //得到总页数

    int pagecount = rowcount % page == 0 ? rowcount / page : rowcount / page + 1;

    //起始记录

    int startrow = pagesize * (page – 1) + 1;

    //终止记录

    int endrow = pagesize * page > rowcount ? rowcount : pagesize * page;

    //打印输出

    System.out.println(“总记录数:” + rowcount + “,每页” + pagesize + “条,共

            + page + “页,当前是第” + page + “页,从

            + startrow + “条到” + endrow + ““);

     

三、逻辑判断语句

  1. 输入一个数字,判断是一个奇数还是偶数
  2. 将分页显示的功能增加判断,如果用户输入的小于1的页码,自动赋成1,如果超出了总页码,自动赋成总页码
  3. 判断一个数字是否能被56同时整除(打印能被56整除),或只能被5整除(打印能被5整除),或只能被6整除,(打印能被6整除),不能被56整除,(打印不能被56整除)
  4. 输入两个小于5000的正随机整数,求它们差的绝对值,并输出结果。

    Scanner sc = new Scanner(System.in);

    int a = sc.nextInt();

    int b = sc.nextInt();        

    int c = a – b;

    if (c > 0)

        System.out.println(c);

    else

        System.out.println(-c);

  5. 输入一个年份,判断这个年份是否是闰年
  6. 输入一个0100的分数,如果不是0100之间,打印分数无效,根据分数等级打印A,B,C,D,E
  7. 请编写一个实现如下功能的Application:从命令行依次取三个参数 x, y, op 做算术运算,其中 x, y int 型数据,op 为运算符(+、-、×、÷
    之一),请显示 x op y 的结果。(此例子需要讲完String类的equals方法)
  8. 从命令行传入3个整数,求3个整数的和、积、最大值、最小值、平均值
  9. 将以上3个数字,从小到大排列,然后再从大到小排列。
  10. 输入年和月,得到这个月有多少天
  11. 续上题,输入年,月,日,判断这个日期是否是一个正确的日期
  12. 续上题,输入年,月,日,next|prior,如果是一个正确的日期,算出上一天或下一天
  13. 输入三角形的三条边,判断是否是一个三角形,三角形的形状:等腰三角形,等边三角形,直角三角形,普通三角形,求出周长,如果是直角三角形,另外求出面积
  14. 有一个不多于5位的正整数,求它是几位数,分别打印出每一位数字。
  15. 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?注意定义时需把奖金定义成浮点型。

    Scanner sc = new Scanner(System.in);

    double money = sc.nextLong();//输入利润

    double comm1 = 100000 * 0.1;//10万内的奖金基数

    double comm2 = comm1 + 100000 * 0.075;//20万内的奖金基数

    double comm4 = comm2 + 200000 * 0.05;//40万内的奖金基数

    double comm6 = comm4 + 200000 * 0.03;//60万内的奖金基数

    double comm10 = comm6 + 400000 * 0.015;//100万内的奖金基数        

    double comm; //实际奖金

    //分支判断

    if (money <= 100000){

        comm = money * 0.1;

    }else if (money <= 200000){

        comm = comm1 + (money – 100000) * 0.075;

    }else if (money <= 400000){

        comm = comm2 + (money – 200000) * 0.05;

    }else if (money <= 600000){

        comm = comm4 + (money – 400000) * 0.03;

    }else if (money <= 1000000) {

        comm = comm6 + (money – 600000) * 0.015;

    }else{

        comm = comm10 + (money – 1000000) * 0.01;

    }        

    System.out.println(“奖金金额:” + comm);

 

  1. 从控制台输入2个数字,求两者之间最大值,再从控制台输入3个数字,求三个数字的最大值,用三目运算符求。
  2. switch语句判断成绩,>=90 A     >=80 B      >=70 C >=60 D <60 E
  3. 输入年月日,判断这是这一年中的第几天

Scanner sc = new Scanner(System.in);

        int year = sc.nextInt();

        int month = sc.nextInt();

        int day = sc.nextInt();

        int sum = 0;// 总天数

 

        switch (month) {/* 先计算某月以前月份的总天数 */

        case 1:

            sum = 0;

            break;

        case 2:

            sum = 31;

            break;

        case 3:

            sum = 59;

            break;

        case 4:

            sum = 90;

            break;

        case 5:

            sum = 120;

            break;

        case 6:

            sum = 151;

            break;

        case 7:

            sum = 181;

            break;

        case 8:

            sum = 212;

            break;

        case 9:

            sum = 243;

            break;

        case 10:

            sum = 273;

            break;

        case 11:

            sum = 304;

            break;

        case 12:

            sum = 334;

            break;

        default:

            System.out.println(“日期错误“);

            break;

        }

        sum = sum + day;/* 再加上某天的天数 */

        if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0 && month > 2) {

            sum ++;

        }

        System.out.println(“” + sum + ““);

 

四、循环语句练习

  1. 1100的累加和(以下几题用while循环求)
  2. 打印1~100之间能被3整除且个位是6的数
  3. n的阶乘。例如5的阶乘是1*2*3*4*5
  4. while循环打印幻灯片的@符号
  5. while嵌套循环打印幻灯片的1010序列
  6. 以下例子用for循环实现,打印1100之间的奇数和偶数
  7. 打印1900年到2100年之间的闰年,一行打印4
  8. 打印小九九乘法表的4种形状
  9. 用一层while循环打印小九九乘法表

int i=1,j=1;        

while (i <= 9){            

    System.out.print(i + “*” + j + “=” + i * j + “t”);

    j ++;    

    if (j > i){

        j = 1;

        i ++;

        System.out.println();

    }

}

  1. 在控制台输出以下图形


  1. 打印以下图形

    1

    2    3

    4    5    6

    7    8    9    10

    11    12    13    14    15

int j = 1,k = 1;//控制换行

for (int i = 1;i <= 15;i ++){

    System.out.print(i + “t”);

    j ++;

    if (j > k){

        j = 1;

        k ++;

        System.out.println();

    }

}

  1. 李先生岁数的平方与他的夫人的岁数之和是1053,而他的夫人的岁数的平方与他的岁数之和是873,请编写程序计算李先生及其夫人的岁数各是多少。
  2. 有两个正整数ab,已知a*b=2048,求ab各为何值时,a+b的值最小
  3. 1234能组成多少无重复数字的三位数
  4. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第5次落地时,共经过多少米?再反弹弹起多少米?

            double sn = 100;//高度100        

            double hn = sn / 2; //第一次反弹反弹高度        

            for (int i = 2;i <= 5;i ++){

                sn = sn + hn * 2; //i次落地经过多少米

                hn = hn / 2; //i次反弹的高度

                System.out.println(“” + i + “次落地经过” + sn + ““);

                System.out.println(“” + i + “次反弹” + hn + ““);

            }

  5. 输出10100之间的全部素数。所谓素数n是指,除1n之外,不能被2~(n-1)之间的任何整数整除。
  6. 输入两个正整数mn,求其最大公约数和最小公倍数
  7. 打印所有的水仙花数。水仙花数是一个三位数,其各位数字的立方和等于该数本身,如153 1的立方 + 5的立方 + 3的立方
  8. 完数,一个数如果恰好等于它因子之和,这个数即为完数,如6 = 1 + 2 + 3
  9. 打印以下图形

    *

    ***

    *****

    *******

  10. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  11. 要求输出国际象棋棋盘

    for (int i = 1;i <= 8;i ++){

            for (int j = 1;j <= 8;j ++){

                if ( (i + j) % 2 == 0)

                    System.out.print(“■”);

                else

                    System.out.print(” “);

            }

            System.out.println();

    }

  1. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问12个月内每个月的兔子总数为多少?兔子的规律为数列1,1,2,3,5,8,13,21….
  2. 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5

            int n = 90;        

            System.out.print(n + “=”);        

            for (int i = 2;i <= n;i ++){            

                while (n != i){

                    if (n % i == 0){

                        System.out.print(i + “*”);

                        n = n / i;

                    }else{

                        break;

                    }

                }            

            }        

            System.out.print(n);

  3. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个   第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下   的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。程序分析:采取逆向思维的方法,从后往前推断。

        int day = 9; //第九天

        int x1 = 1; //当前的桃子

        int x2;//前一天的桃子        

        for (int i = day;i >= 1;i –){

            x2 = (x1 + 1) * 2;

            x1 = x2;

            System.out.println(“” + i + “天的桃子个数:” + x2);

        }

 

五、数组练习
(别忘了二维数组排序)

  1. 从控制台输入n个数,求出最大值和最小值
  2. 将一个数组中的元素逆序存放

    int[] a = { 8 , 5 , 9 ,12 ,36};        

    for (int i = 0;i < a.length / 2;i ++){

        int temp = a[i];

        a[i] = a[a.length – 1 – i];

        a[a.length – 1 – i] = temp;

    }

  3. 冒泡排序的下沉法

    int[] a = {4,3,2,1};        

    for (int i = 0;i < a.length – 1;i ++){

        for (int j = 0;j < a.length – 1 – i;j ++){

            if (a[j] > a[j + 1]){

                int tmp = a[j];

                a[j] = a[j + 1];

                a[j + 1] = tmp;

            }                    

        }

    }

  4. 冒泡排序的上浮法

    int[] a = {4,3,2,1};        

    for (int i = 0;i < a.length – 1;i ++){

        for (int j = i + 1;j < a.length;j ++){

            if (a[i] > a[j]){

                int tmp = a[i];

                a[i] = a[j];

                a[j] = tmp;

            }

        }

    }

  5. 选择排序:先从数组中找出最小元素下标,然后和第一个元素交换,然后再找出从第二个元素到最后的元素中的最小元素和第二个交换,以此类推

    int[] a = { 4, 3, 2, 1 };

    for (int i = 0; i < a.length; i++) {            

        int min = i;//假定最小元素的下标            

        for (int j = i + 1;j < a.length;j ++){

            if (a[j] < a[min])

                min = j;

        }            

        int tmp = a[i];

        a[i] = a[min];

        a[min] = tmp;

    }

  6. 插入排序:
    每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序,直到待排序数据元素全部插入完为止。

    int[] a = { 5, 8, 4, 7 };

    for (int i = 1; i < a.length ; i++) {            

        int temp = a[i];

        int j = i – 1;            

        while (j >= 0 && temp < a[j]) {

            a[j + 1] = a[j];

            j–;

        }            

        a[j + 1] = temp;

    }

  7. 输入n个数,求这n个数的最大公约数和最小公倍数

    int[] a = { 25 , 75 , 50};

    //求最小值

    int min = a[0];         

    for (int i = 1;i < a.length;i ++){

        if (a[i] < min)

            min = a[i];

    }

    //求最大公约数

    for (int i = min;i >= 1;i –){

        boolean flag = true;

        for (int j = 0;j < a.length;j ++){

            if (a[j] % i != 0){

                flag = false;

                break;

            }                    

        }

        if (flag){

            System.out.println(“最大公约数是:” + i);

            break;

        }                

    }    

    //————————————————-

    //求最大值

    int max = a[0];

    for (int i = 1;i < a.length;i ++){

        if (a[i] > min)

            max = a[i];

    }

    //求最小公倍数

    for (int i = max; ;i += max){

        boolean flag = true;

        for (int j = 0;j < a.length;j ++){

            if (i % a[j] != 0){

                flag = false;

                break;

            }

        }

        if (flag){

            System.out.println(“最小公倍数是:” + i);

            break;

        }

    }    

  8. 10个费波那契数字赋给一个数组并打印出来

    int[] a = new
    int[10];

    a[0] = 1;

    a[1] = 1;

    for (int i = 2; i < a.length; i++) {

        a[i] = a[i – 1] + a[i – 2];            

    }

  9. 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。程序分析:首先判断此数是否大于最后一个数,如果大于最后一个数,则不插入。然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

    Scanner sc = new Scanner(System.in);

    int input = sc.nextInt();

    int[] a = {4,7,12,15};        

    if (input < a[a.length – 1]){                

        for (int i = 0;i < a.length;i ++){

            if (input <= a[i]){

                int temp1 = a[i];

                a[i] = input;

                //其他元素向下移动

                for (int j = i + 1;j < a.length;j ++){

                    int temp2 = a[j];

                    a[j] = temp1;

                    temp1 = temp2;

                }                    

                break;

            }

        }

    }

  10. n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。例如1 2 3 4 5 6 7 移动4个就变成4 5 6 7 1 2 3

    Scanner sc = new Scanner(System.in);

    int input = sc.nextInt();

    int[] a = { 1, 2, 3, 4, 5, 6, 7 };        

    for (int i = 0;i < input;i ++){

        int temp1 = a[0];

        for (int j = 1;j < a.length;j ++){

            int temp2 = a[j];

            a[j] = temp1;

            temp1 = temp2;

        }            

        a[0] = temp1;

    }

  11. 将一个数组中的重复元素保留一个其他的清零。

    int[] a = { 1, 2, 2, 3, 4, 5, 6, 4, 7 ,2 ,10};        

    for (int i = 0;i < a.length – 1;i ++){

        for (int j = i + 1;j < a.length;j ++){

            if (a[i] == a[j]){

                a[j] = 0;

            }

        }

    }

  12. 从一个排好序的一维数组中查找指定的值的下标位置,用线性查找法

    int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    Scanner sc = new Scanner(System.in);

    int input = sc.nextInt();        

    for (int i = 0; i < a.length – 1; i++) {

        if (input == a[i]){

            System.out.println(“下标是” + i);

            break;

        }                

    }

  13. 用二分(折半)查找法查找上例

    int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

    Scanner sc = new Scanner(System.in);

    int input = sc.nextInt();

    int min = 0;// 查找的起始下标

    int max = a.length – 1; // 查找的中止下标

    int middle;

    while (min <= max){            

        middle = (max + min) / 2;            

        if (input == a[middle]) {

            System.out.println(middle);

            break;

        }            

        if (input > a[middle])

            min = middle + 1;            

        if (input < a[middle])

            max = middle – 1;            

    }            

  14. 从一个二维数组中找出最小值
  15. 一个33的二维数组,求其对角线之和

    int[][] a = {{1,2,3},{4,5,6},{7,8,9}};        

    int sum1 = 0;

    int sum2 = 0;        

    for (int i = 0;i < a.length;i ++){

        for (int j = 0;j < a[i].length;j ++){

            if (i == j)

                sum1 += a[i][j];

            if (i + j == 2)

                sum2 += a[i][j];

        }

    }

    System.out.println(“对角线1” + sum1 + “,对角线2” + sum2);

  16. 二维数组的排序,每一个一维数组单独排序

    int[][] a = { { 23, 1, 34 }, { 77, 89, 12, 35 }, { 23, 20 } };

    for (int k = 0;k < a.length;k ++){

        for (int i = 0;i < a[k].length – 1;i ++){

            for (int j = 0;j < a[k].length – 1 – i;j ++){

                if (a[k][j] > a[k][j + 1]){

                    int temp = a[k][j];

                    a[k][j] = a[k][j + 1];

                    a[k][j + 1] = temp;

                }

            }

        }

    }

  17. 打印杨辉三角形

评论列表
文章目录