上海交通大学试卷(A卷) (2011至2012学年第2学期) 班级号 学号 姓名 课程名称程序设计思想和方法 成绩 一、选择题:将唯一正确的选项写在题前括号中每题2分. 【】(1)下列哪个标识符是合法的? [A]A-BC [B]001 [C]@@ [D]continue 【】(2)执行下列语句后的显示结果是什么? >1st=2,3,6,5] >>>Ist.insert(1,8) >>>Ist.pop() >>print Ist [A][2,8,3,6] [B][2,8,3,6,5] [C][8,2,3,6] [D][8,3,6,5] 【】(3)如何解释下面的执行结果? >>print1.2-1.1=0.1 False [A]浮点数无法精确表示 [B]Python的实现有错误 [C]Python将非O数视为False [D]布尔运算不能用于浮点数比较 【】(4)range(15,5,-2)为: [A][15,13,11,9,7刀 [B][15,13,11,9,7,5] [C[13,11,9,7刀 [D][13,11,9,7,5 【】(⑤)在执行以下语句之后x等于什么 >>>import string >>x=string.split("32/24/25/57","") [A][32,24,25,57] [B][32,24,25,57] [C][32,24,”,25,57] [D][32,24,P,25,57] 【】(6)执行下列语句后的显示结果是什么? >>>print "I'm %d'%d\"tall,%-7.3fmeters"%(5,3,1.6002) [A]I'm 5'3"tall,1.600 meters [B]I'm 5'3"tall,1.6002 meters [C]I'm 5'3\"tall,1.600 meters [D]I'm 5'3\"tall,1.6002 meters 【】(7)表达式not(20%3一2)的结果类型是: [A]int [B]long [C]float [D]bool A卷总6页第1页
一、选择题: 将唯一正确的选项写在题前括号中.每题 2 分. 【 】(1) 下列哪个标识符是合法的? [A] A-BC [B] _001 [C] @@_ [D] continue 【 】(2) 执行下列语句后的显示结果是什么? >>> lst=[2,3,6,5] >>> lst.insert(1,8) >>> lst.pop() >>> print lst [A] [2,8,3,6] [B] [2,8,3,6,5] [C] [8,2,3,6] [D] [8,3,6,5] 【 】(3) 如何解释下面的执行结果? >>> print 1.2 - 1.1 == 0.1 False [A] 浮点数无法精确表示 [B] Python 的实现有错误 [C] Python 将非 0 数视为 False [D] 布尔运算不能用于浮点数比较 【 】(4) range(15, 5, -2)为: [A] [15,13,11,9,7] [B] [15,13,11,9,7,5] [C] [13,11,9,7] [D] [13,11,9,7,5] 【 】(5) 在执行以下语句之后 x 等于什么 >>>import string >>>x=string.split("32/24//25/57", "/") [A] [’32’, ’24’, ’25’, ’57’] [B] [’32’, ’24’, ’25’, ’57’] [C] [’32’, ’24’, ’’, ’25’, ’57’] [D] [’32’, ’24’, ’/’,’25’, ’57’] 【 】(6) 执行下列语句后的显示结果是什么? >>> print "I'm %d’%d\" tall,%-7.3fmeters" % (5,3,1.6002) [A] I'm 5’3" tall,1.600 meters [B] I'm 5’3" tall,1.6002 meters [C] I'm 5’3\" tall,1.600 meters [D] I'm 5’3\" tall,1.6002 meters 【 】(7) 表达式 not (20%3==2)的结果类型是: [A] int [B] long [C] float [D] bool 上 海 交 通 大 学 试 卷(A 卷) ( 2011 至 2012 学年 第 2 学期 ) 班级号____________________ 学号__________ ____ 姓名 课程名称 程序设计思想和方法 成绩 A 卷 总 6 页 第 1 页
我承诺,我将严格遵 题号 守考试纪律。 得分 承诺人: 批阅人(流水阅 卷教师签名处) 【】(8)执行下列语句后的显示结果是什么? >>s=”Aday” >>>from string import >>>print 2*s[2:-1]+""+replace(s,"a","iar")+lower("GOOd") [A]dada A diary good [B]dada iar diary good [C]dada A diary gOOd [D]dada iar diary goOd 【】(9)自顶向下(top-down)的程序设计方法是指: [A)先设计程序框架结构,再逐步精化细节 [B]先设计类,再实例化为对象 [C]先设计简单版本,再逐步增加功能 [D]以上都不是 【 】(Io)在n个已经排过序的数中查找一个特定的值,用二分查找(binary search)算法的时间复杂 性为: [A]log n [B]n [C]nlog n D]2 二、判断题:在题目前面的括号中打勾或叉每题2分 【】(1)高级语言程序要被机器执行,需要用解释器或编译器转换为机器语言. 【 】(2)在python语言中,3/2=1的值为False. 【 】(3)print9”的结果是1 【 】(4)文件打开后,采用readline(0方法就可依次读取到文件中的每一行。 】(5)只要循环体中存在break语句,任何循环都能终止 【 】(6)Hello\n”的长度是5 】(T)Python语言中,列表(ist)中的元素类型可以互不相同 】(8)如果种子相同,计算机所产生的随机数序列也是相同的,因此称为伪随机数。 】(9)在设计算法时,不需要考虑计算效率,只需要考虑正确性 】(IO)Hanoi塔问题属于难解(intractable)问题, 三、填空题:每题2分. (1)表达式3*10/3+10%3的值为 (2)函数range(-4,l,-2)的值是: (3)已知ord(a)的值为97,则ord(d)的值为 (4)设变量x的值为某一大写字母,则将其转换为对应小写字母的表达式为: (5)表达式(3>=2)and not((5<2)and3%2=1的值为: (6)for w in string.split("Mississippi","i"): print w, 输出是 (7)"Time left%02d:%05.2f"%(1,37.374)的输出是 A卷总6一页第2页
【 】(8) 执行下列语句后的显示结果是什么? >>>s=”A day” >>>from string import * >>> print 2*s[2:-1]+" "+replace(s,"a","iar")+lower(" GOOd") [A] dada A diary good [B] dada iar diary good [C] dada A diary gOOd [D] dada iar diary gOOd 【 】(9) 自顶向下(top-down)的程序设计方法是指: [A] 先设计程序框架结构,再逐步精化细节 [B] 先设计类,再实例化为对象 [C] 先设计简单版本,再逐步增加功能 [D] 以上都不是 【 】(10) 在 n 个已经排过序的数中查找一个特定的值,用二分查找(binary search)算法的时间复杂 性为: [A] log n [B] n [C] nlog n [D] n 2 二、判断题:在题目前面的括号中打勾或叉.每题 2 分. 【 】(1) 高级语言程序要被机器执行,需要用解释器或编译器转换为机器语言. 【 】(2) 在 python 语言中,3/2==1 的值为 False. 【 】(3) print “\\” 的结果是 \ 【 】(4) 文件打开后,采用 readline()方法就可依次读取到文件中的每一行。 【 】(5) 只要循环体中存在 break 语句,任何循环都能终止. 【 】(6) “Hello\n”的长度是 5 【 】(7) Python 语言中,列表(list)中的元素类型可以互不相同. 【 】(8) 如果种子相同,计算机所产生的随机数序列也是相同的,因此称为伪随机数。 【 】(9) 在设计算法时,不需要考虑计算效率,只需要考虑正确性. 【 】(10) Hanoi 塔问题属于难解(intractable)问题. 三、填空题:每题 2 分. (1) 表达式 3 * 10 / 3 + 10 % 3 的值为: . (2) 函数 range(-4,1,-2)的值是: . (3) 已知 ord(‘a’)的值为 97,则 ord(‘d’)的值为: . (4) 设变量 x 的值为某一大写字母,则将其转换为对应小写字母的表达式为: . (5) 表达式 ((3>=2) and not(5<2)) and 3%2==1 的值为: . (6) for w in string.split("Mississippi", "i"): print w, 输出是 . (7) "Time left %02d:%05.2f" % (1, 37.374)的输出是 . 题号 得分 批阅人(流水阅 卷教师签名处) 我承诺,我将严格遵 守考试纪律。 承诺人: A 卷 总 6 页 第 2 页
(8)在执行import string s1=[2,1,4,3] s2=[c,a,b] s1.append([s2.index('b')]) 之后sl的值为: (9)归并排序(merge sort))的时间复杂度为 (1O)使用python的random库函数,产生区间[0,l0o)上的随机数(浮点数)的表达式 为: 四、读程序并回答问题:每题5分. (1)以下程序按照自然对数的底的计算公式:e=1+1/1I+1/2+1/31+1/4!+.… 累加前1000项,来近似逼近e,请找出程序中的错误并改正之, e=1 item=l for i in range(0,1000): item=item/i e=e+item print“自然对数的底为:”,e 答: (2)下面程序randomNumList)(以及main()的功能是什么?每次运行得到的结果是否相同? from random import def randomNumList(num): Ist=[] for i in range(num): Ist.append(randrange(0,100)) return Ist def main(): alst=randomNumList(200) print alst main() 答: (4)下面程序的输出是什么? def all Vowels(inString ) vowels ="aeiouAEIOU"; ret=True; for c in inString. ifc not in vowels: ret=False break return ret A卷总6页第3页
(8) 在执行 import string s1 = [2,1,4,3] s2 = [’c’,’a’,’b’] s1.append([s2.index(’b’)]) 之后 s1 的值为: . (9) 归并排序(merge sort)的时间复杂度为 . (10) 使 用 python 的 random 库 函 数 , 产 生 区 间 [0,100) 上 的 随 机 数 ( 浮 点 数 ) 的 表 达 式 为: . 四、读程序并回答问题:每题 5 分. (1) 以下程序按照自然对数的底的计算公式: e=1+1/1!+1/2!+1/3!+1/4! + …… 累加前 1000 项,来近似逼近 e,请找出程序中的错误并改正之. e=1 item=1 for i in range(0,1000): item=item/i e=e+item print “自然对数的底为:” , e 答: (2) 下面程序 randomNumList()以及 main()的功能是什么? 每次运行得到的结果是否相同? from random import * def randomNumList(num): lst=[] for i in range(num): lst.append(randrange(0,100)) return lst def main(): alst=randomNumList(200) print alst main() 答: (4) 下面程序的输出是什么? def allVowels( inString ) : vowels = "aeiouAEIOU"; ret = True; for c in inString: if c not in vowels : ret = False break return ret A 卷 总 6 页 第 3 页
def main(): print allVowels("a") print allVowels("a eoa") main() 答: (3)下面程序的输出是什么? def fun(lst): n=len(Ist) if(n==1): return Ist[O] else: tmp=fun(lst 0:n-1) if Ist[n-1]>tmp: return Ist[n-1] else: return tmp print fun([3,2,1,6,4,5]) 答: (5)下面程序的输出是什么?函数fun的功能是什么? def fun (integer Value): S女=" tryit=True while tryit: i=integer Value 2; if(i=0): str="O"+str; else: str ="1"+str; integer Value=integer Value //2 tryit integer Value >0; return str; print fun(18) print fun(7) 答: A卷总6页第4页
def main(): print allVowels("a") print allVowels("a eoa") main() 答: (3) 下面程序的输出是什么? def fun(lst): n=len(lst) if(n==1): return lst[0] else: tmp=fun(lst[0:n-1]) if lst[n-1]>tmp: return lst[n-1] else: return tmp print fun([3,2,1,6,4,5]) 答: (5) 下面程序的输出是什么?函数 fun 的功能是什么? def fun (integerValue) : str = "" tryit = True while tryit : i = integerValue % 2; if (i == 0) : str = "0" + str; else: str = "1" + str; integerValue = integerValue // 2 tryit = integerValue > 0; return str; print fun(18) print fun(7) 答: A 卷 总 6 页 第 4 页
五、程序设计:15分. (1I)创建一个有理数类Ration,补充完成以下方法(methods): Ration(numerator,.denominator):设置分子numerator,分母denominator,.并进行约简 convert():将分子/分母相除,转换为浮点数的结果返回。 getNum():返回分子 getDen0:返回分母 注意:约简时可以直接使用gcd(xy),该函数是返回x和y的公因数。 class Ration: def init (self,numerator,denominator): if denominator x2返回1,xl=x2返回0,xl==x2返回-1 注意:约简时可以直接使用gcd(xy),该函数是返回x和y的公因数。 def Add(x1,x2): Num=x1.getNum()*x2.getDen()+x2.getNum()*x1.getDen() Den=x1.getDen()*x2.getDen() tmp-gcd(Num,Den) Num=Num/tmp Den=Den/tmp return A卷总6页第5页
五、程序设计:15 分. (1) 创建一个有理数类 Ration, 补充完成以下方法(methods): Ration(numerator, denominator) : 设置分子 numerator,分母 denominator,并进行约简 convert() :将分子/分母相除,转换为浮点数的结果返回。 getNum(): 返回分子 getDen(): 返回分母 注意:约简时可以直接使用 gcd(x,y),该函数是返回 x 和 y 的 公因数。 class Ration: def __init__(self, numerator, denominator): if denominator x2 返回 1,x1==x2 返回 0,x1==x2 返回 -1 注意:约简时可以直接使用 gcd(x,y),该函数是返回 x 和 y 的 公因数。 def Add(x1,x2): Num=x1.getNum()*x2.getDen()+x2.getNum()*x1.getDen() Den= x1.getDen()*x2.getDen() tmp=gcd(Num,Den) Num=Num/tmp_ Den=Den/tmp return _________ _________ A 卷 总 6 页 第 5 页
def Sub(x1,x2): def Multiply(x1.x2): def greaterThan(x1,x2): (3)编写函数sumOfRationals(0:输入一个文件A,A中每行包含两个整数值(以空格分隔),利用以上 创建的有理数类进行计算,得到这些有理数相加后的结果,并将结果写入到文件B中。 def sumOfRationals(): A卷总6页第6页
def Sub(x1,x2): def Multiply(x1,x2): def greaterThan(x1,x2): (3) 编写函数 sumOfRationals(): 输入一个文件 A, A 中每行包含两个整数值(以空格分隔),利用以上 创建的有理数类进行计算,得到这些有理数相加后的结果,并将结果写入到文件 B 中。 def sumOfRationals(): A 卷 总 6 页 第 6 页