一、编程题
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
);