内容正文:
第二章│数组与链表
第2课 数组1——一维数组(见学生用书P5)
——2.1 数据,教材P34~45
1.理解数组的概念和特性。 2.掌握数组的基本操作。
1.数组的概念与特性
(1)数组的概念
①数组是由相同类型的变量构成的一个序列。数组使用__数组名__(标识符)和__下标__(索引)区分数组内的各个变量。由数组名和下标组成数组的各个变量称为数组的分量,即__数组元素__。常用的数组有一维数组和二维数组。
②数组在内存中存储的结构简单,创建数组时系统会分配一块连续的存储空间,每个数组元素按照__下标顺序__依次存储;明确第一个数组元素的存储位置后,可以利用下标计算出其他数组的存储位置,从而达到快速访问的目的。
③一维数组:只有一个__下标__来表示数据元素在该序列中的位置。
(2)数组的特性
①数组元素的数据类型__相同__。
②通过__数组名__和__下标__对数组元素的值进行访问。
③存储空间__固定不变__。
2.一维数组的基本操作
(1)一维数组的创建:在系统内存中划分一块连续区域,用来保存数组所含的所有数据元素。
①在Python中可以使用__列表__来模拟数组。例如,创建一个长度为8的整数型数组,其元素初始值为-1,代码为:__a=[-1]*8__。
②在Python中可以使用列表来创建数组。例如,创建一个长度为8的随机整数数组,元素值在1到8之间,代码为:a=[random.randint(1,8) __for__i__in__range(10)__]。
③数组所占空间大小可以用内置函数len()来获取。
(2)一维数组元素的访问:可通过数组名和下标直接访问数组元素。例如, a[0]表示一维数组a 中的第一个元素。
(3)一维数组元素的插入与删除
①当需要在数组中某个位置插入一个新的数据元素时,必须先将该位置及其后的所有数据元素依次__向后移动__一个位置, 以空出该位置,用于存放新的数据元素。例如,在数组a的1位置插入一个新数据datax,操作图示如下:
②当需要在数组中删除某个位置上的数据元素时,必须将被删除数据元素位置后的所有数据元素依次__向前移动__一个位置。例如,删除数组元素a[1],操作图示如下:
(4)以list1=['Google', 'Runoob', 'Taobao']为例,列表常用函数和方法如下所示:
函数
功能
应用举例
说明
list[start:stop:step]
对列表下标[start,stop)间进行步长为step的提取
list1[1:]
切片后为:__['Runoob','Taobao']__
list.append(obj)
在列表末尾添加新的元素
list1.append('baidu')
添加后为:__['Google','Runoob','Taobao','baidu']__
list.pop([index==-1])
删除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list1.pop(1)
删除后为:__['Google','Taobao']__
list.insert(index,obj)
将相应元素插入列表指定的位置
list1.insert(1,'baidu')
插入后为:__['Google','baidu','Runoob','Taobao']__
1.查找数组a[p]到a[q]之间中的最大值
k=a[p]
for i in range(p+1,q+1):
if a[i]>k:
k=a[i]
print(”a[p]到a[q]间的最大值为”+str(k))
2. 查找数组a[p]到a[q]之间中的最大值下标
k=p
for i in range(p+1,q+1):
if a[i]>a[k]:
k=i
print(”a[p]到a[q]间的最大值下标为”+str(k))
3.计算数组a[p]到a[q]相邻元素差值的最大值
k=a[p+1]-a[p]
for i in range(p+2,q+1):
if a[i]-a[i-1]>k:
k=a[i]-a[i-1]
print(”相邻元素差值的最大值为”+str(k))
4.计算数组a[p]到a[q]相邻元素差值的绝对值最大值
k=abs(a[p+1]-a[p])
for i in range(p+2,q+1):
if abs(a[i]-a[i-1])>k:
k=abs(a[i]-a[i-1])
print(”相邻元素差值的绝对值最大值为”+str(k))
5.查找数组a中所有大于key的元素中的最小值
程序1
程序2
flag=True
for i in range(len(a)):
if a[i]>key:
if flag or a[i]<m:
m=a[i]
flag=False
print(”大于key的元素中的最小值为”+str(m))
a=[12,7,9,13,18,2]
key=10
m=max(a)
for i in range(len(a)):
if a[i]>key and a[i]<m:
m=a[i]
print(”大于key的元素中的最小值为”+str(m))
6.计算数组a中最大连续子序列之和
s=0
ans=0
for i in range(len(a)):
s=s+a[i]
if s>ans:
ans=s
if s<0:
s=0
print(”数组中最大连续子序列之和为”+str(ans))
7.计算数组中连续的最长升序元素个数
程序1
程序2
s=0
ans=0
for i in range(1,len(a)):
if a[i]>a[i-1]:
s+=1
else:
s=1
if s >ans:
ans=s
print(”数组中连续的最长升序元素个数为”+str(ans))
s=0
ans=0
for i in range(1,len(a)):
if a[i]>a[i-1]:
s+=1
else:
if s>ans:
ans=s
s=1
print(”数组中连续的最长升序元素个数为”+str(ans))
8.在数组a的下标p位置插入一个新元素x(实际长度n<len(a))
for i in range(n,p,-1):
a[i]=a[i-1]
a[p]=x
n+=1
9.删除数组a的下标p的元素(实际长度n<len(a))
for i in range(p,n-1):
a[i]=a[i+1]
n-=1
10.数组应用——桶
用数组a存储随机产生的n个数字(0~99),数组tj用于存储每个数字出现的次数
tj=[0]*100
for i in range(0,len(a)): #统计每个数字出现的次数
tj[a[i]]+=1
for i in range(0,100): #输出每个数字出现的次数
print(”数字”+str(i)+”出现的次数为: ”+str(tj[i]))
下列关于数组的说法中,不正确的是( C )
A.数组元素可通过数组名和下标直接访问
B.数组中的数据在内存中是按照下标顺序依次存储的
C.数组元素的访问必须通过第一个数组元素才能逐步找到目标数组元素
D.创建一个数组实质是在系统内存中划分一块连续的区域
【解析】 数组创建后,可以通过数组名和下标直接访问,不需要找到第一个数组元素,选项C错误。
变式1下列事例中的数据不适合使用数组来存储的是( C )
A.全班所有同学的身高信息
B.妈妈在账本上记录每个月的家庭收支情况
C.小明规划暑假自驾游路线,并根据父母的建议对其进行了多次修改
D.评委给参加校园歌手大赛的选手打分
【解析】 数组访问速度快,修改速度慢,选项C不适合。
有如下Python程序段:
list1=[1,6,20,18,16,9]
list2=[6,2,13,3,5]
a1=max(list1)+len(list2)
a2=list1[3]//list2[3]
ans=a1%a2
print(ans)
执行该程序段后,输出的结果是( A )
A.1 B.2 C.3 D.4
【解析】 a1=20+5=25;a2=18//3=6;ans=25%6=1,选项A正确。
变式1有如下Python程序段:
a=[5,2,8,14,3,11]
sum=a[1]+a[3]-a[5]
v=sum%2
if v==1:
print(1-v)
else:
print(-1)
执行该程序段后,输出的结果是( B )
A.1 B.0 C.报错 D.-1
【解析】 sum=2+14-11=5;v=5%2=1;if v==1,条件成立,选项B正确。
有如下Python程序段:
s=1
i=1
for i in [1,9,2]:
s=s+i
s=s+i
print(s)
执行该程序段后,输出的结果是( B )
A.23 B.15 C.12 D.16
【解析】 for循环的作用是将列表中的值累加到s中去,s=13;循环结束后i的值为2,再执行s=s+i,s的值为15,选项B正确。
变式12023·温州中学检测有如下Python程序段:
a=[1,0,2,4]
s=k=0
for i in range(4):
a[i]+=k
s+=a[i]
k=s
print(s)
执行该程序段后,输出s的值为( D )
A.13 B.14 C.15 D.16
【解析】 执行过程如下:
i
0
1
2
3
a[i]
1
1
4
10
s
1
2
6
16
k
1
2
6
16
选项D正确。
有如下Python 程序段:
a=[18,2,-1,-7,16,-2,12,8]
k1,k2=1,1
for i in range(len(a)):
if a[i]>a[k1]:
k2=k1;k1=i
eli f a[i]>a[k2]:
k2=i
执行该程序段后,变量k1,k2 的值分别为( D )
A.2,5 B.4,0 C.5,2 D.0,4
【解析】 分析代码可知,k1 是最大数的下标,k2 是第二大数的下标,选项D正确。
变式1有如下Python程序段:
a=[3,2,1,-8,3,-2,8,6]
s=t=a[0]
for i in range(1,len(a)):
if s>0:
s+=a[i]
else:
s=a[i]
if s>t:
t=s
print(t)
执行该程序段后,输出的结果是( C )
A.6 B.-10 C.15 D.33
i
0
1
2
3
4
5
6
7
a[i]
3
2
1
-8
3
-2
8
6
s
3
5
6
-2
3
1
9
15
t
3
5
6
6
6
6
9
15
选项C正确。
变式2有如下Python程序段:
a=[1]*6
b=[96,88,84,91,99,80]
for i in range(6):
for j in range(i+1,6):
if b[j]>b[i]:
a[i]+=1
else:
a[j]+=1
print(a)
执行该程序段后,数组a的值为( B )
A.[5,3,2,4,6,1] B.[2,4,5,3,1,6]
C.[10,6,4,8,12,2] D.[4,8,10,6,2,12]
【解析】 这是一个排名程序,统计各个元素在数列中的位次,选项B正确。
变式32023·湖州中学检测有如下Python 程序段:
def days(y,m,d):
md=[31,28,31,30,31,30,31,31,30,31,30,31]
ans=y*365+y//4-y//100+y//400
for i in range(m-1):
ans+=md[i]
if (y%4==0 and y%100!=0 or y%400==0) and m>=3:
ans+=1
ans+=d
return ans
print(days(2023,2,9)-days(2022,11,29))
执行该程序段后,输出的结果是( B )
A.71 B.72 C.73 D.74
【解析】 计算日期之间的天数差,通过调用函数days(),将日期转换成为天数,函数中遍历月份,累加天数,通过“(y%4==0 and y%100!=0 or y%400==0)and m>=3”考虑闰年情况。days(2023,2,9)返回值为365*2023+31+9,days(2022,11,29)返回值为2022*365+333,相减365-333+31+9=72,选项B正确。
变式4已知数组a存储了10位学生的身高信息(范围为150 cm~190 cm),现要找出所有身高超过170 cm学生中最矮的那位学生的编号及其身高数据,运行结果如图所示:
实现上述功能的Python程序如下:
from random import randint
a=[randint(150,190) for i in range(10)]
if max(a)<171:
print(”所有人身高均小于171! ”)
else:
f=True;k=0
for i in range(10):
if a[i]>170:
if :
k=i
f=False
print(a)
print(”下标为”,k,”号, 身高为”,a[k])
程序中加框处代码有误,正确的代码为( B )
A.a[i]<a[k] B.a[i]<a[k] or f==True
C.a[i]<a[k] and f==True D.a[i]<k or f==True
【解析】 本题的思路是遍历数组找到大于170的最小值,k来存储找到的最小值的下标,初始k=0,即把a[0]当成是大于170的最小值,然后遍历后面的元素。如果还有比a[k]更小的,更新k。但若只写选项A的a[i]<a[k]时,若a[0]是整个数组中最小值(比170还小),则后面再也没有比其小的了,就会导致k不能更新而输出错误信息。故增加一个标记变量f,当第一次遇到大于170的,不管其是否比a[k]小还是大,都让k指向它。即先找到第一个大于170的数, 让k指向它, 后面再找是否有比这个更小的。故选项B正确。
有如下Python程序段:
import random
a=[0]*4;i=0
while i<4:
a[i]=int(random.random()*10+1)*2
if i%2==1:
a[i]=a[i]+a[i-1]
elif a[i]%3==0:
i-=1
i+=1
执行该程序段后,数组a中各元素的值可能是( B )
A.2,4,6,8 B.4,6,2,20 C.8,10,4,26 D.10,16,28,40
【解析】 代码“a[i]=int(random.random()*10+1)*2 ”生成的是[2,20]范围内的随机偶数,其中当i 为奇数时,a[i]为a[i]与a[i-1]的和,其中选项C、D 中a[3]-a[2]的值都为22,超过了a[i]生成的范围,故选项C、D 不正确;当i 不为奇数时,若a[i]%3==0,即a[i]能被3 整除时,重新生成a[i],其中选项A 中a[2]的值为6,能被3 整除,故选项A不符合题意。
变式1有如下Python程序段:
import random
a=[0,0,0,0,0]
i=0
while i<=4:
a[i]=random.randint(5,10)*(2-i%2)
for j in range(i):
if a[j]==a[i]:
i=i-1
break
i=i+1
执行该程序段后,数组a的值为( A )
A.[14,10,20,9,16] B.[12,9,20,10,15]
C.[5,14,8,10,6] D.[10,16,6,12,8]
【解析】 偶数索引位上的值的范围为10,12,14,16,18,20;奇数索引位上的值的范围为5,6,7,8,9,10,选项A正确。
变式22023·嘉兴一中检测有如下Python程序段:
import random
n=8
a=[random.randint(0,9) for i in range(n)]
for t in range(2):
i=t+1
while i<n-1:
if t%2==0:
if a[i-1]<a[i] and a[i]>a[i+1]:
i+=2
else:
a[i]+=random.randint(0,9)
else:
if a[i-1]>a[i] and a[i]<a[i+1]:
i+=2
else:
a[i]-=random.randint(0,9)
执行该程序段后,数组a的值可能是( C )
A.[8,8,3,5,4,7,3,5] B.[5,11,10,18,8,9,0,2]
C.[1,2,1,4,0,10,-1,7] D.[7,12,5,17,9,19,-10,8]
【解析】 数组a 初始有8 个元素,元素值的范围是[0,9]。外层t 的循环为2 次,第一次循环i 从索引1 开始,满足中间元素比两边元素大(a[i-1]<a[i]>a[i+1])时i 才会往后移动两个位置,否则重新产生a[i]的值,也就是索引1、 3、 5 位置上的值都是比两边相邻元素的值大。t 的第二次循环i 从索引2 开始,满足中间元素比两边小(a[i-1]>a[i]<a[i+1])时i 才往后移两个位置,否则重新产生a[i]的值,也就是索引 2、 4、 6 位置上的值都是比两边相邻元素的值小。选项A中有相等元素,应排除。另外从索引1、 3、 5 位置上的大值看,最大只会是9+9=18(最小是初始产生的0),从索引 2、 4、 6 位置上的小值看,最小只会是0-9=-9(最大时初始产生的9),因为一旦大于两边或者小于两边的值,i 的值就会往右移动。因此B 项中的小值“10”是不可能出现的,选项D中的小值“-10”也不可能出现。选项C正确。
将有序数组nums 中的重复项删除,编写Python 程序段如下:
n=len(nums);i=1
while i<n:
if nums[i]!=nums[i-1]:
k+=1
i+=1
nums=nums[:k]
上述程序段中加框处可选的代码有:
①k=0 ②k=1 ③nums[k]=nums[i] ④nums[i-1]=nums[i]
下列选项中,代码顺序正确的是( C )
A.①③ B.①④ C.②③ D.②④
【解析】 本题的思路是:从第二个字符开始遍历有序字符串s 的各个字符,若前后相邻两个字符不相等,把当前字符重新赋值到字符串s 中,此时的索引用k 来表示,若前后两个字符相等,则跳过当前字符,不组合。
从气象学上来说,连续5天日平均气温稳定在10 ℃~22 ℃之间,才算是进入春天,其中5天中的第一天即为入春日。小范收集了某年2月每日的最高气温和最低气温(如下表所示),并使用Python语言编写程序判断哪一天为入春日。
日期
1
2
3
4
5
…
25
26
27
28
最高气温(℃)
10
7
17
12
9
…
14
9
11
14
最低气温(℃)
5
4
5
7
6
…
8
8
9
10
(1)小范先进行了抽象建模与算法的设计,请将下面的内容补充完整。
已入春的标志是连续5天的日均气温在10 ℃~22 ℃。假设第i天(i从1开始)的最高气温为high,最低气温为low,先计算日平均气温ave=(high+low)/2,然后判断ave值是否在[10,22)范围内。若是,则计数器t加1,否则计数器t__清0__或其他等价答案__。若计算器t的值达到5,则表示已入春,而入春日则为第__i-4__天(用变量i表示)。
(2)根据上述算法编写程序如下:
high=[10,7,17,12,9,19,20,8,11,10,9,12,16,21,13,15,7,11,20,25,26,26,15,15,14,9,11,14] #存储2月份从1~28号的最高气温
low=[5,4,5,7,6,5,7,2,6,8,7,7,9,8,5,0,0,2,7,7,10,6,5,9,8,8,9,10] #最低气温
t=0
for i in range(len(high)):
ave=①____________
if 22>ave>=10:
t+=1
if②____________:
print(i-4,”号入春啦! ”)
break#跳出循环
else:
t=0
if :
print(”还未入春! ”)
运行结果如下图所示,则①、②处填入的代码应为:
①__(high[i]+low[i])/2__;②__t==5__。
(3)程序中存储气温数据的数据结构是__列表__(选填:字符串/列表/字典)。
(4)当温度数据换成其他城市后,程序运行后可能会出现没有任何输出结果的情况,分析程序加框处代码,出现这一情况的原因是__①日平均气温满足条件的连续天数至少为1__次但未达到5__次__;为了避免此类情况发生,需将加框处代码改为__②t!=5__或t<5__。
(5)根据2012年出台的气象行业标准,春季的划分指标为日平均气温或滑动平均气温大于或等于10 ℃且小于22 ℃。其中,滑动平均气温值是以当天和前4天这5个数据为一组求取的平均值,当滑动平均气温序列连续5天大于或等于10 ℃且小于22 ℃时,则从计算这5个滑动平均气温值所对应的9天日平均气温数据中,选取第一个达到入春指标的日期,作为春季起始日。若某地3月的8~18日的气温数据如下,则根据滑动平均气温标准,春季起始日为__10__号。
日期
8
9
10
11
12
13
14
15
16
17
18
日平均气温(℃)
7.5
9.5
12.5
9
12
11
13.5
10.5
10
7
7.5
滑动平均气温(℃)
6.1
5.7
7.2
8.7
10.1
10.8
11.6
11.2
11.4
10.4
9.7
【解析】 (1)变量t 用于存储连续日均气温在10 ℃~22 ℃的天数,当ave 不在[10,22)范围内时,即符合条件的天数应重置为0,故第1 空为清0。当t=5 时,说明当前第i 天恰好是符合条件的第5天。根据题意可知,前面第4 天就是入春的第1 天,故第2 空中应填入i-4。
(2)变量ave 为日平均气温,应为当日最高气温与最低气温的差值,最高气温存储在列表high 中,最低气温存储在列表low 中,所以第i 天的日均气温为ave=(high[i]+low[i])/2。由“print(i-4,”号入春啦! ”)”可知,当前的条件应为判断入春的条件,该条件是既要当天平均气温ave 满足22>ave>=10,又要持续天数t 为5,故填空②处应填入t==5。
(3)存储气温时用[]进行标识,说明是列表;若为字符,则以单引号、双引号、三引号标识;若为字典,则以{}进行标识。
(4)用t 统计日平均气温满足条件的连续天数,会出现1<=t<5 的情况,在该情况下代码中没有进行输出处理。当1<=t<5 时,代表没有入春,故加框处的代码应修改为t!=5 或t<5。
(5)根据题意,12 日至16 日连续5 天的滑动平均气温值符合大于或等于10 ℃且小于22 ℃的要求,则从第1个符合条件的12 日起要向前找4 天,该4 天中第1 个大于或等于10 ℃且小于22 ℃的日期即为入春日期,故本小题应为10 号。
变式12023·长兴中学检测编写Python程序,实现功能:输入年月日判断是当前年份的第几天。例如:2020年3月1日是这一年的第61天。(提示:普通闰年是指是4的倍数且不是100的倍数的公历年份;世纪闰年是指是整百数且必须是400的倍数的公历年份)
def leap(m):#判断是否是闰年
if m%400==0 or ①__m%100!=0__ and m%4==0:
return True
else:
return False
year=int(input(”请输入4位数字的年份: ”))
month=int(input(”请输入月份: ”))
day=int(input(”请输入日: ”))
monthdays=[0,31,28,31,30,31,30,31,31,30,31,30]
if ②__month>2__或month>=3__ and leap(year):
sum=1
else:
sum=0
for i in range(month):
sum=③__sum+monthdays[i]或monthdays[i]+sum____
sum=sum+day
print(year,”年”,month,”月”,day,”日是这一年的第”,sum,”天”)
(1)请在横线处填入合适的代码。
(2)若日期是2022年4月18日,则这日是这一年的第__108__天。
【解析】 (1)①判断是否是闰年,根据文字描述“公历年份是4的倍数且不是100的倍数”得到;②只有月份大于2月的才需要考虑闰年;③将月份的天数累加到总天数sum中。
(2)2022年不是闰年,则31+28+31+18=108。
|随|堂|检|测|
1.有如下Python程序段:
list1=[6,6,17,20,2,9]
list2=[12,2,3,3,5]
p1=max(list1)+len(list2)
p2=list1[3]//list2[3]
ans=p1%p2
print(ans)
执行该程序段后,输出的结果是( B )
A.0 B.1 C.2 D.3
【解析】 p1=20+5=25;p2=20//3=6;ans=25%6=1,选项B正确。
2. 有如下Python程序段:
a=[9,5,2,3,0,-9,5,0,7,-10]
s,i=0,0
while a[i]!=0 and i<len(a):
s+=1
i+=1
执行该程序段后,s 的值为( A )
A.4 B.5 C.8 D.10
【解析】 由循环条件可知,当a[i]==0时,循环结束;程序的作用是统计遇到0之前的数据个数,选项A正确。
3.有如下Python程序段:
L=[1,-2,3,7,-8,9,10]
j=len(L)-1
i=0
k=0
while i<j:
while L[i]>0:
i=i+1
while L[j]<0:
j=j-1
if i<j:
k=L[i]
L[i]=L[j]
L[j]=k
print(L[6])
执行该程序段后,输出的结果是( C )
A.3 B.9 C.-2 D.-8
【解析】 程序的作用是将大于0的数据放在左侧,小于0的数据放在右侧,程序结束后的列表L为[1,10,3,7,9,-8,-2],选项C正确。
4.2023·新昌中学检测有如下Python程序段:
import random
a=[0]*6
for i in range(6):
x=int(random.random()*10)+1
if i%2==1:
a[i]=2*x+1
elif x%2==0:
a[i]=x//2
else:
a[i]=x-1
print(a)
执行该程序段后,数组a中各元素的值可能是( A )
A.3,11,4,19,2,13 B.3,11,7,9,2,3
C.9,3,1,23,4,17 D.3,3,9,0,19,8
【解析】 当i为奇数时,执行a[i]=2*x+1;当i为偶数且x是偶数时,执行a[i]=x//2;当i为偶数且x是奇数时,执行a[i]=x-1;得知i为偶数时,出现奇数值,只能是由x//2得到。选项B,7出现在i为偶数时,则x是14或15,随机数无法产生,选项错误;选项C,23出现在i为奇数时,23=11×2+1,x无法出现11,选项错误;选项D,7出现在i为偶数时,则x是18或19,无法产生,选项错误。
5. 数组a中n个元素互不相等,要分别显示其中的最大值和第二大值。实现该功能的Python程序段如下:
if a[0]>a[m1]:
m1=0;m2=1
else:
m1=1;m2=0
for i in range(2,n):
if a[i]>a[m1]:
①____________
②____________
elif a[i]>a[m2]:
m2=i
print(”最大值和第二大值分别是: ”,a[m1],a[m2])
上述程序段中①、②处填入的代码分别为( C )
A.①m1=i ②m2=m1 B.①m1=m2 ②m2=i
C.①m2=m1 ②m1=i D.①m2=i ②m1=m2
【解析】 m1、m2记下最大值和第二大值的位置,当新数比最大值大时,则原来的最大值变为第二大值,再更新最大值,选项C符合题意。
6.2023·北仑中学检测水往低处流,下雨时道路上的低洼地总会有积水。现利用一组数据表示某地面的高度变化,高度值为正整数,相邻高度用直线连接,请设计程序统计出该地面有多少处低洼地。
(1)用计算机编程解决问题的一般过程包括①编写程序、②抽象与建模、③设计算法和④调试运行程序,正确的顺序应该是__②③①④__。
(2)算法实现中会遍历每一个地面高度数据,合适的算法控制结构是__C__。
A.顺序结构 B.分支结构 C.循环结构 D.树形结构
(3)若地面高度数据为[0,1,0,2,1,2,0,0,2,0],则该地面有__3__处低洼地。
(4)实现上述功能的Python程序如下,请在横线处填入合适的代码。
import random
n=int(input(”请输入地面高度值个数: ”))
dm=[0]*n
for i in range(①__n__): #随机生成n 个地面高度数据
dm[i]=random.randint(0,5)
print(”地面高度数据: ”,dm)
cnt=0
f=False
for k in range(1,n): #判断低洼地的数量
if :
f=True
elif dm[k-1]<dm[k] and f==True:
②__cnt=cnt+1__
f=False
print(”该地面有”,cnt,”处低洼地。 ”)
(5)程序中加框处代码有误,请改正:__dm[k-1]>dm[k]__。
【解析】 (1)根据教材可知答案。
(2)多个节点依次判断适合循环结构。
(3)1,0,2;2,1,2;2,0,0,2;共有3处低洼地。
(4)程序整体:遇到下坡时,将标志f设为True;遇到上坡且f为True时,找到一处洼地。①共有n个数据需要产生;②满足条件,计数加1。
(5)由range(1,n)可知,要与前一个数据比较。
学科网(北京)股份有限公司
$$