欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第2章数据类型运算符及表达式.ppt

    • 资源ID:5639926       资源大小:1.71MB        全文页数:43页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第2章数据类型运算符及表达式.ppt

    C语言程序设计,主讲:计算机应用系,第2章 基本数据类型 运算符及表达式,2.1 C语言的数据类型2.2 标识符、常量和变量2.3 整型数据2.4 实型数据2.5 字符型数据2.6算术表达式2.7赋值表达式2.8 关系表达式和逻辑表达式2.9逗号表达式2.10 位运算,2.1 C语言的数据类型,基本数据类型(VC 6.0),说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例:,基本数据类型(Turbo C 2.0),整型,字符型,实型,有,无,说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例:,数据类型说明:不同的数据类型所占用的存储空间、表示范围、其上的运算以及运算精度不同;算法+数据结构=程序:程序设计主要涉及数据结构和算法两方面的内容。数据结构包含数据的存储形式、数据间的逻辑关系以及定义在其上的运算三方面内容,是对数据的精确描述;算法是为解决一个问题而采取的方法和步骤,是对数据处理的精确描述。算法的设计和实现依赖于特定的数据结构。,2.2标识符、常量和变量,一、标识符 所谓标识符就是名字系统。C 语言的标识符分为两类:系统标识符和用户标识符。系统标识符也叫保留字,包括系统规定的32个关键字,如int、unsigned、extern、if、else、for、sizeof等,以及系统预先定义的具有特定意义的标识符两方面内容,如printf、scanf、define、getchar等。用户标识符就是用户对程序中出现的变量、符号常量、函数、数组、文件名等实体所定义的名字,用户对这些实体命名时必须遵循标识符命名规则。,2.2标识符、常量和变量,二、常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。常量可以直接用一个字面值的形式来表示,也叫字面常量。C语言的常量分为:整型常量:12、0、-3实型常量:4.6、-1.23、0.314e1、5.6E2字符常量:a、b字符串常量:“I am a boy!”在语言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为:#define 标识符 常量表达式,如:#define PI 3.1415926/定义符号常量PIvoid main()int r=1,s;s=PI*r*r;/合法引用,编译时用3.1415926替换PI PI=PI+1;/非法引用,不能改变其值,2.2标识符、常量和变量,三、变量在程序运行过程中,其值可以被改变的量称为变量,也称内存变量。内存变量有两个要素:变量名:每个变量都必须有一个名字变量名,变量的命名必须遵循用户自定义标识符命名规则。名字就是地址!好理解吗?别人如何找我们?人的名字、身份证号都是地址。便于理解,所谓变量名就是该变量在内存中的地址。变量值:变量值存储在内存中,即该变量所对应的内存单元的内容。在程序中,通过变量名来引用变量的值,本质上就是通过地址来引用内存单元的内容。在语言中,要求对所有用到的变量,必须是“先定义、后引用”。所谓“定义”,就是根据数据类型的不同,编译系统在内存中为其分配相应的单元(参见表2.1),“引用”就是引用该变量的值。,2.2标识符、常量和变量,变量定义的一般格式:存储类型 数据类型 变量名=初值,变量名 2=初值 2;在语言中,要求对变量的定义一般放在函数定义时的形参部分、函数体或复合语句的首部,也可以放在函数的外部。在定义变量的同时进行赋初值的操作称为变量初始化。例如:float x,y;/只定义不初始化,其值不确定 int i=1,j=2;/定义同时初始化变量x、y、i、j的内存分配如图2.1 所示。,如:int,float,char,自己设定,满足标识符规定:字母、数字、下划线,且以字母或下划线开头。,;不可省,2.3整型数据,一、整型常量1.整型常量:即整常数,在语言中可用三种形式表示:(1)十进制(基数字09)。例如 10、36、-26(2)八进制(基数字07,以数字0开头)。例如012、011、017(3)十六进制(基数字09、a/Af/F,以数字0+字母 x 开头)。例如0 x36、0 xaf、0 xAB、0 x38FB 2.整型常量的后缀“L”/“l”:类似于long 型数据,这些常量在内存中 占4 个字节。“U”或“u”:表示无符号整型常数。后缀“L/l”和后缀“U/u”可同时使用以表示无符号长整型数。,如:128L(十进制的128)、300000L(十进制的300000);022L(十进制为18)、065L(十进制为53)、0300000L(十进制为98304);0X22L(十进制为34)、0XAF5L(十进制为2805)、0X300000L(十进制为3145728)。128u,0 x128Au,0126u均为无符号数。0 xA5Lu、023Lu、0X1234Lu。,2.3整型数据,二、整型变量1.整型变量分类整型变量的基本类型符为 int。根据有无符号,整型变量定义时有两个符号修饰符signed和unsigned,分别代表有符号整型和无符号整型变量;根据数值的宽度,整型变量定义时有两个宽度修饰符short和long,分别代表短整型(16b)和长整型(32b)变量。归纳起来C 语言共有六种整型变量(双括号表示可缺省):有符号基本整型signed int有符号短整型 signed short int)有符号长整型 signed long int)无符号基本整型 unsigned int无符号短整型 unsigned short int无符号长整型 unsigned long int,如:int i=1,j=1,k;定义了3个int 型变量i、j、k,各占用4个字节,其取值范围-21474836482147483647(-231231-1)。变量i、j是定义的同时初始化,其值为1,k只定义但没有初始化,这时k的值Turbo C2.0环境下是一个随机值,不确定,在VC 6.0下为0 xcccccccc。又如:short m,n;unsigned short a,b;short型变量m、n各占用2个字节16位,其取值范围为-3276832767(-215215-1)。Unsigned short型变量a、b各占用2个字节16位,其取值范围为 065535(0216-1).,思考:int a=20000,b=20000,c;c=a+b;c的值为多少?如果c定义为long型是否能解决问题?,2.3整型数据,二、整型变量2.整型变量的存储形式 计算机中的数值是以二进制形式存储的,对于n位的整型数据,若为有符号数(int、short、long)则是以二进制补码形式表示的,最高位为符号位,1代表负,0代表非负,数值位只有n-1位;若为无符号数(unsigned int、unsigned short、unsigned long)则是以二进制原码形式表示的,数值位有n位。有符号数在计算机中用补码表示,0和正数的补码和原码相同;负数的补码就是将该数的绝对值按位取反再加1。,-32768、0!对吗?为什么?,2.3整型数据,二、整型变量3.类型匹配规则 我们知道,不同类型的整型变量的范围和占用的字节数是不同的,那么如何为整型变量赋值?变量是容器,一般情况下,一个整型常量,可以赋给能容纳下其值的整型变量。,例如,宽度为16b的整型常量(-1515-)或(016-)可以赋给宽度为16b或32b(-3131-)或(032-)的整型变量;宽度为32b的整型常量可以赋给宽度为32b的整型变量;宽度为32b的整型常量赋给宽度为16b的整型变量时,从整型常量低位截取16b再赋给16b的整型变量。具体匹配规则参见2.7.3小节赋值运算中的类型转换规则。另外,在函数调用时,要求形参与实参的类型必须匹配,这时我们可以使用后缀。如形参为long int 型,在调用时实参必须用后缀“L/l”如:fun(12L)。,2.4实型常量,一、实型常量 实型也称为浮点型。实型常量也称为实数或者浮点数。在语言中,实数只采用十进制,有二种表示形式:十进制小数形式及指数形式。十进制小数形式:由数码09和小数点组成。例如:0.0、25.0、5.789、0.13、5.0、300.、-267.8230等均为合法的实数。注意,必须有小数点。指数形式:由尾数、阶码标志和阶码三部分组成。尾数为实常数,阶码为十进制整常数。其一般形式为:尾数m+阶码标志E/e+阶码n,这三部分都不可缺省。其值为:m*10n.,如:2.0E5、0.5e-7、-2.8E-2等都是合法的 小数点不能单独出现;0.0.e或E的两边必须有数,且其后面必须为整数;如:6E0.2 e5 e/E两侧不能有空格,且尾数、阶码为常量;0.5 E 3,(0.3+0.5)E(2+3),2.4实型变量,一、实型变量实型变量分为:单精度(float型)、双精度(double型)和长双精度(long double型,了解就可以)三类。VC6.0中浮点型数据所占的内存空间、数值范围及有效数字(7、16位)见下表:,2.4实型变量,二、关于规格化数与输出精度:对于给定数制N的任意一个实数,都可表示成形如:sa.b0b1bnNk的指数形式,称这样表示的数为规格化数。其中s表示符号,a为整数部分且0aN,a.b0b1bn为小数部分,N为该数制的基,k为指数。计算机内部都是二进制,所以二进制下规格化实数可表示为:s1.b0b1bn2k。实数在内存中一律用规格化数形式存放,其存储格式由数符、阶码和尾数三部分组成。下图为 VC 6.0下实型数据存放形式。另外,由于实型变量是由有限的存储单元组成的,能提供的有效数字总是有限的,因此使用实型数据时存在一定的误差,实际中要注意。,如:void main()float a=12345678.123e5,b;double x=12345678.123e5,y;y=x+20;b=a+20;printf(a=%.2f,b=%.2fn,a,b);/float 型精度丢失 printf(x=%.2f,y=%.2fn,x,y);/double 保持精度 printf(b=%e,y=%en,b,y);/以指数形式输出时为规格化数运行结果如下:a=1234567823360.00,b=1234567823380.00 x=1234567812300.00,y=1234567812320.00b=1.234568e+012,y=1.234568e+012Press any key to continue,2.5字符型数据1.字符常量定义:用单引号括起来的单个普通字符或转义字符.,如 101-A 012-n 376-x61-a 60-0 483-(),例:A-101-x41-65,如 A65,a97,048,n10,如 a A?n 101,转义字符:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例(ch2_001.c,ch2_004.c)main()printf(101 x42 Cn);printf(I say:How are you?n);printf(C Programn);printf(“V C6.0);,运行结果:(屏幕显示)A B CIsay:”How are you?”C ProgramV C6.0,语言程序设计 第二章语法要素,字符常量的值:该字符的ASCII码值,字符常量与字符串常量不同,2.字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个 0 作为字符串结束标志,例:char ch;ch=“A”;,3.字符变量,字符变量用类型说明符char进行定义,如:char ch1=a,ch2;/定义两个字符变量ch1、ch2,同时对ch1初始化 每个字符变量被分配一个字节的内存空间来存储字符的ASCII值,字符常量可以是任意一个ASCII码字符。变量的值就是相应字符的ASCII码值,如字符A的存储形式是01000001(二进制),即十进制的65,所以也可以把它们看成是整型量。语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值(=127)。在输出时,允许把字符变量按整型形式输出,也允许把整型量(=127)按字符形式输出。字符型数据可以参加简单的运算。,如:char ch1=A,ch2=D,ch3;ch4=8;ch3=ch1+1;/A+1=65+1=B,ch3为字符B ch3=ch2-ch1+1;/ch2-ch1+1=68-65+1=3+1=4,ch1至ch2之间字符的个数ch3=ch1+32;/ch2+32=65+32=97=a,将大写字母转换为小写ch3=ch4-0;/将字符8=38转换为相应的数字8ch3=0+6;/将数字6转换为相应的字符6=36ch3=ch1ch2;/关系运算:ch1ch2 6568,条件为真ch3为真(1)ch3=ch1/逻辑运算:ch1、ch2为真,所以ch3 为真(1),4.变量应用举例:,main()int a,b=2;a=1;float data;data=(a+b)*1.2;printf(“data=%fn”,data);,例2 float a,b,c;c=a%b;/Illegal use of floating point in function main,例1 int student;stadent=19;/Undefined symbol statent in function main,例:int a=2,b,c=4;float data=3.67;char ch=A;int x=1,y=1,z=1;int x=y=z=1;,例 float a;a=111111.111;/*a=111111.1*/double b;b=111111.111;/*b=111111.111*/,例/*ch2_003.c*/#define PRICE 12.5 main()int num=3;float total;char ch1,ch2=D;total=num*PRICE;ch1=ch2-A+a;printf(“total=%f,ch1=%cn”,total,ch1);,运行结果:total=37.500000,ch1=d,2.6算术表达式,一、语言运算符概述语言的运算符十分丰富,除控制语句和输入输出函数外,其他的操作都作为运算符处理。语言运算符主要分为以下10类:算术运算符七种。关系运算符六种。逻辑运算符三种。位操作运算符六种。赋值运算符:十一种。条件运算符一种逗号运算符指针运算符二种运算。求字节数运算符(sizeof)。特殊运算符:有括号(),下标,成员(,.)等几种。,%(取余)(注意:取余运算的操作数只能是整数,且结果的符号与前一操作数的符号相同),二、算术运算符和算术表达式,1、运算符+(加):3+4、+3-(减):3-5、-5*(乘):3*5/(除):5/2、5.0/2(注意,此二种形式,结果不同),5%3的值为2;-5%3的值为-2;5%(-3)的值为2;-5%(-3)的值为-2;12.3%3 若a%b 的结果为0,则有a能被b整除,2.6算术表达式,2、算术表达式 用算术运算符和括符将操作数连接起来的式子。优先级:()*、/、%+、-结合性:从左至右;表达式的值:数值型(int、long、unsigned、float、double);,例如:已知:float a=2.0;int b=6,c=3;求解:a*b/c-1.5+a+fabs(-5)=?,float a=2.0;int b=6,c=3;a*b/c-1.5+a+fabs(-5),12.0/3,4.0-1.5,2.5+97(int),99.5+5,104.5(double),思考 int a=1,b=2;表达式a/b+3的结果是多少?int a=10000,b=30000;表达式a+b的结果是多少?如何修改?,等价于:j=i;i+;所以i的值为4,j的值为3,等价于:i+;j=i;所以i的值为4,j的值为4,(1)i=3;j=i+;(2)i=3;j=+i;,3、自增与自减运算符(+、-),+i,-i:使用之前使i的值增1(或减1);,i+,i-:使用之后使i的值增1(或减1);,分析下面几种情况中i与j的值:,当+、-不与其他运算符混合使用时,+i与i+都等价于 i=i+1,-i与i-都等价于 i=i-1,如:i=2;j=-i+;求执行完这两句后i与j的值分别是多少,特殊的:设i=3,j=4,k=i+j,k=i=j=,结合性:自右至左。,分析:“+”与”-“是同优先级,且都高于“=”按结合规则,等价于:j=-(i+);结果:i的值为3,j的值为-2。,再看几个例子:如:设i=3,k=(i+)+(i+)+(i+)k=i=,9,6,如:设a=3,b=(a+)+(a+)b=a=,6,5,设a=3,b=(+a)+(a+)b=a=,8,5,设a=3,b=(a+)+(+a)b=a=,8,5,设a=3,b=(+a)+(+a)b=a=,10,5,7,4,4,int i=3;Printf(“%d%d%d”,i,+i,i+);,再看以下例子,如有定义:int i=3,j;分别执行以下语句,仔细分析、体会。j=(i+)+(i+);j=(+i)+(+i);j=i+i+(+i);/在Turbo C2.0 中i为4,j 为12!j=(+i)+(+i)+(+i);/在Turbo C2.0 中i为6,j 为18!第一条语句好理解,两个(i+)都是先引用后自增,所以j 的值为6,i为5;第二条语句好理解,两个(+i)都是先自增后引用,所以j 的值为10,i为5;第三条语句先执行i+i为6,6+(+i),先自增后引用,所以j 的值为10,i为4(VC6.0);第四条语句先执行(+i)+(+i),结果i为5,j 为10,再执行10+(+i),先 自增后引用,其结果是i为6,j为16(VC6.0下.),对于自增自减应注意:在同一个表达式中避免对同一个变量多次使用,使用时应加括号以增加程序可读性;编译环境不同结果可能不同。本书的编译环境为VC6.0。对计算机等级考试笔试部分,应以Turbo 2.0 环境为准,机试以VC 6.0环境为准!,2.7赋值表达式,1、赋值运算符=(执行功能:把=右边的表达式的值,存入=左边的变量对应的存储空间,即给此变量赋值)3=2+1 a=a+22、赋值表达式:用赋值运算符将变量和表达式连接起来的式子 形式:=求值规则:将“=”右边表达式的值赋给左边的变量。优先级:!算术关系&|赋值 结合性:自右至左;表达式的值:被赋值变量的值。例如:(1)x=(y=12)/4(2)x=y=12/4(3)x=(y=12/4)(4)(x=y)=12/4,2.7赋值表达式,3、复合赋值运算符*=、/=、%=、+=、-=,=,后a=-8。表达式a+a的值为8,a-=8后a=-4,a+=-4后a=-8,2.7赋值表达式,4、赋值运算中的类型转换如果赋值运算符两边的数据类型不相同,系统把赋值号右边的表达式类型自动转换成左边变量的类型,然后再赋值给变量。通常情况下,实型赋予整型,舍去小数部分;整型赋予实型,在整型数后增加小数部分(小数部分的值为0),数值不变,以浮点形式存放;字符型赋予整型,字符型为一个字节(高位为0),而整型为2字节或4 字节,故将字符的ASCII码值放到整型量的低八位中,高位为0。整型赋予字符型,截取低八位赋予字符量。对于整型数据,存在有符号数和无符号数以及数据长度的不同,赋值时要注意:,1、赋值号左边变量的长度等于或小于其右边数据类型的长度,以补码形式原样赋值或截取后赋值。,2、赋值号左边变量的长度大于其右边数据类型的长度,以补码形式原样赋值或赋值后符号扩展。,如有定义:unsigned short a;/宽度16bshort b=-1;/宽度16b,存储形式:0 xFFFFint c=-65538;/宽度32b,存储形式:0 xFFFEFFFEunsigned int d=65535;/宽度32b,存储形式:0 x0000FFFF,则有:a=b;/原样(0 xFFFF)赋值,a 的值为65535a=c;/截取c(0 xFFFFFFFE)低16位,为0 xFFFE,a为65534b=c;/截取c(0 xFFFF0000)低16位,为0 xFFFE,b的值为-2b=d;/截取d(0 x0000FFFF)低16位,为0 xFFFF,b的值为-1,如有定义:unsigned short a=65535;/宽度16b,存储形式:0 xFFFFshort b=-1(0 xFFFF);/宽度16b,存储形式:0 xFFFFint c;/宽度32bunsigned int d;/宽度32b,则有:c=b;/符号扩展,c的值为-1,存储形式:0 xFFFFFFFFd=b;/b的存储内容(0 xFFFF)原样赋给d,d的值为65535c=a;/a 的存储内容(0 xFFFF)原样赋给c,c符号扩展,值为-1(0 xFFFFFFFF)d=a;/a原样赋值,d值为65535,2.8关系表达式和逻辑表达式,一、语言的逻辑值我们知道,无论是关系表达式和逻辑表达式,其值都是“逻辑型”的,即真或假。但是,C 语言没有专门的逻辑型数据,所以,对于关系表达式和逻辑表达式,C语言约定:其值为逻辑“真”时,用数值“1”表示,其值为逻辑“假”时用数值“0”表示。关系表达式、逻辑表达式的值1、0当然可以参与其它种类的运算,例如算术运算、逻辑运算等。同时,C语言规定:表达式的值“非0”表示逻辑真,“0”表示逻辑假。由此可以说,C语言的所有表达式都有一个逻辑值“真”或者“假”,都可用来构造一个“条件表达式”,以构成灵活多变的选择、循环条件,这也是C语法的自由之处。,1、6种关系运算符:=!=2、关系表达式:用关系运算符将表达式连接起来的式子 优先级:(=)(=!=)结合性:自左至右;表达式的值:若为真,则结果为1;若为假,则结果为0。,35 值为:32 值为:设x=-2;-3x-1 值为:设x=1;2x4 值为:,例如,二、关系运算符和关系表达式,求如下关系表达式的值:,0,0,0,1,算术运算符优先级高于关系运算符3+(43)*4 值为:3+43*4 值为,3,1,注意,不能用数学里习惯的关系运算符连用表示区间关系!,2、逻辑表达式:用逻辑运算符将表达式连接起来的式子 优先级:!&|结合性:自左至右;表达式的值:若为真,则结果为1;若为假,则结果为0。,三、逻辑运算符和逻辑表达式,1、3种逻辑运算符:&|!,参与逻辑运算的操作数叫逻辑量。,逻辑量可以是整型、实型、字符型和指针类型,其中,0,0.0,0,NULL代表假,其余逻辑量代表真。,int a=5;float b=3.5;!a()!(a 0)()(a 0)(),例如,0,1,1,0,0,0,1,1,0,0,0,1,例如表达式运算如下:,3、混合优先级:!高 算术运算符 关系运算符&和|赋值运算符 低,4-0,1&2,8 4,1,0,1,5 3&2|8 4-!5,例如:(1)a=0;b=1;c=a+执行后:a为,b为,c为。,4、逻辑或优化和逻辑与优化:,在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。短路规则!,1,1,0,(2)a=1;b=1;c=0;d=-a b-(c=b+3);执行后:a为,b为,c为,d为。,0,0,0,1,例如:(1)n是小于m的偶数:(2)year是闰年:(能被4整除但不能被100整除,或能被400整除),逻辑表达式一般用于控制语句中的条件:,n m&n%2=0,year%4=0&year%100!=0|year%400=0,2.9逗号表达式,在语言中逗号“,”可以作为分隔符,但又是一种运算符,称为逗号运算符。用逗号“,”连接起来的一个或多个表达式,称为逗号表达式。其一般形式为:表达式1,表达式2,表达式n其中的表达式i(1in)为C语言任意合法表达式。在C语言的所有运算符中,逗号运算符优先级别最低,左结合,其求值顺序是:表达式1、表达式2,最后求表达式n的值,并以表达式n的值作为整个逗号表达式的值。,如:int a=2,b,c=6;y=(b=a+1),(b+c)/y的值是3,表达式的值是9。y=(b=a+1),(b+c)/y的值是9。另外变量定义以及函数参数中的逗号“,”不是运算符,而是作为分隔符。如:int a=2,b=4,c=6,y;/这里的逗号不是运算符,而是分隔符。printf(“%d”,(x,y,z));/这里的逗号既作运算符,又作分隔符。,2.10 位运算,一、整型常量,如:,本章作业,一、选择题:1-15题二、填空题:1-3题三、简答题:2、4题,

    注意事项

    本文(第2章数据类型运算符及表达式.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开