1、 上 海 交 通 大 学 试 卷(A卷) ( 2010 至 2011 学年 第2学期 )班级号_ 学号_ _ 姓名 课程名称 程序设计思想和方法 成绩 一、选择题: 将唯一正确的选项写在题前括号中.每题2分.【 】(1) 本课程的目标定位是什么? A 学习Python语言B 学习计算机的工作原理C 学习各种算法D 学习用计算机解决问题【 】(2) 下列哪个标识符是合法的? A varnameB !%C _100D elif【 】(3) 执行下列语句后的显示结果是什么? s = ”hi” print “hi”, 2*sA hihihiB ”hihihiC hi hihiD hi hi hi【 】
2、(4) 如何解释下面的执行结果? print 1。2 1。0 = 0.2FalseA Python的实现有错误B 浮点数无法精确表示C 布尔运算不能用于浮点数比较D Python将非0数视为False【 】(5) 想用一个变量来表示出生年份,下列命名中哪个最可取? A b_yB birth_yearC _birthYear_D 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 M
3、ORNING” print s3:-4A D MORB D MORNC OD MORD OD MORN A 卷 总 5 页 第 1 页题号得分批阅人(流水阅卷教师签名处) 我承诺,我将严格遵守考试纪律。承诺人: 【 】(8) 表达式1+2L3。140的结果类型是: A intB longC floatD bool【 】(9) 程序设计的原型(Prototyping)方法是指: A 先设计程序框架结构,再逐步精化细节B 先设计类,再实例化为对象C 先设计简单版本,再逐步增加功能D 以上都不是【 】(10) 对n个数做归并排序(merge sort),这个算法是: A logn时间的B 线性时间的
4、C nlogn时间的D n2时间的二、判断题:在题目前面的括号中打勾或叉.每题2分。【 】(1) 高级语言程序要被机器执行,只有用解释器来解释执行. 【 】(2) 不同类型的数据不能相互运算。 【 】(3) 由于引号表示字符串的开始和结束,所以字符串本身不能包含引号。 【 】(4) 计算机科学并非研究计算机的科学,正如天文学并非研究望远镜. 【 】(5) 算法和程序是不同的概念。 【 】(6) 下面的程序段是错的: temp = 42 print ”The temperature is” + temp【 】(7) 同一Python变量可以先后赋予不同类型的值。 【 】(8) 计算机的计算是确定
5、的,因此并不能真正产生随机数。 【 】(9) 对象就是类的实例。 【 】(10) Hanoi塔问题属于不可解问题。 A 卷 总 5 页 第 2 页三、填空题:每题2分.(1) 表达式2*3*45的值为: .(2) 函数range(1,1,1)的值是: 。(3) 格式化输出浮点数: 宽度10,2位小数,左对齐,则格式串为: .(4) 表达式chr(ord(a)的值为: .(5) 表达式((2=2) or (22) and 2的值为: 。(6) 无穷循环while True:的循环体中可用 语句退出循环。(7) 不用math模块中的sqrt(), 如何计算4的平方根: 。(8) 给出一个计算机本质
6、上不可解问题的例子: .(9) 表达式%dd(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*(sa)(sb)*(sc))print “The area is:, area将raw_input 改成 input将sqrt改成 math.sq
7、rt(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 = 0 or bit= 1将else改成else: A 卷 总 5 页 第 3 页(3) 下面程序的输出是什么?def f(a, b, c):x = y = 0for i in range(c): x = x + a + yy = y + br
8、eturn xprint f(5, 2, 10)注意return x 在for 的缩进里面,所以最后只有一个数据输出range(10)其实是从0开始计数到9再不断迭代即可40(4) 下面程序的输出是什么?def f(a,b):a = 4print a, bdef main():a = 5b = 6print a, bf(a,b)print a, bmain()564656(5) 下面程序的功能是什么?def f(a, b):if b = 0: print aelse: f(b, a%b)a, b = input(“Enter two natural numbers: ”)print f(a,
9、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):产生前缀为list0:k后接listk:m+1的全排列def perm(list,k,m): if k = m
10、: for i in range(m+1) : print listi, print else: for i in range(k,m+1) : listk,listi = listi,listk perm(list,k+1,m) listk,listi = listi,listk myList = input(“Input a list(1,2,3,.。): “)perm(myList,0, len(myList)-1 )(2) 编写程序: 输入一个文件A, A中每行包含若干数值。生成文件B, B中每行是A中对应行的数值的平均值。Import stringfileA = raw_input(
11、“Enter a data file: ”)infile = open(fileA,r) A 卷 总 5 页 第 5 页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()