搜档网
当前位置:搜档网 › 上海交通大学python期末考试样题加解析

上海交通大学python期末考试样题加解析

上海交通大学python期末考试样题加解析
上海交通大学python期末考试样题加解析

上 海 交 通 大 学 试 卷( A 卷)

( 2010 至 2011 学年 第 2 学期 )

班级号 _________________ 学号 ________ ___ 姓名

课程名称 程序设计思想和方法 成绩 一、选择题 : 将唯一正确的选项写在题前. 每题 2 分 .

【 】 (1) 本课程的目标定位是什么 ?

[A ] 学习

Python 语言 [B ] 学习计算机的工作原理

[C ] 学习各种算法

[D ]

学习用计算机解决问题

【 】 (2) 下列哪个标识符是合法的 ? [A var-name [B] !@#$% [C] _100 [D] elif

【 】 (3) 执行下列语句后的显示结果是什么 ?

>>> s = ”hi ”

>>> print “hi ”, 2*s

[A] hihihi [B] ”hi ”hihi [C] hi hihi 【 】 (4) 如何解释下面的执行结果 ? >>> print 1.2 - 1.0 == 0.2

False

[A] Python 的实现有错误

[B] 浮点数无法精确表示

[C] 布尔运算不能用于浮点数比较

[D] Python 将非 0 数视为 False

】 (5) 想用一个变量来表示出生年份 , 下列命名中哪个最可取 ?

【 】 (6) 执行下列语句后的显示结果是什么

>>> a = 1

>>> b = 2 * a / 4

>>> a = “one ” >>> print a,b

[A] one 0 [B] 1 0 [C] one 0.5 【 】 (7) 执行下列语句后的显示结果是什么 >>> s

= ”GOOD MORNING ” >>> print s[3:-4]

[A] b_y [B] birth_year

[C] __birthYear__ [D] birthyear [A] D MOR [B] D MORN [C] OD MOR [D] OD MORN

[D] hi hi hi

[D] one,0.5

】(8) 表达式1+2L*3.14>0 的结果类型是

[A] int [B] long [C] float [D] bool

【】(9) 程序设计的原型(Prototyping) 方法是指:

[A] 先设计程序框架结构, 再逐步精化细节

[B] 先设计类, 再实例化为对象

[C] 先设计简单版本, 再逐步增加功能

[D] 以上都不是

】(10) 对n 个数做归并排序(merge

sort),

这个算法

[A] log n 时间的[B] 线性时间的[C] nlog n 时间的[D] n2时间的

二、判断题: 在题目前面的括号中打勾或叉. 每题 2 分.

】(1) 高级语言程序要被机器执行, 只有用解释器来解释执行.

】(2)

不同类型的数据不能相互运算.

】(3)

由于引号表示字符串的开始和

结束

, 所以字符串本身不能包含

引号

】(4)

计算机科学并非研究计算机的

科学

, 正如天文学并非研究望远

(5) 算法和程序是不同的概念.

】(6) 下面的程序段是错的:

temp = 42

print "The temperature is" + temp

】(7) 同一Python 变量可以先后赋予不同类型的值.

】(8) 计算机的计算是确定的, 因此并不能真正产生随机数】(9) 对象就是类的实例.

】(10) Hanoi 塔问题属于不可解问题.

三、填空题: 每题 2 分. 表达式2**3*4%5

的值为:

(1)

(2) 函数range(1,1,1) 的值是:

(3) 格式化输出浮点数: 宽度10,2 位小数, 左对齐, 则格式串为:

(4) 表达式chr(ord( a')) 的值为:

(5) 表达式((2>=2) or (2<2)) and 2 的值为:

(6) 无穷循环while True: 的循环体中可用语句退出循环.

(7) 不用math 模块中的sqrt(), 如何计算4 的平方根:

(8) 给出一个计算机本质上不可解问题的例子

(9) 表达式‘%d%%%'d%(1%2,3%4) 的值为:

(10) Python 的标准随机数生成器模块是

四、读程序并回答问题:每题 5 分.

(1)下面的程序根据用户输入的三个边长之.( 设用户输入合法, 面积公式无误) import math

a, b, c = raw_input( “Enter a,b,c:

s = a + b + c

s = s / 2.0

area = sqrt(s*(s-a)*(s-b)*(s-c))

“”a,b,c 来计算三角形面积. 请找出程序中的错误并改正

将raw_input 改成input

将sqrt 改成math.sqrt

(2)下面的程序要求用户输入二进

制数字bit = input( “Enter a

binary digit:

if bit = 0 or 1:

print “Your input is: ”,

bit

else

0/1 并显示之. 找出程序中的错误并改正之

将bit = 0 or 1

将else 改成

改成bit == 0 or bit== 1

(3)下面程序的输出是什么?

def f(a, b, c): x = y = 0 for i in range(c): x = x + a + y y = y + b return x

print f(-5, 2, 10)

注意return x 在for 的缩进里面,所以最后只有一个数据输出

range(10) 其实是从0 开始计数到9 再不断迭代即可

(4)下面程序的输出是什么?

def f(a,b): a = 4 print a, b

def main():

a = 5

b = 6 print a, b f(a,b) print a, b

main() 56

46

56

(5)下面程序的功能是什么?

def f(a, b): if b == 0: print a else: f(b, a%b)

a, b = input( “ Enter two natural numbers: ”) print f(a, b)

求最大公因式

A 卷总 5 页第 4 页

五、程序设计:15 分.

(1) 用分而治之(divide and conquer) 和递归方法设计程序: 产生并打印一个序列的全

排列例如, 序列[1,2,3] 的全排列123,132,213,231,312,321 可以这样获得: 1为前缀, 后接[2,3] 的全排列

2为前缀, 后接[1,3] 的全排列

3为前缀, 后接[1,2] 的全排列

而[2,3] 等序列的全排列依此类推.

下面给出了这个程序的部分代码, 在理解上述算法的基础上补足所缺的代码.

# 函数perm(list,k,m): 产生前缀为list[0:k] 后接list[k:m+1] 的全排列

def perm(list,k,m):

if k == m:

for i in range(m+1) ① :

print list[i], print else:

for i in range(k,m+1) ② :

list[k],list[i] =

list[i],list[k]

perm(list,k+1,m) ③

list[k],list[i] =

list[i],list[k] myList = input(

...]):

“Input a

(2) 编写程序: 输入一个文件A, A 中每行包含若干数值. 生成文件B, B 中每行是 A 中对应行的数值的平均值.

Import string

fileA = raw_input( “Enter a data

infile = open(fileA, 'r ')

outfile = open (‘B.dat ','w')

line = infile.readline() while line != “”:sum = 0.0 count = 0 for xStr in string.split(line):

sum = sum + eval(xStr) count = count + 1 avg = sum/count outfile.write(str(avg)+ 'n') line = infile.readline()

infile.close()

相关主题