3.3简单算法及其程序实现
一、选择题
1.以下程序段运行结果是( )
s = 0for i in range(11):if i % 2==0:s = s + ielse:s = s - iprint(s)
A.55 B.-5 C.5 D.-55
2.经过中国国家登山队的测量,2020年12月8日,中尼两国共同宣布了珠穆朗玛峰的最新高度为海拔8848.86米。现有一张白纸的厚度大约是0.08毫米,对折一次,厚度变0.16毫米,再对折一次,厚度变为0.32毫米,……,每对折一次,其厚度均变为对折前的两倍,假设这张纸足够大,可以对折任意次,那么这张纸至少对折多少次后,其厚度将超过珠穆朗玛峰的高度?以下是求解以上问题的程序片段,请你补全代码:
请选择适当的代码填入程序①处。( )
A.while B.for C.output D.input
3.运行Python程序的过程中出现了如下图错误提示,原因是()。
A.变量名51study太长
B.应该写成"chinese" =51study
C.“chinese”应该写成“china s”
D.变量名51study不符合python语言规范,变量名不能以数字开头
4.下列与数学表达式对应的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)
5.在编写python程序时缩进的作用是()。
A.让程序更美观 B.只在for循环中使用
C.只在if语句中使用 D.用来界定代码块
6.计算机在执行高级语言程序时,逐条语句翻译成机器语言并立即执行的程序是( )
A.解释程序 B.编译程序 C.高级程序 D.汇编程序
7.已知有这样一种对冒泡排序的优化方法:在每一遍“加工”过程中,记录在这遍“加工”中是否进行过数据交换。若在一遍“加工”过程中没有进行过数据交换,则数据已经有序,可以直接退出循环结束排序。则下列说法错误的是 ( )
A.对有n个数据的数组进行优化后的冒泡排序,最小比较次数为n-1。
B.对有n个数据的数组进行冒泡排序,无论是否优化,最大比较次数相同。
C.对冒泡排序算法进行优化,能够较大提高其效率,符合算法设计的一般原则。
D.若待排序数组中的数据依次为23,17,46,58,34,11,对其使用优化后的冒泡排序进行升序排序,比较次数为9。
8.某对分查找算法的VB程序段如下:
i=1:j=7
f=False
key=Val(Text1. Text)
Do While i<=j And Not f
m=(i+j)\2
If a(m)=key Then f=True
If a(m)>key Then i=m-1 Else i=m+1
Loop
List1. AddItem Str(i)+Str(j)+Str(m)
数组元素a(1)到a(7)的值依次为"23,42,58,66,77,83,98",运行上述程序段后,列表框List1中
显示的结果为"5 4 5",则文本框Text1中输入值的范围是( )
A.[66,77] B.[66,77) C.(66,77] D.(66,77)
9.下列赋值语句正确的是( )
A.x+1=x B.x=x+1 C.x=+1 D.x,y,z=1,2
10.(必修)下列说法中,正确的是( )。
A.程序设计语言中的汇编语言包含C语言
B.机器语言不是程序设计语言
C.程序实际上是一组操作的指令或语句的序列,是计算机执行算法的操作步骤
D.程序设计和程序设计语言是同一概念
11.下列程序运行后,在键盘输入100,则程序的运行结果是( )。
x=input("Please input x:")
if x<0 or x>=20:
print(x//10)
elif 0<=x<5:
print(x)
elif 5<=x<10:
print(3*x-5)
elif 10<=x<20:
print(0.5*x-2)
A.10 B.100 C.295 D.48
12.下面if语句统计满足“性别 (gender) 为男、职称(rank) 为副教授、年龄(age)小于40岁”条件的人数,正确的语句为( )。
A.if(gender=="男" or age<40 and rank=="副教授"): n+=1
B.if(gender=="男" and age<40 and rank=="副教授"): n+=1
C.if(gender=="男" and age<40 or rank=="副教授"): n+=1
D.if(gender=="男" or age<40 or rank=="副教授"): n+=1
13.程序如下
a=int(input())
b=int(input ())
c=a+b
print(a,’+’,b,’=’,c)
通过键盘分别输入23和3,运算结果是( )
A.26
B.23+3=26
C.’23’+”3”=26
D.24+4=28
14.城市出租车按里程收费,小明绘制了收费价格程序的流程图,如下所示,要测试所有程序分支是否正确,以下测试数据中,最恰当的一组是( )
A.2,10,12 B.10,2,6 C.-1,6,10 D.3,11,100
15.下面说法正确的是( )
A.算法+数据结构=程序 B.算法就是程序
C.数据结构就是程序 D.算法包括数据结构
16.某算法的部分流程图如图所示。执行这部分流程,输入变量n的值为5,则下列说法正确的是( )
A.语句“c<=n?”共执行了4次 B.循环结束后,变量a的值为3
C.循环结束后,变量b的值为5 D.循环结束后,程序输出的值为6
17.某算法的部分流程图如图所示,执行这部分流程后,输出s的值为64,则①处应填入( )
A.i \ 4 = 2
B.Sqr(i) = Int(Sqr(i))
C.i Mod 2 = 1
D.i Mod 2 = 0
18.有如下 VB 程序段
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Data Source=” & App.Path & “\词库.accdb”
conn.Open
Set rs.ActiveConnection = conn
rs.Open “SELECT * FROM words”
n = 0
Do While Not rs.EOF
n = n + 1
en(n) = rs.Fields(1)
ch(n) = rs.Fields(2)
rs.MoveNext
Loop
rs.Close
conn.Close
下列说法中正确的是( )
①连接的数据库文件名是“\词库.accdb” ②程序运行后,变量n 的值表示该数据表中记录的总数 ③数组 en(n)所存储的是数据表第 2 个字段的字段值 ④“ConnectionString”是 conn 对象的属性值⑤查询的数据表名称是“words” ⑥省略语句“rs.MoveNext”,程序也可以正常运行
A.①④⑤ B.③④⑥ C.②③⑤ D.②③④
19.某算法的流程图如图所示。执行这部分流程,
输入41,则输出的值是( )
A.0 B.19 C.22 D.32
20.下列选项中,属于计算机程序设计语言的是( )
A.汇编语言 B.高级语言 C.自然语言 D.机器语言
二、简答题
21.编写一个程序,它将找到所有这些数字,可被7整除,但不是5的倍数,2000年至3200年(包括在内)。得到的数字应按逗号分隔的顺序打印在一行上。
提示:考虑使用range(#begin,#end)
22.利用for循环,分别计算1--100中奇数的和、偶数的和。
sum1=0
sum2=0
for i in range(1,100):
if i%2==0:
sum1+=i
else:
sum2+=i
print(sum1,sum2)
三、操作题
23.小球从5米高度自由落下,每次落地后反弹回原高度的一半,再落下。求它在第10次落地时,共经过多少米?
程序代码如下:
h=5s =5for i in range(2,11):#第1次已经计算在内,从第2次开始计算s = ______________h = h/2print(s)
请补全程序:__________
24.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个:第二天早上将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个,到第10天早上想再吃时,只剩下一个桃子了。问第一天共摘了多少桃子?
(算法分析)逆向思维:猴子原有一个桃子,先借来一个桃子,觉得不够又借来了与手上等量的桃子。一共借了9天。
根据以上算法分析,补全以下程序代码:
peach = 1for i in range(9):peach= (__________)*2print (peach)
请补全程序:___________________
25.阅读下列程序,写出运行结果。
n= int(input("n="))cnt = 0while n > 1:cnt = cnt + 1if n % 2 == 0:n = n / 2else:n = 3 * n + 1print(cnt)程序运行后,输入:8
运行结果是:_____________
26.阅读下列程序,写出运行结果。
x = int(input("请输入一个整数:")for i in range(1,x):if x % i == 0:print(i,end=" ")#end=" "表示输出当前行的所有内容后输出一个空格,且不换行
程序运行后,输入:8
运行输出结果是:_____________
27.某装修公司承接了一项装修任务,其中一墙面的装饰条需要相同花纹200组,花纹由特殊环保材料拼接而成,每组花纹由三个三角形组成。三个三角形边长分别为a1、bl、c1,a2、b2、c2,a3、b3、c3,从节约用材降低成本的角度考虑,该公司至少需要多大面积的特殊材料?
Python自定义函数的语法
def函数名(参数列表)
函数体
return返回值
注:参数列表是程序调用该函数时传递给它的值,可以有0个、1个或多个参数,当传递多个参数时,各参数之间用逗号分隔。函数可以没有 return语句。
函数定义完成后,程序可以根据需要调用函数。程序部分代码如下:
def ______________:p=(x+y+z)/2s= (p * (p-x) * (p-y) * (p-z)) ** 0.5return stotal = 200 * (Area (al,b1,c1) + Area (a2,b2,c2) + Area(a3,b3,c3))
请补全程序:________________
28.编程实现一个“猜数游戏”。要求:由计算机随机生成一个100以内的正整数,用户有5次猜数机会,如果猜中提示“恭喜你,猜对了!”:否则,提示“偏大”或“偏小”,然后继续猜数。如果5次都未猜中,计算机公布答案,并提示“5次都没有猜中,游戏结束!”补全以下程序代码:
import randomnum = random. randint(1,100)flag Truen = 5flag = Truewhile _____________:guess = int(input("请输入猜测的数:"))if guess < num:print("偏小")n = n - 1elif guess > numprint("偏大")n = n - 1else:print("恭喜你,猜对了!")flag = Falseberak #跳出当前循环,执行循环后的语句if flag:print("答案是:"+str(num)+" 5次都没有猜中,游戏结束!")
请补全程序___________________
29.阅读下列程序,写出运行结果
n= int(input("n="))s=0while n>0:x = n % 10s = s + xn = n //10print(s)
程序运行时,输入685:______
30.某快递公司为计算快递运费编写了Python程序,当用户输入快递重量(单位是千克)后,根据快递公司的收费标准,计算出快递运费。快递公司的具体收费标准如下表所示:
某快递公司收费标准表
快递重量(千克) 快递运费
1千克以下(包含1千克) 9元
1千克以上3千克以下(包含3千克) 11元
3千克以上5千克以下(包含5千克) 14元
5千克以上 超过5千克部分,每千克加收2元,不足1千克按1千克计算
该Python程序代码如下所示,请完善程序实现计算快递运费的功能。
#计算快递运费
import math
weight= float(input"请输入快递重量(kg):"))#输入的值须大于零
if weight<=l:
money=9
elif_______:
money=11
elif _______:
money=14
else:
money=14+math.ceil(weight-5)
print("你需支付的快递运费是:",money,"元")
(1)程序第3行中float函数的功能是_________。
(2)程序中第6行下划线处应填入__________。
(3)程序中第8行下划线处应填入___________。
31.编写一个程序,判定用户输入的两个数 a和 b,如果用户输入的第一个数大,则两数互换,否则原样输出。
32.以下是计算s = 1+6+11+...+ 101的程序代码,请补全程序。
s=0
for i in range(1,102, ):
s=
print( s)
请补充完成上述程序①_________ ②_________
四、判断题
33.下列程序段中,赋值语句s=s+i被重复执行了4次。
s=0
For i in range(3,10,2):
s=s+i (_____)
34.编程也属于编码,是运用程序设计语言实现人机交互提高计算机应用效率,为实现操作程序化要求所进行的编码。(_____)
35.用自然语言来描述算法,比用流程图来描述算法更清晰、简洁。(_______)
五、填空题
36.阅读下列程序,写出运行结果
a,b = 1,1n = int(input("请输入一个大于等于3的正整数n:"))for i in range(n-2):c = a + ba = bb = cprint(c)程序运行后,输入:6
运行输出结果是:___________
37.阅读下列程序,写出运行结果。
m = int(input("请输入一个正整数:"))x = my = mfor i in range (9):n = int(input("请输入一个正整数:"))if n运行结果是:_____________
38.阅读下列程序,写出运行结果
i = 0sum = 0t = 1while sum < 10:i = i+ 1t=t*isum = sum + tprint(sum)
运行输出结果是:_______________
39.阅读下列程序,写出运行结果。
m = 9n = 6c= m - nwhile c! = n:m = nn = cif m < n:m , n= n, mc = m - nprint(c)
运行结果是:_________
40.阅读下列程序,写出运行结果
s = 1for i in range(1,10,3):s = s *iprint(s)
运行输出结果是:__________________
41.下面的程序段运行后的结果为__________
s=0
for i in range(1,8,3):
s=s+i
print(s)
42.s=int(input(“请输入一个两位数:”))
s=s//6
print(s)
程序运行后,键盘输入31,其输出结果为 ____________
43.程序中的变量是计算过程中要用的数据的 。
参考答案
1.C
【详解】本题考查的是Python循环及选择语句。range(11)是生成[0,1,2,3,4,5,6,7,8,9,10]的列表,结合if语句可知,当i为偶数用加,为奇数时则用减。故s=0-1+2-3+4-5+6-7+8-9+10=5。故本题应选C。
2.A
【详解】本题考查的是Python的while循环。while语句格式:
当表达式的值为真时,执行循环体语句;当表达式值为假时,退出循环,执行循环体外的下一条语句(即while后面没有缩进的第一条语句)。当高度h小于珠穆朗玛峰的高度height,则继续对折,故本题应选A。
3.D
【详解】本题考查的是程序调试。报错内容是“语法错误:无效语法”,变量名51study,数字不能作为变量名的开头,故D项正确。
4.D
【详解】本题考查的是Python表达式。sqrt()求平方根,乘法运算符为“*”,除法为“/”,嵌套函数均使用小括号。表示为( -b + math. sqrt ( b * b – 4 * a * c)) / (2 * a)。
5.D
【详解】本题考查的是Python语句格式。在编写python程序时,缩进可以使得代码非常整齐规范,赏心悦目,提高可读性,因此作用是用来界定代码块。故本题应选D。
6.A
【详解】本题主要考查程序执行。解释程序的一般结构可以分为解释模块和运行模块两个主要模块。前者的职能是按源程序动态执行顺序逐个输入语句,并对单个语句进行分析和解释,包括语法和语义的正确性检验、生成等价的中间代码或机器语言代码,以及错误信息提供等处理。后者的职能是运行语句的翻译代码,并输出中间结果或最终结果,故本题选A选项。
7.D
【详解】本题考查对冒泡排序的理解。根据题干描述,对于数据23,17,46,58,34,11,进行7次比较即可确定排序顺序。故选项D符合题意。
8.D
【详解】本题考查对分查找算法。题目中要求文本框Text1中输入值后,列表框List1中显示的结果为“5 4 5”,在key值没有给定的情况下,可以利用二叉树来解决问题,二叉树如下图所示:
由图可知key值应该是大于66小于77的数,如果包括66,列表框List1中显示的结果为“5
9.B
【详解】本题主要考查赋值语句知识点。赋值是把右边的内容赋值到左边,A选项x是不能赋值给左边表达式,C选项正确写法x+=1同x=x+1。D选项三个变量在赋值时少赋了一个值,故本题选B选项。
10.C
【详解】本题主要考查程序设计知识点。C语言是高级语言,不属于汇编语言,选项A说法错误;机器语言是程序设计语言,选项B说法错误;程序实际上是一组操作的指令或语句的序列,是计算机执行算法的操作步骤,故本题选C选项;程序设计和程序设计语言不是同一概念,选项D说法错误。
11.A
【详解】本题主要考查多分支条件结构。因为x=100大于20,所以执行x//10=100//10=10,故程序的运行结果是10,故本题选A选项。
12.B
【详解】本题主要考查if条件分支。题目中的条件都是与的关系,所以要用and连接,故本题选B选项。
13.B
【详解】本题考查Python程序执行
a=23,b=3,c=23+3=26,最后输出23+3=26,故本题选B选项
14.A
【详解】本题考查流程图相关知识。要测试所有程序分支是否正确,则需要将所有分支都判断一遍。测试的三组数据应该是小于等于3,大于3并且小于等于10以及大于10。故本题最恰当的一组数据是选项A的数据。故本题选A。
15.A
【详解】本题考查的是程序。程序就是遵循一定规则完成指定工作的代码。程序=算法+数据结构故选项A正确。
16.D
【详解】本题考查流程图。
a 1 1 2 3 5
b 1 2 3 5 8
c 1 2 3 5 8
i 2 3 4 5 6
故说法正确的是选项D。
17.D
【详解】本题考查流程图。可以代入选项,当选项D代入时,流程如下。
i 0 1 2 3 4 5 6 7 8 9 10 11
s 2 2 4 4 8 8 16 16 32 32 64 64
故本题选D。
18.C
【详解】本题考查程序连接数据库相关知识。连接的数据库文件名是词库.accdb,①错“ConnectionString”是conn对象的属性名,④错。省略语句“rs.MoveNext”,数据库指针无法移动,循环无法结束,⑥错。②③⑤的说法正确,故本题选C。
19.B
【详解】x 41 20 10 5 2 1 0
s 1 -1 -5 3 -13 19
k 2 4 8 16 32 64
最后可得s值19,故本题选B。
20.ABD
【详解】本题考查的是计算机程序语言。计算机程序设计语言可以分为:机器语言、汇编语言、高级语言。故本题应选ABD。
【点睛】
21.
l=[]
for i in range(2000,3201):
if (i%7==0)and (i%5!=0):
l.append(str(i))
print (','.join(1))
【详解】本题考查的编写程序。程序的编写难度较大,使用range( )定义i的取值范围,然后利用if判断语句可被7整除,但不是5的倍数,最后利用join函数打印出结果即可。
22.代码解析注释如下:
sum1=0#定义sum1存储偶数和,并赋值sum1=0
sum2=0#定义sum2存储偶数和,并赋值sum2=0
for i in range(1,100):#通过遍历1至100的所有整数,分别计算1至100中的偶数和、奇数和
if i%2==0:#若i是偶数,则把偶数加到sum1中
sum1+=i
else:#若i是奇数,则把奇数加到sum2中
sum2+=i
print(sum1,sum2)#输出结果,偶数和sum1的值为2550,奇数和sum2的值为2500
【详解】本题主要考查Python的循环结构和判断结构。程序算法用自然语言可以表示为:
定义两个变量并赋值sum1,sum2;
遍历1-100的所以整数:
如果遍历的数为偶数,则将该偶数添累加到sum1中,
如果遍历的数为奇数,则将该奇数累加到sum2中;
遍历完成之后,最后输出1--100偶数的和sum1,1--100中奇数的和sum2。
23.s+h
【详解】本题考查的是Python循环语句。每次落地后反弹回原高度的一半,再落下,即从上一次落地开始到下一次落地经过的路程刚好是上一次的高度h,共经的路程为:前面经过的路程+本次经过的路程。故横线上代码应为:s+h。
24.peach+1
【详解】本题考查的是Python循环语句。由逆向思维:先借来一个桃子,觉得不够又借来了与手上等量的桃子。可知横线上的代码应为:peach+1
25.3
【详解】本题考查的是Python循环及选择语句。输入n=8后:
n>1成立,cnt=cnt+1=1,n%2==0成立,执行n=n/2=4;
n>1成立,cnt=cnt+1=2,n%2==0成立,执行n=n/2=2;
n>1成立,cnt=cnt+1=3,n%2==0成立,执行n=n/2=1;
n>1不成立,输出cnt值为3。
26.1 2 4
【详解】本题考查的是Python循环语句。 range(1,x)是生成[1,x)的整数列表,x % i == 0是判断x是否能被i整除。输入8,8能被1、2、4整除。故运行输出结果是1 2 4。
27.Area(x,y,z)
【详解】本题考查的是Python自定义函数。def后面跟着是函数名,由Area (al,b1,c1)可知函数名为Area ,带有3个参数;由p=(x+y+z)/2可知自定义函数的三个参数名称为:x,y,z。故横线上的代码为:Area(x,y,z)。
28.n>=1或n>0
【详解】本题考查的是Python循环语句。最多猜测5次,阅读程序,可知n初始值为5,每猜一次减1,故循环的条件为:n>=1或n>0。
29.19
【详解】本题考查的是Python循环语句。输入685,初始值:n=685,s=0。
n>0成立,x=n%10=5,s=s+x=5,n=n//10=68。
n>0成立,x=n%10=8,s=s+x=13,n=n//10=6。
n>0成立,x=n%10=6,s=s+x=19,n=n//10=0。
n>0不成立,输出s值为19。
30.将输入的快递重量转换为浮点型。 weight<=3 weight<=5
【详解】本题考查的是Python的选择语句。(1)float()函数用于将整数和字符串转换成浮点数。(2)由money=11可知,第6行下划线处应填入weight<=3。(3)由money=14可知,第6行下划线处应填入weight<=5。
31.a=int(input(" 请输入数 a:"))
b=int(input(" 请输入数 b:"))
if a>b:
t=a
a=b
b=t
print("用户输入的数按小到大排序结果是: ", a, b)
else :
print("原样输出 ",a,b)
【详解】本题主要考查Python程序设计。使用input函数接收两个数a和b,用if条件分支结构判断a和b的大小,如果a大于b,则交换,否则原样输出,具体代码如下:
a=int(input(" 请输入数 a:"))
b=int(input(" 请输入数 b:"))
if a>b:
t=a
a=b
b=t
print("用户输入的数按小到大排序结果是: ", a, b)
else :
print("原样输出 ",a,b)
32.5 s+i
【详解】本题主要考查Python循环结构。题目要求计算1、6、11.. 101等差数列之和,其中公差为5,因此①为5;s变量用于记录等差数列之和,需进行累加计算,因此②为s+i。
【点睛】
33.正确
【详解】本题考查的是Python的range函数。range(start, stop [,step]) ;start 指的是计数起始值,默认是 0;stop 指的是计数结束值,但不包括 stop ;step 是步长,默认为 1,不可以为 0 。range() 方法生成一段左闭右开的整数范围。range(3,10,2)生成的列表为[3,5,7,9],故题干中的说法正确。
34.正确
【详解】本题主要考查程序编写。编程也属于编码,是运用程序设计语言实现人机交互提高计算机应用效率,为实现操作程序化要求所进行的编码,表述正确。
35.错
【详解】本题考查的是算法描述。流程图是一种传统的算法表示法,它用一些图框来代表各种不同性质的操作,用流程线来指示算法的执行方向。由于它直观形象,易于理解,所以应用广泛,特别是在语言发展的早期阶段,只有通过流程图才能简明地表述算法。故题干中的说法是错误的。
36.8
【详解】本题考查的是Python循环语句。输入6,初始值a=1,b=1,n=6。range(4)生成0到3的整数列表。
当i=0,c=a+b=2,a=b=1,b=c=2。
当i=1,c=a+b=3,a=b=2,b=c=3。
当i=2,c=a+b=5,a=b=3,b=c=5。
当i=3,c=a+b=8,a=b=5,b=c=8。
输出c值为8
37.9 9
【详解】本题考查的是Python循环及选择语句。由if语句可知x和y存储的是最小的数。故程序运行后,依次输入:12 35 9 11 23 88 13 19 29 55,最小值是9,最后输出的是9 9。
38.33
【详解】本题考查的是Python循环语句。阅读程序可知,计算的是:sum=1+1*2+1*2*3+……,当sum值大于等于10时停止。sum值为:1,3,,9,33……。故运行结果为33。
39.
【详解】本题考查的是Python循环及选择语句。初始值m=9,n=6,c=m-n=3。
3!=6成立,m=n=6,n=c=3,6<3不成立,c=m-n=3。
3!=3不成立,输出c的值为3。
40.28
【详解】本题考查的是Python循环语句及range函数。range()函数格式:range(起始值,结束值,步长)。注意:结束值不包含;步长可省略,默认为1。range(1,10,3)生成的是列表[1,4,7]。故s=1*1*4*7=28。
41.12
【详解】本题考查的知识点是Python的循环函数。range()函数可创建一个整数列表,一般用在 for 循环中。range(1,8,3)等同于整数列表[1,4,7],故该程序结果为=0+1+4+7=12。
42.5
【详解】本题主要考查程序的运行。s=31,s=s//6=31//6=5(“//”表示取整),故输出结果为5。
43.存储单元
【详解】本题主要考查程序的变量。程序中的变量是计算过程中要用的数据的存储单元。