内容正文:
3.3 简单算法及其程序实现
一、选择题
1.已知,,当时, 。求的值。解决该问题最为合适的算法是( )
A.枚举算法 B.排序算法 C.查找算法 D.递归算法
2.某Python程序如下:
s=input("请输入字符串:")
ans=0
for i in s:
if "a"<=i<="z":
ans+=2
elif "A"<=i<="Z":
ans+=1
print(ans)
程序运行后,输入“P3fhYT8X”,输出的结果是( )
A.3 B.7 C.11 D.8
3.所谓“水仙花数”是指这样一个三位数,其各位数字的三次方之和等于该数本身。例如:153=13+53+33,故153是水仙花数。下面的Python 程序用于输出100到999之间的水仙花数,程序中第5行下划线处应填写的代码是( )
1 for i in range(100,100):
2 b = i// 100 #百位
3 s = i // 10 % 10 #十位
4 g = i % 10 #个位
5 if :
6 print(i)
A.i==b**3+s**3+g**3 B.i==b**2+s**2+g**2 C.i==b*3+s*3+g*3 D.i==b*2+s*2+g*2
4.下面Python程序运行后,变量m,n的值分别是( )
n,m=7,4
if n>m:
n=m
m=n
A.4,4 B.7,7 C.7,4 D.4,7
5.小明要编写一个程序,能实现对用户输入的数据,判断其为奇数还是偶数,请你帮他完成以下代码:在“if( )”处补充代码( )
n=int(input("请输入一个数: "))
if( ):
print("这是一个偶数")else:
print("这是一个奇数")
A.n/2==0 B.n//2==0 C.n%2==0 D.n%10==0
6.数组元素a[0]至a[n-1]依次存放着n个数据,现需要将元素a[0]插入在下标为:x(0<x≤n-1)的位置,例如:n为5,数组a为[0,3,4,6,7],x为2,插入操作后a为[3,4,0,6,7]。实现该功能的部分程序段如下:
i=0;temp=a[0]
while i<x:
i+=1
a[x]=temp
则方框中应填入的正确代码为( )
A.a[i+1]=a[i] B.a[i-1]=a[i] C.a[i]=a[i-1] D.a[i]=a[i+1]
7.有如下Python程序段:
import random
s=''
for i in range(1,4):
k=random.randint(1,4)
ch=chr(65+k)
s+=ch
print(s)
执行该程序段后,输出的结果可能是( )
A.BCCD B.EEE C.BEF D.ECBF
8.某算法的部分流程图如下图所示,执行这部分流程,则输出s的值是( )
A.6 B.10 C.15 D.21
9.有如下 Python 程序段:
a=[2,2,6,1,8,5,3,6,4,3,6,4,9,5,3]
dic={}
for i in a:
if i not in dic:
dic[i]=0
else:
dic[i]+=1
执行该程序段后,dic[3]的值为( )
A.1 B.2 C.3 D.4
10.有如下Python程序段:
sl=''1324'';s2="abcdefgh''
j,m=0,0
c=""
for i in s2:
k=int(s1[j])
c+=s2[m+k]
j+=1
ifj>3:
j=1
m=m+2
print(c)
运行程序,输出结果是( )
A.acbdefeg B.bdcefegh C.bcdefegh D.bdceefgh
11.运行下面Python程序,从键盘输入781,运行结果为( )
x=lnt(input("请输入一个正整数:"))
if x%2==0:
print(x,"是偶数")
else:
print(x,"是奇数")
A.是偶数 B.是奇数 C.781是偶数 D.781是奇数
12.有如下visual basic程序:
private Sub command1_Click()
s=0
If s<=99 then
For j=1to 10
s=s+j
Next j
Else
print “程序出错!”
Endif
print “最后的s的值是:”;s
End Sub
关于该程序的控制结构的说法不正确的是( )
A.顺序结构包含了选择和循环结构
B.选择结构是由块条件语句构成
C.选择结构包含了循环结构
D.循环结构包含了选择结构
二、操作题
13.老师收集了5次技术考试成绩,分别以考试名称为文件名存放在5个文件中,如图1所示。每次考试的数据结构如图2所示,同一学生的学号相同,某次考试不参加则无该学生记录。所有学生数据存放在“名册. xlsx”中,如图3所示,考试数据和名册文件均按学号升序排列。为分析每个学生考试名次的波动情况,编写Python程序,请回答下列问题:
(1)定义merge函数,功能为:读取各次考试的成绩,合并到一个DataFrame对象。程序代码如下,请在画线处填入合适的代码:。
import pandas as p
def merge (df, tests):
n = len (df)
for test in tests:
tmp = pd. read _ excel (test + "xlsx ")
df [test] = 0 #在df最后插入一列,值均为0
i = j = 0
while i < len (tmp):
if tmp [ "学号 "] [i] = = df [ "学号 "] [j]:
j + = 1
return df
(2)计算每个同学各次考试的名次并绘制折线图,如图4所示,部分Python程序如下,请在画线处填入合适的代码。
import matplotlib. pyplot as plt
plt. rc ( "font ", family = "kaiti ") #显示中文
tests = [ "期中考 ", "期末考 ", "一模 ", "二模 ", "三模 "] #存储5次考试名称
df = pd. read _ excel ( "名册. xlsx ")
df = merge (df, tests)
n = len (df)
for test in tests:
df [test + "名次 "] = 0
for i in range ( )
s=0
for j in range (n):
if df [test][j]>df [test][1]:
s+=1
df [test + "名次 "][i]=
while True:
no = input ( "输入学号 ")
if no = = " ":
break
rec = df [df. 学号 = = int (no)]
if len (rec)>0:
plt. plot ( , rec. values [0][7:])
plt. title (rec. values [0][1] + "历次考试名次波动图 ")
plt. show ()
(3)从图4可以看出,该同学成绩一次比一次 (选填:差/好)。
14.小球从5米高度自由落下,每次落地后反弹回原高度的一半,再落下。求它在第10次落地时,共经过多少米?
程序代码如下:
h=5
s =5
for i in range(2,11):
#第1次已经计算在内,从第2次开始计算
s = ______________
h = h/2print(s)
请补全程序:
15.猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个:第二天早上将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半多一个,到第10天早上想再吃时,只剩下一个桃子了。问第一天共摘了多少桃子?
【算法分析】逆向思维:猴子原有一个桃子,先借来一个桃子,觉得不够又借来了与手上等量的桃子。一共借了9天。
根据以上算法分析,补全以下程序代码:
peach = 1
for i in range(9):
peach= (__________)*2
print (peach)
请补全程序:
三、填空题
16.用Python表达式补充完成如下程序,统计四位奇数中满足能被23和19整除的总数。
s=0
for i in range(1001,10000,2):
:
s=s+1
print(s)
17.将高级语言源程序翻译成机器语言通常有 和 两种方式。
18.小申设计了一个算法,能够根据输入的三条线路的距离,找出最短距离,请将流程图空白处填写完整:① ② ③
19.阅读下列程序,写出运行结果
i = 0
sum = 0
t = 1
while sum < 10:
i = i+ 1
t=t*i
sum = sum + tprint(sum)
运行输出结果是:
四、判断题
20.用自然语言来描述算法,比用流程图来描述算法更清晰、简洁。( )
21.编程也属于编码,是运用程序设计语言实现人机交互提高计算机应用效率,为实现操作程序化要求所进行的编码。( )
22.Do While循环也可以设置空循环或死循环。( )
23.下列程序段中,赋值语句s=s+i被重复执行了4次。
s=0
For i in range(3,10,2):
s=s+i ( )
试卷第1页,共3页
试卷第1页,共3页
学科网(北京)股份有限公司
参考答案:
1.D
【详解】本题考查算法相关内容。枚举算法通过列举问题所有可能的解,并逐一检查每个解是否满足问题的条件。排序算法是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。查找算法是在大量的信息中寻找一个特定的信息元素的方法,它是计算机应用中常用的基本运算之一。递归算法是指一种通过重复将问题分解为同类的子问题而解决问题的方法。由“ f(n)=2f(n−1)+3f(n−2)”知,该算法为递归算法。故本题答案是D选项。
2.D
【详解】本题考查程序分析。程序功能读取字母,小写字母ans+=2。大写字母ans+=1。读取P,ans值为1,读取f、h,ans值为5,读取Y、T,ans值为7,读取X,ans值为8。故正确答案为选项D。
3.A
【详解】本题主要考查Python程序的调试。所谓“水仙花数”是指这样一个三位数,其各位数字的三次方之和等于该数本身。Python程序中,幂运算符是“**”,故此处填i==b**3+s**3+ g**3,故本题选A选项。
4.A
【详解】本题考查的是Python选择语句。初始n=7,m=4。n>m成立,执行n=m=4,m=n=4。故选A。
5.C
【详解】本题考查Python分支结构。在这段程序中,我们需要判断输入的正整数x是否为偶数。根据整数的奇偶性质,一个整数除以2的余数为0时,它就是偶数。因此,我们可以使用取余运算符(%)来判断x是否能被2整除,如果余数为0,则x是偶数,否则是奇数。C选项正确。
6.D
【详解】本题考查的是列表插入操作。先将a[0]存储到temp,然后依次将下标为x的之前元素往前移动,最后将temp存储到a[x]中,故方框中应填入的正确代码为:a[i]=a[i+1],选D。
7.B
【详解】本题考查的是Python循环语句及随机函数。由range(1,4)可知,s中只有三个字符,选项AD错误;random.randint(1,4)生成1到4的随机整数,结合ch=chr(65+k),可知ch字母可能为BCDE中的一个,选项C中含有F不可能,故选B。
8.B
【详解】本题考查算法流程图知识,该流程图实质是计算“1+2+3+4”的值。故选B。
9.B
【详解】本题考查的是Python字典及循环语句。阅读程序可知,依次读取列表a中的值,如果读取的值是第一次出现,则创建以该值为键,值为0的字典,否则以该值为键的值加1。3在列表中出现3次,第一次出现字典中值为0,执行两次加1,故最后值为2。选B。
10.B
【详解】本题考查程序分析。程序代码运行过程:
k=1 j=1 m=0 c=b
k=3 j=2 m=0 c=bd
k=2 j=3 m=0 c=bdc
k=4 j=1 m=2 c=bdce
k=3 j=2 m=2 c=bdcef
k=2 j=3 m=2 c=bdcefe
k=4 j=1 m=4 c=bdcefeg
k=3 j=2 m=4 c=bdcefegh
故程序运行的最后变量c的结果为bdcefegh,故正确答案为选项B。
11.D
【详解】本题考查的是Python选择结构。从键盘输入781,即x=781, x%2=1,故执行 print(x,"是奇数."),输出:781是奇数。故选D。
12.D
【详解】本题考查控制结构。该程序中的循环结构(For...Next)并没有包含选择结构。故答案为:D。
13. df. at [j, test] = tmp. at [i, "成绩"] n s+1 tests 差
【详解】本题考查的是数据分析。
(1)由题意可知,当下是要将每一次的成绩汇总到df当中,df初始只有学号、姓名两列,接下来在for循环中依次添加["期中考","期末考","一模","二模","三模"]列。while循环的作用主要是防止有部分同学没有参加考试,此时他的成绩是没有的,当学号对上则说明有该同学,需要将当前行列的同学的成绩添加上,结合程序df[test]=0可知,新列列标签为test,因此答案为df. at [j, test] = tmp. at [i, "成绩"]。(2)依次去求每一次考试的名次,最外围的for循环一共五次,表示五次考试的名次列。第二个for循环表示每一位同学,第三个for循环用来求所有大于当前同学的成绩有多少个,用s来表示计数,因此第一空答案为n,表示每一位同学,第二空答案为s+1,表示当前同学的名次;第三空用来画图表。(3)由图表可知,成绩名次越来越靠后,由此得知成绩在变差。
14.s+h
【详解】本题考查的是Python循环语句。每次落地后反弹回原高度的一半,再落下,即从上一次落地开始到下一次落地经过的路程刚好是上一次的高度h,共经的路程为:前面经过的路程+本次经过的路程。故横线上代码应为:s+h。
15.peach+1
【详解】本题考查的是Python循环语句。由逆向思维:先借来一个桃子,觉得不够又借来了与手上等量的桃子。可知横线上的代码应为:peach+1
16.if i %23==0 and i %19 ==0
【详解】本题考查的是Python循环与选择语句。通过循环变量i遍历所有四位数的奇数,判断能否被23和19整除,只要看除完后的余数是否为0,故画线处代码为:if i %23 == 0 and i %19== 0。
17. 解释 编译
【详解】本题考查程序的描述。将高级语言源程序翻译成机器语言通常有解释和编译两种方式。
18. a<b a<c
b<c
【详解】本题考查算法流程图选择结构程序设计相关内容。分析题意可知,该流程图的作用是求取三个正整数的最小值。结合求最小值方法和该流程图示意,可得答案:①a<b;②a<c;③b<c。答案不唯一,其他能得出正确结论的表达式也可以。
19.33
【详解】本题考查的是Python循环语句。阅读程序可知,计算的是:sum=1+1*2+1*2*3+……,当sum值大于等于10时停止。sum值为:1,3,,9,33……。故运行结果为33。
20.错
【详解】本题考查的是算法描述。流程图是一种传统的算法表示法,它用一些图框来代表各种不同性质的操作,用流程线来指示算法的执行方向。由于它直观形象,易于理解,所以应用广泛,特别是在语言发展的早期阶段,只有通过流程图才能简明地表述算法。故题干中的说法是错误的。
21.正确
【详解】本题主要考查程序编写。编程也属于编码,是运用程序设计语言实现人机交互提高计算机应用效率,为实现操作程序化要求所进行的编码,表述正确。
22.正确
【详解】本题考查循环。空循环代表循环体没有执行语句。死循环循环条件永远为true。故正确
23.正确
【详解】本题考查的是Python的range函数。range(start, stop [,step]) ;start 指的是计数起始值,默认是 0;stop 指的是计数结束值,但不包括 stop ;step 是步长,默认为 1,不可以为 0 。range() 方法生成一段左闭右开的整数范围。range(3,10,2)生成的列表为[3,5,7,9],故题干中的说法正确。
答案第1页,共2页
答案第1页,共2页
学科网(北京)股份有限公司
$$