计算机2级C语言笔试部分分为数据结构软件工程数据库面向程序设计很详细.docx

上传人:b****8 文档编号:10218905 上传时间:2023-02-09 格式:DOCX 页数:41 大小:29.37KB
下载 相关 举报
计算机2级C语言笔试部分分为数据结构软件工程数据库面向程序设计很详细.docx_第1页
第1页 / 共41页
计算机2级C语言笔试部分分为数据结构软件工程数据库面向程序设计很详细.docx_第2页
第2页 / 共41页
计算机2级C语言笔试部分分为数据结构软件工程数据库面向程序设计很详细.docx_第3页
第3页 / 共41页
计算机2级C语言笔试部分分为数据结构软件工程数据库面向程序设计很详细.docx_第4页
第4页 / 共41页
计算机2级C语言笔试部分分为数据结构软件工程数据库面向程序设计很详细.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

计算机2级C语言笔试部分分为数据结构软件工程数据库面向程序设计很详细.docx

《计算机2级C语言笔试部分分为数据结构软件工程数据库面向程序设计很详细.docx》由会员分享,可在线阅读,更多相关《计算机2级C语言笔试部分分为数据结构软件工程数据库面向程序设计很详细.docx(41页珍藏版)》请在冰豆网上搜索。

计算机2级C语言笔试部分分为数据结构软件工程数据库面向程序设计很详细.docx

计算机2级C语言笔试部分分为数据结构软件工程数据库面向程序设计很详细

计算机2级C语言笔试部分。

分为数据结构、软件工程、数据库、面向程序设计。

很详细

人生的成功不过是在紧要处有一份坚持。

二级C语言公共基础知识之数据结构

考点1算法的复杂度

1.算法的基本概念

算法的基本特征:

可行性、确定性、有穷性、输入(可为0)、输出(不能为0)

2.算法复杂度包括时间复杂度和空间复杂度

名称

描述

时间复杂度

是指执行算法所需要的计算工作量

空间复杂度

是指执行这个算法所需要的内存空间

考点2逻辑结构和存储结构

1.逻辑结构

 

2.存储结构

 

考点3线性结构和非线性结构

根据数据结构中各数据元素之间前后件关系的复杂程度

一般将数据结构分为两大类型:

线性结构与非线性结构

如果一个非空的数据结构满足下列两个条件:

(1)有且只有一个根结点;

(2)每一个结点最多有一个前件

也最多有一个后件

则称该数据结构为线性结构

线性结构又称线性表

在一个线性结构中插入或删除任何一个结点后还应是线性结构

栈、队列、串等都线性结构

如果一个数据结构不是线性结构

则称之为非线性结构

数组、广义表、树和图等数据结构都是非线性结构

考点4栈

1.栈的基本概念

栈(stack)是一种特殊的线性表

是限定只在一端进行插入与删除的线性表

在栈中

一端是封闭的

既不允许进行插入元素

也不允许删除元素;另一端是开口的

允许插入和删除元素

通常称插入、删除的这一端为栈顶

另一端为栈底

当表中没有元素时称为空栈

栈顶元素总是后被插入的元素

从而也是最先被删除的元素;栈底元素总是最先被插入的元素

从而也是最后才能被删除的元素

"先进后出"或"后进先出"

2.栈的顺序存储及其运算栈的基本运算有三种:

入栈、退栈与读栈顶元素

(1)入栈运算:

入栈运算是指在栈顶位置插入一个新元素

(2)退栈运算:

退栈是指取出栈顶元素并赋给一个指定的变量

(3)读栈顶元素:

读栈顶元素是指将栈顶元素赋给一个指定的变量

考点5队列

1.队列的基本概念

队列是只允许在一端进行删除

在另一端进行插入的顺序表

通常将允许删除的这一端称为队头

允许插入的这一端称为队尾

当表中没有元素时称为空队列

队列的修改是依照先进先出的原则进行的

因此队列也称为先进先出的线性表

或者后进后出的线性表

例如:

火车进遂道

最先进遂道的是火车头

最后是火车尾

而火车出遂道的时候也是火车头先出

最后出的是火车尾

若有队列:

Q=(q1

q2

...

qn)

那么

q1为队头元素(排头元素)

qn为队尾元素

队列中的元素是按照q1

q2

...

qn的顺序进入的

退出队列也只能按照这个次序依次退出

即只有在q1

q2

...

qn-1都退队之后

qn才能退出队列

因最先进入队列的元素将最先出队

所以队列具有先进先出的特性

体现"先来先服务"的原则

队头元素q1是最先被插入的元素

也是最先被删除的元素

队尾元素qn是最后被插入的元素

也是最后被删除的元素

"先进先出"

入队运算为往队列队尾插入一个数据元素

退队运算为从队列的队头删除一个数据元素

考点6链表

在链式存储方式中

要求每个结点由两部分组成:

一部分用于存放数据元素值

称为数据域

另一部分用于存放指针

称为指针域

其中指针用于指向该结点的前一个或后一个结点(即前件或后件)

链式存储方式既可用于表示线性结构

也可用于表示非线性结构

(1)线性链表

线性表的链式存储结构称为线性链表

在某些应用中

对线性链表中的每个结点设置两个指针

一个称为左指针

用以指向其前件结点;另一个称为右指针

用以指向其后件结点

这样的表称为双向链表

在线性链表中

各数据元素结点的存储空间可以是不连续的

且各数据元素的存储顺序与逻辑顺序可以不一致

在线性链表中进行插入与删除

不需要移动链表中的元素

(2)带链的栈

栈也是线性表

也可以采用链式存储结构

带链的栈可以用来收集计算机存储空间中所有空闲的存储结点

这种带链的栈称为可利用栈

考点7二叉树及其基本性质

1、二叉树及其基本概念

二叉树是一种很有用的非线性结构

具有以下两个特点:

①非空二叉树只有一个根结点;

②每一个结点最多有两棵子树

且分别称为该结点的左子树和右子树

在二叉树中

每一个结点的度最大为2

即所有子树(左子树或右子树)也均为二叉树

另外

二叉树中的每个结点的子树被明显地分为左子树和右子树

在二叉树中

一个结点可以只有左子树而没有右子树

也可以只有右子树而没有左子树

当一个结点既没有左子树也没有右子树时

该结点即为叶子结点

父结点(根)

  在树结构中

每一个结点只有一个前件

称为父结点

没有前件的结点只有一个

称为树的根结点

简称树的根

例如

在图1-1中

结点A是树的根结点

子结点和

叶子结点

  在树结构中

每一个结点可以有多个后件

称为该结点的子结点

没有后件的结点称为叶子结点

例如

在图1-1中

结点D

E

F均为叶子结点

  在树结构中

一个结点所拥有的后件的个数称为该结点的度

所有结点中最大的度称为树的度

例如

在图1-1中

根结点A和结点B的度为2

结点C的度为1

叶子结点D

E

F的度为0

所以

该树的度为2

深度

  定义一棵树的根结点所在的层次为1

其他结点所在的层次等于它的父结点所在的层次加1

树的最大层次称为树的深度

例如

在图1-1中

根结点A在第1层

结点B

C在第2层

结点D

E

F在第3层

该树的深度为3

子树

  在树中

以某结点的一个子结点为根构成的树称为该结点的一棵子树

2、二叉树基本性质

二叉树具有以下几个性质:

性质1:

在二叉树的第k层上

最多有2k-1(k≥1)个结点;

性质2:

深度为m的二叉树最多有2m-1个结点;

性质3:

在任意一棵二叉树中

度为0的结点(即叶子结点)总是比度为2的结点多一个

性质4:

具有n个结点的二叉树

其深度至少为[log2n]+1

其中[log2n]表示取log2n的整数部分

3、满二叉树与完全二叉树

满二叉树是指这样的一种二叉树:

除最后一层外

每一层上的所有结点都有两个子结点

在满二叉树中

每一层上的结点数都达到最大值

即在满二叉树的第k层上有2k-1个结点

且深度为m的满二叉树有2m-1个结点

完全二叉树是指这样的二叉树:

除最后一层外

每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点

对于完全二叉树来说

叶子结点只可能在层次最大的两层上出现:

对于任何一个结点

若其右分支下的子孙结点的最大层次为p

则其左分支下的子孙结点的最大层次或为p

或为p+1

完全二叉树具有以下两个性质:

性质5:

具有n个结点的完全二叉树的深度为[log2n]+1

性质6:

设完全二叉树共有n个结点

如果从根结点开始

按层次(每一层从左到右)用自然数1

2

......

n给结点进行编号

则对于编号为k(k=1

2

......

n)的结点有以下结论:

①若k=1

则该结点为根结点

它没有父结点;若k>1

则该结点的父结点编号为INT(k/2)

②若2k≤n

则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(显然也没有右子结点)

③若2k+1≤n

则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点

 

考点8二叉树的遍历

在遍历二叉树的过程中

一般先遍历左子树

再遍历右子树

在先左后右的原则下

根据访问根结点的次序

二叉树的遍历分为三类:

前序遍历、中序遍历和后序遍历

(1)前序遍历:

先访问根结点、然后遍历左子树

最后遍历右子树;并且

在遍历左、右子树时

仍然先访问根结点

然后遍历左子树

最后遍历右子树

A

B

D

E

C

F

(2)中序遍历:

先遍历左子树、然后访问根结点

最后遍历右子树;并且

在遍历左、右子树时

仍然先遍历左子树

然后访问根结点

最后遍历右子树

D

B

E

A

C

F

(3)后序遍历:

先遍历左子树、然后遍历右子树

最后访问根结点;并且

在遍历左、右子树时

仍然先遍历左子树

然后遍历右子树

最后访问根结点

 D

E

B

F

C

A

考点9顺序查找

查找是指在一个给定的数据结构中查找某个指定的元素

从线性表的第一个元素开始

依次将线性表中的元素与被查找的元素相比较

若相等则表示查找成功;若线性表中所有的元素都与被查找元素进行了比较但都不相等

则表示查找失败

例如

在一维数组[21

46

24

99

57

77

86]中

查找数据元素98

首先从第1个元素21开始进行比较

与要查找的数据不相等

接着与第2个元素46进行比较

以此类推

当进行到与第4个元素比较时

它们相等

所以查找成功

如果查找数据元素100

则整个线性表扫描完毕

仍未找到与100相等的元素

表示线性表中没有要查找的元素

在下列两种情况下也只能采用顺序查找:

(1)如果线性表为无序表

则不管是顺序存储结构还是链式存储结构

只能用顺序查找

(2)即使是有序线性表

如果采用链式存储结构

也只能用顺序查找

考点10二分法查找

二分法查找

也称拆半查找

是一种高效的查找方法

能使用二分法查找的线性表必须满足两个条件:

用顺序存储结构;线性表是有序表

在本书中

为了简化问题

而更方便讨论

"有序"是特指元素按非递减排列

即从小到大排列

但允许相邻元素相等

下一节排序中

有序的含义也是如此

顺序查找法每一次比较

只将查找范围减少1

而二分法查找

每比较一次

可将查找范围减少为原来的一半

效率大大提高

对于长度为n的有序线性表

在最坏情况下

二分法查找只需比较log2n次

而顺序查找需要比较n次

考点11排序

冒泡排序法和快速排序法都属于交换类排序法

(1)冒泡排序法

首先

从表头开始往后扫描线性表

逐次比较相邻两个元素的大小

若前面的元素大于后面的元素

则将它们互换

不断地将两个相邻元素中的大者往后移动

最后最大者到了线性表的最后

然后

从后到前扫描剩下的线性表

逐次比较相邻两个元素的大小

若后面的元素小于前面的元素

则将它们互换

不断地将两个相邻元素中的小者往前移动

最后最小者到了线性表的最前面

对剩下的线性表重复上述过程

直到剩下的线性表变空为止

此时已经排好序

在最坏的情况下

冒泡排序需要比较次数为n(n-1)/2

(2)快速排序法

任取待排序序列中的某个元素作为基准(一般取第一个元素)

通过一趟排序

将待排元素分为左右两个子序列

左子序列元素的排序码均小于或等于基准元素的排序码

右子序列的排序码则大于基准元素的排序码

然后分别对两个子序列继续进行排序

直至整个序列有序

 

二级C语言公共基础知识之软件工程

考点1软件工程基本概念

1.软件定义与软件特点

软件指的是计算机系统中与硬件相互依存的另一部分

包括程序、数据和相关文档的完整集合

程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令序列

数据是使程序能正常操纵信息的数据结构

文档是与程序的开发、维护和使用有关的图文资料

可见

软件由两部分组成:

(1)机器可执行的程序和数据;

(2)机器不可执行的

与软件开发、运行、维护、使用等有关的文档

根据应用目标的不同

软件可分应用软件、系统软件和支撑软件(或工具软件)

名称

描述

应用软件

为解决特定领域的应用而开发的软件

系统软件

计算机管理自身资源

提高计算机使用效率并为计算机用户提供各种服务的软件

支撑软件(或工具软件)

支撑软件是介于两者之间

协助用户开发软件的工具性软件

2.软件工程

为了摆脱软件危机

提出了软件工程的概念

软件工程学是研究软件开发和维护的普遍原理与技术的一门工程学科

所谓软件工程是指

采用工程的概念、原理、技术和方法指导软件的开发与维护

软件工程学的主要研究对象包括软件开发与维护的技术、方法、工具和管理等方面

软件工程包括3个要素:

方法、工具和过程

名称

描述

方法

方法是完成软件工程项目的技术手段

工具

工具支持软件的开发、管理、文档生成

过程

过程支持软件开发的各个环节的控制、管理

考点2软件生命周期

1.软件生命周期概念

软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期

一般包括可行性分析研究与需求分析、设计、实现、测试、交付使用以及维护等活动

如图3-1所示

软件生命周期分为3个时期共8个阶段

(1)软件定义期:

包括问题定义、可行性研究和需求分析3个阶段;

(2)软件开发期:

包括概要设计、详细设计、实现和测试4个阶段;

(3)运行维护期:

即运行维护阶段

软件生命周期各个阶段的活动可以有重复

执行时也可以有迭代

如图3-1所示

2.软件生命周期各阶段的主要任务

任务

描述

问题定义

确定要求解决的问题是什么

可行性研究与计划制定

决定该问题是否存在一个可行的解决办法

指定完成开发任务的实施计划

需求分析

对待开发软件提出需求进行分析并给出详细定义

编写软件规格说明书及初步的用户手册

提交评审

软件设计

通常又分为概要设计和详细设计两个阶段

给出软件的结构、模块的划分、功能的分配以及处理流程

这阶段提交评审的文档有概要设计说明书、详细设计说明书和测试计划初稿

软件实现

在软件设计的基础上编写程序

这阶段完成的文档有用户手册、操作手册等面向用户的文档

以及为下一步作准备而编写的单元测试计划

软件测试

在设计测试用例的基础上

检验软件的各个组成部分

编写测试分析报告

运行维护

将已交付的软件投入运行

同时不断的维护

进行必要而且可行的扩充和删改

考点3软件设计基本概念

从技术观点上看

软件设计包括软件结构设计、数据设计、接口设计、过程设计

(1)结构设计定义软件系统各主要部件之间的关系;

(2)数据设计将分析时创建的模型转化为数据结构的定义;

(3)接口设计是描述软件内部、软件和协作系统之间以及软件与人之间如何通信;

(4)过程设计则是把系统结构部件转换为软件的过程性描述

从工程管理角度来看

软件设计分两步完成:

概要设计和详细设计

(1)概要设计将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式;

(2)详细设计确立每个模块的实现算法和局部数据结构

用适当方法表示算法和数据结构的细节

考点4软件设计的基本原理

1、软件设计中应该遵循的基本原理和与软件设计有关的概念

(1)抽象:

软件设计中考虑模块化解决方案时

可以定出多个抽象级别

抽象的层次从概要设计到详细设计逐步降低

(2)模块化:

模块是指把一个待开发的软件分解成若干小的简单的部分

模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程

(3)信息隐蔽:

信息隐蔽是指在一个模块内包含的信息(过程或数据)

对于不需要这些信息的其他模块来说是不能访问的

(4)模块独立性:

模块独立性是指每个模块只完成系统要求的独立的子功能

并且与其他模块的联系最少且接口简单

模块的独立程度是评价设计好坏的重要度量标准

衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准

内聚性是信息隐蔽和局部化概念的自然扩展

一个模块的内聚性越强则该模块的模块独立性越强

一个模块与其他模块的耦合性越强则该模块的模块独立性越弱

2、衡量软件模块独立性使用耦合性和内聚性两个定性的度量标准

内聚性是度量一个模块功能强度的一个相对指标

内聚是从功能角度来衡量模块的联系

它描述的是模块内的功能联系

内聚有如下种类

它们之间的内聚度由弱到强排列:

偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚

耦合性是模块之间互相连接的紧密程度的度量

耦合性取决于各个模块之间接口的复杂度、调用方式以及哪些信息通过接口

耦合可以分为下列几种

它们之间的耦合度由高到低排列:

内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、非直接耦合

在程序结构中

各模块的内聚性越强

则耦合性越弱

一般较优秀的软件设计

应尽量做到高内聚

低耦合

即减弱模块之间的耦合性和提高模块内的内聚性

有利于提高模块的独立性

考点5结构化分析方法

1、结构化分析方法的定义

结构化分析方法就是使用数据流图(DFD)、数据字典(DD)、结构化英语、判定表和判定树的工具

来建立一种新的、称为结构化规格说明的目标文档

结构化分析方法的实质是着眼于数据流、自顶向下、对系统的功能进行逐层分解、以数据流图和数据字典为主要工具

建立系统的逻辑模型

2、结构化分析方法常用工具

(1)数据流图(DFD)

数据流图是系统逻辑模型的图形表示

即使不是专业的计算机技术人员也容易理解它

因此它是分析员与用户之间极好的通信工具

(2)数据字典(DD)

数据字典是对数据流图中所有元素的定义的集合

是结构化分析的核心

数据流图和数据字典共同构成系统的逻辑模型

没有数据字典数据流图就不严格

若没有数据流图

数据字典也难于发挥作用

数据字典中有4种类型的条目:

数据流、数据项、数据存储和加工

(3)判定表

有些加工的逻辑用语言形式不容易表达清楚

而用表的形式则一目了然

如果一个加工逻辑有多个条件、多个操作

并且在不同的条件组合下执行不同的操作

那么可以使用判定表来描述

(4)判定树

判定树和判定表没有本质的区别

可以用判定表表示的加工逻辑都能用判定树表示

3、软件需求规格说明书

软件需求规格说明书是需求分析阶段的最后成果

是软件开发的重要文档之一

它的特点是具有正确性、无歧义性、完整性、可验证性、一致性、可理解性、可修改性和可追踪性

考点6软件测试的目的和准则

1.软件测试的目的

(1)测试是为了发现程序中的错误而执行程序的过程

(2)好的测试用例(testcase)能发现迄今为止尚未发现的错误

(3)一次成功的测试是能发现至今为止尚未发现的错误

测试的目的是发现软件中的错误

但是

暴露错误并不是软件测试的最终目的

测试的根本目的是尽可能多地发现并排除软件中隐藏的错误

2.软件测试的准则

根据上述软件测试的目的

为了能设计出有效的测试方案

以及好的测试用例

软件测试人员必须深入理解

并正确运用以下软件测试的基本准则

(1)所有测试都应追溯到用户需求

(2)在测试之前制定测试计划

并严格执行

(3)充分注意测试中的群集现象

(4)避免由程序的编写者测试自己的程序

(5)不可能进行穷举测试

(6)妥善保存测试计划、测试用例、出错统计和最终分析报告

为维护提供方便

考点7软件测试的方法和实施

【考点精讲】

1、软件测试方法

软件测试具有多种方法

依据软件是否需要被执行

可以分为静态测试和动态测试方法

如果依照功能划分

可以分为白盒测试和黑盒测试方法

1.静态测试和动态测试

(1)静态测试包括代码检查、静态结构分析、代码质量度量等

其中代码检查分为代码审查、代码走查、桌面检查、静态分析等具体形式

(2)动态测试

静态测试不实际运行软件

主要通过人工进行分析

动态测试就是通常所说的上机测试

是通过运行软件来检验软件中的动态行为和运行结果的正确性

动态测试的关键是使用设计高效、合理的测试用例

测试用例就是为测试设计的数据

由测试输入数据和预期的输出结果两部份组成

测试用例的设计方法一般分为两类:

黑盒测试方法和白盒测试方法

2.黑盒测试和白盒测试

(1)白盒测试

白盒测试是把程序看成装在一只透明的白盒子里

测试者完全了解程序的结构和处理过程

它根据程序的内部逻辑来设计测试用例

检查程序中的逻辑通路是否都按预定的要求正确地工作

(2)黑盒测试

黑盒测试是把程序看成一只黑盒子

测试者完全不了解

或不考虑程序的结构和处理过程

它根据规格说明书的功能来设计测试用例

检查程序的功能是否符合规格说明的要求

2、软件测试的实施

软件测试过程分4个步骤

即单元测试、集成测试、验收测试和系统测试

单元测试是对软件设计的最小单位--模块(程序单元)进行正确性检验测试

单元测试的技术可以采用静态分析和动态测试

集成测试是测试和组装软件的过程

主要目的是发现与接口有关的错误

主要依据是概要设计说明书

集成测试所设计的内容包括:

软件单元的接口测试、全局数据结构测试、边界条件和非法输入的测试等

集成测试时将模块组装成程序

通常采用两种方式:

非增量方式组装和增量方式组装

确认测试的任务是验证软件的功能和性能

以及其他特性是否满足了需求规格说明中确定的各种需求

包括软件配置是否完全、正确

确认测试的实施首先运用黑盒测试方法

对软件进行有效性测试

即验证被测软件是否满足需求规格说明确认的标准

系统测试是通过测试确认的软件

作为整个基于计算机系统的一个元素

与计算机硬件、外设、支撑软件、数据和人员等其他系统元素组合在一起

在实际运行(使用)环境下对计算机系统进行一系列的集成测试和确认测试

系统测试的具体实施一般包括:

功能测试、性能测试、操作测试、配置测试、外部接口测试、安全性测试等

考点8程序的调试

在对程序进行了成功的测试之后将进入程序调试(通常称Debug

即排错)

程序的调试任务是诊断和改正程序中的错误

调试主要在开发阶段进行

程序调试活动由两部分组成

一是根据错误的迹象确定程序中错误的确切性质、原因和位置;二是对程序进行修改

排除这个错误

程序调试的基本步骤:

(1)错误定位

从错误的外部表现形式入手

研究有关部分的程序

确定程序中出错位置

找出错误的内在原因;

(2)修改设计和代码

以排除错误;

(3)进行回归测试

防止引进新的错误

软件调试可分为静态调试和动态调试

静态调试主要是指通过人的思维来分析源程序代码和排错

是主要的设计手段

而动态调试是辅助静态调试的

主要的调试方法有:

(1)强行排错法;

(2)回溯法;(3)原因排除法

二级C语言公共基础知识之面向程序设计

考点1程序设计的方法与风格

养成良好的程序设计风格

主要考虑下述因素:

1.源程序文档化

(1)符号名的命名:

符号名的命名应具有一定的实际含义

以便于对程序功能的理解

(2)程序注释:

在源程序中添加正确的注释可帮助人们理解程序

程序注释可分为序言性注释和功能性注释

(3)视觉组织:

通过在程序中添加一些空格、空行和缩进等

使人们在视觉上对程序的结构一目了然

2.数据说明的方法

为使程序中的数据说明易于理解和维护

可采用下列数据说明的风格

见表2-1

数据说明风格

详细说明

次序应规范化

使数据说明次序固定

使数据的属性容易查找

也有利于测试、排错和维护

变量安排有序化

当多个变量出现在同一个说明语句中时

变量名应按字母顺序排序

以便于查找

使用注释

在定义一个复杂的数据结构时

应通过注解来说明该数据结构的特点

3.语句的结构程序应该简单易懂

语句构造应该简单直接

4.输入和输出

考点2结构化程序设计

1.构化程序设计的原则

结构化程序设计方

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1