理论试题
一、选择题
-
下面哪个不是Java的基本数据类型? A.int B.String C.boolean D.double
答案:B 解析:String是引用类型,不是基本数据类型。Java中8大基本数据类型分别是byte、short、int、long、float、double、char和boolean。
-
以下代码的输出结果是?
System.out.println(5 + 2 * 3);A.21 B.11 C.编译错误 D.17 答案:B 解析:乘法优先级高于加法,所以先算
2 * 3 = 6,再加5得到11。运算符优先级决定了运算顺序,在记不清的时候可以加括号明确顺序。 -
想要从键盘读取一个整数,应该使用哪个语句? A.Scanner.next() B.Scanner.nextInt() C.Scanner.nextLine() D.Scanner.readInt() 答案:B 解析:Scanner类中
nextInt()专门用来读取整数。next()读取字符串直到空格,nextLine()读取整行,没有readInt()这个方法。 -
下面哪种格式化输出可以显示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表示整数。
二、填空题
-
Java中表示单精度浮点数的关键字是______,双精度浮点数的关键字是______。 答案:float、double 解析:float占4字节,double占8字节。小数默认是double类型,要声明float类型需要再小数后f后缀,比如3.14f。
-
表达式
10 / 3的结果是______,而10.0 / 3的结果是______。 答案:3、3.333... 解析:/前后两个操作数都是整数是,进行的是两个数整除,相除结果还是整数,会自动舍去小数部分。如果有一个操作数是浮点数,则结果就会是浮点数。 -
使用Scanner类前必须先导入______包,创建Scanner对象的常用写法是______。
答案:
java.util、Scanner sc = new Scanner(System.in);解析:Scanner类是java.util包中的一个实体类,常用于从控制台读取用户输入、解析文件内容等场景。System.in表示标准输入流,通常就是键盘输入。
三、简答题
-
请解释以下代码的运行结果及原因:
int a = 5; int b = a++; System.out.println("a=" + a + ", b=" + b);答案:输出结果为a=6, b=5 解析:
a++是后置递增运算符。先把a的值赋给b,然后a在自加。如果是++a,就会先加1再赋值。 -
写出用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包。
-
下面代码有什么问题?如何修正?
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。 %是取模运算符,得到除法的余数。- 最后三行代码会等待用户输入一个整数,然后回显输入的值。
实操试题
一、基础操作题
-
温度转换器 编写一个程序,将用户输入的华氏温度转换为摄氏温度。转换公式: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
-
数字特征判断 编写程序判断用户输入的整数是奇数还是偶数,正数还是负数,最后输出这个数的平方和立方值。 参考解答:
# 源文件保存为“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 (偏胖)