4 第四章 C51流程控制语句.pptx

上传人:精*** 文档编号:18925029 上传时间:2024-02-13 格式:PPTX 页数:26 大小:93.13KB
下载 相关 举报
4 第四章 C51流程控制语句.pptx_第1页
第1页 / 共26页
4 第四章 C51流程控制语句.pptx_第2页
第2页 / 共26页
4 第四章 C51流程控制语句.pptx_第3页
第3页 / 共26页
4 第四章 C51流程控制语句.pptx_第4页
第4页 / 共26页
4 第四章 C51流程控制语句.pptx_第5页
第5页 / 共26页
4 第四章 C51流程控制语句.pptx_第6页
第6页 / 共26页
4 第四章 C51流程控制语句.pptx_第7页
第7页 / 共26页
4 第四章 C51流程控制语句.pptx_第8页
第8页 / 共26页
4 第四章 C51流程控制语句.pptx_第9页
第9页 / 共26页
4 第四章 C51流程控制语句.pptx_第10页
第10页 / 共26页
4 第四章 C51流程控制语句.pptx_第11页
第11页 / 共26页
4 第四章 C51流程控制语句.pptx_第12页
第12页 / 共26页
4 第四章 C51流程控制语句.pptx_第13页
第13页 / 共26页
4 第四章 C51流程控制语句.pptx_第14页
第14页 / 共26页
4 第四章 C51流程控制语句.pptx_第15页
第15页 / 共26页
4 第四章 C51流程控制语句.pptx_第16页
第16页 / 共26页
4 第四章 C51流程控制语句.pptx_第17页
第17页 / 共26页
4 第四章 C51流程控制语句.pptx_第18页
第18页 / 共26页
4 第四章 C51流程控制语句.pptx_第19页
第19页 / 共26页
4 第四章 C51流程控制语句.pptx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

4 第四章 C51流程控制语句.pptx

《4 第四章 C51流程控制语句.pptx》由会员分享,可在线阅读,更多相关《4 第四章 C51流程控制语句.pptx(26页珍藏版)》请在冰点文库上搜索。

4 第四章 C51流程控制语句.pptx

第四章第四章C51流程控制语句流程控制语句4.1表达式语句及复合语句表达式语句及复合语句4.1.1表达式语句表达式语句在表达式的后边加一个分号在表达式的后边加一个分号“;”就构成了表达式语句就构成了表达式语句,如如:

a=b+;x=8;y=7;+k;可以一行放一个表达式形成表达式语句,也可以一行放多个表达式可以一行放一个表达式形成表达式语句,也可以一行放多个表达式形成表达式语句,这时每个表达式后面都必须带形成表达式语句,这时每个表达式后面都必须带“;”号,另外,还号,另外,还可以仅由可以仅由个分号个分号“;”占一行形成一个表达式语句,这种语句称为占一行形成一个表达式语句,这种语句称为空语句。

空语句。

空语句在程序设计中通常用于两种情况:

空语句在程序设计中通常用于两种情况:

(1)在程序中为有关语句提供标号,用以标记程序执行的位置。

)在程序中为有关语句提供标号,用以标记程序执行的位置。

例如采用下面的语句可以构成一个循环。

例如采用下面的语句可以构成一个循环。

repeat:

;:

;gotorepeat;

(2)在用)在用while语句构成的循环语句后面加一个分号,形成一个不语句构成的循环语句后面加一个分号,形成一个不执行其它操作的空循环体。

这种结构通常用于对某位进行判断,当不满执行其它操作的空循环体。

这种结构通常用于对某位进行判断,当不满足条件则等待,满足条件则执行。

足条件则等待,满足条件则执行。

【例【例4-1】下面这段子程序用于读取】下面这段子程序用于读取8051单片机的串行口的数据,当单片机的串行口的数据,当没有接收到则等待,当接收到,接收数据后返回,返回值为接收的数据。

没有接收到则等待,当接收到,接收数据后返回,返回值为接收的数据。

#includechargetchar()charc;while(!

RI);/当接收中断标志位当接收中断标志位RI为为0则等待,当接收中断标志位则等待,当接收中断标志位为为1则结束等待则结束等待c=SBUF;RI=0;return(c);4.1.2复合语句复合语句复合语句是由若干条语句组合而成的一种语句,在复合语句是由若干条语句组合而成的一种语句,在C51中,用一个中,用一个大括号大括号“”将若干条语句括在一起就形成了一个复合语句,复合语将若干条语句括在一起就形成了一个复合语句,复合语句最后不需要以分号句最后不需要以分号“;”结束,但它内部的各条语句仍需以分号结束,但它内部的各条语句仍需以分号“;”结束。

复合语句的一般形式为:

结束。

复合语句的一般形式为:

局部变量定义;局部变量定义;语句语句1;语句语句2;复合语句在执行时,其中的各条单语句按顺序依次执行,整个复复合语句在执行时,其中的各条单语句按顺序依次执行,整个复合语句在语法上等价于一条单语句,因此在合语句在语法上等价于一条单语句,因此在C51中可以将复合语句视为中可以将复合语句视为一条单语句。

通常复合语句出现在函数中,实际上,函数的执行部分一条单语句。

通常复合语句出现在函数中,实际上,函数的执行部分(即函数体)就是一个复合语句;复合语句中的单语句一般是可执行语(即函数体)就是一个复合语句;复合语句中的单语句一般是可执行语句,此外还可以是变量的定义语句(说明变量的数据类型)。

在复合语句,此外还可以是变量的定义语句(说明变量的数据类型)。

在复合语句内部语句所定义的变量,称为该复合语句中的局部变量,它仅在当前句内部语句所定义的变量,称为该复合语句中的局部变量,它仅在当前这个复合语句中有效。

利用复合语句将多条单语句组合在这个复合语句中有效。

利用复合语句将多条单语句组合在起,以及在起,以及在复合语句中进行局部变量定义是复合语句中进行局部变量定义是C51语言的一个重要特征。

语言的一个重要特征。

4.2C51程序基本结构与相关语句程序基本结构与相关语句4.2.1C51的基本结构的基本结构一顺序结构一顺序结构顺序序结构是最基本、最构是最基本、最简单的的结构,在构,在这种种结构中,程构中,程序由低地址到高地址依次序由低地址到高地址依次执行,行,图4-1给出出顺序序结构流构流程程图,程序先,程序先执行行A操作,操作,然后再然后再执行行B操作。

操作。

AB图4-1顺序序结构流程构流程图选择结构可使程序根据不同的情况,选择执行不同的分支,在选选择结构可使程序根据不同的情况,选择执行不同的分支,在选择结构中,程序先都对一个条件进行判断。

当条件成立,即条件语句为择结构中,程序先都对一个条件进行判断。

当条件成立,即条件语句为“真真”时,执行一个分支,当条件不成立时,即条件语句为时,执行一个分支,当条件不成立时,即条件语句为“假假”时,时,执行另一个分支。

如图执行另一个分支。

如图4-2,当条件,当条件S成立时,执行分支成立时,执行分支A,当条件,当条件P不成不成立时,执行分支立时,执行分支B。

二选择结构二选择结构条件P语句A语句B成立不成立在在C51中,实现选择结构的语句为中,实现选择结构的语句为if/else,if/elseif语句。

另外在语句。

另外在C51中还支持多分支结构,多分支结构既可以通过中还支持多分支结构,多分支结构既可以通过if和和elseif语句嵌套语句嵌套实现,可用实现,可用swith/case语句实现。

语句实现。

在程序处理过程中,有时需要在程序处理过程中,有时需要某一段程序重复执行多次,这时就需某一段程序重复执行多次,这时就需要循环结构来实现,循环结构就是能要循环结构来实现,循环结构就是能够使程序段重复执行的结构。

循环结够使程序段重复执行的结构。

循环结构又分为两种:

当(构又分为两种:

当(while)型循环)型循环结构和直到(结构和直到(do.while)型循环结)型循环结构。

构。

(1)当型循环结构)当型循环结构当型循环结构如图当型循环结构如图4-3,当条件,当条件P成成立(为立(为“真真”)时,重复执行语句)时,重复执行语句A,当条件不成立(为,当条件不成立(为“假假”)时才停)时才停止重复,执行后面的程序。

止重复,执行后面的程序。

三循环结构三循环结构图图4-3当型循环结构当型循环结构

(2)直到型循环结构)直到型循环结构直到型循环结构如图直到型循环结构如图4-4,先执,先执行语句行语句A,再判断条件,再判断条件P,当条件,当条件成立(为成立(为“真真”)时,再重复执)时,再重复执行语句行语句A,直到条件不成立(为,直到条件不成立(为“假假”)时才停止重复,执行后面)时才停止重复,执行后面的程序。

的程序。

条件P语句A成立不成立图4-4直到型循环结构构成循环结构的语句主要有:

构成循环结构的语句主要有:

while、dowhile、for、goto等。

等。

4.2.2if语句语句if语句是语句是C51中的一个基本条件选择语句,它通常有三种格式:

中的一个基本条件选择语句,它通常有三种格式:

(1)if(表达式)(表达式)语句;语句;

(2)if(表达式)(表达式)语句语句1;else语句语句2;(3)if(表达式(表达式1)语句语句1;elseif(表达式(表达式2)语句语句2;elseif(表达式(表达式3)语句语句3;elseif(表达式(表达式n-1)语句语句n-1;else语句语句n;【例【例4-2】if语句的用法。

语句的用法。

(1)if(x!

=y)printf(“x=%d,y=%dn”,x,y);执行上面语句时,如果执行上面语句时,如果x不等于不等于y,则输出,则输出x的值和的值和y的值。

的值。

(2)if(xy)max=x;elsemax=y;执行上面语句时,如执行上面语句时,如x大于大于y成立,则把成立,则把x送给最大值变量送给最大值变量max,如,如x大于大于y不成立,则把不成立,则把y送给最大值变量送给最大值变量max。

使。

使max变量得到变量得到x、y中的大中的大数。

数。

(3)if(score=90)printf(“YourresultisanAn”);elseif(score=80)printf(“YourresultisanBn”);elseif(score=70)printf(“YourresultisanCn”);elseif(score=60)printf(“YourresultisanDn”);elseprintf(“YourresultisanEn”);执行上面语句后,能够根据分数执行上面语句后,能够根据分数score分别打出分别打出A、B、C、D、E五五个等级。

个等级。

4.2.3switch/case语句语句if语句通过嵌套可以实现多分支结构,但结构复杂。

语句通过嵌套可以实现多分支结构,但结构复杂。

switch是是C51中提供的专门处理多分支结构的多分支选择语句。

它的格式如下:

中提供的专门处理多分支结构的多分支选择语句。

它的格式如下:

switch(表达式)(表达式)case常量表达式常量表达式1:

语句语句1;break;case常量表达式常量表达式2:

语句语句2;break;case常量表达式常量表达式n:

语句语句n;break;default:

语句语句n+1;说明如下:

说明如下:

(1)switch后面括号内的表达式,可以是整型或字符型表达式。

后面括号内的表达式,可以是整型或字符型表达式。

(2)当该表达式的值与某一)当该表达式的值与某一“case”后面的常量表达式的值相等后面的常量表达式的值相等时,就执行该时,就执行该“case”后面的语句,然后遇到后面的语句,然后遇到break语句退出语句退出switch语句。

若表达式的值与所有语句。

若表达式的值与所有case后的常量表达式的值都不相同,则执后的常量表达式的值都不相同,则执行行default后面的语句,然后退出后面的语句,然后退出switch结构。

结构。

(3)每一个)每一个case常量表达式的值必须不同否则会出现自相矛盾的常量表达式的值必须不同否则会出现自相矛盾的现象。

现象。

(4)case语句和语句和default语句的出现次序对执行过程没有影响。

语句的出现次序对执行过程没有影响。

(5)每个)每个case语句后面可以有语句后面可以有“break”,也可以没有。

有,也可以没有。

有break语句,语句,执行到执行到break则退出则退出switch结构,若没有,则会顺次执行后面的语句,直结构,若没有,则会顺次执行后面的语句,直到遇到到遇到break或结束。

或结束。

(6)每一个)每一个case语句后面可以带一个语句,也可以带多个语句,还可语句后面可以带一个语句,也可以带多个语句,还可以不带。

语句可以用花括号括起,也可以不括。

以不带。

语句可以用花括号括起,也可以不括。

(7)多个)多个case可以共用一组执行语句。

可以共用一组执行语句。

【例【例4-3】switch/case语句的用法。

语句的用法。

对学生成绩划分为对学生成绩划分为AD,对应不同的百分制分数,要求根据不同的等级,对应不同的百分制分数,要求根据不同的等级打印出它的对应百分数。

可以通过下面的打印出它的对应百分数。

可以通过下面的switch/case语句实现。

语句实现。

switch(grade)caseA:

printf(“90100n”););break;caseB:

printf(“8090n”););break;caseC:

printf(“7080n”););break;caseD:

printf(“6070n”););break;caseE:

printf(“60n”););break;default:

printf(“error”n)4.2.4while语句语句while语句在语句在C51中用于实现当型循环结构,它的格式如下:

中用于实现当型循环结构,它的格式如下:

while(表达式)(表达式)语句;语句;/*循环体循环体*/while语句后面的表达式是能否循环的条件,后面的语句是循环体。

语句后面的表达式是能否循环的条件,后面的语句是循环体。

当表达式为非当表达式为非0(真)时,就重复执行循环体内的语句;当表达式为(真)时,就重复执行循环体内的语句;当表达式为0(假),则中止(假),则中止while循环,程序将执行循环结构之外的下一条语句。

它循环,程序将执行循环结构之外的下一条语句。

它的特点是:

先判断条件,后执行循环体。

在循环体中对条件进行改变,的特点是:

先判断条件,后执行循环体。

在循环体中对条件进行改变,然后再判断条件,如条件成立,则再执行循环体,如条件不成立,则退然后再判断条件,如条件成立,则再执行循环体,如条件不成立,则退出循环。

如条件第一次就不成立,则循环体一次也不执行。

出循环。

如条件第一次就不成立,则循环体一次也不执行。

【例【例4-4】下面程序是通过下面程序是通过while语句实现计算并输出语句实现计算并输出1100的累加和。

的累加和。

#include/包含特殊功能寄存器库包含特殊功能寄存器库#include/包含包含I/O函数库函数库voidmain(void)/主函数主函数inti,s=0;/定义整型变量定义整型变量x和和yi=1;SCON=0x52;/串口初始化串口初始化TMOD=0x20;TH1=0xF3;TR1=1;while(i=100)/累加累加1100之和在之和在s中中s=s+i;i+;printf(“1+2+3+100=%dn”,s);while

(1);程序执行的结果:

程序执行的结果:

1+2+3+100=50504.2.5dowhile语句语句dowhile语句在语句在C51中用于实现直到型循环结构,它的格式如下:

中用于实现直到型循环结构,它的格式如下:

do语句;语句;/*循环体循环体*/while(表达式);(表达式);它的特点是:

先执行循环体中的语句,后判断表达式。

如表达它的特点是:

先执行循环体中的语句,后判断表达式。

如表达式成立(真),则再执行循环体,然后又判断,直到有表达式不成式成立(真),则再执行循环体,然后又判断,直到有表达式不成立(假)时,退出循环,执行立(假)时,退出循环,执行dowhile结构的下一条语句。

结构的下一条语句。

dowhile语句在执行时,循环体内的语句至少会被执行一次。

语句在执行时,循环体内的语句至少会被执行一次。

【例【例4-5】通过通过dowhile语句实现计算并输出语句实现计算并输出1100的累加和。

的累加和。

#include/包含特殊功能寄存器库包含特殊功能寄存器库#include/包含包含I/O函数库函数库voidmain(void)/主函数主函数inti,s=0;/定义整型变量定义整型变量x和和yi=1;SCON=0x52;/串口初始化串口初始化TMOD=0x20;TH1=0xF3;TR1=1;do/累加累加1100之和在之和在s中中s=s+i;i+;while(i=100);printf(“1+2+3+100=%dn”,s);while

(1);程序执行的结果:

程序执行的结果:

1+2+3+100=5050在在C51语言中,语言中,for语句是使用最灵活、用得最多的循环控制语句,同语句是使用最灵活、用得最多的循环控制语句,同时也最为复杂。

它可以用于循环次数已经确定的情况,也可以用于循环次时也最为复杂。

它可以用于循环次数已经确定的情况,也可以用于循环次数不确定的情况。

它完全可以代替数不确定的情况。

它完全可以代替while语句,功能最强大。

它的格式如语句,功能最强大。

它的格式如下:

下:

for(表达式(表达式1;表达式;表达式2;表达式;表达式3)语句;语句;/*循环体循环体*/for语句后面带三个表达式,它的执行过程如下:

语句后面带三个表达式,它的执行过程如下:

(1)先求解表达式)先求解表达式1的值。

的值。

(2)求解表达式)求解表达式2的值,如表达式的值,如表达式2的值为真,则执行循环休中的语句,的值为真,则执行循环休中的语句,然后执行下一步(然后执行下一步(3)的操作,如表达式)的操作,如表达式2的值为假,则结束的值为假,则结束for循环,转循环,转到最后一步。

到最后一步。

(3)若表达式)若表达式2的值为真,则执行完循环体中的语句后,求解表达式的值为真,则执行完循环体中的语句后,求解表达式3,然后转到第四步。

,然后转到第四步。

(4)转到()转到

(2)继续执行。

)继续执行。

(5)退出)退出for循环,执行下面的一条语句。

循环,执行下面的一条语句。

在在for循环中,一般表达式循环中,一般表达式1为初值表达式,用于给循环变量赋初值;为初值表达式,用于给循环变量赋初值;表达式表达式2为条件表达式,对循环变量进行判断;表达式为条件表达式,对循环变量进行判断;表达式3为循环变量更新表为循环变量更新表达式,用于对循环变量的值进行更新,使循环变量能不满足条件而退出循达式,用于对循环变量的值进行更新,使循环变量能不满足条件而退出循环。

环。

4.2.6for语句语句【例【例4-6】用用for语句实现计算并输出语句实现计算并输出1100的累加和。

的累加和。

#include/包含特殊功能寄存器库包含特殊功能寄存器库#include/包含包含I/O函数库函数库voidmain(void)/主函数主函数inti,s=0;/定义整型变量定义整型变量x和和ySCON=0x52;/串口初始化串口初始化TMOD=0x20;TH1=0xF3;TR1=1;for(i=1;i=100;i+)s=s+i;/累加累加1100之和在之和在s中中printf(“1+2+3+100=%dn”,s);while

(1);程序执行的结果:

程序执行的结果:

1+2+3+100=5050在一个循环的循环体中允许又包含一个完整的循环结构,这种结构在一个循环的循环体中允许又包含一个完整的循环结构,这种结构称为循环的嵌套。

外面的循环称为外循环,里面的循环称为内循环,称为循环的嵌套。

外面的循环称为外循环,里面的循环称为内循环,如果在内循环的循环体内又包含循环结构,就构成了多重循环。

如果在内循环的循环体内又包含循环结构,就构成了多重循环。

在在C51中,允许三种循环结构相互嵌套。

中,允许三种循环结构相互嵌套。

【例【例4-7】用嵌套结构构造一个延时程序。

】用嵌套结构构造一个延时程序。

voiddelay(unsignedintx)unsignedcharj;while(x-)for(j=0;j125;j+);这里,用内循环构造一个基准的延时,调用时通过参数设置外循这里,用内循环构造一个基准的延时,调用时通过参数设置外循环的次数,这样就可以形成各种延时关系。

环的次数,这样就可以形成各种延时关系。

4.2.7循环的嵌套循环的嵌套break和和continue语句通常用于循环结构中,用来跳出循环结构。

语句通常用于循环结构中,用来跳出循环结构。

但是二者又有所不同,下面分别介绍。

但是二者又有所不同,下面分别介绍。

1break语句语句前面已介绍过用前面已介绍过用break语句可以跳出语句可以跳出switch结构,使程序继续执结构,使程序继续执行行switch结构后面的一个语句。

使用结构后面的一个语句。

使用break语句还可以从循环体中跳语句还可以从循环体中跳出循环,提前结束循环而接着执行循环结构下面的语句。

它不能用在出循环,提前结束循环而接着执行循环结构下面的语句。

它不能用在除了循环语句和除了循环语句和switch语句之外的任何其它语句中。

语句之外的任何其它语句中。

【例【例4-8】下面一段程序用于计算圆的面积,当计算到面积大于】下面一段程序用于计算圆的面积,当计算到面积大于100时,由时,由break语句跳出循环。

语句跳出循环。

for(r=1;r100)break;printf(“%fn”,area);4.2.8break和和continue语句语句continue语句用在循环结构中,用于结束本次循环,跳过循环体语句用在循环结构中,用于结束本次循环,跳过循环体中中continue下面尚未执行的语句,直接进行下一次是否执行循环的判下面尚未执行的语句,直接进行下一次是否执行循环的判定。

定。

continue语句和语句和break语句的区别在于:

语句的区别在于:

continue语句只是结束语句只是结束本次循环而不是终止整个循环;本次循环而不是终止整个循环;break语句则是结束循环,不再进行条语句则是结束循环,不再进行条件判断。

件判断。

【例【例4-9】输出输出100200间不能被间不能被3整除的数。

整除的数。

for(i=100;i=200;i+)if(i%3=0)continue;printf(“%d”,i);在程序中,当在程序中,当i能被能被3整除时,执行整除时,执行continue语句,结束本次循环,语句,结束本次循环,跳过跳过printf()函数,只有能被()函数,只有能被3整除时才执行整除时才执行printf()函数。

()函数。

2continue语句语句return语句一般放在函数的最后位置,用于终止函数的执行,语句一般放在函数的最后位置,用于终止函数的执行,并控制程序返回调用该函数时所处的位置。

返回时还可以通过并控制程序返回调用该函数时所处的位置。

返回时还可以通过return语句带回返回值。

语句带回返回值。

return语句格式有两种:

语句格式有两种:

(1)return;

(2)return(表达式表达式);如果如果return语句后面带有表达式,则要计算表达式的值,并将语句后面带有表达式,则要计算表达式的值,并将表达式的值作为函数的返回值。

若不带表达式,则函数返回时将表达式的值作为函数的返回值。

若不带表达式,则函数返回时将返回一个不确定的值。

通常我们用返回一个不确定的值。

通常我们用return语句把调用函数取得的语句把调用函数取得的值返回给主调用函数。

值返回给主调用函数。

4.3.9return语句语句Anyquestion?

Thanks!

上机练习上机练习:

1、各自建立工程,输入例、各自建立工程,输入例4-4,4-5,4-6源程序,链接,编译,源程序,链接,编译,调试,用调试,用keil串行口窗口观察输出结果。

串行口窗口观察输出结果。

2、建立工程,将例、建立工程,将例4-2中的三个程序补充完整,链接,编译,中的三个程序补充完整,链接,编译,调试。

用调试。

用keil串行口窗口观察输出结果。

要求:

(串行口窗口观察输出结果。

要求:

(1)、输入)、输入x和和y,如果,如果x不等于不等于y,输出,输出x和和y的值,相等则不输出。

反过的值,相等则不输出。

反过来,改动此程序,实现如果来,改动此程序,实现如果x等于等于y,输出,输出x和和y的值。

的值。

(2)、)、输入输入x和和y,如,如x大于大于y成立,则把成立,则把x送给最大值变量送给最大值变量max,如,如x大于大于y不成立,则把不成立,则把y送给最大值变量送给最大值变量max,输出,输出max。

(3)、输入)、输入0100内的一个分数,输出相关的等级。

内的一个分数,输出相关的等级。

3、建立工程,将例、建立工程,将例4-3中的程序补充完整,链接,编译,调试,中的程序补充完整,链接,编译,调试,用用keil串行口窗口观察输出结果。

要求:

输入相应的等级,串行口窗口观察输出结果。

要求:

输入相应的等级,输出对应的分数段。

输出对应的分数段。

上机练习上机练习:

4、建立工程,将例、建立工程,将例4-8中的程序补充完整,链接,编译,调中的程序补充完整,链接,编译,调试,用试,用keil串行口窗口观察输出结果。

串行口窗口观察输出结果。

要求要求:

半径从半径从1到到10依次计算圆的面积然后输出,当计算到面依次计算圆的面积然后输出,当计算到面积大于积大于100时,由时,由break语句跳出循环。

语句跳出循环。

5、建立工程,将例、建立工程,将例4-9中的程序补充完整,链接,编译,调中的程序补充完整,链接,编译,调试,用试,用keil串行口窗口观察输出结果。

串行口窗口观察输出结果。

要求:

输出要求:

输出100200间不能被间不能被3整除的数。

整除的数。

作业:

作业:

6、编程实现,输入、编程实现,输入1,显示,显示A,输入,

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

当前位置:首页 > 临时分类 > 批量上传

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

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