内容正文:
第二章 算法与程序实现
一、选择题
1.列表d=[1,4,2,8,5,3,7,10],以下表达式成立的是( )
A.d[1+3] > d[3] B.d[d[2] + d[0]] <= d[0] + d[6]
C.d[1] + 4 == d[1] + d[4] D.d[d[5]+1] < d[1]
2.下列 Python 表达式运算的结果为“True”是( )
A.not (4<=5) B.(1>2) and (5>4) C.(2!=1) or (3<2) D.7>=8
3.阅读下列Python程序段:
m1=100
for i in range(5):
x=int (input ("输入一个整数"))
m1=min (ml, x)
print (ml)
运行程序,依次输入1~5共5个正整数,程序运行结果为( )
A.1 B.5 C.6 D.0
4.用Python编写如下自定义函数程序段,其功能是删除无序链表(元素个数大于等于2)中的重复元素。
def dele(a,head):
pre=head;p=a[head][1]
while p!=-1:
q=head
flag =False
while (1) :
if a[q][0]==a[p][0]:
a[pre][1]=a[p][1]
p=a[p][1]
f (2)
break
q=a[q][1]
if not flag:
pre=p
p=a[p][1]
方框处(1),(2)的语句可从下列选项中选择
①q!=p ②q!=-1 ③flag= True ④flag =False
则方框处(1),(2)填入的正确代码依次为( )
A.①③ B.②③ C.①④ D.②④
5.某算法的流程图如图所示。执行这部分流程,当输入t的值为8时,则最后输出n的值是( )
A.2 B.3 C.4 D.5
6.数组元素a[0]至a[n-1]依次存放着n个整数、现要用last将数组元素划分成两部分,小于key的整数均位于last的左侧。例如:n为5,数组a为[3,9,7,4,8],key为7,完成划分后last为2,数组a为[4,3,7,9,8] 实现该功能的程序段如下,方框中应依次填入的正确代码为( )
from random import randint
k=randint(0,n-1);key=a[k] #从数组a中随机选择一个整数赋值给key
a[0],a[k]=a[k],a[0]
(1)
for i in range(1,n):
if a[i] <key:
a[0],a[last] = a[last],a[0]
①last=-1 ②last=0 ③a[last],a[i]=a[i],a[last] ④last +=1 ⑤a[last]=a[i]
A.①③④ B.①④⑤ C.②④③ D.②⑤③
7.有如下Python程序段:
s="HangZhou2022"
a={0:0,1:0}
for i in s:
t=0
if not("0"<=i<="9"):
t=1
a[t]+=1
print(a)
该程序段运行后,输出的内容是( )
A.{0:4,1:0} B.{4:0,8:1} C.{0:4,1:8} D.8
8.以下Python程序执行后,若输入1和2,则输出结果是( )
a=int(input())
b=int(input())
print(a+b)
A.1 B.2 C.3 D.12
9.有如下Python程序段,执行该程序段后,一共输出列表a中的多少个元素( )
a=[1,2,3,4,5,6,7]
for i in range(5):
print(a[i])
A.7 B.5 C.2 D.3
10.描述算法的部分流程图如图所示,此算法的控制结构属于( )
A.顺序结构 B.分支结构 C.循环结构 D.树形结构
11.若输入数值25、16,以下流程图描述的算法运行结果是( )。
A.1 B.16 C.25 D.400
12.在Python中,函数int(-3.8)返回值是( )
A.-3 B.3.8 C.-4 D.3
13.某算法的部分流程图如图所示,执行这部分流程,若输入x的值依次为l0,7,8,12,0,则输出k的值是( )
A.2 B.3 C.4 D.5
14.某算法的部分流程图如下图所示,执行这部分程序后,下列说法不正确的是( )
A.m的值为9
B.n的值为17
C.循环条件n<=15?共判断4次
D.当第4次判断循环条件n<=15?时,m的值为9
15.待入栈的序列a有多种出栈序列,以下函数用于判断序列b是否是a的出栈序列,代码如下:
python 12.py
[2,5,4,3,1]是[1,2,3,4,5]的出栈序列
python 12.py
[5,2,3,1,4]不是[1,2,3,4,5]的出栈序列
图2
def judge(a,b):
n=len(a);st=[-1] *n
top=-1;i=j= 0
while i<n:
top+=1
①
i+=1
while top>-1 and ② :
top-=1
j+=1
return top==-1
from random import shuffle
a=[1,2,3,4,5]
b=[1,2,3,4,5]
shuffle(b) #将序列b的元素随机排序
if judge(a,b):
print(b,'是',a,'的出栈序列')
else:
print(b,'不是',a,'的出栈序列')
程序运行结果如第12题图所示。划线处应填写的语句是
A.①st[top]=a[i] ②st[top]==b[j] B.①st[top]=a[i] ②st[-1]==b[j]
C.①st[top]=b[i] ②st[top]=a[j] D.①st[top]=b[i] ②st[-1]==a[j]
二、填空题
16.在编程语言中, 是一种面向对象的编程语言,它支持封装、继承和多态性。
17.在编程语言中, 是指在程序执行过程中,根据条件选择执行不同代码块的语句。
18.用Python表达式补充完成如下程序,统计四位奇数中满足能被23和19整除的总数。
s=0
for i in range(1001,10000,2):
:
s=s+1
print(s)
19.角谷猜想是指一个正整数x,如果x是奇数,则乘以3再加1;如果是偶数,则除以2。这样经过若干次运算后,总是可以得到自然数1的结果。小明根据角谷猜想进行了算法设计,并用如下流程图来描述算法。
请回答下列问题:
(1)解决此问题所使用的算法控制结构是 。
(2)根据本题算法的流程图所示,则流程图中①②处应填写的内容分别是:
① ②
(3)若输入x的值为6,则输出的运算次数n为 。(填数字)
三、判断题
20.算法的三种基本控制结构是顺序结构、选择结构和循环结构。( )
21.计算机低级语言学习难,运行效率也低,因此目前已完全淘汰。( )
22.在Python3.x语言中,input()函数的返回值类型是字符串。( )
23.算法的每一个步骤可以对应程序中一条或多条语句,每条语句最多只能实现一个操作。( )
四、操作题
24.小王从网上收集了2022年黄岩长潭水库的水位数据,其中每小时有一个水位值,存储在文件“level.xlsx”中,部分数据如图1所示。请回答下列问题:
图1 图2
(1)统计每个月份的平均水位后生成图表,如图2所示。
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]="SimHei"
df=pd.read_excel("level.xlsx")
df["月份"]="" #增加"月份"列
for i in range(len(df)):
date=df.at[i,"日期"].split("/") #split()方法:切分字符串,转换为列表
df.at[i,"月份"]= ①
df_avg= ②
plt.ylim(21.5,36.3) #长潭水库极限最低水位值和最佳蓄水水位值
plt.xlabel("月份")
plt.ylabel("水位(米)")
plt.plot(df_avg["月份"],df_avg["水位"],marker="o")#marker="o"表示实心圈标记
plt.show()
划线处①处应填入的代码为 。
划线处②处应填入的代码为 (单选,填字母)。
A.df.groupby("月份",as_index=True).mean()
B.df.groupby("月份",as_index=True).sum()
C.df.groupby("月份",as_index=False).mean()
D.df.groupby("月份",as_index=False).sum()
(2)计算水位连续下降的最长天数,并输出开始日期和结束日期,运行结果如图3所示。
水位连续下降的最长天数为:94
开始日期:2022/08/28,结束日期:2022/11/29
图3
df_date=df.groupby("日期",as_index=False)["水位"].mean()#对每一天水位求平均值
lst=df_date.values.tolist()
#实现将df_date转换为二维列表,lst=[['2022/01/01',34.795],['2022/01/02',34.785],……]
k,max,ed=1,1,0
for i in range(1,len(lst)):
if lst[i][1] < lst[i-1][1]:
k+=1
else:
if k>max:
max=k
③
k=1
if k>max:
max=k
ed=i
print("水位连续下降的最长天数为:",max)
print("开始日期:", ④ ,",结束日期:",lst[ed][0])
划线处③处应填入的代码为 。
划线处④处应填入的代码为 。
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.B
【详解】本题考查Python运算符与表达式相关内容。A选项,d[1+3]=d[4]=5,d[3]=8,d[1+3] > d[3]-->False。B选项,d[d[2]+d[0]]=d[2+1]=d[3]=8,d[0]+d[6]=8,d[d[2]+d[0]]<=d[0]+d[6]-->8<=8-->True。C选项,d[1]+4=8,d[1]+d[4]=4+5=9,d[1]+4==d[1]+d[4]-->8==9-->False。D选项,d[d[5]+1]=d[3+1]=5,d[d[5]+1]<d[1]-->5<4-->False。故本题答案是B选项。
2.C
【详解】本题考查Python基础。
表达式:(2!=1) or (3<2)
2!=1 是一个比较表达式,其结果为 True(因为 2 不等于 1)。
在逻辑或(or)操作中,只要有一个操作数为 True,整个表达式的结果就是 True。
因此,(2!=1) or (3<2) 的结果为 True,因为 2!=1 是 True。
故正确答案为:选项C。
3.A
【详解】本题考查Python程序设计相关内容。程序段主要作用是从用户输入的5个正整数中找到最小值,并输出该最小值。首先,给定初始值m1=100。然后,通过for循环,用户依次输入5个正整数,其中每次输入的整数用变量x表示。在每次输入后,通过m1=min(m1,x)语句更新m1的值为当前m1和输入整数x中的较小值。最后,通过print(m1)语句输出找到的最小值。因此,对于输入1~5共5个正整数的情况,程序运行后输出的是这5个正整数中的最小值。故本题答案为A选项。
4.A
【详解】本题考查Python程序设计及单链表相关内容。内层while循环实现一一比较节点q和p,因此循环条件是q!=p;代码使用了一个标志变量flag(初始值设置为:False)来表明是否有重复数据,若a[q][0]==a[p][0]成立,表明有重复数据,flag应设置为True。故本题答案是A选项。
5.B
【详解】本题考查算法流程图相关内容。分析流程图可知,当输入t值为8时,t==1不成立,第一次进入循环:t为偶数成立,执行t=t//2,t值为4,执行n=n+1,n值为1;此时,t值为4,t==1不成立,第二次进入循环:t为偶数成立,执行t=t//2,t值为2,执行n=n+1,n值为2;此时,t值为2,t==1不成立,第三次进入循环:t为偶数成立,执行t=t//2,t值为1,执行n=n+1,n值为3;此时,t值为1,t==1成立,不再进入循环,输出n的值,即3。故本题答案是B选项。
6.C
【详解】本题考查程序设计相关内容。结合题目内容,分析程序段,推知:last标记key值最终位置(或可以理解为小于key的元素个数),由“a[0],a[k]=a[k],a[0]”知,last初始值应设置为0,第一个方框处代码为:last=0;若a[i] <key成立,表明当前后续序列中存在小于key的整数,last值应加1,并交换两个元素(a[last]与a[i]),第二个方框处代码为:last +=1;第三个方框处代码为:a[last],a[i]=a[i],a[last]。故本题答案是C选项。
7.C
【详解】本题考查Python程序。程序遍历字符串s中的每一个字符,如果字符是数字,则将字典a的键0对应的值加1;否则,将字典a的键1对应的值加1。统计可知,s字符数字有4个,字符有8个。故答案为:C。
8.C
【详解】本题考查Python程序执行。input接收的数据类型是字符串类型,int函数用于将对象转换为整型。因此a=1,b=2,a+b=3。故选C。
9.B
【详解】本题考查的是Python循环语句。range(start,stop,[step]),start:计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0,1,2,3,4]没有5;step:步长,默认为1。例如:range(0, 5) 等价于 range(0,5,1)。 range(5)生成[0,1,2,3,4共5个序列数,故输出5个元素。选B。
10.C
【详解】本题考查流程图与程序结构相关内容。程序结构有三种基本结构:顺序结构、分支结构、循环结构。通过观察流程图:在x>y条件成立的情况下,执行x=x-1,y=y+1;后,流程又转回到判断x>y条件是否成立。可以得知,该流程图描述的是循环结构。D选项树型结构是数据结构中的一种非线性结构,不属于程序结构,选项错误。故本题答案是C选项。
11.A
【详解】本题考查的是流程图识读。输入数值25、16,则m=sqr(25)=5,n=sqr(16)=4。m=int(m) and n=int(n)为真,执行t=sqr(m-n)=sqr(1)=1。故本题应选A。
【点睛】
12.A
【详解】本题考查的是Python函数。int() 函数用于将一个字符串或数字转换为整型。int(-3.8)的返回值是-3。故选A。
13.B
【详解】本题考查的是流程图识读。阅读流程图可知,该程序功能是依次输入x并累加,如果累加结果大于等于10,记录次数k,并重置累加结果为0。输入10满足条件,记录k=1,重置y=0;输入7,8后再次满足条件,记录k=1+1=2,重置y=0;输入12后再次满足条件,记录k=2+1=3,重置y=0;输入0,程序结束。故本题应选B。
14.C
【详解】本题考查流程图分析。A选项正确,根据流程图分析,当循环结束后m值为9。B选项正确,当m=9时候,n的值为17。D选项正确,第四次循环执行时m=m+2,故m的值为9。C选项错误,循环条件判断了5次,第五次判断没有满足条件,退出循环,故正确答案C选项。
15.A
【详解】本题考查栈的相关知识。根据题干、代码段可以得出:序列b进行随机排序,a序列借助顺序栈st进行入栈、出栈操作,过程中,将出栈元素与随机排序后的序列b进行对比,若对应两个元素相等,则输出b序列是a的出栈序列,否则输出b序列不是a的出栈序列。故①处操作应该是对a序列元素入栈,即st[top]=a[i],②处是判断栈顶元素与b序列对应位置元素是否相等,即st[top]==b[j]。正确答案是A选项。
16.Java
【详解】本题考查程序设计语言。Java是一种面向对象的编程语言,它支持封装、继承和多态性。Java的设计哲学是“一次编写,到处运行”,因为它的代码可以在任何支持Java虚拟机(JVM)的平台上运行。故正确答案为:Java。
17.条件语句或选择结构
【详解】本题考查分支结构。在编程语言中,条件语句或选择结构用于在程序执行时,依据给定的条件来决定执行不同的代码块。条件语句通过对条件的判断,若条件为真(成立)则执行相应的代码块,若条件为假(不成立)则执行另外的代码块或者不执行任何操作。常见的条件语句有if语句、if-else语句、switch语句等。通过条件语句,可以使程序根据不同的情况做出不同的响应和处理,增加了程序的灵活性和逻辑性。故答案为:条件语句或选择结构。
18.if i %23==0 and i %19 ==0
【详解】本题考查的是Python循环与选择语句。通过循环变量i遍历所有四位数的奇数,判断能否被23和19整除,只要看除完后的余数是否为0,故画线处代码为:if i %23 == 0 and i %19== 0。
19. 循环结构 x=1?或者x等于1? xx*3+1 8
【详解】本题考查的是算法相关知识。(1)流程图具有典型的循环结构的特点。(2)①处填写判断条件x=1?②处填写处理过程x←x*3+1。(3)若x=6,6/2=3,3*3+1=10,10/2=5,5*3+1=16,16/2=8,8/2=4,4/2=2,2/2=1,经过8次计算结果为1,故答案为8。
20.正确
【详解】本题考查算法。算法的三种基本控制结构是顺序结构、选择结构和循环结构,这三种基本控制结构是构建复杂算法的基础,通过它们可以实现各种复杂的逻辑和功能。它们为算法设计提供了基本的控制流程,是算法设计的核心内容。故正确。
21.错误
【详解】本题考查计算机语言。计算机低级语言虽然在学习上可能相对困难,运行效率相对高级语言较低,但它们并没有被完全淘汰。低级语言在一些特定的领域和场景中仍然有广泛的应用,例如嵌入式系统、操作系统的内核开发、驱动程序编写等。此外,低级语言也用于编写高性能的程序,因为它们提供了对硬件的更直接的控制。故说法错误。
22.正确
【详解】本题考查Python函数。input()函数用于从标准输入读取一行,并将其作为字符串返回。无论用户输入什么内容,input()函数返回的值始终是字符串类型。故说法正确。
23.正确
【详解】本题考查的是算法相关知识。算法的每一个步骤可以对应程序中一条或多条语句,每条语句最多只能实现一个操作。题干中说法正确。
24. date[1] C ed=i-1 1st[ed-max+1][0]
【详解】本题考查Python程序设计相关内容。
(1)①处,由date=df.at[i,"日期"].split("/")可得,月份在date内,date[0]为年份,date[1]为月份,date[2]为日,故此处应填写:date[1]。②处,按照每月平均降水量分组(保留原索引),mean()为求平均值的聚合函数,此处代码应为:df.groupby("月份",as_index=False).mean(),故此处应填写:C。
(2)③处,当lst[i][1] < lst[i-1][1]成立时,k加1,记录水位连续下降的天数;不成立时,判断k与max的值,若k大,则水位连续下降最大天数为k,记住当前索引号,故此处应填写:ed=i-1。④处,水位连续下降最大天数从开始日期到结束日期计算,为max。结束日期为lst[ed][0],则开始日期为:1st[ed-max+1][0],故此处应填写:1st[ed-max+1][0]。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$