一、編程題
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
);