python整数类型在每一台计算机上的取值范围是一样的_Python题集:2019春Python程序设计选修课习题笔记...

一、判断题:

1-1、在Python 3.x中可以使用中文作为变量名。

答案:√

1-2、Python变量使用前必须先声明,并且一旦声明就不能再当前作用域内改变其类型。

答案:×

1-3、Python运算符%不仅可以用来求余数,还可以用来格式化字符串。

答案:√

1-4、在Python 3.x中,使用内置函数input()接收用户输入时,不论用户输入的什么格式,一律按字符串进行返回。

答案:√

1-5、在Python中,变量不直接存储值,而是存储值的引用,也就是值在内存中的地址。

答案:√

2-1、已知st="Hello World!",使用print(st[0:-1])语句可以输出字符串变量st中的所有内容。

答案:×

2-2、Python程序设计中的整数类型没有取值范围限制,但受限于当前计算机的内存大小。

答案:√

2-3、已知: x=1,y=2,z=[2,3,4],则语句 x not in z 计算结果是True。

答案:√

2-4、已知 x = 3,那么执行语句 x+=6 之后,x的内存地址不变。

答案:×

3-1、如a是一个列表,且a[:]与a[::-1]相等,则a中元素按顺序排列构成一个回文。

答案:√

3-2、表达式 {1, 3, 2} > {1, 2, 3} 的值为True。

答案:×

3-3、已知x为非空列表,那么执行语句x[0] = 3之后,列表对象x的内存地址不变。

答案:√

3-4、Python内置的集合set中元素顺序是按元素的哈希值进行存储的,并不是按先后顺序。

答案:√

3-5、已知x是一个列表,那么x = x[3:] + x[:3]可以实现把列表x中的所有元素循环左移3位。

答案:√

4-1、如下代码可以实现当输入6的时候输出x>5,输入4的时候输出 3

x =int(input())if x>5:print("x>5")elif x>3:print("3

答案:×

4-2、当作为条件表达式时,空值、空字符串、空列表、空元组、空字典、空集合、空迭代对象以及任意形式的数字0都等价于False。

答案:√

5-1、定义Python函数时,如果函数中没有return语句,则默认返回空值None。

答案:√

5-2、在函数内部没有任何声明的情况下直接为某个变量赋值,这个变量一定是函数内部的局部变量。

答案:√

5-3、在调用函数时,必须牢记函数形参顺序才能正确传值。

答案:×

5-4、调用函数时传递的实参个数必须与函数形参个数相等才行。

答案:×

5-5、g = lambda x: 3不是一个合法的赋值表达式。

答案:×

6-1、对文件进行读写操作之后必须显式关闭文件以确保所有内容都得到保存。

答案:√

6-2、以追加模式打开文件时,文件指针指向文件尾。

答案:√

6-3、使用Python内置的open函数打开某个文件的时候,如果该文件不存在,则可能产生异常,所以一定要使用try except对其进行处理。

答案:×

6-4、二进制文件也可以使用记事本或其他文本编辑器打开,但是一般来说无法正常查看其中的内容。

答案:√

6-5、以读模式打开文件时,文件指针指向文件开始处。

答案:√

6-6、文本文件是可以迭代的,可以使用for line in fp类似的语句遍历文件对象fp中的每一行。

答案:√

6-7、二进制文件不能使用记事本程序打开。

答案:×

6-8、文件对象是可以迭代的。

答案:√

6-9、以写模式打开的文件无法进读操作。

答案:√

6-10、fi=fopen("t.txt","r+") 执行后只能对"t.txt"文件进行读操作。

答案:×

7-1、Python使用缩进来体现代码之间的逻辑关系。

答案:√

7-2、语句pass仅起到占位符的作用,并不会做任何操作。

答案:√

8-1、Python使用缩进来体现代码之间的逻辑关系。

答案:√

8-2、为了输出",可以使用如下语句print(""")。

答案:×

8-3、使用x=set()和x={} 都可以创建一个空集合。

答案:×

8-4、Python支持使用字典的“键”作为下标来访问字典中的值。

答案:√

8-5、创建只包含一个元素的元组时,必须在元素后面加一个逗号,例如(3,)。

答案:√

8-6、continue用来跳出最内层for或while循环,退出该循环后程序从循环代码后继续执行; break用来结束当前当次循环。

答案:×

8-7、如果仅仅是用于控制循环次数,那么使用for i in range(20)和for i in range(20, 40)的作用是等价的。

答案:√

8-8、定义函数时,即使该函数不需要接收任何参数,也必须保留一对空的圆括号来表示这是一个函数。

答案:√

8-9、定义Python函数时,如果函数中没有return语句,则默认返回空值None。

答案:√

8-10、调用函数时传递的实参个数必须与函数形参个数相等才行。

答案:×

二、选择题:

1-1、表达式1+2*3.14>0的结果类型是(D)

A、intB、longC、floatD、bool

1-2、八进制35的十进制值是(D)

A、30B、25C、19D、29

1-3、Python语言正确的标识符是(C)

A、2youB、my-nameC、_itemD、abc*234

1-4、 (D)号表示同一行的后面部分是Python程序的注释。

A、*B、%C、/D、#

1-5、Python 语句 print(0xA + 0xB)的输出结果是(D)

A、0xA + 0xBB、A + BC、0xA0xBD、21

1-6、Python 语句x=’car’; y = 2; print (x+y)的输出结果是(A)

A、语法错B、2C、'car2’'carcar’

2-1、计算机存储器的单位是字节(B,Byte),1B等于(C)

A、一位二进制B、四位二进制八位二进制十六位二进制

2-2、Python程序在Windows上的扩展名是(A)

A、pyB、exeC、docxD、jpg

2-3、Python的输出函数是(B)

A、input()B、print()C、math()D、turtle()

2-4、(D)号表示同一行的后面部分是Python程序的注释。

A、*B、%C、/D、#

3-1、 以下选项不是函数作用的是:(A)

A、提高代码执行速度B、复用代码     C、增强代码可读性 D、降低编程复杂度

3-2、Python的输出函数是(B)。

A、input()     B、print()      C、math()     D、turtle()

3-3、Python语言正确的标识符是(C)。

A、2you      B、my-name    C、_item      D、abc*234

3-4、字符串是一个字符序列,例如,字符串s,从右侧向左第二个字符用什么索引?(C)

A、s[0:-2]      B、s[2]       C、s[-2]      D、s[:-2]

3-5、哪个选项能够向列表ls中增加五个元素?(C)

A、ls.append([1,2,3,4,5])B、ls.append(1,2,3,4,5)C、ls += 1,2,3,4,5D、ls.insert(1,2,3,4,5)

3-6、哪个选项不能生成一个空字典?(D)

A、{}         B、dict()       C、dict([])    D、{[]}

3-7、下列关于形参和实参的说法正确的是?(D)

A、函数定义中参数列表里面的参数是实际参数,简称实参

B、参数列表中给出要传入函数内部的参数,这类参数称为形式参数,简称形参

C、程序在调用时,将形参复制给函数的实参

D、程序在调用时,将实参复制给函数的形参

3-8、递归函数有什么特点?(B)

A、函数名称作为返回值

B、函数内部包含对本函数的再次调用

C、包含一个循环结构

D、函数比较复杂

3-9、关于try-except,哪个选项的描述是错误的?(C)

A、表达了一种分支结构的特点

B、用于对程序的异常进行捕捉和处理

C、使用了异常处理,程序将不会再出错

D、NameError是一种异常类型

3-10、下面关于time库引用不正确的是?(B)

A、from time import strftime

B、from * import time

C、from time import *

D、import time

三、编程题:

1-1、jmu-python-输入输出-计算字符串中的数:

将字符串中的每个数都抽取出来,然后统计所有数的个数并求和。

输入格式:一行字符串,字符串中的数之间用1个空格或者多个空格分隔。

输出格式:

第1行:输出数的个数。

第2行:求和的结果,保留3位小数。

输入样例:

2.1234 2.1 3 4 5 6

输出样例:

6

22.223

代码:

s =input()

a=s.split()

num=len(a)

sum=0for i inrange(num):

sum= sum +float(a[i])print(num)print("{:.3f}".format(sum))

1-2、输入列表,求列表元素和(eval输入应用):

在一行中输入列表,输出列表元素的和。

输入格式:

一行中输入列表。

输出格式:

在一行中输出列表元素的和。

输入样例:

[3,8,-5]

输出样例:

6

代码:

q =eval(input())print(sum(q))

1-3、你好:

你的程序会读入一个名字,比如John,然后输出“Hello John”。

输入格式:

一行文字。

输出格式:

一行文字。

输入样例:

Mary Johnson

输出样例:

Hello Mary Johnson

代码:

a=input()print("Hello"+a)

1-4、Py的A+B:

程序会读入两行,每行都是一个数字,输出这两个数字的和。

输入格式:

两行文字,每行都是一个数字

输出格式:

一行数字

输入样例:

18

21

输出样例:

39

代码:

num1 =input()if num1.strip() == "":print("输入有误")

exit()elif num1[0] != '.':for i innum1:if not('0' <= i <= '9' or i == '.'):print("输入有误")

exit()

num1=float(num1)else:print("输入有误")

exit()

num2=input()if num2.strip() == "":print("输入有误")

exit()elif num2[0] != '.':for i innum2:if not('0' <= i <= '9' or i == '.'):print("输入有误")

exit()

num2=float(num2)else:print("输入有误")

exit()

su= num1 +num2

su= [str(su), int(su)][int(su) ==su]

num1= [str(num1), int(num1)][int(num1) ==num1]

num2= [str(num2), int(num2)][int(num2) ==num2]print("{}".format(su))

2-1、产生每位数字相同的n位数:

读入2个正整数A和B,1<=A<=9, 1<=B<=10,产生数字AA...A,一共B个A

输入格式:

在一行中输入A和B。

输出格式:

在一行中输出整数AA...A,一共B个A

输入样例1:

在这里给出一组输入,例如:

1,5

输出样例1:

在这里给出相应的输出,例如:

11111

输入样例2:

在这里给出一组输入,例如:

3,4

输出样例2:

在这里给出相应的输出,例如:

3333

代码:

a,b=eval(input())print(("%d"%a)*b)

2-2、转换函数使用:

输入一个整数和进制,转换成十进制输出

输入格式:

在一行输入整数和进制

输出格式:

在一行十进制输出结果

输入样例:

在这里给出一组输入,例如:

45,8

输出样例:

在这里给出相应的输出,例如:

37

代码:

a,b=eval(input())

c=str(a)print(int(c,b))

2-3、jmu-python-统计字符个数:

输入一个字符串,统计其中数字字符及小写字符的个数

输入格式:

输入一行字符串

输出格式:

共有?个数字,?个小写字符,?填入对应数量

输入样例:

helo134ss12

输出样例:

共有5个数字,6个小写字符

代码:

a=input()

b,c=0,0for e ina:ife.isdigit():

b+=1

elife.isalpha():

c+=1

print("共有%d个数字,%d个小写字符"%(b,c))

3-1、图的字典表示:

python整数类型在每一台计算机上的取值范围是一样的_Python题集:2019春Python程序设计选修课习题笔记..._第1张图片

图的字典表示。输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度。

比如上图0点表示:

{'O':{'A':2,'B':5,'C':4}}

输入格式:

第一行表示输入的行数 下面每行输入表示一个顶点和该顶点相连的边及长度的字符串

输出格式:

在一行中输出顶点数,边数,边的总长度

输入样例:

在这里给出一组输入,例如:

4{'a':{'b':10,'c':6}}

{'b':{'c':2,'d':7}}

{'c':{'d':10}}

{'d':{}}

输出样例:

在这里给出相应的输出,例如:

4 5 35

代码:

s=int(input())

a=0

b=0

dict={}for i inrange(0,s):

t=input()

t=eval(t)

dict.update(t)for key indict.keys():

c=len(dict[key])

a=a+cfor key2 indict[key].keys():

d=dict[key][key2]

b=b+dprint(str(s)+" "+str(a)+" "+str(b))

3-2、jmu-python-逆序输出:

输入一行字符串,然后对其进行如下处理。

输入格式:

字符串中的元素以空格或者多个空格分隔。

输出格式:

①逆序输出字符串中的所有元素。

②然后输出原列表。

③然后逆序输出原列表每个元素,中间以1个空格分隔。注意:最后一个元素后面不能有空格。

输入样例:

a b c e f gh

输出样例:

ghfecba

['a', 'b', 'c', 'e', 'f', 'gh']

gh f e c b a

代码:

s=str(input())

m=s.split()

o=""

for i in range(len(m)-1,-1,-1):

o=o+m[i]print(o)print(m[:])

d=str(m[-1])for i in range(len(m)-1):

d=d+" "+m[-i-2]print(d)

3-3、jmu-python-班级人员信息统计:

输入a,b班的名单,并进行如下统计。

输入格式:

第1行::a班名单,一串字符串,每个字符代表一个学生,无空格,可能有重复字符。

第2行::b班名单,一串字符串,每个学生名称以1个或多个空格分隔,可能有重复学生。

第3行::参加acm竞赛的学生,一串字符串,每个学生名称以1个或多个空格分隔。

第4行:参加英语竞赛的学生,一串字符串,每个学生名称以1个或多个空格分隔。

第5行:转学的人(只有1个人)。

输出格式:

特别注意:输出人员名单的时候需调用sorted函数,如集合为x,则print(sorted(x))

输出两个班级的所有人员数量

输出两个班级中既没有参加ACM,也没有参加English的名单和数量

输出所有参加竞赛的人员的名单和数量

输出既参加了ACM,又参加了英语竞赛的所有人员及数量

输出参加了ACM,未参加英语竞赛的所有人员名单

输出参加英语竞赛,未参加ACM的所有人员名单

输出参加只参加ACM或只参加英语竞赛的人员名单

最后一行:一个同学要转学,首先需要判断该学生在哪个班级,然后更新该班级名单,并输出。如果没有在任何一班级,什么也不做。

输入样例:

abcdefghijab1 2 3 4 5 6 7 8 9 10

1 2 3a b c1 5 10a d e f

a

输出样例:

Total: 20Notin race: ['4', '6', '7', '8', '9', 'g', 'h', 'i', 'j'], num: 9All racers: ['1', '10', '2', '3', '5', 'a', 'b', 'c', 'd', 'e', 'f'], num: 11ACM+ English: ['1', 'a'], num: 2Only ACM: ['2', '3', 'b', 'c']

Only English: ['10', '5', 'd', 'e', 'f']

ACM Or English: ['10', '2', '3', '5', 'b', 'c', 'd', 'e', 'f']

['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

代码:

from collections importOrderedDict

a=input()

b=input().split(" ")

c=input().split(" ")

d=input().split(" ")

e=input()

list_1="".join(OrderedDict.fromkeys(a))

st_split=list(b)while "" inst_split:

st_split.remove("")

list_2=list(set(st_split))

list_2.sort(key=st_split.index)

re=len(list_1)+len(list_2)print("Total:"+str(re))while "" inc:

c.remove("")

result3=list(c)+d

st_split2=list(d)

list2=list(set(list_2+list(list_1)).difference(set(result3)))

l2=list(set(result3))

l2.sort(key=result3.index)

list4=[]

list4=list(set(l2) &set(c))

list41=list(set(list4) &set(d))

list5=list(set(l2).difference(set(c)))

list6=list(set(l2).difference(set(d)))

list7=list(set(list5).union(set(list6)))print('Not in race: {0}, num: {1}'.format(sorted(list2),str(len(list2))))print('All racers: {0}, num: {1}'.format(sorted(l2),str(len(l2))))print('ACM + English: {0}, num: {1}'.format(sorted(list41),str(len(list41))))print('Only ACM: {0}'.format(sorted(list6)))print('Only English: {0}'.format(sorted(list5)))print('ACM Or English: {0}'.format(sorted(list7)))

list_4=list(list_1)if e inlist_4:

list_4.remove(e)print(sorted(list_4))if e inlist_2:

list_2.remove(e)print (sorted(list_2))

4-1、jmu-python-汇率兑换:

按照1美元=6人民币的汇率编写一个美元和人民币的双向兑换程序

输入格式:

输入人民币或美元的金额,人民币格式如:R100,美元格式如:$100

输出格式:

输出经过汇率计算的美元或人民币的金额,格式与输入一样,币种在前,金额在后,结果保留两位小数

输入样例:

R60

输出样例1:

$10.00

输入样例2:

$5

输出样例2:

R30.00

代码:

mydata =input()if mydata[0] == '$':

n= eval(mydata[1:])print("R{:.2f}".format(n*6))elif mydata[0] == 'R':

m= eval(mydata[1:])print("${:.2f}".format(m/6))else:print("输入有误")

4-2、jmu-python-成绩转换:

本题要求编写程序将一个百分制成绩转换为五分制成绩。

转换规则:

大于等于90分为A; 小于90且大于等于80为B; 小于80且大于等于70为C; 小于70且大于等于60为D; 小于60为E。

输入样例:

98

输出样例:

A

代码:

mydata =eval(input())if mydata >= 90:print("A")elif mydata < 90 and mydata >= 80:print("B")elif mydata < 80 and mydata >= 70:print("C")elif mydata < 70 and mydata >= 60:print("D")else:print("E")

5-1、列表去重

输入一个列表,去掉列表中重复的数字,按原来次序输出!

输入格式:

在一行中输入列表

输出格式:

在一行中输出不重复列表元素

输入样例:

在这里给出一组输入。

例如:

[4,7,5,6,8,6,9,5]

输出样例:

在这里给出相应的输出。

例如:

4 7 5 6 8 9

代码:

str=eval(input())

list=list(str)

list2=[]

t=0for i inlist:if i inlist2:pass

else:if t==0:

t=1elif t==1:print(" ",end="")print(i,end="")

list2.append(i)

6-1、 jmu-python-偶数之积

求1到n中所有偶数的积。

输入格式:

输入整数n。

输出格式:

1到n中偶数积。

输入样例:

5

输出样例:

8

代码:

n =int(input())

s= 1

for i in range(1,n+1):if i%2==0:

s= s*i;print(s)

6-2、jmu-python-凯撒密码加密算法

编写一个凯撒密码加密程序,接收用户输入的文本和密钥k,对明文中的字母a-z和字母A-Z替换为其后第k个字母。

输入格式:

接收两行输入,第一行为待加密的明文,第二行为密钥k。

输出格式:

输出加密后的密文。

输入样例:

在这里给出一组输入。

例如:

Hello World!3

输出样例:

在这里给出相应的输出。

例如:

Khoor Zruog!

代码:

str=input()

n=int(input())

k=[]for i instr:

i=ord(i)if(i>=65 and i<=90):if(i+n>90):

i=i+n-90+64

else:

i=i+nelif(i>=97 and i<=122):if(i+n>122):

i=i+n-122+96

else:

i=i+n

i=chr(i)

k.append(i)for i ink:print(i,end="")

四、函数题:

1-1、使用函数求特殊a串数列和:

给定两个均不超过9的正整数a和n,要求编写函数fn(a,n) 求a+aa+aaa++⋯+aa⋯aa(n个a)之和,fn须返回的是数列和

函数接口定义:

fn(a,n)

其中 a 和 n 都是用户传入的参数。 a 的值在[1, 9]范围;n 是[1, 9]区间内的个位数。函数须返回级数和

裁判测试程序样例:

/* 请在这里填写答案 */a,b=input().split()

s=fn(int(a),int(b))print(s)

输入样例:

在这里给出一组输入,例如:

2 3

输出样例:

在这里给出相应的输出,例如:

246

代码:

deffn(a,n):

s=0

p=""

for i inrange(n):

p=str(a)*(i+1)

s=s+int(p)return s

1-2、使用函数求余弦函数的近似值:

本题要求实现一个函数,用下列公式求cos(x)近似值,精确到最后一项的绝对值小于eps:

cos (x) = x^0 / 0! - x^2 / 2! + x^4 / 4! - x^6 / 6! + ?

函数接口定义:funcos(eps,x ),其中用户传入的参数为eps和x;函数funcos应返回用给定公式计算出来,保留小数4位。

函数接口定义:

在这里描述函数接口,例如:

funcos(eps,x )

裁判测试程序样例:

在这里给出函数被调用进行测试的例子,例如:/* 请在这里填写答案 */eps=float(input())

x=float(input())

funcos(eps,x )

输入样例:

在这里给出一组输入,例如:

0.0001 -3.1

输出样例:

在这里给出相应的输出,例如:

cos(-3.1) = -0.9991

代码:

defjiecheng(n):if n ==0:return 1sum= n * jiecheng(n - 1)returnsumdeffuncos(eps,x):

i=0

s=0while x**i/jiecheng(i)>eps or x**i/jiecheng(i)==eps:

i=i+2

for j in range(0,i,2):if j%4==0:

s=s+x**j/jiecheng(j)else:

s=s-x**j/jiecheng(j)print('cos({0}) = {1:.4f}'.format(x,s))

2-1、使用函数输出指定范围内Fibonacci数的个数:

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数输出两正整数m和n(0

其中函数fib须返回第n项Fibonacci数;函数PrintFN要在一行中输出给定范围[m, n]内的所有Fibonacci数的个数。

函数接口定义:

在这里描述函数接口。例如:

fib(n)

PrintFN(m,n,i)

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:/* 请在这里填写答案 */m,n,i=input().split()

n=int(n)

m=int(m)

i=int(i)

PrintFN(m,n,i)

输入样例:

在这里给出一组输入,例如:

20 100 6

输出样例:

在这里给出相应的输出,例如:

fib(6) = 13

4

代码:

deffib(n):if n==0 or n==1:return 1

#递归相加

return (fib(n-1)+fib(n-2))defPrintFN(m,n,i):

j=0

k=0while fib(j)

j=j+1

while (fib(j)>m or fib(j)==m) and (fib(j)

k=k+1j=j+1

print("fib({0}) = {1}".format(i,fib(i)))print(k)

2-2、计算素数和:

本题要求计算输入两个正整数x,y(x<=y,包括x,y)素数和。函数isPrime用以判断一个数是否素数,primeSum函数返回素数和。

输入格式:

输入两个整数。

输出格式:

[m-n]间的素数和

裁判测试程序样例:

/* 请在这里填写答案 */x,y=map(int, input().split())print(primeSum(x,y))

输入样例:

2 8

输出样例:

17

代码:

defisPrime(n):for i in range(2,n):if n%i==0:returnFalsereturnTruedefprimeSum(x,y):

s=0for i in range(y-x+1):if isPrime(x+i):

s=s+x+ireturn s

3-1、jmu-python-杨辉三角

根据输入的n打印n行杨辉三角型。

函数接口定义:

printYanghui(n):#打印n行杨辉三角型

裁判测试程序样例:

/* 请在这里填写答案 */n=int(input())

printYanghui(n)

输入格式:

输入n,转化为整数

输出格式:

每个数后面均有一个空格。

输入样例:

5

输出样例:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

代码:

defprintYanghui(n):#存进二维

L = [[1], [1, 1]]for i in range(3, n + 1):

l= [0 for n inrange(i)]

L.append(l)for k in range(1, i - 1):

L[i- 1][0] = L[i - 1][i - 1] = 1L[i- 1][k] = L[i - 2][k - 1] + L[i - 2][k]#打印

t=1

for m inL:

q=n-tfor f inrange(q):print(" ",end="")for k inm:print(k,end=" ")print()

t+=1

五、填空题:

1-1、s='hello' ,t=" world",s=s+t。则s,s[-1],s[2:8]分别是多少?(填答案时字符串不要加引号)

hello world          d          llo wo

1-2、Python 表达式 10 + 5//3 –True+False的值为:

10

1-3、Python 表达式 round(17.0/3**2,2) 的值为:

1.89

1-4、Python 表达式 0 and 1 or not 2

True

1-5、Python 语句 print(int("20", 16), int("101",2))的输出结果是:

32 5

2-1、Python中用于表示逻辑与、逻辑或、逻辑非运算的关键字分别是:

and           or           not

2-2、下列命令执行后的输出结果是:

f=lambda x,y:y+x

f(10,10)

20

2-3、下列命令执行后的输出结果是:

for s in "PYTHON":if s=="T":continue

print(s,end="")

PYHON

2-4、在函数内部可以通过关键字global来定义全局变量。

注:

1、代码在运行在python3编译环境下。

2、代码贴上来可能会出现缩进被编辑器自动修改的问题,如出现问题请自行调整代码缩进,毕竟在python里对缩进要求极严格,可能造成编译不成功。

你可能感兴趣的:(python整数类型在每一台计算机上的取值范围是一样的_Python题集:2019春Python程序设计选修课习题笔记...)