三、 抽象数据类型课时练(学生版+教师版) 2025-2026学年高中信息技术 选择性必修1 数据与数据结构

资源下载
  1. 二一教育资源

三、 抽象数据类型课时练(学生版+教师版) 2025-2026学年高中信息技术 选择性必修1 数据与数据结构

资源简介

三、 抽象数据类型
1. 下列关于抽象数据类型的说法,错误的是( D )
A. Python的字符串类型就是一个抽象数据类型
B. 抽象数据类型是指一个数学模型及定义在该模型上的一组操作
C. 抽象数据类型还可以是编程者在程序设计时使用的函数
D. 定义一个抽象数据类型,只需清晰地表述出各方面的形式要求即可
【解析】 本题考查对抽象数据类型的理解。定义一个抽象数据类型,需要清晰地表述出各方面的形式要求(如操作的名字、参数的个数和类型等)和功能要求(希望这个操作完成什么样的计算或产生什么效果等)。D符合题意。
2. 在Python程序设计语言中,有如下语句:
a=13
b=10
c=a+b
print(c)
下列说法中,错误的是( D )
A. 语句“a=13”在给变量a赋值的同时也定义了其数据类型为整型
B. “+”操作在整型类中已经定义,编程者不必关心计算机如何实现“+”操作
C. 该编程语言中的其他数据类型的运算操作,都可以抽象出来
D. 语句“b=10”中的“=”操作在程序设计语言中没有定义,需要编程者自己编程实现
【解析】 同“+”等操作一样,“=”操作在Python程序设计语言中已经定义,编程者不必自己编程实现,D符合题意。
3. 下面是一个简单的ADT:
class jdage():
  def _ init_ (self,name,age):
    #初始化属性name和age
    self.name=name
    self.age=age
  def jd(self):
    if self.age<18:
      print(self.name+"还未成年。")
    else:
      print(self.name+"已成年。")
my_stu=jdage( Peter ,22)
my_stu.jd()
下列关于该抽象数据类型实例的说法,错误的是( D )
A. 创建的类名称为jdage
B. my_stu为jdage类的一个对象
C. 代码执行后的结果为“Peter已成年。”
D. def jd(self)的功能是定义jd函数
【解析】 本题考查抽象数据类型(ADT)的组成。def jd(self)的功能是定义jg操作,而不是函数,D符合题意。
4. 抽象数据类型的三个组成部分分别为( C )
A. 数据项、数据元素和数据类型
B. 数据元素、数据类型和数据结构
C. 数据对象、数据关系和基本操作
D. 数据元素、逻辑结构和存储结构
【解析】 本题考查抽象数据类型(ADT)的知识。根据ADT的定义可知,抽象数据类型的三个组成部分分别为数据对象、数据关系和基本操作,C正确。
5. 下面给出了字符串抽象数据类型的部分描述信息:
ADT String:
  String(self,sseq)#基于字符串序列sseq建立一个字符串
  is_empty(self)  #判断字符串是否为空串
  len(self)  #取得字符串的长度
  char(self,index)#取得字符串中位置在index的字符
  substr(self,a,b)#取得字符串[a:b]的子串,左闭右开区间
  ……
现有一字符串对象s,请回答下列问题:
(1)根据字符串抽象数据类型的描述,若要获取字符串[x:y](左闭右闭)区间内容的子串,正确的调用方式为 substr(s,x,y+1) 。
(2)基于字符串序列sseq建立一个字符串的操作String(s,sseq),可以理解为对字符串s的初始化操作,初始值为 sseq 。
(3)当s="" 时,is_empty(s)的返回值为True,则当s= "abc123"时,is_empty(s)的返回值为 False ,len(s)的返回值为 6 。
(4)当要调用char方法时,需要提供的参数个数为 2 。
【解析】 (1)根据ADT描述,从字符串中获取子串的操作为substr,需要三个参数,第一个为字符串本身s,第二、三个参数分别为子串的开始位置和结束位置的下一个位置。(2)由于操作String(s,sseq)的作用是基于字符串序列sseq建立一个字符串s,所以s的初值为sseq。(3)操作is_empty(s)的作用是判断字符串是否为空,当字符串为空时返回True,非空时返回False;操作len(s)的作用是返回字符串s的长度,所以len(s)的结果为6。(4)根据ADT描述,操作char(self,index)调用时需要两个参数,第一个参数为字符串本身,第二个参数为位置。
6. 用抽象数据类型实现队列操作的代码如下,请回答下列问题:
class Queue:
def _ init _ (self):
  self.queue=[]
def isEmpty(self):
  return self.queue==[]
def enqueue(self,data): #入队操作
  ① self. queue. insert(0,data) 
def dequeue(self): #出队操作
  if len(self.queue):
    ② return self. queue. pop() 
def size(self):  #测试队列长度
  return len(self.queue)
q=Queue()
q.enqueue(8)
q.enqueue(9)
q.enqueue(10)
while not q.isEmpty():
  print(q.dequeue(),end=" ")
(1)程序运行后,输出的结果是 8 9 10 。
(2)请在画线处填入合适的代码。
【解析】 本题考查用抽象数据类型表示队列操作。①队列的特点是先进先出,元素入队时是从队列的首部插入,故此处代码为self. queue. insert(0,data)。②此处代码为出队操作,通过pop()方法实现,将元素从队尾取出,故此处代码为return self. queue. pop()。
7. 创建一个ADT,实现如下功能:输入一个18位的公民身份号码,输出拥有该公民身份号码的人的性别。
判断方法:根据公民身份号码的第17位数字来判断,若是奇数,则表示为男士;若是偶数,则表示为女士。
程序运行界面如图所示:
请输入公民身份号码:330425198202261156
公民身份号码为:330425198202261156是位男士
实现上述功能的代码如下,请回答下列问题:
class sexpd:
def_init_(self,sfzcode):
  self.code=sfzcode
def isxb(self):
  xbcode=int(self.code[16])
  
sfzcode=input("请输入公民身份号码:")
sfz1=sexpd(sfzcode)
sfz1.isxb()
(1)程序运行时,若输入的18位公民身份号码为“330425198002251269”,则输出结果为 身份证号码为:330425198002251269是位女士 。
(2)完善isxb(self)操作中的程序代码。
【答案】 isxb(self)操作中的程序代码如下:
if xbcode % 2==1:
  print("公民身份号码为:",self. code,"是位男士")
else:
  print("公民身份号码为:",self. code,"是位女士")
【解析】 本题考查ADT的实际应用。(1)公民身份号码330425198002251269的第17位上的数字是6,是偶数,因此该公民身份号码的人的性别是位女士,参考输出示例可知,输出结果为“公民身份号码为:330425198002251269 是位女士”。(2)isxb(self)操作中的代码的功能是:根据公民身份号码的第17位上(索引位置为16)的数字的奇偶性来判断性别,因此使用if语句来实现,方法不唯一,只要输出结果正确即可。(共16张PPT)
三、 抽象数据类型
第四章 树
信息技术 选择性必修1 数据与数据结构
必备知识练
1. 下列关于抽象数据类型的说法,错. 误. 的是(  )
A. Python的字符串类型就是一个抽象数据类型
B. 抽象数据类型是指一个数学模型及定义在该模型上的一组操作
C. 抽象数据类型还可以是编程者在程序设计时使用的函数
D. 定义一个抽象数据类型,只需清晰地表述出各方面的形式要求即可
【解析】 本题考查对抽象数据类型的理解。定义一个抽象数据类型,需要清晰地表述出各方面的形式要求(如操作的名字、参数的个数和类型等)和功能要求(希望这个操作完成什么样的计算或产生什么效果等)。D符合题意。
D
2. 在Python程序设计语言中,有如下语句:
a=13
b=10
c=a+b
print(c)
下列说法中,错. 误. 的是(  )
A. 语句“a=13”在给变量a赋值的同时也定义了其数据类型为整型
B. “+”操作在整型类中已经定义,编程者不必关心计算机如何实现“+”操作
C. 该编程语言中的其他数据类型的运算操作,都可以抽象出来
D. 语句“b=10”中的“=”操作在程序设计语言中没有定义,需要编程者自己编程实现
【解析】 同“+”等操作一样,“=”操作在Python程序设计语言中已经定义,编程者不必自己编程实现,D符合题意。
D
3. 下面是一个简单的ADT:
class jdage():
  def _ init_ (self,name,age):
    #初始化属性name和age
    self.name=name
    self.age=age
  def jd(self):
    if self.age<18:
      print(self.name+"还未成年。")
    else:
      print(self.name+"已成年。")
my_stu=jdage( Peter ,22)
my_stu.jd()
下列关于该抽象数据类型实例的说法,错. 误. 的是(  )
A. 创建的类名称为jdage
B. my_stu为jdage类的一个对象
C. 代码执行后的结果为“Peter已成年。”
D. def jd(self)的功能是定义jd函数
【解析】 本题考查抽象数据类型(ADT)的组成。def jd(self)的功能是定义jg操作,而不是函数,D符合题意。
D
4. 抽象数据类型的三个组成部分分别为(  )
A. 数据项、数据元素和数据类型
B. 数据元素、数据类型和数据结构
C. 数据对象、数据关系和基本操作
D. 数据元素、逻辑结构和存储结构
【解析】 本题考查抽象数据类型(ADT)的知识。根据ADT的定义可知,抽象数据类型的三个组成部分分别为数据对象、数据关系和基本操作,C正确。
C
5. 下面给出了字符串抽象数据类型的部分描述信息:
ADT String:
  String(self,sseq)#基于字符串序列sseq建立一个字符串
  is_empty(self)  #判断字符串是否为空串
  len(self)  #取得字符串的长度
  char(self,index)#取得字符串中位置在index的字符
  substr(self,a,b)#取得字符串[a:b]的子串,左闭右开区间
  ……
现有一字符串对象s,请回答下列问题:
(1)根据字符串抽象数据类型的描述,若要获取字符串[x:y](左闭右闭)区间内容的子串,正确的调用方式为_________________。
(2)基于字符串序列sseq建立一个字符串的操作String(s,sseq),可以理解为对字符串s的初始化操作,初始值为__________。
(3)当s="" 时,is_empty(s)的返回值为True,则当s= "abc123"时,is_empty(s)的返回值为__________,len(s)的返回值为__________。
(4)当要调用char方法时,需要提供的参数个数为__________。
substr(s,x,y+1)
sseq
False
6
2
【解析】 (1)根据ADT描述,从字符串中获取子串的操作为substr,需要三个参数,第一个为字符串本身s,第二、三个参数分别为子串的开始位置和结束位置的下一个位置。(2)由于操作String(s,sseq)的作用是基于字符串序列sseq建立一个字符串s,所以s的初值为sseq。
(3)操作is_empty(s)的作用是判断字符串是否为空,当字符串为空时返回True,非空时返回False;操作len(s)的作用是返回字符串s的长度,所以len(s)的结果为6。(4)根据ADT描述,操作char(self,index)调用时需要两个参数,第一个参数为字符串本身,第二个参数为位置。
关键能力练
6. 用抽象数据类型实现队列操作的代码如下,请回答下列问题:
class Queue:
def _ init _ (self):
  self.queue=[]
def isEmpty(self):
  return self.queue==[]
def enqueue(self,data): #入队操作
  ①______________________________
def dequeue(self): #出队操作
  if len(self.queue):
    ②________________________
self. queue. insert(0,data)
return self. queue. pop()
def size(self):  #测试队列长度
  return len(self.queue)
q=Queue()
q.enqueue(8)
q.enqueue(9)
q.enqueue(10)
while not q.isEmpty():
  print(q.dequeue(),end=" ")
(1)程序运行后,输出的结果是__________。
(2)请在画线处填入合适的代码。
8 9 10
【解析】 本题考查用抽象数据类型表示队列操作。①队列的特点是先进先出,元素入队时是从队列的首部插入,故此处代码为self. queue. insert(0,data)。②此处代码为出队操作,通过pop()方法实现,将元素从队尾取出,故此处代码为return self. queue. pop()。
7. 创建一个ADT,实现如下功能:输入一个18位的公民身份号码,输出拥有该公民身份号码的人的性别。
判断方法:根据公民身份号码的第17位数字来判断,若是奇数,则表示为男士;若是偶数,则表示为女士。
程序运行界面如图所示:
请输入公民身份号码:330425198202261156
公民身份号码为:330425198202261156是位男士
实现上述功能的代码如下,请回答下列问题:
class sexpd:
def_init_(self,sfzcode):
  self.code=sfzcode
def isxb(self):
  xbcode=int(self.code[16])
sfzcode=input("请输入公民身份号码:")
sfz1=sexpd(sfzcode)
sfz1.isxb()
(1)程序运行时,若输入的18位公民身份号码为“330425198002251269”,则输出结果为___________________________________________。
(2)完善isxb(self)操作中的程序代码。
【答案】 isxb(self)操作中的程序代码如下:
if xbcode % 2==1:
  print("公民身份号码为:",self. code,"是位男士")
else:
  print("公民身份号码为:",self. code,"是位女士")
【解析】 本题考查ADT的实际应用。(1)公民身份号码330425198002251269的第17位上的数字是6,是偶数,因此该公民身份号码的人的性别是位女士,参考输出示例可知,输出结果为“公民身份号码为:330425198002251269 是位女士”。(2)isxb(self)操作中的代码的功能是:根据公民身份号码的第17位上(索引位置为16)的数字的奇偶性来判断性别,因此使用if语句来实现,方法不唯一,只要输出结果正确即可。
身份证号码为:330425198002251269是位女士

展开更多......

收起↑

资源列表