第二周周测

选择题:每题3分,共45分

1. 数据表students中likes字段数据类型为set(“python”,”study”,”MySQL”),当在表中插入该字段值时以下正确的是?(AC) 多选

A. “Python,MySQL”

B. “Python”,”MySQL”

C. ‘Python,MySQL’

D. Python,MySQL,MongoDB

解析: MySQL数据类型中的枚举类型分为单选enum()和多选set(),在set()类型的字段插入记录有两个要求:1、字段值必须在给定值的范围内选择;2、选择多个值时用一对引号把所有值引起来,不同值之间用逗号隔开。

2.您有一个包含有关您学校中所有学生的信息的表。要更改表中学生的名字,应使用哪个 SQL 关键字?(B)单选

A. change

B. update

C. insert

D. select

解析:change为修改表名,update为更新表记录,insert为插入表记录,select为查询表记录。

3.在表中插入记录时,如果不给该字段赋值,该字段返回系统当前时间的数据类型是?( A) 单选

A. timestamp

B. datetime

C.now

D.nowtime

解析:MySQL数据类型中的日期时间类型有两个函数,datetime()和timestamp(),datetime()在不给值时默认返回值为NULL,而timestamp()在不给值时会默认返回系统的当前时间。

4.有一个学生信息表,其中一个字段成绩定义如下:


score int(2)


则该字段可以插入如下哪几条记录?(ABCD)多选

A.99

B.100

C.60

D.3

解析:int数据类型为大整型,有符号存储范围为-2**31 ~ +2**31 – 1,int(2)括号中的2仅仅为显示宽度,和存储数据的位数无关,而字符类型的宽度则为实际存储数据的宽度,二者在本质上是不同的。

5.有一张顾客信息表customer,包含如下字段:


id int primary key auto_increment,


name varchar(20),


order varchar(20)


表中有如下2条记录:


1 张三 iphone


2 李四 ipad


现执行如下两条SQL命令,


delete from customer where id = 2;


insert into customer(name,order)values(“王五”,”iwatch”)


则customers表中 王五 该条记录的内容为?:(C)单选

A. 1 王五 iwatch

B. 2 王五 iwatch

C. 3 王五 iwatch

D. NULL 王五 iwatch

解析:表中id字段一般为能唯一锁定一条记录的字段,一旦表中id字段设置为了主键并附加自增长属性,则在插入记录时如未给id字段赋值,会在最后一次输入的id字段值的基础上 +1,如最后一条或多条记录被删除则会继续 +1。

6.一个数据库包含两个表,分别为 Customer 和 Order. Order外键关联Customer表主键

执行以下语句:


delete from Order where CustomerID=209;


结果是什么?(D)单选

A.从 Customer 表中删除 CustomerID为209的记录

B.从 Order 表中删除 CustomerID为209 的所有记录,并从 Customer 表中删除 CustomerID为209的记录

C.从 Order 表中删除 CustomerID为209 的第一条记录

D.从 Order 表中删除 CustomerID为209 的所有记录

解析:本题考查delete语句的使用, 无论delete语句中涉及到几张表,删除记录时删除的是delete from后所跟的表名中的相关记录。

7.哪条语句会在students表中删除未输入电话号码的行?(C)单选

A. delete from students where phone is not null

B. delete from students where phone = “”

C. delete from students where phone is null

D. delete from students phone = null

解析:NULL为空值,””为空字符串,匹配空值(NULL)必须用 is 或者 is not,而匹配空字符串(””)则用 = 或者 !=。

8.以下能够删除一列的是?:(B)单选

A. alter table students remove age

B. alter table students drop age

C. alter table students delete age tinyint unsigned

D. alter table students drop age tinyint unsigned

解析:删除表字段使用关键字drop,且要删除的字段名之后无需给定该字段的数据类型,delete是删除表中相关记录,和字段操作无关。

9. update 和 delete 语句的区别是什么?(A)单选

A. update 语句不会从表中删除行

B. 一条 update 语句只能更改一行

C. delete 语句不能用 where 子句

D. delete 语句只能在存储过程中运行

解析:update语句是更新表记录,update语句后不加where条件会将表中所有记录更新,delete语句后不加where条件会将表中所有记录删除。

10.向数据库中插入一条记录用哪一项?(D)单选

A.CREATE B.SAVE C.UPDATE D.INSERT

解析:INSERT为mysql中的插入操作语句

简答题(30分)

1. 小明家必须要过一座桥。小明过桥最快要1秒,小明的弟弟最快要3秒,小明的爸爸最快要6秒,小明的妈妈最快要8秒,小明的爷爷最快要12秒。每次此桥最多可过两人,而过桥的速度依过桥最慢者而定。过桥时候是黑夜,所以必须有手电筒,小明家只有一个手电筒,而且手电筒的电池只剩30秒就将耗尽。小明一家该如何过桥,请写出详细过程。


#
让最快的人多跑几次
#
3+1 6+1 8+1 12 = 32s
#
让慢的一起走
#
3+1 12+3 6+1 3 = 29s
#1.小明和弟弟先走
小明回来
#2.妈妈和爷爷走
弟弟回来
#3.小明和爸爸走
小明回来
#4.小明和弟弟走

import
random
while
True:
#a岸
a
= [1,3,6,8,12]
#b岸
b
= []
#速度
SPEED
= 0
#流程
step
= []

while
True:
#随机获取两个a中的元素
x
= random.sample(a,2)
#将元素放入b中
b.extend(x)
#从a中删除元素
a.remove(x[0])
a.remove(x[1])
step.append(x)#将随机组合添加到列表
step.append(max(x))#将随机组合的过河时间也添加到列表
if
not a:
break

#从b中随机找一个到a
y
= random.sample(b,1)
a.extend(y)
b.remove(y[0])
step.append(y[0])#记录
返回的时间
step.append('||')
 
#
print(step)
for
i in step:
if
type(i) == int:
SPEED
+= i
if
SPEED<=30:
break
print(step)



编程题(每题20分,共40分)

1. 给你一个 n*m 的二维数组,每个元素保证递增,每列元素保证递增,试问如何找到某个数字,或者判断这个数字不存在。

matrix
= [
[2,4,6,9],
[13,15,17,19],
[24,26,27,28]
]

def
search(matrix,num):
row
= len(matrix)
col
= len(matrix[0])
i
= row-1
j
= 0
res
= False
#
matrix[i][j]
while
True:
if
i<0 or j==col:
break
if
matrix[i][j] > num:
#
如果
左下角元素大于目标  上移
i-=1
elif
matrix[i][j] < num:
#
如果
左下角元素小于目标  右移
j+=1
elif
matrix[i][j] == num:
res
= True
break
return
res

print(search(matrix,24))



  1. 给你一个长度为n的数组,其中只有一个数字出现了1次,其他均出现2次,问如何快速的找到这个数字。
list01
= [2,1,1,3,3,0,0]
list01.sort()
for
i in range(0,len(list01)-1,2):
if
list01[i] != list01[i+1]:
print(list01[i])


    python