笔试题(2019.04.19 14时)

一、编程题

1. 乘法表

要求:在屏幕上打印九九表,用Tab作为分隔符;程序要支持命令行参数的输入,输入的参数为打印的行级,如果输入的数值大于9,则只输入到9*9。如输入的参数值为3,则输出结果为
1 * 1 = 1
1 * 2 = 1 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
如果未输入任何参数,则在屏幕上打印使用方法,程序不终止,不输出任何数据。

public void X99() {
		Scanner reader = new Scanner(System.in);
		int number = 0;
		System.out.print("请输入:");
		String str = reader.nextLine();
		boolean flag = true;
		while (flag) {
			flag = false;
			try {
				number = Integer.parseInt(str);
			} catch (Exception e) {
				flag = true;
				System.out.println("您的输入不合法,请重新输入:");
				str = reader.nextLine();
			}
		}
		if (number < 0 || number > 9) {
			number = 9;
		}
		for (int i = 1; i <= number; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print(j + "*" + i + "=" + i * j + "\t");
			}
			System.out.println();
		}
		reader.close();
	}

2. 字符串处理

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC” 4,应该截为“我AB”,输入“我ABC汉DEF” 6,应该输出为“我ABC”而不是“我ABC+汉的半个”。

public void worldSub() {
		System.out.println("请输入要截取的字符串:");
		Scanner reader = new Scanner(System.in);
		String str = reader.nextLine();
		while ("".equals(str)) {
			System.out.println("不要输入空字符串,请重新输入:");
			str = reader.nextLine();
		}
		String number = reader.nextLine();
		boolean flag = true;
		int num = 0;
		while (flag) {
			flag = false;
			try {
				num = Integer.parseInt(number);
			} catch(Exception e) {
				System.out.println("请输入数字:");
				number = reader.nextLine();
				flag = true;
			}
		}
		reader.close();
		
		char[] c = str.toCharArray();
		int offset = 0;
		int count = 0;
		for (int i = 0; i < c.length; i++) {
			if (c[i] > 256) {
				offset = 2;
				count += 2;
			} else {
				offset = 1;
				count++;
			}
			if (count == num) {
				System.out.println(str.substring(0, i + 1));
				return;
			}
			if (count == num + 1 && offset == 2) {
				System.out.println(str.substring(0, i));
				return;
			}
		}
		System.out.println(str);
	}

3. 素数判定

只能被1和自身整除的数是素数。找出100内的素数输出,并计算程序运行所耗费的时间。

public void suShu() {
		long startTime = System.currentTimeMillis();
		boolean flag = false;
		for (int i = 2; i <= 100; i++) {
			flag = true;
			for (int j = 2; j < i / 2; j++) {
				if (i % j == 0) {
					flag = false;
					break;
				}
			}
			if (flag) {
				System.out.print(i + " ");
			}
		}
		long endTime = System.currentTimeMillis();
		System.out.println();
		System.out.println(endTime - startTime + "ms");
	}

4. 线程题

创建一个线程类,在线程中每隔一秒钟在屏幕上输出系统当前时间,如2019-04-01 14:00:00,当程序执行超过1分钟后,结束线程,退出并终止程序。

public class AnXinJie implements Runnable{
	public static void main(String[] args) {
		new Thread(new AnXinJie()).start();
	}

	@Override
	public void run() {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		long startTime = System.currentTimeMillis();
		while (System.currentTimeMillis() - startTime <= 60000) {
			String format = dateFormat.format(new Date());
			System.out.println(format);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

SQL语法

1、查询学生姓名及其课程总学分

Student表:学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)和系名(Sdept)
Course表:课程号(Cno)、课程名(Cname)和学分(Ccredit)
SC表:学号(Sno)、课程号(Cno)和成绩(Grade)
注:如果课程不及格,那么课程学分为0

SELECT S.Sname, SUM(C.Ccredit) FROM Student S
LEFT JOIN SC ON S.Sno = SC.Sno LEFT JOIN Course C ON C.Cno = SC.Cno
AND SC.Grade > 59 GROUP BY S.Sno;

2、 删除除学号(自动编号)字段以外,其它字段都相同的冗余记录!

Sno Sname Ssex Sage Sdept
1 Alice 20 计算机系
2 Bob 22 电子系
3 Alice 20 计算机系
4 Bob 22 电子系
DELETE FROM Student WHERE Sno IN 
(
	SELECT no FROM (SELECT MAX(S2.Sno) no FROM Student S2
	GROUP BY S2.Sname,S2.Ssex,S2.Sage,S2.Sdept) st
); 

如果您看完了这篇文章,并有更好地答题方式,请一定要评论留言~愿你能被整个世界温柔对待。

你可能感兴趣的:(笔试题)