一、 编程题(本题共1小题,计15分)
编写一个程序Test1.java,创建一个main函数,在main函数中,使用Scanner提示用户输入n+1个整数(n为学生学号的最后一位,例如学号为20100101的学生,该题目的输入整数个数为2),然后显示它们的和。用户输入的内容不是数字时,提示用户重新输入。要求使用try...catch来捕获程序中的异常,要求捕获的是【NumberFormatException异常】
(1)将程序的答案清单复制粘贴在试卷中;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("输入整数个数:");
int len=input.nextInt();
int sum=0;
for(int i=0;i<len;i++){
System.out.println("请输入学生学号:");
String str=input.next();
int num=0;
try {
num=Integer.parseInt(str);
} catch (NumberFormatException e) {
System.out.println("输入的学号不正确,请重新输入");
continue;
}
sum=sum+num;
}
System.out.println("学号总和:"+sum);
}
}
(2)将程序的运行结果截图复制粘贴在试卷中
二、
编程题(本题共1小题,计15分)
编写一个程序Test2.java,计算1!+2!+3!+…+(n+2)!,其中(n为学生学号的最后一位,例如学号为20100101的学生,该题目的计算的阶乘为1!+2!+3!),阶乘的计算用递归方法实现。
(1)将程序的答案清单复制粘贴在试卷中;
import java.util.Scanner;
public class Test2 {
public int getFac(int n){
if(n==1){
return 1;
}else{
return n*getFac(n-1);
}
}
public static void main(String[] args) {
Test2 t2=new Test2();
Scanner input=new Scanner(System.in);
System.out.println("请输入学号最后一位:");
int num=input.nextInt();
int sum=0;
for(int i=1;i<=num;i++){
sum=sum+t2.getFac(i);
}
System.out.println("1!+2!+3!+…+(n+2)阶乘和:"+sum);
}
}
(2)将程序的运行结果截图复制粘贴在试卷中
三、 编程题(本题共1小题,计15分)
Java基本数据类型转换,运行下面程序,找出程序中存在的错误,指出错误所在语句,写出错误原因。
public class TestConvert {
public static void main (String args[]) {
int i=1,j=12;
float f1=0.1;
float f2=123;
long l1=12345678, l2=888888888;
double d1=2e20,d2=124;
byte b1=1,b2=2,b3=129;
j=j+10;
i=i/10;
i=i*0.1;
char c1=’a’,c2=125;
byte b=b1-b2;
char c=c1+c2-1;
float f3=f1+f2;
float f4=f1+f2*0.1;
double d=d1*i+j;
float f=(float)(d1*5+d2);
}
}
(1)指出程序的错误语句,并说明错误理由
第一处错误:
float f1=0.1;
原因:float类型定义变量时值的后面必须带上f,如果不带默认是double类型,所以正确写法:float f1=0.1f;
第二处:
byte b1=1,b2=2,b3=129;
原因:b3=129; byte超出byte范围-128 ~ 127,正确写法:
byte b1=1,b2=2,b3=125;
第三处:
i=i*0.1; 需要强制类型转换
原因:i是int 类型,0.1是double类型,最后计算结果是double类型,但是最后是int类型,所以需要强制类型转换,正确写法:
i=(int)(i*0.1);
第四处:
byte b=b1-b2; 需要强制类型转换
原因: b1-b2实现减法运算,是int类型,但最后得到b是byte类型,正确写法:
byte b=(byte)(b1-b2);
第五处:
char c=c1+c2-1;需要强制类型转换
原因: c1+c2-1实现运算,是int类型,但最后得到c是char类型,正确写法:
char c=(char)(c1+c2-1)
第六处:
float f4=f1+f2*0.1;需要强制类型转换
原因: c1+c2-1实现运算,是double类型,但最后得到f4是float类型,正确写法:
float f4=(float)(f1+f2*0.1)
四、 编程题(本题共1小题,计15分)
设计一个Shape接口和它的两个实现类Square和Circle,要求如下:
(1) Shape接口中有一个抽象方法area(),方法接收一个double类型的参数,返回一个double类型的结果;
(2) Square和Circle中实现了Shape接口的area()抽象方法,分别求正方形和圆形的面积并返回。
(1)将程序的答案清单复制粘贴在试卷中;
public interface Shape {
double area(double num);
}
public class Square implements Shape {
public double area(double r) {
return Math.PI*r*r;
}
}
public class Circle implements Shape {
public double area(double num) {
return num*num;
}
}
public class Test {
public static void main(String[] args) {
Shape shape = new Square();
System.out.println("边长为2的正方形面积:"+shape.area(2));
Shape circle = new Circle();
System.out.println("半径为3的圆形面积"+circle.area(3));
}
}
(2)将程序的运行结果截图复制粘贴在试卷中
五、 编程题(本题共1小题,计20分)
设计游戏密码验证程序:要求输入密码123456n(n为学生学号的最后一位,例如学号为20100101的学生,该题目的输入密码为1234561)后成功进入游戏(输错5次则被强行退出),要求用程序用循环实现密码验证的过程。
(1)将程序的答案清单复制粘贴在试卷中;
import java.util.Scanner;
public class Password {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
boolean b=false;
for (int i=0; i<5; i++) {
System.out.println("请输入学号:");
String number=input.next();
System.out.println("请输入密码:");
String password = input.next();
//截取学号最后一位
String s=number.substring(number.length()-1);
String pass="123456"+s;
if (password.equals(pass)) {
System.out.println("恭喜你进入游戏");
b = true;
break;
}else{
System.out.println("密码错误,请重新输入");
}
}
if (!b) {
System.out.println("密码错误,游戏结束");
System.exit(0);
}
}
}
(2)将程序的运行结果截图复制粘贴在试卷中
六、
编程题(本题共1小题,计20分)
循环接收用户从键盘输入的多个字符串,直到输入“end”时循环结束,输入结束后,对用户所输入的所有字符串进行统计,输出所有字符串中字符’a’的出现次数。
(1)将程序的答案清单复制粘贴在试卷中;
import java.util.Scanner;
public class Test6 {
public static void main(String[] args) {
// 键盘录入数据
Scanner s = new Scanner(System.in);
StringBuffer sb=new StringBuffer();
while(true){
System.out.println("请输入字符(end结束):");
String str = s.nextLine();
if(str.equals("end")){
break;
}else{
sb.append(str);
}
}
int sum=0;
for(int i=0;i<sb.length();i++){
char c=sb.charAt(i);
if(c=='a'||c=='A'){
sum++;
}
}
System.out.println("字符串中字符’a’的出现次数:"+sum);
}
}
(2)将程序的运行结果截图复制粘贴在试卷中