筆試題(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
); 

如果您看完了這篇文章,並有更好地答題方式,請一定要評論留言~願你能被整個世界溫柔對待。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章