第一套模拟试题参考答案及解析.docx

上传人:b****1 文档编号:13403487 上传时间:2023-06-13 格式:DOCX 页数:21 大小:29.84KB
下载 相关 举报
第一套模拟试题参考答案及解析.docx_第1页
第1页 / 共21页
第一套模拟试题参考答案及解析.docx_第2页
第2页 / 共21页
第一套模拟试题参考答案及解析.docx_第3页
第3页 / 共21页
第一套模拟试题参考答案及解析.docx_第4页
第4页 / 共21页
第一套模拟试题参考答案及解析.docx_第5页
第5页 / 共21页
第一套模拟试题参考答案及解析.docx_第6页
第6页 / 共21页
第一套模拟试题参考答案及解析.docx_第7页
第7页 / 共21页
第一套模拟试题参考答案及解析.docx_第8页
第8页 / 共21页
第一套模拟试题参考答案及解析.docx_第9页
第9页 / 共21页
第一套模拟试题参考答案及解析.docx_第10页
第10页 / 共21页
第一套模拟试题参考答案及解析.docx_第11页
第11页 / 共21页
第一套模拟试题参考答案及解析.docx_第12页
第12页 / 共21页
第一套模拟试题参考答案及解析.docx_第13页
第13页 / 共21页
第一套模拟试题参考答案及解析.docx_第14页
第14页 / 共21页
第一套模拟试题参考答案及解析.docx_第15页
第15页 / 共21页
第一套模拟试题参考答案及解析.docx_第16页
第16页 / 共21页
第一套模拟试题参考答案及解析.docx_第17页
第17页 / 共21页
第一套模拟试题参考答案及解析.docx_第18页
第18页 / 共21页
第一套模拟试题参考答案及解析.docx_第19页
第19页 / 共21页
第一套模拟试题参考答案及解析.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第一套模拟试题参考答案及解析.docx

《第一套模拟试题参考答案及解析.docx》由会员分享,可在线阅读,更多相关《第一套模拟试题参考答案及解析.docx(21页珍藏版)》请在冰点文库上搜索。

第一套模拟试题参考答案及解析.docx

第一套模拟试题参考答案及解析

第一套模拟试题参考答案及解析

1.线性表、栈和队列等数据结构所表达和处理的数据以线性结构为组织形式。

栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作,允许插入和删除的一端称为栈顶,另一端称为栈底。

一个新元素只能从栈顶一端进入,删除时,只能删除栈顶的元素,即刚刚被插入的元素。

所以栈又称后进先出表(LastInFirstOut);队列可看作是插入在一端进行,删除在另一端进行的线性表,允许插入的一端称为队尾,允许删除的一端称为队头。

在队列中,只能删除队头元素,队列的最后一个元素一定是最新入队的元素。

因此队列又称先进先出表(FirstInFirstOut)。

本题答案为C。

2.软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。

其中需求分析阶段常用的工具是数据流图和数据字典。

本题答案为B。

3.结构化程序设计主要强调的是结构化程序清晰易读,可理解性好,程序员能够进行逐步求精、程序证明和测试,以保证程序的正确性。

本题答案为B。

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

也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。

软件生命周期的主要活动阶段为:

(1)可行性研究和计划制定。

确定待开发软件系统的开发目标和总的要求,给出它的功能、性能、可靠性以及接口等方面的可能方案,制定完成开发任务的实施计划。

(2)需求分析。

对待开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能。

编写软件规格说明书及初步的用户手册,提交评审。

(3)软件设计。

系统设计人员和程序设计人员应该在反复理解软件需求的基础上,给出软件的结构、模块的划分、功能的分配以及处理流程。

(4)软件实现。

把软件设计转换成计算机可以接受的程序代码。

即完成源程序的编码,编写用户手册、操作手册等面向用户的文档,编写单元测试计划。

(5)软件测试。

在设计测试用例的基础上,检验软件的各个组成部分。

编写测试分析报告。

(6)运行和维护。

将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。

本题答案是D。

5.栈是限定在一端进行插入与删除的线性表。

栈是按照"先进后出"的或后进先出的原则组织数据的,因此,栈也被称为"先进后出"表或"后进先出"表。

本题答案是D。

6.在软件设计过程中,必须遵循软件工程的基本原则:

这些原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可靠性。

本题答案为C。

7.在进行顺序查找过程中,如果线性表中被查的元素是线性表中的最后一个,或者被查元素根本不在线性表中,则为了查找这个元素需要与线性表中所有元素进行比较,这是顺序查找最坏的情况。

本题答案为B。

8.视图设计一般有3种设计次序,它们分别是自顶向下、自底向上和由内向外,它们又为视图设计提供了具体的操作方法,设计者可根据实际情况灵活掌握,可以单独使用也可混合使用。

本题答案为B。

9.数据库(Database,简称DB)是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享。

数据库中的数据具有"集成"、"共享"之特点。

本题答案为C。

10.数据模型所描述的内容有3个部分,它们是数据结构、数据操作和数据约束。

其中,数据模型中的数据结构主要描述数据的类型、内容、性质,以及数据库的联系等;数据操作主要是描述在相应数据结构上的操作类型与操作方式。

本题答案为C。

11.本题的考查点是C程序设计的初步知识。

选项A,C程序中/*……*/表示注释部分,注释只是给人看的,对编译和运行不起作用,可以加在程序中任何位置,所以选项A是对的;

选项B,函数体是函数的主体,从左花括号开始,到与之匹配的右花括号结束。

选项C,一个C程序中必须有且只能有一个由“main”命名的主函数,其他函数由用户自行命名。

选项D,C语句是组成C程序的基本单位,具有独立的程序功能。

所有的C语句都以分号结尾。

故本题答案为A。

12.本题的考查点是C语言中的整型常数。

整型常数可以用十进制、八进制或十六进制表示,并分为有符号数、无符号数和长整数。

由此可知选项A错;

选项B,用0386表示八进制错误,因为八进制数为0-7八个数字,含有8是不对的;

选项D,数字前加“0x”表示十六进制数,所以D也不对。

故本题答案为C。

 

13.本题的考查点是用户标识符的辨别。

标识符是C语言中用来表示变量名、数组名、函数名、指针名、结构名、联合名、枚举常数名、用户定义的数据类型名、语句标号等用途的字符序列。

标识符由1~32个字符组成,第一个字符必须是字母或下划线,后面的字符可以是字母、数字或下划线。

标识符不能与C关键字相同,并区分大小写。

由上可知选项D是不对的,因为int是C语言中的关键字。

故本题答案为D。

14.本题的考查点是复合的赋值运算符。

在赋值符“=”之前加上其它运算符,可以构成复合的运算符。

运算方向为自右至左。

本题中先计算c的值,c=c*(x=6.5)=10*6.5=65;

接下来计算f的值,f=f/c=100.0/65=1.5;

最后计算a的值,a=f,因为a为整数,取f的整数部分即为1。

故本题答案为B。

15.本题的考查点是表达式的运用。

表达式是程序中使用最频繁、最大量出现的计算手段,程序中要求计算机进行某种计算或运算主要是通过表达式实现的。

不同的表达式进行不同的运算,达到不同的目的。

选项A中,0<=x<100在C语言中是一个合法的关系表达式,但它并不代表数学式0<=x<100。

在计算0<=x<100时,根据从左到右的结合性,先计算0<=x,其结果只能是0或1,然后再比较0<100或1<100。

选项B中,根据运算符的优先级,先判断j==0是否成立,其结果只能是0或1,然后再将0或1赋给i。

选项C中,(char)(65+3)为类型强制转换,将数值型数据转换为字符型。

选项D中,赋值运算符的作用是将一个数据赋给一个变量,此项中等号左半部分不合要求。

故本题答案为D。

16.本题的考查点是逻辑或运算。

a||b若a、b之一为真,则a||b为真,但如果a为真,则b不用考虑,也就是无需计算,仍为原值。

结合本题,因为b>a为真,即n=1,所以m不用计算仍为原值,且k值为1。

故本题答案为C。

17.本题的考查点是格式输入函数。

格式输入函数的一般形式:

scanf(格式控制,地址表列)

需要注意的是:

如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。

所以输入的两个数字之间的逗号是不可少的。

故本题答案为A。

18.本题的考查点是逗号表达式。

逗号表达式的一般形式为:

表达式1,表达式2

逗号表达式的求解过程为:

先求解表达式1,再求解表达式2。

整个逗号表达式的值是表达式2的值。

故本题答案为D。

19.本题的考查点是实型数据。

对于此类题目,我们可用排除法,题目要求保留到小数点后两位,选项A、B、D都不合题面要求。

选项C中,x=(int)(x*100+0.5)/100.0中,x为float型,所以小数点后有6位小数,x*100后有4位,x*100+0.5仍为4位,且在这里已经将第三位四舍五入了,取整后再除以100.0,结果中小数点后为2位。

故本题答案为C。

20.本题的考查点是if语句。

if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的几种操作之一。

选项A,因为前面两个条件都不满足,所以执行最后一种操作,x=3;

选项B,a<3成立,执行第一种操作,x=3;

选项C,a<3成立,执行第一种操作,x=3;a<2成立,执行第二种操作,此时x=2;a<1不成立,最后的不执行,所以执行此段程序后x=2;

选项D,a

故本题答案为C。

21.本题的考查点是do-while语句

此语句的一般形式为:

do语句

while(表达式)

其特点为:

先执行语句,后判断表达式。

它是这样执行的:

先执行一次指定的内嵌的语句,然后判别表达式,当表达式的值为非零("真")时,返回重新执行该语句,如此反复,直到表达式的值等于0为止,此时循环结束。

当n=-1时,s+=1,s=1;a=a-2=-1;a!

=n不成立,结束循环,此时s值为1,不符合题意;

当n=-3时,s+=1,s=1;a=a-2=-1;a!

=n成立,继续循环,s=s+1=2,a=a-2=-3;a!

=n不成立,此时s值为2,符合题意;

故本题答案为B。

22.本题的考查点是赋值语句。

本题s的初值是a,然后b从1循环到c,每循环一次,s都加1,也就是到了c,加了1*c,所以程序所实现的功能实际上是s=a+c。

故本题答案为B。

23.本题的考查点是循环和continue语句。

continue语句是结束本次循环。

n从0开始循环,判断n%3!

=0是否成立,为真,跳出循环,继续下一轮for循环条件的判断,为假,执行k--,并继续下一轮for循环条件的判断,当条件不满足时,则结束循环,输出k、n的值。

故本题答案为C。

24.本题的考查点是查找程序运行错误的原因。

主要考察运算中字符的转换。

初看此题,可能不太容易发现错误,该题的运行结果是1.0000,算法错误。

s=s+1/n;1/2=0,因为n为整型,所以1/n都为0。

这就是导致本题出错的原因。

s=s+1/n应改为s=s+1.0/n。

故本题答案为C。

25.本题的考查点是字符变量的赋值。

字符型变量用来存放字符常量,注意只能放一个字符。

选项A是想输出这个反斜杠线'\',必须用转义字符才能实现。

即应该是ch='\\',所以选项A错误。

C语言中字符型变量的赋值,在ASCII码值0~255之间,整型数据和字符型数据有时可以通用,所以B是正确的。

选项C是将NULL赋给一个字符型变量,NULL代表一个空字符,相当于0。

所以也正确。

选项D中'\xaa'表示的是1到2位16进制数所代表的字符。

所以也是正确的。

故本题答案为A。

26.本题的考查点是函数的调用。

在调用函数时,大多数情况下,主调函数和被调函数之间有数据传递关系。

这就是平时所说的实参和形参,在函数调用时,函数名后面括弧里的表达式就称为“实参”。

按函数在程序中出现的位置来分,可以有以下三种函数调用形式:

1、把函数调用作为一个语句。

如:

printstar();这时不要求函数带回值,只要求函数完成一定的操作。

故A选项的说法是对的。

2、函数出现在表达式中,这种表达式称为函数表达式。

这时要求函数带回一个确定的值以参加表达式的运算。

例如:

c=2*max(a,b)函数max是表达式的一部分,它的值乘2再赋给c。

所以选项C的说法是正确的。

3、函数调用作为一个函数的实参,例:

m=max(a,max(b,c));其中max(b,c)是一次函数调用,它的值作为max另一次调用的实参。

但函数调用不可以作为一个函数的形参,因为函数调用的参数的数据传递是“值传递”,即单向传递,只由实参传给形参,不能由形参传回来给实参。

故B选项的说法也是正确的。

选项D错误。

故本题答案为D。

27.本题的考查点是函数调用。

fun(inty,doublem);//不要类型,题面已经说明变量都已正确定义并赋值。

k=fun(10,12.5);//函数没有返回值

voidfun(n,x);//void不要

故本题答案为C。

28.本题的考查点是函数。

fun函数用了两个指向字符型数据的指针作为形参。

该功能是把b的地址赋给a,然后a存储单元里的值再加1。

(*a)++表示的是a所指向的元素值加1,注意:

是元素值加1,而不是指针值。

main函数中,p1里存放的是c1的地址,p2里存放的是c2的地址,fun(p1,p2)后,p2的地址赋给了p1,此时p1和p2都指向了c2,即a,(*a)++,a的值加了1,变为了b。

所以此时c2的值为b,而c1的值没变,仍为A。

注意,这里变的是p1的地址和c2的值。

故本题答案为A。

29.本题的考查点是指针变量的运用。

选项A、B指针定义错误,都将指针指向了NULL,都为空值。

其中空指针是由对指针变量赋予0值而得到的。

例如:

#defineNULL0 int*p=NULL;对指针变量赋0值和不赋值的时候意义是不同的:

指针变量未赋值时,它是指向任意不确定的存储单元的,所以不能使用,否则将造成意外错误;而指针变量赋0值后,则可以使用,只是它不指向具体的变量而已。

而在选项C中最后一个*c=&t;错误,&t是地址,*c是值。

选项D是让指针L指向字符串的末尾,即字符串结束符。

故本题答案为D。

 

30.本题的考查点是打印输出NULL的值。

此题相当于输出控制字符NULL的ASCII码值,即为0。

故本题答案为A。

31.本题的考查点是字符型变量。

C语言中,字符型数据和整型数据之间可以通用。

一个字符数据既可以以字符形式输出,也可以以整数形式输出。

所以把整型数据赋给字符型变量,直接用c=97即可,所以选项C正确。

看上去选项A也是正确的,但题目要求选的是正确的语句,由于选项A少分号,所以不能构成语句,所以选项A是错误的。

故本题答案为C。

32.本题的考查点是二维数组的定义和初始化。

选项A定义的数组中各元素实际上是这样的:

1,0

2,0

选项B定义的数组中各元素实际上是这样的:

1,2

3,4

选项C定义的数组中各元素实际上是这样的:

1,0

2,3

选项D错在:

C中在对数组进行初始化时,如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。

故本题答案为D。

 

33.本题的考查点是结构体变量的定义。

将一个变量定义为标准类型与定义为结构体类型不同之处在于:

后者不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型(例如,structcolor),不能只指定结构体名。

其一般形式为"

struct 结构体名

  {

成员表列

  }变量名表列;

其中可以不出现结构体名,选项D就是缺省结构体名的情况。

而变量名列表必须放在成员列表后面,所以B选项不能正确将c1定义为结构体变量。

故本题答案为B。

 

34.本题的考查点是一维数组的定义。

数组的常量表达式中可以包括整型常量和符号常量,不能包括变量。

也就是说,C不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值,所以选项A不正确。

而选项B事先定义一个字符常量N,所以可以在数组中作常量表达式,选项B正确。

而选项C中不能用区间表示数组大小;在D中N虽然被赋为100,但N仍然为变量,所以不对。

故本题答案为B。

35.本题的考查点是字符串的定义和赋初值。

选项A、C是对字符数组初始化,可以是逐个字符赋给数组中各元素,也可以对整个字符串赋初值,但必须是字符型(s型),并且C语言规定,只有静态存储(static)数组和外部存储(extern)数组才能初始化。

所以选项A、C都不对。

应该这样来实现:

staticchars[]="Beijing";选项B、D是想通过字符指针来实现,正确的格式是char*s;s="Beijing"。

故本题答案为D。

 

36.本题的考查点是函数的返回值。

本题函数中形参为*p,它是一个指针变量,函数调用后,返回的是p所指向的存储单元里的值。

故本题答案为C。

37.本题的考查点是函数的返回值。

函数的返回值是由return语句带回的,如果被调用的函数中没有return语句,并不带回一个确定的、用户所希望得到的函数值,但实际上,函数并不是不带回值,而只是不带回有用的值,带回的是一个不确定的值。

但并不影响程序的运行。

故选项A、C虽然没有return语句,但没有语法错误,而选项B中,定义max函数时,里面的行参也要分别定义。

而选项中只定义了x的数据类型,而y并未定义,所以会出现错误。

故本题答案为B。

38.本题的考查点是带参数的宏定义。

本题的程序中就定义了一个带参数的宏,对F(a++,b++)进行展开后,宏的返回值为12,注意a++,b++都是先使用变量值,再自增。

故本题答案为A。

39.本题的考查点是函数的返回值。

fun函数的作用是比较a、b的值,如果a>b,就返回a的值,反之,返回b的值。

在main函数中,r=fun(fun(x,y),2*z),先对括号里的进行运算,fun(x,y)的返回值为8,再比较8和12,得到r的返回值为12。

故本题答案为D。

40.本题的考查点是指针数组。

一个数组,其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都是指针变量。

int*p[3]表示此数组是指针类型的,每个数组元素(指针变量)都可指向一个整型的指针变量。

故本题答案选B。

41.本题的考查点是返回指针值的函数。

一个函数可以带回一个整型值、字符值、实型值等,也可以带回指针型的数据,即地址。

在main函数中,分别定义了一个一维和二维数组,通过循环,gets(str[i])是从终端输入一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的起始地址。

strcmp(字符串1,字符串2)函数的作用是比较字符串1和字符串2。

比较结果由函数值带回。

如果字符串1=字符串2,函数值为0;如果字符串1>字符串2,函数值为一正整数;如果字符串1<字符串2,函数值为一负整数。

所以scmp函数的作用是比较s1和s2的大小,对函数的返回值进行判断,如果字符串1<字符串2,则返回字符串1的值,反之返回字符串2的值。

所以main函数里scmp(str[0],str[1])的返回值应该是abba,strcpy(string,scmp(str[0],str[1]))再把这个返回值复制到string里,所以这时string为abba。

在执行strcpy(string,scmp(string,str[2])),同样scmp(string,str[2])时比较abba和abc的值,返回值为abba,所以再次复制到string里,所以最后string的值为abba。

故本题答案为B。

 

42.本题的考查点是结构体变量的初始化。

该题是一个对外部存储类型的结构体变量进行的初始化。

初始化后,x的值为10,y的值为100。

++(p->x)中首先p->x是把p指向结构体变量s中的x成员,此++(p->x)就相当于++x,这时x先自增,再使用,所以此时x的值为11。

故本题答案为B。

43.本题的考查点是指向指针的指针。

*c表示c间接指向的对象的地址,而**c是c间接指向的对象的值。

而在c=&b中,已经把b的地址存放在c里了,*c就指向了b的地址,b里存放的就是a的地址,那么**c应该是变量a的值了。

而且也可以用排除法排除选项A,B,由b=&a可知,这两个选项是同一个意思,变量b中的值就是变量a的地址。

所以可以排除。

故本题答案为C。

44.本题的考查点是字符数组和指针的运用。

strlen()是测试字符串长度的函数。

函数的值为字符串中实际长度,不包括'/0'在内。

str[][20]={"Hello","Beijing"}实际上是定义了一个2行20列的数组,数组的首地址是str[0][0],p+20应该是向后移了20位,所以指向了数组的str[1][0]处,所以此时测试函数的长度,应该时从str[1][0]开始往后,即"Beijing"的长度,所以输出结果是7。

故本题答案为C。

45.本题的考查点是函数。

while((*p2=*p1)!

='\0'表示将p1所指向的值赋给*p2,即将p1所指字符串复制到p2所指内存空间。

在这里“*P2=*p1”是赋值操作,而不是比较是否相等,比较应当为双等号“==”。

所以B,C,D都不对。

故本题答案为A。

46.本题的考查点是位运算符的知识点。

&是“按位与”运算符,参加运算的两个运算量的相应位都为1,则该位的结果值为1,否则为0。

~是“取反”运算符,用来对一个二进制数按位取反,即将0变1,1变0。

本题x/y&~z,x/y的值为1,~z的值为0,所以进行&运算后,整个表达式的值为0。

故本题答案为D。

47.本题的考查点是feof()函数的应用。

用fgetc()函数从指定文件读入一个字符时,当读的过程中遇到文件结束符时,函数会返回一个文件结束标志EOF,EOF在stdio.h中定义为-1。

由于ASCII码不可能出现-1,因此EOF定义为-1是合适的。

当读入的字符值等于-1时,表示读入的已不是正常字符而是文件结束符。

但以上只使用于读文本文件的情况。

现在ANSIC已允许用缓冲文件系统处理二进制文件,而读入某一个字节里的二进制文件数据的值有可能是-1,而这又恰好是EOF的值。

这就出现了需要读入有用数据而却被处理为“文件结束”的情况。

为了解决这个问题,ANSIC提供一个feof()函数来判断文件是否真的结束。

feof(fp)用来测试fp所指向的文件当前状态是否“文件结束”。

如果是文件结束,函数feof(fp)的值为1(真),否则为0(假)。

故本题答案为A。

48.本题的考查点是文件的基本概念。

文件一般指:

存储在外部介质上数据的集合。

C语言把文件看作是一个字符(字节)的序列,即由一个字符(字节)的数据顺序组成。

它不是由记录组成的,而是一个数据流。

根据数据的组织形式,可分为ASCII文件和二进制文件。

ASCII文件又称文本文件,它的每一个字节存放一个ASCII代码,代表一个字符。

二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。

故本题答案为D。

 

49.本题的考查点是指向数组元素的指针变量定义和赋值。

所谓数组的指针是指数组的起始地址,数组元素的指针是数组元素的地址。

p=&a[0][0]是把该数组的第一个元素的地址赋给指针变量p,而且此时指针变量p也是int型。

a[1][2]刚好是数组中的第6个元素,此时也就是p所指的地址,所以输出结果是6。

故本题答案为B。

50.本题的考查点是指向结构体变量的指针以及用指针处理链表。

一个结构体变量的指针就是该变量所占据的内存字段的起始地址。

可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。

指针变量也可以用来指向结构体数组的元素。

在C语言中,q->next相当于(*q).next。

即:

q所指向的是结构体变量中的next成员。

链表是一种常见的重要的数据结构。

它是动态地进行存储分配的一种结构。

它根据需要开辟内存单元。

链表中的各元素在内存中可以不是连续存放的。

所以必须利用指针变量才能实现。

即:

一个结点中应包括一个指针变量,用它存放下一结点的地址。

r->next=q表示让q指向新开辟的结点,r指向链表中最后一个结点,把r所指的结点连接在q所指的结点后面。

同样,p->next=r表示让r指向新开辟的结点,p指向链表中最后一个

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

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2