「Java题库」基础程序设计(理论+操作)

98 阅读7分钟

理论试题

一、选择题

  1. 下面哪个不是Java的基本数据类型? A.int B.String C.boolean D.double

    答案:B 解析:String是引用类型,不是基本数据类型。Java中8大基本数据类型分别是byte、short、int、long、float、double、char和boolean。

  2. 以下代码的输出结果是?

    System.out.println(5 + 2 * 3);
    

    A.21 B.11 C.编译错误 D.17 答案:B 解析:乘法优先级高于加法,所以先算2 * 3 = 6,再加5得到11。运算符优先级决定了运算顺序,在记不清的时候可以加括号明确顺序。

  3. 想要从键盘读取一个整数,应该使用哪个语句? A.Scanner.next() B.Scanner.nextInt() C.Scanner.nextLine() D.Scanner.readInt() 答案:B 解析:Scanner类中nextInt()专门用来读取整数。next()读取字符串直到空格,nextLine()读取整行,没有readInt()这个方法。

  4. 下面哪种格式化输出可以显示2位小数? A.System.out.print("%.2d", 3.1415); B.System.out.printf("%.2f", 3.1415); C.System.out.format("%2d", 3.1415); D.System.out.print("%2f", 3.1415); 答案:B 解析:printf和format都可以格式化输出,"%.2f"表示保留两位小数。其中f表示浮点数,.2表示小数点后保留2位小数;d表示整数。

二、填空题

  1. Java中表示单精度浮点数的关键字是______,双精度浮点数的关键字是______。 答案:float、double 解析:float占4字节,double占8字节。小数默认是double类型,要声明float类型需要再小数后f后缀,比如3.14f。

  2. 表达式10 / 3的结果是______,而10.0 / 3的结果是______。 答案:3、3.333... 解析:/前后两个操作数都是整数是,进行的是两个数整除,相除结果还是整数,会自动舍去小数部分。如果有一个操作数是浮点数,则结果就会是浮点数。

  3. 使用Scanner类前必须先导入______包,创建Scanner对象的常用写法是______。

    答案java.utilScanner sc = new Scanner(System.in); 解析Scanner类是java.util包中的一个实体类,常用于从控制台读取用户输入、解析文件内容等场景。System.in表示标准输入流,通常就是键盘输入。

三、简答题

  1. 请解释以下代码的运行结果及原因:

    int a = 5;
    int b = a++;
    System.out.println("a=" + a + ", b=" + b);
    

    答案:输出结果为a=6, b=5 解析a++是后置递增运算符。先把a的值赋给b,然后a在自加。如果是++a,就会先加1再赋值。

  2. 写出用printf格式化输出当前日期时间的完整代码,要求格式类似"2023-08-15 14:30:00"。 答案

    import java.util.Date;
    
    public class Main {
        public static void main(String[] args) {
            Date now = new Date();
            System.out.printf("%tF %tT", now, now);
        }
    }
    

    解析:格式符%tF表示完整的日期信息,采用YYYY-MM-DD的形式;格式符%tT表示完整的时间信息,采用HH:MM:SS的形式,使用24小时制。Date类是java.util包中的一个类,使用前要导入java.util包。

  3. 下面代码有什么问题?如何修正?

    double price = 19.99;
    System.out.println("价格:" + price + "元");
    System.out.printf("价格:%.2f元", price);
    

    答案:两种输出方式都是正确的。 解析System.out.println("价格:" + price + "元");使用字符串拼接方式,System.out.printf("价格:%.2f元", price);使用printf精确控制小数位数。

四、代码分析题

分析下面代码的输出结果,并解释每个输出语句的执行过程:

public class Test {
    public static void main(String[] args) {
        int x = 10;
        int y = 3;
        
        System.out.println(x / y);
        System.out.println((double)x / y);
        System.out.printf("%.3f%n", (double)x / y);
        System.out.println("余数:" + x % y);
        
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个整数:");
        int num = sc.nextInt();
        System.out.println("你输入的是:" + num);
    }
}

答案及解析

  • System.out.println(x / y);输出3。 两个整数相除结果取整,直接舍去小数部分。
  • System.out.println((double)x / y);输出3.3333333333333335。 把x转为double后运算,结果就是浮点数。
  • System.out.printf("%.3f%n", (double)x / y);输出3.333。 %.3f保留三位小数,%n是换行符
  • System.out.println("余数:" + x % y); 输出余数:1。 %是取模运算符,得到除法的余数。
  • 最后三行代码会等待用户输入一个整数,然后回显输入的值。

实操试题

一、基础操作题

  1. 温度转换器 编写一个程序,将用户输入的华氏温度转换为摄氏温度。转换公式:C = (F - 32) 5 / 9。 要求使用Scanner获取输入,结果保留2位小数。 参考解答

    # 源文件保存为“TemperatureConverter.java”
    import java.util.Scanner;
    
    public class TemperatureConverter {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.print("请输入华氏温度:");
            double fahrenheit = sc.nextDouble();
            double celsius = (fahrenheit - 32) * 5 / 9;
            System.out.printf("摄氏温度为:%.2f", celsius);
        }
    }
    

    运行结果 输入华氏温度100

    请输入华氏温度:100
    摄氏温度为:37.78
    

    解析要点

    • 首先导入java.util.Scanner
    • 使用nextDouble()读取带小数的温度值
    • printf的%.2f自动四舍五入到两位小数
    • 公式里的5/9要用浮点数运算,否则会得到0
  2. 数字特征判断 编写程序判断用户输入的整数是奇数还是偶数,正数还是负数,最后输出这个数的平方和立方值。 参考解答

    # 源文件保存为“NumberProperties.java”
    import java.util.Scanner;
    
    public class NumberProperties {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.print("请输入一个整数:");
            int num = sc.nextInt();
            
            System.out.println(num % 2 == 0 ? "偶数" : "奇数");
            System.out.println(num > 0 ? "正数" : (num < 0 ? "负数" : "零"));
            System.out.println("平方:" + (num * num));
            System.out.println("立方:" + (num * num * num));
        }
    }
    

    运行结果 输入整数10

    请输入一个整数:10
    偶数
    正数
    平方:100
    立方:1000
    

    输入整数-9

    请输入一个整数:-9
    奇数
    负数
    平方:81
    立方:-729
    

    解析要点

    • %取模运算符判断奇偶
    • 三元运算符?:简化条件判断
    • 注意运算符优先级,必要时加括号
    • 负数立方还是负数,这是数学特性

二、综合应用题

购物小票生成程序 编写一个程序模拟超市收银系统。要求:

  • 输入商品单价、购买数量、折扣率(如0.9表示9折)
  • 计算总价(单价×数量×折扣)
  • 输出格式化的购物小票,包含所有输入信息和计算结果
  • 金额都保留2位小数

参考解答

# 源文件保存为“ShoppingReceipt.java”
import java.util.Scanner;

public class ShoppingReceipt {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("请输入商品单价:");
        double price = sc.nextDouble();
        System.out.print("请输入购买数量:");
        int quantity = sc.nextInt();
        System.out.print("请输入折扣率(0-1):");
        double discount = sc.nextDouble();
        
        double total = price * quantity * discount;
        
        System.out.println("\n=== 购物小票 ===");
        System.out.printf("商品单价:%.2f元\n", price);
        System.out.println("购买数量:" + quantity);
        System.out.printf("折扣率:%.2f折\n", discount);
        System.out.println("----------------");
        System.out.printf("总价:%.2f元\n", total);
    }
}

运行结果 依次输入单价、数量和折扣率

请输入商品单价:10
请输入购买数量:3
请输入折扣率(0-1):0.9
=== 购物小票 ===
商品单价:10.00元
购买数量:3
折扣率:0.90折
----------------
总价:27.00元

解析要点

  • 注意输入顺序和类型匹配
  • 总价计算要考虑浮点数精度问题
  • 使用printf统一格式化输出
  • \n实现换行,保持小票排版整洁
  • 折扣率输入0.9表示打九折

三、调试改错题

下面这个"体重指数(BMI)计算器"有5处错误,请找出并修正:

# 源文件保存为“BMICalculator.java”
import java.util.Scanner;

public class BMICalculator {
    public static void main(String[] args) {
        Scanner sc = new Scanner;
        
        System.out.print("请输入体重(kg):")
        double weight = sc.nextDouble;
        
        System.out.print("请输入身高(m):");
        int height = sc.nextInt();
        
        double bmi = weight / (height * height);
        
        System.out.println("您的BMI指数是:" + bmi);
        System.out.printf("BMI评价:%.2f", bmi);
    }
}

错误点及修正

  • Scanner sc = new Scanner; → 缺少(System.in) 解析:创建Scanner对象必须指定输入源
  • System.out.print() 语句缺少分号 解析:Java语句必须以分号结尾
  • sc.nextDouble → 缺少括号() 解析:方法调用必须有括号
  • 身高应该用nextDouble()而不是nextInt() 解析:身高可能是1.75米这样的带小数数值
  • printf格式字符串缺少评价内容 解析:应该补充BMI评价标准,比如:
    String status = "";
    if(bmi < 18.5) status = "偏瘦";
    else if(bmi < 24) status = "正常";
    else status = "偏胖";
    System.out.printf("BMI评价:%.2f (%s)", bmi, status);
    

完整修正版

# 源文件保存为“BMICalculator.java”
import java.util.Scanner;

public class BMICalculator {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("请输入体重(kg):");
        double weight = sc.nextDouble();
        
        System.out.print("请输入身高(m):");
        double height = sc.nextDouble();
        
        double bmi = weight / (height * height);
        
        String status = "";
        if(bmi < 18.5) status = "偏瘦";
        else if(bmi < 24) status = "正常";
        else status = "偏胖";
        
        System.out.println("您的BMI指数是:" + bmi);
        System.out.printf("BMI评价:%.2f (%s)", bmi, status);
    }
}

运行结果 依次输入体重和身高

请输入体重(kg):80
请输入身高(m):1.8
您的BMI指数是:24.691358024691358
BMI评价:24.69 (偏胖)