内容正文:
第2章 算法与程序实现
一、选择题
1.下列关于算法的特征描述,不正确的是( )
A.确定性:算法的每一步必须有确切的含义 B.有穷性:算法必须在有限步之内结束
C.输入:算法必须至少有1个输入 D.输出:算法必须至少有1个输出
2.如图所示算法,对列表a执行操作,运行结果是( )
A.1 B.7 C.10 D.13
3.下列关于算法的说法正确的是( )
A.可以用枚举算法解决“找出所有的素数”问题。
B.在屏幕上输出“helloworld!”,这个任务不需要用算法解决
C.“鸡兔同笼”问题,用解析算法和枚举算法都可以解决
D.算法必须要有输入,如“鸡兔同笼”问题必须输入头和脚的数量
4.有如下Python程序:
s=input('请输入字符串:')
ans=''
a=[1,2,3]
for i in range(len(s)):
x=s[i]
key=a[i%3]
if '0'<=x<='9':
ans=ans+chr((ord(x)-48+key)%10+48) #字符'0'的ASCII是48
else:
ans=ans+x
print(ans)
执行该程序后,输入s的值为'A1b9',输出的结果是( )
A.A2b1 B.A3b0 C.bA30 D.b0A6
5.在Python中,下列能用作变量名的是( )
A.x3 B.4pk C.if D.y!
6.某加密程序的代码如下:
s=input("请输入明文: ")
q="1896720354";mw=""
for i in range(len(s)):
if”0”<=s[i]<="9":
mw+=q[int(s[i])]
elif "a"<=s[i]<="z"
mw+=chr((ord(s[i])-ord("a")+i%2)%26+ord("a")
else:
mw=s[i]+mw
print(mw)
运行该程序段,若输入s的值为“Win98@qq.com”,则输出结果是( )
A.@Wjn45qrdon B.Wjn53@qr.don C.Wjn32@qr.don D.@Wkp45sseqo
7.下列哪个操作可以实现字符串的大小写转换( )
A.str.lower() B.str.upper() C.str.capitalize() D.以上均可
8.运行以下程序后,输出的结果是( )
s=0
for i in[-1,2.-3,4,-51:
s+=i
print(s)
A.5 B.6 C.-3 D.无法确定
9.某客户购买的新能源汽车价格为t万元,可享受当地政府购车补贴,补贴标准如下:价格20万元(不含)以下,补贴0.25万元;价格20万元(含)至30万元(不含),补贴0.5万元;价格30万元(含)以上,补贴1万元。在下列选项中,计算实际购车价格p的程序代码正确的是( )
A.
p=t-0.25
if t>=20:
p=t-0.5
elif t>=30:
p=t-1
B.
p=t-1
if t<20:
p=t-0.25
elif t<30:
p=t-0.5
C.
p=t-0.25
if t>=30:
p=t-1
if t>=20:
p=t-0.5
D.
p=t-1
if t>=20:
p=t-0.5
else:
p=t-0.25
A.A B.B C.C D.D
10.有如下Python程序段:
for i in range(0,len(a)-1,2):
if i > 0 and a[i] < a[i-1]:
a[i],a[i-1] = a[i-1],a[i]
if a[i] < a[i+1]:
a[i],a[i+1] = a[i+1],a[i]
列表a有6个元素,运行该程序段后,a可能的值是( )
A.[2,9,8,6,9,3] B.[9,9,8,6,3,2] C.[9,3,6,2,8,9] D.[6,3,9,2,9,8]
11.下列属于高级程序设计语言的是( )
A.VB、Python B.WPS、Access C.Office、C语言 D.Java、汇编语言
12.Python 表达式abs(-3)+len("2abc")的值为( )
A.7 B.6 C.5 D.4
13.程序设计程中发现诊断和改正错误的步骤称为( )
A.结果检测 B.分析问题 C.编写程序 D.调试程序
14.算法的步骤必须是有限的,并且保证执行有限步后结束。这体现了算法的( )
A.有输出 B.有穷性 C.确定性 D.可行性
15.用流程图来描述分支结构时要使用的符号是( )
A.连接圈 B.处理框 C.输入输出框 D.判断框
16.Python语言语句块的标记是( )
A.分号 B.冒号 C.缩进 D.大括号
17.Python中,下列用于交换x,y 两个变量的值的语句,不正确的是( )
A.x=y;y=x B.t=x;x=y;y=t
C.t=x+y;x=t-x;y=t-y D.x,y=y,x
二、填空题
18.在Python中,使用 函数可以获取用户输入的字符串。
19.在Java中,String类的equals()方法用于比较两个字符串的 。
20.在C++中,若要定义一个名为“Student”的类,并包含姓名和年龄两个私有成员变量,可以使用以下语句: 。
21.在Python中,使用 可以进行列表推导。
22.在计算机编程中,变量的作用是 。
23.Python表达式2.0*abs(-4.5)的值是 。
三、判断题
24.对于带有else子句的循环语句,如果是因为循环条件表达式不成立而自然结束循环,则执行else子句中的代码。( )
25.数学老师布置了一道题目“求1*2*3*……*100”,如果用计算机编程的方法求解,应该选择的程序结构是顺序结构。( )
26.调试运行程序时,计算机能识别出程序代码中的语法错误。( )
27.机器语言是与计算机无关的,具有很好的可移植性。( )
28.顺序结构指程序的执行按语句的排列顺序从上到下依次执行,直至结束。( )
四、操作题
29.百钱买百鸡:公鸡一只五块钱,母鸡一只三块钱,小鸡三只一块钱,现在要用一百块钱买一百只鸡,问:公鸡、母鸡、小鸡各多少只?编写Python代码如下:
num=0
for cock in #①
for hen in #② chick=100-cock-hen
if cock*5+hen*3+chick//3==100:
print('公鸡:',cock,'母鸡:',hen,'小鸡:',chick)
num+=1
print('正确解数量:',num)
(1)由题意可知,100块钱不可能买到100只公鸡,根据公鸡数量优化变量cock枚举范围。方框①处可以修改为 。
(2)同理,100块钱不可能买到100只母鸡,根据题中母鸡数量优化变量hen的枚举范围。方框②处可以修改为 。
30.小明利用Python对“足球世界杯历史进球前20名”的数据进行分析,部分界面如图a。他先按国家分类,统计出各个国家的球员人数,再把球员人数最多的国家的球员,按“场均进球”数进行排序,并用图表呈现(如图b)。请在划线处填入合适的代码。
图a 图b
import csv
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
csvfile=open("历史进球.csv",'r')[[' 姓名','国家','进球个数,'出场次数','点球个数'],
reader=csv.reader(csvfile) ['阿德米尔',巴西','9','6','0,['巴蒂斯图塔',阿根廷','10','12','4'],
a=list(reader);country={} .....,尤西比奥','葡萄牙','9','6','4']]
列表a内容
for i in range(1,len(a)): #按国家分类
if a[i][1]not in country:
① {'葡萄牙':[20],'巴西':[1,4,16,19],'意大利':[3,15],·'阿根廷':[2],'匈牙利':[7],'秘鲁':[10],'法国'
else: :[5],'英国':[13],'波兰':[12],'德国':[6,8,9,1
country[a[i][1]]+=[i] 1,14,17],'西班牙':[18]}
max=0;country_max="." 字典country内容
for i in country.keys(): #找出前20名中人员最多的国家
if ② :
max=len(country[i])
country_max=i
df=pd.DataFrame(data=[],columns=["姓名","进球个数","出场次数"])
for i in country[country_max]:
df=df.append({"姓名":a[i][0],"进球个数":int(a[i][2]),"出场次数":int(a[i][3])},ignore_index=True)
③ =df["进球个数"]/df["出场次数"] #df最后插入1列“场均进球”
df=df.sort_values(④ ) #按“场均进球”排序
plt. ⑤ (df["姓名"],df["场均进球"],label="场均进球")
plt.title("前20名中人数最多国家球员场均进球情况")
plt.legend()
plt.xlim(0,1.2)
plt.show()
csvfile.close()
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.C
【详解】本题考查算法特征相关内容。算法的特征有:有穷性、确定性、有零个或多个输入、有一个或多个输出、可行性。(1)有穷性:一个算法必须保证执行有限步之后结束;(2)确定性:算法的每一步骤必须有确切的定义;(3)输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;(4)输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;(5)可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。故本题答案是C选项。
2.B
【详解】本题考查流程图。程序运行过程如下。最终s的值为8-1=7。故答案为:B。
k
i
a
0
-3
a[-3]=1
1
-2
a[-2]=2
2
-1
a[-1]=3
3
0
a[0]=5
4
1
a[1]=6
5
2
a[2]=7
6
3
a[3]=8
7
4
a[4]=9
3.C
【详解】本题考查算法。
A可以用枚举算法解决“找出所有的素数”问题。
这个说法不正确。虽然枚举算法可以用于找出一定范围内的所有素数(即尝试每一个数,并检查它是否是素数),但这种方法在数字范围很大时效率极低。对于“找出所有的素数”这一问题,实际上不存在一个具体的“所有”,因为素数是无穷的。因此,更常见的做法是指定一个范围,然后在这个范围内找出所有的素数。
B在屏幕上输出“helloworld!”,这个任务不需要用算法解决。
这个说法是错误的。算法是解决问题的一系列明确步骤,无论问题多么简单,只要涉及到执行一系列操作以达到某个目的,就需要算法。在这个例子中,输出“helloworld!”到屏幕也涉及到一系列的操作(如定位输出设备、发送字符串等),这些操作需要按照一定的顺序执行,因此也需要算法。
C “鸡兔同笼”问题,用解析算法和枚举算法都可以解决。
这个说法是正确的。“鸡兔同笼”问题是一个经典的数学问题,它可以通过建立数学方程(即解析算法)来求解,也可以通过枚举所有可能的鸡和兔的数量,然后找到满足条件的解(即枚举算法)来求解。
D算法必须要有输入,如“鸡兔同笼”问题必须输入头和脚的数量。
这个说法不正确。算法确实经常需要输入,但并不是所有算法都必须有输入。有些算法可能是自包含的,不需要外部输入就能执行。对于“鸡兔同笼”问题,如果我们已经知道了头和脚的具体数量,那么这些数量就是算法的输入。但如果我们是在讨论一个更一般化的算法,比如一个用于解决任意“鸡兔同笼”问题的算法,那么它确实需要输入头和脚的数量。但“算法必须要有输入”这一说法过于绝对,因此不正确。
故正确答案为:选项C。
4.B
【详解】本题考查程序分析。
该程序功能为:切片字符串s,切片索引为i,当s[i]为字母时,累加到ans空串中。当s[i]为数字字符时,转换成数值,向后移动key位后,转换成字符累加到ans中。当s='A1b9',i=0,s[i]='A',ans的第一个字符为A。故排除选项C、D。当i=1,key=2,s[i]=1,则向后移动2位后,为3。故ans第二个字符为3,排除选项A。故正确答案为选项B。
5.A
【详解】本题考查Python程序设计相关内容。变量名只能包含字母(大小写均可)、数字和下划线(_);必须以字母(大小写均可)或下划线(_)开头,不能以数字开头;区分大小写;避免使用Python关键字作为变量名。变量名应该具有描述性,以便代码可读性更高。使用下划线来分隔多个单词。变量名应该尽量简洁,但也要保持足够的描述性,以便于理解变量的用途。A选项,符合变量命名规则,可以用作变量名。B选项,4pk数字开头,不符合变量命名规则。C选项,if是关键字,不能做变量名。D选项,!为非法字符,不符合变量命名规则。故本题答案是A选项。
6.A
【详解】本题考查Python程序。对于明文中的每个字符,根据其类型进行不同的处理:如果是数字字符('0'到'9'),则根据预设的字符串“1896720354”进行替换。如果是小写字母字符('a'到'z'),则将其转换为另一个小写字母,转换规则为:先将其转换为对应的数字,然后对于每个字母,根据其在字符串中的位置(即索引值)的奇偶性来进行不同的位移。偶数索引的字母向右移动1位,奇数索引的字母向左移动1位,移动时循环利用字母表。如果不是数字字符或小写字母字符,则保持不变。将处理后的字符依次拼接到加密后的字符串mw中。输出加密后的结果mw。根据上述规则,输入s的值为“Win98@qq.com”,输出的结果为:“@Wjn45qrdon”。故答案为:A。
7.D
【详解】本题考查Python字符串。Python提供了多种字符串大小写转换的方法,包括将字符串转为小写(str.lower()), 大写(str.upper()),或者仅首字母大写(str.capitalize())。故答案为:D。
8.C
【详解】本题考查Python循环结构的应用。分析程序,可知该程序实现:s=0-1+2-3+4-5=-3。故选C。
9.B
【详解】本题考查的是Python多分支语句。选项A中,如果价格30万元(含)以上,满足if语句,不会执行elif语句,补贴0.5万元,不符合题意;选项C中,如果价格30万元(含)以上,也满足第二个if语句,补贴0.5万元,不符合题意;选项D中,如果价格30万元(含)以上,满足if语句,补贴0.5万元,不符合题意。故选B。
10.D
【详解】本题考查Python程序设计相关内容。分析程序段,推知:列表a有6个元素,由“for i in range(0,len(a)-1,2)”知,列表a的索引i为0、2、4,且当i的值为2、4时,若a[i] < a[i-1],则交换两个元素,若a[i] < a[i+1],则交换两个元素,即:a[2]的值不能小于前面的a[1]和后面的a[3];a[4]的值不能小于前面的a[3]和后面的a[5]。AB选项中,8比前面相邻的9小,选项结果不可能。C选项,8比后面相邻的9小,选项结果不可能。D选项为可能结果,故本题答案是D选项。
11.A
【详解】本题考查的知识点是计算机语言的分类。计算机语言分为低级语言和高级语言。低级语言主要指机器语言和汇编语言。除了低级语言之外的其他编程语言,如C、C++、Python、Pascal、Java、VB都属于高级语言。故正确答案为A选项。
12.A
【详解】本题主要考查Python表达式的运算。abs求绝对值函数,len是返回字符串长度,故abs(-3)+len("2abc")=3+4=7,选A。
13.D
【详解】本题考查计算解决问题的基本过程。计算机解决问题的基本过程一般包括以下几个步骤:
分析问题:了解问题的含义、目的和需求,明确问题的范围和限制,确定解决问题的目标和可行性。
设计算法:根据问题的特点和需求,设计出解决问题的算法,包括问题的分解、抽象和归纳等。
编写程序:使用编程语言实现算法,将问题转化为计算机可执行的形式。
调试程序:测试程序的正确性和稳定性,发现并修复潜在的错误和缺陷,确保程序能够正常运行。
程序设计程中发现诊断和改正错误的步骤称为调试程序。故答案为:D。
14.B
【详解】本题主要考查算法的特征。一个算法应该具有以下五个重要的特征:1、有穷性: 一个算法必须保证执行有限步之后结束;2、确切性:算法的每一步骤必须有确切的定义;3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定义了初始条件;4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;5、可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。算法的步骤必须是有限的,并且保证执行有限步后结束。这体现了算法的有穷性。故选B。
15.D
【详解】本题主要考查算法流程图。菱形是条件判断框,平行四边形是数据输入/输出框,圆角矩形是开始/结束框,矩形是数据处理框。流程图来描述分支结构时要使用的符号是判断框。故本题应选D。
16.C
【详解】本题考查Python语句块的标记。在Python语言中,语句块(如条件语句、循环语句、函数定义等)的标记是通过缩进来实现的。故答案为:C。
17.A
【详解】本题考查Python赋值语句。x = y; y = x: 这个选项是不正确的,因为它只先会将 y的值赋给 x,然后再将 x 的值赋给 y,从而x和y的值相等,这不会导致 x 和 y 的值交换。故答案为A选项。
18.input()
【详解】本题考查Python基础。在Python中,使用input()函数可以获取用户输入的字符串。例如:name = input("请输入你的名字:")。故正确答案为:input()。
19.内容(content)
【详解】本题考查计算机编程。String类的equals()方法用于比较两个字符串的内容(content),即判断两个字符串在字符序列上的相等性,而不是比较它们的内存地址。与==运算符不同,==运算符比较的是对象的引用地址,而equals()方法比较的是字符串的实际字符内容。故答案为:内容(content)。
20.class Student { private: string name; int age; };
【详解】本题考查计算机编程语言。
在C++中,定义类基本语法格式:
class ClassName(类名) {
public: 公共成员函数和变量
private: 私有成员函数和变量
protected: 受保护的成员函数和变量
};
若要定义一个名为“Student”的类,并包含姓名和年龄两个私有成员变量,可以使用以下语句:class Student { private: string name; int age; };。故正确答案为:class Student { private: string name; int age; };。
21.list comprehension
【详解】本题考查Python程序设计相关内容。Python中的列表推导式(list comprehension)是一种方便快捷的语法,可以快速地生成列表。它的语法形式类似于数学中的集合推导式,语义也相似,因而易于理解和使用。故本题答案是:list comprehension。
22.存储数据值
【详解】本题考查程序设计相关内容。在编程语言中,变量充当了将数据存储在计算机内存中的容器的角色。每个变量都有一个名称和一个对应的值,程序可以通过使用变量名称来引用和操作这些值。故本题答案是:存储数据值。
23.9.0
【详解】本题考查Python表达式的运算。abs是求绝对值函数,因此2.0*abs(-4.5)=2.0*4.5=9.0。
24.正确
【详解】本题考查Python基础。
在Python中,for循环和while循环都可以带有else子句。这个else子句的作用是在循环正常完成(即没有因为break语句而提前退出)后执行。如果循环因为循环条件不再满足(对于while循环)或者迭代对象被完全遍历(对于for循环)而自然结束,那么就会执行else子句中的代码。故正确。
25.错误
【详解】本题考查Python基础。
规律性的重复计算,应该使用循环结构。故错误。
26.正确
【详解】本题考查计算机编程。在调试运行程序时,计算机的编译器或解释器会对程序代码进行语法检查。如果代码存在不符合编程语言语法规则的部分,例如遗漏标点、关键字错误、变量未定义等,计算机会识别并提示语法错误。故说法正确。
27.错误
【详解】本题考查计算机语言。机器语言是与计算机硬件直接相关的,而不是与计算机无关的。机器语言是由计算机的指令集构成的,每一种计算机或计算机体系结构都有其独特的指令集和机器语言,故错误。
28.正确
【详解】本题考查顺序结构的描述。顺序结构指程序的执行按语句的排列顺序从上到下依次执行,直至结束。表述正确。
29. range(1,20) range(1,33)
【详解】本题考查Python程序。
(1)一只公鸡5块钱,若100块全买公鸡,最多能买100÷5=20只,所以在枚举公鸡数量时,cock的范围是range(1,20),故方框①处可以修改为range(1,20)。故答案为:range(1,20)。
(2)一只母鸡3块钱,若100块全买母鸡,最多能买100÷3≈33.33,向下取整为33只,所以在枚举母鸡数量时,hen的范围是range(1,33),故方框②处可以修改为range(1,33)。故答案为:range(1,33)。
30. country[a[i][1]]=[i] len(country[i])>max或len(country[i])>=max df["场均进球"] "场均进球",ascending=True barh
【详解】本题考查Python程序设计。①国家的名称为键,添加到空字典中,值为列表,加入索引。故填写country[a[i][1]]=[i]。 ②遍历国家字典,取出列表长度。if缺少判断条件,如果大于或大于等于max,则将最多的人员存放到max中。故填写len(country[i])>max或len(country[i])>=max。③增加一列存放场均进球。故df["场均进球"]。④sort_values方法缺少排序参数,按照场均进球且配置排序为降序排序设置ascending=True,故填写"场均进球",ascending=True。⑤根据图b可知绘制条形图,在Matplotlib库中,绘制条形的函数为barh,得知提干中缺少调用的函数名称,故填写barh。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$