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