基础篇课后习题答案,做了大部分,虽然不一定是最佳代码,但是保证每个都能运行,如有更好的答案,欢迎讨论
5.1 计算平均值等数学题
Scanner scanner = new Scanner(System.in); System.out.print("请输入数字,以0结束:"); int num = scanner.nextInt(); int positive = 0, negative = 0; double total = 0d, average = 0d; if (num != 0) { while (num != 0) { if (num > 0) { positive++; } else { negative++; } total = total + num; num = scanner.nextInt(); } average = total / (positive + negative); } else { System.out.println("起始数字不能为0"); } System.out.println("正数的个数是:" + positive); System.out.println("负数的个数是:" + negative); System.out.println("总和是:" + total); System.out.println("平均数是:" + average);
5.2 重复加法
Scanner scanner = new Scanner(System.in); int count = 0; int correct = 0; while (count <= 20) { int num1 = (int) (Math.random() * 10); int num2 = (int) (Math.random() * 10); System.out.print(num1 + " + " + num2 + " = "); int answer = scanner.nextInt(); if (answer == num1 + num2) { System.out.println("你答对了!"); correct++; } else { System.out.println("你答错了!"); } count++; } System.out.println("共20道题,你总共答对了" + correct + "道题");
5.3 千克转换
System.out.printf("%-5s%8s\n", "千克", "镑"); for (int i = 1; i < 200; i = i + 2) { System.out.printf("%-5d%10.1f\n", i, i * 2.2f); }
5.4 英里转换
System.out.printf("%-5s%8s\n", "英里", "千米"); for (int i = 1; i <= 10; i++) { System.out.printf("%-12d%-1.3f\n", i, i * 1.609f); }
5.5 千克转换
System.out.printf("%-10s%-10s%-10s%-10s\n", "千克", "镑", "镑", "千克"); for (int i = 1, j = 20; i < 200 && j <= 515; i = i + 2, j = j + 5) { System.out.printf("%-8d%5.1f%11d%12.2f\n", i, i * 2.2f, j, j / 2.2f); }
5.7 计算未来学费
double fee = 10000; for (int i = 1; i <= 10; i++) { fee = fee * (1 + 0.05); } System.out.println("10年后的学费是:" + (int) Math.round(fee)); for (int i = 1; i <= 4; i++) { fee = fee * (1 + 0.05); } System.out.println("10年后4年内的学费是:" + (int) Math.round(fee));
5.8 找出最高分
Scanner scanner = new Scanner(System.in); System.out.print("请输入学生个数:"); int count = scanner.nextInt(); String nameList[] = new String[count]; int point[] = new int[count]; int best = 0; Scanner input1 = new Scanner(System.in); Scanner input2 = new Scanner(System.in); for (int i = 0; i < count; i++) { System.out.print("请输入第" + (i + 1) + "个学生的姓名:"); nameList[i] = input1.nextLine(); System.out.print("请输入第" + (i + 1) + "个学生的成绩:"); point[i] = input2.nextInt(); if (i > 0 && (point[i] > point[best])) { best = i; } } System.out.println("成绩最高的学生是:" + nameList[best]); System.out.print("对应的分数是:" + point[best]);
5.9 找出两个高分学生
Scanner scanner = new Scanner(System.in); System.out.print("请输入学生个数:"); int count = scanner.nextInt(); String nameList[] = new String[count]; int point[] = new int[count]; int best = 0, best_array = 0; int second = 0, second_array = 0; Scanner input1 = new Scanner(System.in); Scanner input2 = new Scanner(System.in); for (int i = 0; i < count; i++) { System.out.print("请输入第" + (i + 1) + "个学生的姓名:"); nameList[i] = input1.nextLine(); System.out.print("请输入第" + (i + 1) + "个学生的成绩:"); point[i] = input2.nextInt(); if (point[i] > best && point[i] > second) { second = best; best = point[i]; } else if (point[i] < best && point[i] > second) { second = point[i]; } } for (int i = 0; i < count; i++) { if (point[i] == best) { best_array = i; } else if (point[i] == second) { second_array = i; } } System.out.println("成绩最高的学生是:" + nameList[best_array] + ",对应的分数是:" + point[best_array]); System.out.println("成绩第二的学生是:" + nameList[second_array] + ",对应的分数是:" + point[second_array]);
5.10 找出能被5和6整除的数
int count = 0; for (int i = 100; i <= 1000; i++) { if (i % 5 == 0 && i % 6 == 0) { System.out.print(i + " "); count++; if (count % 10 == 0) { System.out.println(); } } }
5.11 找出能但不能同时被5和6整除的数
int count = 0; for (int i = 100; i <= 200; i++) { if (i % 5 == 0 ^ i % 6 == 0) { System.out.print(i + " "); count++; if (count % 10 == 0) { System.out.println(); } } }
5.12 求最小值
int num = 0; while (true) { if (Math.pow(num, 2) > 12000) { System.out.println("大于12000的n的二次方的最小整数是:" + num); break; } num++; }
5.13 求最大值
int num = 0; while (true) { if (Math.pow(num, 3) > 12000) { System.out.println("小于12000的n的三次方的最大整数是:" + (num - 1)); break; } num++; }
5.14 最大公约数
Scanner scanner = new Scanner(System.in); System.out.print("请输入数字1:"); int num1 = scanner.nextInt(); System.out.print("请输入数字2:"); int num2 = scanner.nextInt(); int min = (num1 < num2) ? num1 : num2; while (min > 0) { if (num1 % min == 0 && num2 % min == 0) { System.out.print(num1 + "和" + num2 + "的最大公约数是:" + min); break; } min--; }
5.17 输出金字塔
Scanner scanner = new Scanner(System.in); System.out.print("请输入数字:"); int num = scanner.nextInt(); for (int i = 1; i <= num; i++) { for (int j = num - i; j >= 1; j--) { System.out.print(" "); } for (int j = i; j >= 1; j--) { System.out.print(j); } for (int j = 2; j < i + 1; j++) { System.out.print(j); } System.out.println(); }