上海交通大学python期末考试样题加解析.docx
上 海 交 通 大 学 试 卷( A卷)( 2010至 2011学年 第 2 学期 )班级号学号姓名课程名称程序设计思想和方法成绩一、选择题 :将唯一正确的选项写在题前括号中. 每题 2 分.【】 (1)本课程的目标定位是什么 ?A 学习 Python语言B 学习计算机的工作原理C 学习各种算法D 学习用计算机解决问题【】 (2)下列哪个标识符是合法的?Avar-nameB !#$%C _100D elif【】 (3)执行下列语句后的显示结果是什么?>>>s =” hi ”>>>print“ hi ” , 2*sA hihihiB” hi ” hihiC hi hihiD hi hi hi【】 (4)如何解释下面的执行结果 ?>>> print 1.2 - 1.0 = 0.2FalseA Python的实现有错误B 浮点数无法精确表示C 布尔运算不能用于浮点数比较D Python将非 0 数视为 False【】 (5)想用一个变量来表示出生年份, 下列命名中哪个最可取 ?A b_yB birth_yearCbirthYearD birthyear【】 (6)执行下列语句后的显示结果是什么?>>> a = 1>>> b = 2 * a / 4>>> a =“one ”>>> print a,bA one 0B 1 0C one 0.5D one,0.5【】 (7)执行下列语句后的显示结果是什么?>>> s =”GOOD MORNING”>>> print s3:-4A D MORB D MORNC OD MORD OD MORNA卷 总 5页 第 1页我承诺,我将严格遵守考试纪律。承诺人:题号得分批阅人 ( 流水阅卷教师签名处 )【】 (8)表达式 1+2L*3.14>0的结果类型是 :A intB longC floatD bool【】 (9)程序设计的原型 (Prototyping)方法是指 :A 先设计程序框架结构 , 再逐步精化细节B 先设计类 , 再实例化为对象C 先设计简单版本 , 再逐步增加功能D 以上都不是【】 (10)对 n 个数做归并排序 (merge sort),这个算法是 :A logn 时间的B线性时间的Cnlog n 时 间的Dn 2 时间的二、判断题 : 在题目前面的括号中打勾或叉. 每题 2 分.【】 (1)高级语言程序要被机器执行, 只有用解释器来解释执行.【】 (2)不同类型的数据不能相互运算.【】 (3)由于引号表示字符串的开始和结束, 所以字符串本身不能包含引号.【】 (4)计算机科学并非研究计算机的科学, 正如天文学并非研究望远镜.【】 (5)算法和程序是不同的概念 .【】 (6)下面的程序段是错的:temp = 42print "The temperature is" + temp【】 (7)同一 Python变量可以先后赋予不同类型的值.【】 (8)计算机的计算是确定的 , 因此并不能真正产生随机数.【】 (9)对象就是类的实例 .【】 (10) Hanoi塔问题属于不可解问题 .A卷 总 5页 第 2页三、填空题 : 每题 2 分.(1)表达式 2*3*4%5的值为 :.(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) 下面的程序根据用户输入的三个边长a,b,c来计算三角形面积 . 请找出程序中的错误并改正之.(设用户输入合法 , 面积公式无误 )import matha, b, c = raw_input(“Enter a,b,c:”) s = a + b + cs = s / 2.0area = sqrt(s*(s-a)*(s-b)*(s-c)print“The area is:”, area将 raw_input改成 input将 sqrt改成 math.sqrt(2) 下面的程序要求用户输入二进制数字0/1并显示之 . 找出程序中的错误并改正之. bit = input(“Enter a binary digit:“)if bit = 0 or 1:print“Your input is:”, bitelseprint“Your input is invalid.”将 bit = 0 or 1改成 bit = 0orbit= 1将 else改成 else:A卷 总 5页 第 3页(3) 下面程序的输出是什么 ? def f(a, b, c):x = y = 0for i in range(c): x = x + a + yreturn xprint f(-5, 2, 10)注意 return xrange(10)在 for的缩进里面,所以最后只有一个数据输出其实是从 0 开始计数到9再不断迭代即可40(4)下面程序的输出是什么?def f(a,b):a = 4 print a, bdef main():a = 5b = 6 print a, b f(a,b)print a, bmain()564656(5)下面程序的功能是什么 ?def f(a, b):if b = 0:print a else:f(b, a%b)a, b = input(print f(a, b)“Enter two natural numbers:”)求最大公因式A卷 总 5页 第 4页y = y + b五、程序设计 :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):产生前缀为 list0:k后接 listk:m+1的全排列def perm(list,k,m):if k = m:for i inrange(m+1): print listi,print else:for i inrange(k,m+1):listk,listi = listi,listk perm(list,k+1,m) listk,listi = listi,listkmyList = input(“Input a list(1,2,3,.):“) perm(myList,0,len(myList)-1)(2)编写程序 :输入一个文件 A, A中每行包含若干数值. 生成文件 B, B中每行是 A 中对应行的数值的平均值 .Import stringfileA=raw_input(“Enter a data file:”) infile=open(fileA, ?r ?)outfile=open (,B.dat?,?w ?)line=infile.readline() while line!= “”:sum=0.0count=0for xStr in string.split(line):sum=sum+eval(xStr) count=count+ 1avg=sum/countoutfile.write(str(avg)+ ?n?) line=infile.readline()infile.close() outfile.close()A卷 总 5页 第 5页