2021年3月青少年软件编程(Python)等级考试试卷(四级).docx
青少年软件编程(PythOn)等级考试试卷(四级)分数:100.00题数:38一、单选题(共25题,每题2分,共50分)1.不超过100个元素的有序数列,使用二分查找能找到指定的元素,可能的查找次数不包括?()A、1次B、6次C、7次D、8次试题编号:20210129-TR-028题型:单选题答案:D难度:一般试题解析:按照二分查找法的规律,100个元素的有序列表,不管是否找到,至多查找7次。2 .运行以下代码,正确的打印结果是?()deff(): c=0 foriinrange(4,51,4): ifi%6=0: c=c+l returncPrit(f()A、1B、2C、4D、8试题编号:20210206-Ify-O06题型:单选题答案:C难度:一般试题解析:函数f()的作用是求4-50间4和6的公倍数个数,即12的倍数个数。3 .10个人站一列,分苹果,问第10个人分到多少个苹果,他说比前面一个人多分到2个,依次往前,都说比前面一个人多分到2个,最后问第一个人,他说分到10个苹果。用以下函数求第10个人分到的苹果数,则应补充选项为?()def apple(n): if=1: retum10 else: retum &rbsp; print(apple(10)A、apple()+2n+2C、apple(n-l)+2Dxapple(n+l)-2试题编号:20210131-TR-023题型:单选题答案:C难度:一般试题解析:def apple(n): if=1: retum10 else: return apple(n-l)+2 print(apple(10)4 .观察程序段,以下说法错误的是?()deffib(n): if=1or=2: s=l else: s=fib(n-l)+fib(n-2) returnSm=int(input("请输入m的值(m>2):")prit(fib(m)A、如果输入m的值为8,打印的结果为20B、该程序段用了递归来实现C、如果缺少语句ureturns",程序会报错D、语句udeffib(n):',中的n为形参试题编号:20210129-Ify-019题型:单选题答案:A难度:较难试题解析:定义函数时的语法如下: def函数名(参数集合): <函数体> return函数值本题中的自定义函数fib(m)需要返回值,所以“return函数值”语句不能少,定义时“函数名&化参数集合>中的参数为形参,调用时“函数名&忙参数集合>中的参数为实参。如果输入m的值为8,打印的结果为21。5 .关于PythOn函数参数的说法正确的是?()A、函数一定要有参数和返回值B、在调用一个函数时,若函数中修改了形参变量的值,则对应的实参变量的值也被修改C、参数的值是否会改变,与函数中对变量的操作有关,与参数类型无关D、函数的形参在函数被调用时获得初始值试题编号:20210129-TR-004题型:单选题答案:D难度:一般试题解析:函数的形参作用域为本函数,在函数被调用时获得初始值。6 .关于递归与递推方法的比较,错误的观点是?()A、递归是将复杂问题降解成若干个子问题,依次降解,求出低阶规模的解,代入高阶问题中,直至求出原问题的解;B、递推是构造低阶的问题,并求出解,依次推导出高阶的问题以及解,直至求出问题的解;C、数学上的递推关系可以通过递归的方法来实现;D、递归算法代码简洁,运行速度比递推快,因此应该尽量采用递归的方法;试题编号:20210206-×m-024题型:单选题答案:D难度:一般试题解析:D.递归的运行开销大。7 .运行以下代码,输出结果正确的是?()a=lb=c=deffun(a,c): a=2 c.append(a)fun(a,c)print(a,b,c)A、222B、12C、122D、22试题编号:20210129-TR-011题型:单选题答案:C难度:较难试题解析:函数体内变量a的值为2,添加到了列表C中,b和C指向同一个列表地址,因此列表b也随之改变8 .关于TllrtIe库的表述中,错误的是?()A、Turtle库是Python语言中一个很流行的绘制图像的函数库。B、画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。C、turtle.circle()是只能画一个指定半径为r的圆。Dturtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围0,10整数,数字越大越快。试题编号:20210128-ph-018题型:单选题答案:C难度:一般试题解析:turtle.circle()是turtle中的常用命令,基本语法是Cirde(radius,e),即画一个指定半径为r,角度e的圆或弧9 .有100枚金币,其中有1枚轻1克的假金币,现在要找出这枚假金币,但身边只有1个没有刻度的天秤。小明先是将金币分成50枚一堆,共两堆称重,在轻的那一堆中又分成两堆,接着在轻的25枚中分成12,12,1三堆称重,若两堆12枚的重量相同,则假币为单独剩下的那一枚,否则在轻的那一堆中继续按照之前的办法称下去,直到找到假金币。请问小明采用的办法与哪个算法有着相似之处?OA、递归B、分治C、枚举D、贪心试题编号:20210130-lfy-029题型:单选题答案:B难度:容易试题解析:分治算法就是对一个问题采取各个击破的方法,将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。只要求出子问题的解,就可得到原问题的解。10 .运行以下代码,正确的打印结果是?Odeff(s): t=0 max=0 foriins: ifi>="O"andi<="9": t=t+l else: ift>max: max=t t=0 print(max)Iist=,123ab45cd6d"f(list)A、OB、1C、2D、3试题编号:20210206-Ify-O07题型:单选题答案:D难度:一般试题解析:本段代码中,函数f()的作用是求最长的连续数字字符串的长度。11 .下列关于函数的描述正确的是?OA、函数是可重复使用的,用来实现单一,或相关联功能的代码段Bx函数中必须return语句C、函数好处是模块性,但不能提高代码的利用率D、函数内容以冒号起始,可以不缩进试题编号:20210203-fcl-02题型:单选题答案:A难度:一般试题解析:12 .调用以下函数时,语句"s=s+i"被执行的次数是?()deff(): s=0 i=l whilei<10: ifi%3=0ors%2=l: s=s÷i i=i+l print(s)A、3B、4C、5D、6试题编号:20210206-Ify-015题型:单选题答案:C难度:一般试题解析:i12345678910满足条件i%3=0s%2=ls%2=li%3=0i%3=0s=s+i0+33447+512÷618+913 .已知有n本按照书名拼音排序好的图书,使用对分查找法搜索其中任何一本书,最多查找次数为6次,则n的值可能为?()A、20B、50C、80D、110试题编号:20210129-Ify-O27题型:单选题答案:B难度:一般试题解析:对规模为n的数据进行对分查找时,无论是否查找到,至多进行og2n÷l次(IIog2n表示小于等于Iog2n的最大整数),因此25n<26,即32n<64014 .某程序代码设计如下,若输入整数5,则最终输出的结果为?()deffact(x): ifx=l: s=l else: s=fact(x-l)*x returnsn=int(input("请输入一个大于1的整数:")print(fact(n)+fact(n-l)A、120B、24120C、144D、12024试题编号:20210205-lfy-023题型:单选题答案:C难度:容易试题解析:由于fact(5)=fact(4)*51fact(4)=fact(3)*4,fact(3)=fact(2)*3,fact(2)=fact(l)*2,fact,所以fact(5)+fact(4)=120+24=144o15 .用匿名函数方式求两个数中较大的数,下列定义语句格式正确的是?()A、result=lambda,x1y,:yifx>yelseXresult=lambdax,y:yifx>yelseXC、result=lambda'x,y,:Xifx>yelseyD、result=lambda×,y:Xifx>yelsey试题编号:20210129-TR-007题型:单选题答案:D难度:一般试题解析:匿名函数的定义语法Lambda参数:表达式语法。先写lambda关键字,然后依次写匿名函数的参数,多个参数中间用逗号连接,然后是一个冒号,冒号后面写返回的表达式。16 .下列程序段的正确运行结果是?()deffun(m,n): whilem!=n: ifm>n: m=m-n else: n=n-m returnmprint(fun(24,16)A、4B、8C、-8D、2试题编号:20210129-Ify-Oll题型:单选题答案:B难度:容易试题解析:自定义函数fun(m,n)的作用是求m,n两个整数的最大公约数。17 .运行下列程序,输出结果正确的是?()deffun(x,y=5): returnx*ya=fun(10,10)print(a)A、100B、50C、10D、运行出错试题编号:20210129-TR-012题型:单选题答案:A难度:一般试题解析:参数的默认值被替换。18 .如果需要在某函数内部调用上一层的局部变量,则可以使用()关键字。A、LocalnonlocalC、globalDnonglobal试题编号:20210206-xm-012题型:单选题答案:B难度:较难试题解析:仅B可以调用上一层的局部变量19 .在Python程序中,设已定义函数。p,它有一个整型传值参数,一个字符串型传值参数。设x,y为整型变量,Z为字符串型变量,则下列能调用该函数的正确语句是?()A、opop(x,y,z)C、OPX,yD、op(x+y,z)试题编号:20210129-Ify-Ool题型:单选题答案:D难度:一般试题解析:在调用自定函数时需要用到“函数名&比参数表>的方法,且自定义函数OP共有两个参数。20 .下列哪个语句段的时间复杂度最低?()Asif%2=0: x=x*2else: x=x+2=1whilen<=100: x=x+2C、foriinrange(100): forjinrange(10): x=x+2Dxforiinrange(100): forjinrange(i): x=x+2试题编号:20210129-TR-031题型:单选题答案:A难度:较难试题解析:时间复杂度按数量级递增顺序为:常数阶、对数阶、线性阶、线性对数阶、平方阶21 .下列哪个不是PythOn中的内建函数?()A、asc(x)ord(x)C、chr(x)Dxabs(x)试题编号:20210129-Ify-O05题型:单选题答案:A难度:容易试题解析:Python中没有asc(x)这个内建函数,ord(x)函数的作用是返回X对应的ASCIIChr(X)函数的作用是返回X对应的字符,abs(x)函数的作用是返回X的绝对值。22 .关于函数的定义语句,以下几项中正确的是?()A、deff(c=2,a,b):Bxdeff(a,b=2,c):C、deff(*c,*d,a1b):D、deff(a1b,*c1*d):试题编号:20210129-TR-014题型:单选题答案:D难度:一般试题解析:顺序实参必须要放在关键字实参之前,位置参数*args必须要在关键字参数*kwargs前,否则会程序报错。23 .下列关于递归的描述不正确的是?()A、递归函数一定包含条件控制语句B、递归函数一定包含调用自身的语句C、在调用自身函数时需要明确的边界终止条件D、递归算法一般代码简洁,执行效率高,空间复杂度低试题编号:20210129-TR-020题型:单选题答案:D难度:一般试题解析:递归算法一般代码简洁,易于理解,但执行效率较低,空间复杂度高。24,下列哪个不是Python第三方库的pip安装方法?()As使用PiP命令B、使用wheel命令C、集成安装方法D、文件安装方法试题编号:20210128-Ph-O20题型:单选题答案:B难度:一般试题解析:第三方库安装25 .对于下列递归式子,当n=4时,F的值是?()F(n)=F(n-l)+3 F(l)=2A、2B、5C、11D、14试题编号:20210129-TR-021题型:单选题答案:C难度:容易试题解析:用递归式子推导得出。二、判断题(共10题,每题2分,共20分)26 .defadd(a,b1c=0): returna+b+cprint(add(l,2,4)这段程序的运行结果为3o试题编号:20210129-TR-008题型:判断题答案:错误难度:一般试题解析:在调用函数时给函数提供了实参时,PythOn将使用指定的实参值27 .算法复杂度分析的目的是分析算法的效率,以求改进。试题编号:20210131-TR-032题型:判断题答案:正确难度:容易试题解析:28 .sum=0foriinrange(5): sum=sum+iprit(sum)运行以上程序,输出结果是15。试题编号:20210131-TR-025题型:判断题答案:错误难度:较难试题解析:29 .已有函数defdemo(*p):returnsum(p),表达式demo(l,2,3,4)的值为IOo试题编号:20210129-TR-018题型:判断题答案:正确难度:一般试题解析:30 .使用python-mpipinstall-upgradepip命令能够升级pip0试题编号:20210128-Ph-O30题型:判断题答案:正确难度:一般试题解析:31 .在PythOn函数中,局部变量不能与全局变量重名。试题编号:20210129-TR-009题型:判断题答案:错误难度:容易试题解析:当全局变量和局部变量同名时,首先会找程序内部有没有局部变量,如果有,则调用,如果没有,才会去调用全局变量。32 .下列程序段返回的值为"HeIWPythorT。Ist=nHeIIoIPython"deff(): global1st Ist=nHeIIo!" return1stf()print(lst)试题编号:20210205-Ify-OIo题型:判断题答案:错误难度:一般试题解析:1st="HellO!Python" #定义全局变量deff(): globalIst #global关键字的作用是通过局部变量修改全局变量 Ist=nHeIIo!" return1stf()print(lst) #打印全局变量中1st的值33,使用分治算法求解,子问题不能重复。试题编号:20210129-TR-030题型:判断题答案:正确难度:一般试题解析:分治算法的子问题之间不可以包含公共的子问题。34.设计一个程序来求Xn(X的几次方)的值,算法思想是:把Xn转换为x*xn-l,而Xn-I又可以转换为x*xn-2,如此重复下去,直到x*x,而XO=L从而求出了Xn的值。这个程序可以用递归来实现。试题编号:20210205-Ify-O26题型:判断题答案:正确难度:容易试题解析:递归体现了“大事化小,小事化了”的思想,把大问题转换成小问题来解决,且有终止条件,即算法中的到x=l为止。35,下列程序段能正确打印Iodeff(a,b): a=a+b b=a-b a=a-b returnbprint(F(l,4)试题编号:20210207-Ify-017题型:判断题答案:错误难度:容易试题解析:Python中字母区分大小写,所以自定义函数创建和调用时,函数名要一致,否则调用不成功。三、编程题供3题,共30分)36.利用分治思想,给定一个顺序表,编写一个求出其最大值的程序。根据上述算法思想,补全下列代码。输入输出示例:当顺序表是 22,13,34,4,68,15,5,58,36,输出:68deffun_max(num=list): returnmax(num)deffun(num): n= 1 ifn<=2: return &rbsp;&rbsp;2&rbsp;&rbsp;&rbsp; l_list,r_list=num:n/2,numn2: l_max,r_max= 3 returnfun_max( 4 )if_name_="_main_": alist=22,13,34,4,68,15,5,58,36 print(fun(alist)试题编号:20210128-Ph-O37题型:编程题答案:评分标准: len(num) 或等效答案; (2分) fun_max(num) 或等效答案; (2分) fun(List),fun(r_list) 或等效答案; (2分)l_max,Unax 或等效答案;(2分)难度:一般试题解析:参考程序:deffun_max(num=list): returnmax(num)deffun(num): n=len(num) ifn<=2: returnfun_max(num) l_list,rjist=num:n/2,numn2: l_max,r_max=fun(List),fu(rjist) returnfun_max(l_max,r_max)if_name_="_main_": alist=22,13,34,4,68,15,5,58,36 print(fun(alist)37.现有n个人依次围成一圈玩游戏,从第1个人开始报数,数到第m个人出局,然后从出局的下一个人开始报数,数到第m个人又出局,如此反复到只剩下最后一个是胜利者。设n个人的编号分别为1,2.,n,打印出局的顺序。根据上述算法思想,补全下列代码。输入输出示例:当n=10,m=4,输出如下:出局的人是:4出局的人是:8出局的人是:2出局的人是:7出局的人是:3出局的人是:10出局的人是:9出局的人是:1出局的人是:6最后胜利者是:5 deffun(n,k): L=list( 1 ) if=1: return else: x=0 foriin &rbsp;&rbsp;2 &rbsp;&rbsp; x二 3 -1 print(出局的人是:',L冈)  : delLx if×<0: x=O print('最后胜利者是, 4 )fun(10,4)试题编号:20210128-Ph-O36题型:编程题答案:评分标准:range(l,n+l)或等效答案;(3分)range(n-l):或等效答案;(3分)(X+k)%Ien(L)或等效答案;(3分)L或等效答案;(3分)难度:较难试题解析:参考程序:deffun(n,k): L=list(range(l,n+l) if=1: return else: x=O foriinrange(n-l): x=(x+k)%Ien(L)-1 Print出局的人是:',L冈) delL× ifX<0: x=0 Print('最后胜利者是:',L0)fu(10,4)38.设计一个算法,将一个正整数分解质因数。程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 如果这个质数恰等于n,则说明分解质因数的过程已经结束,输出即可。 如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商作为新的正整数n,重复执行第一步。 如果不能被k整除,则用k+1作为k的值,重复执行第一步。根据上述算法思想,补全下列代码。输入输出示例:当n=105,输出:105=3*5*7 当=60,输出:60=2*2*3*5deffun(n): print('%d='%n,end='') foriin 1 : whilen!=i: ifn>iand 2 : print(i,end='*') 3 eIse: break else:  : 4 breakif_name_="_main_": whileTrue: num=input("输入一个正整数:") ifnotnum.isdigit(): break fun(int(num)试题编号:20210128-ph-038题型:编程题答案:评分标准:range(2,n+l) 或等效答案;(3分)n96i=O 或等效答案;(3分)n=ni 或等效答案;(2分) Print(n) 或等效答案;(2分)难度:一般试题解析:参考程序:deffun(n): Print"d='%n,end='') foriinrange(2,n+l): whilen!=i: ifn>iandn%i=0: print(i,end="*') n=n/i eIse: break &nbs