3.3简单算法及其程序实现
一、选择题
1.在Python语言中,以下简单数据类型选项中描述错误的是( )
A.整数(int)、浮点数(float) B.字符串(str)
C.布尔(bool) D.2.5+2.5的值是整数(int)类型
2.下面不是python特性的是( ):
A.免费的 B.简单易学 C.可移植性好 D.是低级语言
3.关于Python,以下几种说法不正确的是( )。
A.Python是一种高级程序设计语言
B.Python属于汇编语言,或者说属于低级语言
C.Python是一种代表简单主义思想的语言,它具有简单、免费、开源和可移植等特点
D.Python是一种面向对象的、解释性计算机语言
4.python语言的特点( )。
A.简单 B.免费、开源 C.可移植性 D.以上都是
5.在算法课上,老师提出了一个问题:有一个农夫带一条狼、一只羊和一棵白菜过河问题,农夫一次只能带一样东西过河,如果留下羊和白菜,羊会吃掉白菜,如果留下羊和狼,狼会吃掉羊,请设计一个方案,让农夫、狼、羊、白菜顺利过河。针对老师的问题,小林所在的学习小组设计了过河方案,步骤如下:
①.农夫先带羊过河,农夫单独返回
②.农夫带狼过河,农夫和羊返回
③.农夫带白菜过河,农夫单独返回
④.农夫带羊过河
由此,小林所在的学习小组得出以下关于算法的结论,正确的是( )
A.算法简单来说是解决某一个问题的方法步骤
B.算法的步骤是有限的
C.算法中的每一个步骤都必须有确切的定义
D.算法必须是可行的
6.韦沐沐同学利用Python软件编写“求能被3整除的数”程序,在设计算法环节,使用流程图描述算法,如右图所示,其中空白处可以填入的是( )
A.A÷3==0 B.A/3==0 C.A\3==0 D.A%3==0
7.算法用Python程序实现,以下代码中哪处语句存在语法错误( )
A. B. C. D.
8.经过中国国家登山队的测量,2020年12月8日,中尼两国共同宣布了珠穆朗玛峰的最新高度为海拔8848.86米。现有一张白纸的厚度大约是0.08毫米,对折一次,厚度变0.16毫米,再对折一次,厚度变为0.32毫米,……,每对折一次,其厚度均变为对折前的两倍,假设这张纸足够大,可以对折任意次,那么这张纸至少对折多少次后,其厚度将超过珠穆朗玛峰的高度?以下是求解以上问题的程序片段,请你补全代码:
请选择适当的代码填入程序①处。( )
A.while B.for C.output D.input
9.下列与数学表达式对应的python表达式,正确的是( )。
A.( - b + math. sqrt (b * b – 4 * a * c)) /a * a
B.- b + math. sqrt (b * b – 4 * a * c) /2*a
C.( -b + math. sqrt (b * 2 – 4 * a * c)) /(2 * a)
D.( -b + math. sqrt ( b * b – 4 * a * c)) / (2 * a)
二、操作题
10.某加密算法的加密部分Python程序段如下:
def encrypt(msg,key):
result = ""
size = len(msg)
for i in range(0,size):
result = result + msg[(i - key) % size]
return result
msg = input("请输入明文:")
key = int(input("请输入密钥:"))
re = _________
print(re)
(1)请在划线处补充代码。
(2)如果输入的msg为“cdef”,key为3,那么输出的结果为______。
(3)这种加密机制称为____(选填字母:A.置换密码;B.换位密码;C.简单异或密码)。
11.奇偶校验码是一种增加二进制传输系统可靠性的简单且广泛采用的方法,该方法通过增加一个校验位使得传输的二进制码中“1”的个数恒为奇数或偶数,因此该校验码也分为“奇校验”和“偶校验”。“奇校验”的原理:在发送端发送的每个字节二进制码后增加一个校验位(0或1),使得“1”的个数为奇数;接收端接收并统计每个字节及其校验位中“1”的个数,若为偶数,则意味着传输过程中存在差错。例如:
接收到的每个字节及校验码 1的个数 传输正误
100101001 4 错误
011010101 5 正确
101011010 5 正确
根据以上原理,小强编写了一个Python程序,对接收到的9位二进制编码进行“奇校验”,判断其传输的正误,若判断正确则将前一个字节的编码转成十六进制并输出。
请回答下列问题:
(1)若接收到的二进制码为“101011011”,传输过程__________(选填:是/否)存在差错。
(2)实现上述功能的Python程序如下,请在划线处填入合适的代码。
s=input("请输入9位二进制编码:")
code={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"}
k=0;p=0;ans=“”
for i in s:#统计9位二进制编码中“1”的个数
k=k+int(i)
if ____:
print("传输错误!")
else:
print("传输正确!")
for j in range(0,8,4):
p=int(s[j:j+4],2)
# int(x,[base]):将x(字符串或者数字)按照base进制转换成整数
if 0<=p<=9:
ans=ans+str(p)
else:
ans=___
print("字节编码用十六进制表示:",___
12.小吴研究插入排序算法,若对无序数列5,2,9,5,3,利用传统的简单插入排序进行升序排序,其方法如下:
首先将5取出,得到序列5;
第二步将2取出,插入序列得到2,5;
第三步将9取出,插入后得到2,5,9;
第四步将5取出,插入后得到2,5,5,9;
第五步将3取出,插入后得到2,3,5,5,9,排序完成。
小吴对这种插入排序进行了一些改进,将无序数列存入a数组中,将排序后的数据存入b数组中,同时保证b数组不存在重复的数字。对于重复出现的数字,用cnt数组记录重复个数。例如无序数列8、6、7、4、4、9、1、9、9、8,a(1)~a(10)存储原数据,b(1)~b(6)存储排序后的不重复数据,cnt(1)~cnt(6)存储每个数字重复的个数,如图a所示。
数组/下标 1 2 3 4 5 6
b 1 4 6 7 8 9
cnt 1 2 1 1 2 3
图a
程序运行后,自动随机生成原数组并显示在列表框List1中,点击按钮“开始”后,生成升序排序数组并显示在列表框List2中,程序运行界面如图b所示。
图b
请回答下列问题。
(1)若要在窗体载入后让窗体标题显示“排序改进算法”,则下列操作可行的是_______(单选,填字母。)
A.直接将窗体属性栏中的“Text”属性值修改为“排序改进算法”
B.在程序的Form_Load()事件中写上代码 Form1.Caption =“排序改进算法”
C.在程序的Command1_Click()事件中写上代码Form1.Caption =“排序改进算法”
(2)请完成程序中的填空。
(3)程序中加框处存在错误,请改正。
Const n = 10
Dim a(0 To 100) As Integer, b(0 To 100) As Integer, cnt(1 To 100) As Integer
Dim Ln As Integer, pos As Integer 'Ln表示b数组的长度
Function search(key As Integer)
Dim i As Integer
For i = 1 To Ln
If b(i) >= key Then Exit For
Next i
search = i
End Function
Private Sub Command1_Click()
Dim i As Integer, j As Integer
Ln = 0
For i = 1 To n
pos = ________
If b(pos) <> a(i) Then
Ln = Ln + 1
j = Ln
Do While j > pos
b(j) = b(j - 1)
__________
j = j - 1
Loop
b(j) = a(i)
cnt(pos) = 1
Else
cnt(pos) = 1 _________
End If
Next i
For i = 1 To Ln
For j = 1 To cnt(i)
List2.AddItem Str(b(i))
Next j
Next i
End Sub
Private Sub Form_Load()
For i = 1 To n
a(i) = Rnd() * 10 + 1
List1.AddItem Str(a(i))
Next i
End Sub
三、填空题
13.简单地说,算法就是解决问题的___和___。
14.算法是指在有限步骤内求解某一问题所使用的一组定义明确的规则。某一个算法的描述如下:
①输入两个数A,B;
②如果A大于B,则将A的值赋给C,B的值赋给A,C的值赋给B;
③如果A不大于B,则A、B的值保持不变;
④输出A,B;
⑤结束
(1)以上算法的描述属于哪一种:__________________;
(2)以上算法第④步用Python语言实现,可以写为:___________________;
(3)如果A的值是5,B的值是3,则执行完算法后,A的值是:________。
试卷第2页,共3页
参考答案
1.D
【详解】
本题主要考查Python数据类型。整数(int)、浮点数(float)、字符串(str)、布尔(bool),2.5+2.5=5.0,值是浮点数(float)类型,故本题选D选项。
2.D
【详解】
本题主要考查Python的特性。Python特性有:免费的、简单易学、可移植性好、是高级语言,故本题选D选项。
3.B
【详解】
本题主要考查Python程序设计语言。Python是一种高级程序设计语言;Python是一种代表简单主义思想的语言,它具有简单、免费、开源和可移植等特点;Python是一种面向对象的、解释性计算机语言,故本题选B选项。
4.D
【详解】
本题考查的是python语言的特点。Python语言的三个特点是语法简单(函数式语言与面向对象语言的结合)、使用直接(大量丰富的库)、开发周期短(代码量小)。故选项D正确。
5.ABCD
【详解】
本题考查算法的特征。算法的特征有步骤的有限性,确切性(算法的每一步骤必须有确切的定义),输入性(一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件),输出项 (一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的),可行性 (算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤)。因此选项中正确的是ABCD。
6.D
【详解】
本题考查的是流程图及Python表达式相关知识。能被3整除的数即除3的余数为0,在Python中%表示求余,故本题应选D。
7.D
【详解】
本题考查的是Python程序调试。双分支IF语句。if (条件)后面要加冒号,else后面也要加冒号。故标号4中存在语法错误。
8.A
【详解】
本题考查的是Python的while循环。while语句格式:
当表达式的值为真时,执行循环体语句;当表达式值为假时,退出循环,执行循环体外的下一条语句(即while后面没有缩进的第一条语句)。当高度h小于珠穆朗玛峰的高度height,则继续对折,故本题应选A。
9.D
【详解】
本题考查的是Python表达式。sqrt()求平方根,乘法运算符为“*”,除法为“/”,嵌套函数均使用小括号。表示为( -b + math. sqrt ( b * b – 4 * a * c)) / (2 * a)。
10.encrypt(msg,key) defc A
【详解】
本题主要考查Python程序的综合应用。①encrypt(msg,key)函数根据输入的明文和密钥,返回加密后的结果,此处将加密后的结果返回给变量re,故此处填encrypt(msg,key)。②将ms="cdef",key=3代入程序,输出结果是defc。③置换密码是根据一定的规则重新排列明文,以便打破明文的结构特性。置换密码的特点是保持明文的 所有字符不变,只是利用置换打乱了明文字符的位置和次序。也就是说,改变了明文的结构,不改变明文的内容,故选A选项。
11.是 k%2==0或(k+1)%2==1或(k-1)%2==1 ans+code[p] ans
【详解】
本题主要考查Python程序的执行与调试。①若接收到的二进制码为“101011011”,1的个数有6个,则传输过程存在差错。②变量k统计1的个数,若k是偶数则表明传输错误,否则传输正确,故此处填k%2==0或(k+1)%2==1或(k-1)%2==1。③如果p是1~9之间的数字,则直接将p拼接到ans中,否则从字典code中取对应的字母,故此处填ans+code[p]。④变量ans保存转换后的十六进制,故此处填ans。
12.B search(a(i)) cnt(j)=cnt(j-i) cnt(pos)=cnt(pos)+1
【详解】
本题主要考查VB程序排序算法。①题干要求在窗体标题显示“排序改进算法”,故在程序的Form_Load()事件中写上代码 Form1.Caption =“排序改进算法”,故本题选B选项。②search()函数是按升序寻找关键字key在数组b中的位置i,找到后返回位置i,此处通过for循环寻找数组a中每一个元素在数组b中的位置,找到后将其赋给变量pos,故此处填search(a(i))。③此处while循环是实现移动数组b中的元素(当关键字比数组b中位置j的值小时,需要后移,即j-1处的值移到j处),故b(j) = b(j - 1),cnt(j)=cnt(j-i),同时j递减,在位置j处插入数据a(i),故此处填cnt(j)=cnt(j-i)。④此处是执行if条件结构的else部分,即pos位置处出现了重复值,故cnt(pos)需要递增,故此处应改为cnt(pos)=cnt(pos)+1。
13.方法 步骤
【详解】
本题主要考查算法的概念。算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。简单地说,算法就是解决问题的方法和步骤。
14.自然语言描述 print(A,B) 3
【详解】
本题主要考查算法及其实现。①以上算法的描述属于自然语言描述。②算法第④步用Python语言实现,可以写为print(A,B)(用输出函数print())。③如果A大于B,则将A的值赋给C,B的值赋给A,C的值赋给B,即实现A与B的交换,A的值是5,B的值是3,故执行完算法后,A的值是3。
答案第1页,共2页
答案第1页,共2页