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

    C语言课件-3数据类型、运算符与表达式.ppt

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

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

    C语言课件-3数据类型、运算符与表达式.ppt

    第三章 数据类型、运算符与表达式,3.1 语言的字符集3.2 语言的数据类型3.3 常量与变量3.4 变量的定义与赋值3.5 符号常量3.6 运算符与表达式3.7 各类型数据的混合运算3.8 不同类型赋值的结果,3.1 语言的字符集,3.1.1 语言字符集:1、字母:小写字母az、大写字母AZ。2、数字:09共10个。3、空白符:空格符、制表符、换行符等。4、标点和特殊字符。5、字符常量,字符串常量和注释中还可以使用汉字或其它可表示的图形符号。,字符是组成语言的最基本的元素。,3.1.2 语言词汇(六类),1、标识符:变量名、函数名、标号等。2、关键字:关键字是由语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同。P365(1)类型说明符:用于定义、说明变量、函数或其它数据结构的类型。(2)语句定义符:用于表示一个语句的功能。(3)预处理命令字:用于表示一个预处理命令。,标识符:由英文字母、数字和下划线这三种字符组成且第一个字符必须为字母或下划线。作用:用来给变量、函数等命名 注意:1.区分大小写英文字母 2.关键字(保留字)不能作标识符 例:book、Book、int1、Int、printf、_a12 都可作标识符 5a、$、p#、int、x+y 都不可作标识符,函数名不是保留字,保留字,I大写,3、运算符:运算符与变量,函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成。4、分隔符 在语言中采用的分隔符有逗号和空格两种。5、常量:在后面章节中将专门给予介绍。6、注释符:C语言的注释符是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向用户提示或解释程序的意义。,其值不可以再分解为其它类型。,值用来表示某个变量在内存储器中的地址,根据已定义的一个或多个数据类型用构造的方法来定义的。构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。,3.2 语言的数据类型,在调用函数值时,通常返回一个函数值,这个函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明。但是,也有一类函数,调用后并不需要向调用者返回函数值,这种函数可以定义为“空类型”。其类型说明符为void。,3.3 常量与变量,基本数据类型分为:1、常量:在程序执行过程中,其值不发生改变的量 2、变量:其值可变的量称为变量。,在程序中,常量是可以不经说明而直接引用的,而变量则必须先定义后使用。,3.3.1 常量,直接常量(字面常量):n整型常量:12、0、-3;n实型常量:4.6、-1.23;n字符常量:a、b。n字符串常量:“ABC”、“123”。标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。符号常量:用标示符代表一个常量。在语言中,可以用一个标识符来表示一个常量,称之为符号常量。,在使用之前必须先定义,#define,一、整型常量:1.十进制整数:123、-76、0 2八进制整数:076、-0253 076转换成十进制:7*8+6 3十六制整数:0 xa、0 x20、0 xf4 0 xf4转换成十进制:15*16+4,程序执行过程中值不发生改变的量,只有整数,标识符号,常量,整型数据在内存中的存放形式:,如果定义了一个整型变量i:int i;i=10;十进制数10是以二进制形式表示的:1010,每一个整形变量在内存中占内2字节,存放示意图为:事实上,数值是以补码表示的:n正数的补码和原码相同;n负数的补码:将该数的绝对值的二进制形式按位取反再加1。,例如:求-10的补码:10的原码:取反:再加1,得-10的补码:由此可知,左面的第一位是表示符号的。,二、实型常量(浮点型):也称为实数或者浮点数。实数只采用十进制,有二种形式:,小数形式,指数形式,由数码0 9和小数点组成。小数形式必须有小数点。,由十进制数、加阶码标志“e”或“E”、阶码(只能为整数,可以带符号)组成。其一般形式为:a E n(a为十进制数,n为十进制整数)其值为:a*10n。,实型常量实例:,小数形式:12.、.71、0.71、3.14 指数形式:6.945 e-8 注意:指数形式(科学表示法)中,尾数和阶码都不能省略、阶码只能为整型常量、只有十进制形式 6.945 e 8,尾数,阶码,6.945*10-8,小数点不能省略,注:任一字符都可用ddd或xhh表示,其中ddd为该字符的ASCII码八进制形式、hh为该字符的ASCII码十六进制形式 例:A、101、x41均表示A,三、字符常量(一个字符)两种表示方式:1在字符前后加单撇号:y、3、$2用转义字符表示(P48表3.3):,n 换行,r 回车,”表示”,12 换行,15 回车,xa 换行,134,xd 回车,x5c,0-7,0-9a-f,整型常量与转义字符不能混淆,四、字符串常量:由两个双撇号括起来一串字符,其中字符个数=0个,字符串常量和字符常量区别:1)字符常量由单引号括起来,字符串常量由双引号括起来。字符常量只能是单个字符,字符串常量则可以含一个或多个字符。2)可以把一个字符常量赋予一个字符变量,不能把一个字符串常量赋予一个字符变量。3)字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符0(ASCII码为0)。这是字符串结束的标志。,常量总结,一、整型常量:二、实型常量:三、字符常量:四、字符串常量:,以0结束。,例如:字符串“C program”在内存中所占的字节为:字符常量a和字符串常量“a”在内存中的区别:a在内存中占一个字节,可表示为:a在内存中占二个字节,可表示为:,例:-3、3、3、“3”在内存中的存放形式:3:3:“3”:-3:,?,0,ASCII码值为(51)10(110011)2,1、计算字符串长度(其中字符个数)时要认 真区分转义字符与一般字符如:”x1818qw+1681676”中字符个数为?2、字符串存储到内存中所占的字节数为:字符个数+1,字符串常量可用转义字符表示 例:”This is a C programn”是字符串常量,它也可表示为:”This is a 103x20programn”,*若把字符串存储到内存中,系统会自动在其末尾加一个0,8*8+3=67,2*16=32,10,例1.main()printf(”abtttpracticetbookn”);结果 ab t practice book,*转义字符的使用例子 n换行、r回车、t水平跳到下一个tab位置b退格、f换页,8个字符,9,17,33,例.void main()printf(”pencilbbbxxxn”);,先显示pencil再退三格用xxx覆盖cil,先打印pencil再重复打印xxx覆盖cil,退格,显示结果:penxxx,例.void main()printf(”room”);printf(”penciln1234567890r0t1”);显示结果:roompencil 0 10打印结果:roompencil 1234567890,换行,回车,水平跳到下一个Tab位,0,1,先显示1234567890,用标识符命名,习惯用小写 1、整型变量类型:(1)signed int(2)signed short int(3)signed long int(4)unsigned int(5)unsigned short int(6)unsigned long int区别:每个变量在内存中所占字节数 所能存放的数值范围,3.3.2 变量,2字节16位,4字节32位,P43表3.1,-3276832767,0 65535,各类整型量所分配的内存字节数及数的表示范围,以13为例:int型:short int型:long int型:unsigned int型:unsigned short int型:unsigned long int型:,整型数据的溢出,void main()int a,b;a=32767;b=a+1;printf(%d,%dn,a,b);,32767:,运行结果:32767,-32768,-32768:,2、字符型变量类型:*字符型变量是用来存放单个字符常量的ASCII码,不是字符本身。整型变量与字符型变量可混淆使用。例如:char a,b;(1)char(2)unsigned char区别:对变量值ASCII码的理解 char 一个数的补码 unsigned char一个不带正负号的整数,字符变量的类型说明符,字符数据在内存中的存储形式及使用方法,每个字符变量分配一个字节的内存空间,因此只能存放一个字符。字符值以ASCII码的形式存放。如:x的十进制ASCII码是120 y的十进制ASCII码是121x:y:允许对整型变量赋以字符值,或对字符变量赋以整型值。允许把字符变量按整型量输出,或把整型量按字符量输出。整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。,120的二进制代码,3、实型变量类型(1)float(2)double*(3)long double 区别:每个变量在内存中所占字节数 float4、double8 所能存放的数值范围 float 10-381038 double 10-30810308 有效数字位数float7、double16,实数3.14159在内存中的存放形式如下:,数符,指数,小数部分,占的位数愈多,数的有效数字愈多,精度愈高。,占的位数愈多,能表示的数值范围愈大。,实型数据的舍入误差。void main()float a,b;a=123456.789e5;b=a+20;printf(%fn,a);printf(%fn,b);注意:1.0/3*3的结果并不等于1。,大数加小数,有效数字7 位,前7位有效,void main()float a;double b;a=33333.33333;b=33333.33333333333333;printf(%fn%fn,a,b);结果:33333.332031 33333.333333,a是单精度浮点型,有效位数七位。整数已占五位,故小数二位之后均为无效数字,b是双精度型,有效位为十六位。但Turbo C 小数后最多保留六位,其余部分四舍五入。,一、定义变量类型:;若变量表中含有多个变量,它们之间 用逗号隔开。最后一个变量名之后必须以“;”号结尾 例:unsigned int i,j;或 unsigned i,j;,3.4 变量定义与赋值,一般所有变量都在声明部分定义类型,二、给变量赋值 把“=”右侧的值赋给“=”左侧的变量,1、赋初值:定义变量类型时给变量赋值 在相应变量后写=例:int a=123,b=456,sum;2、赋值表达式:=赋值语句:=;例:a=123 sum=a+b a=123;sum=a+b;,表达式末尾加“;”后即变成语句,等价于,int a,b,sum;a=123;b=456;,表达式本身有值的概念,其值同“=”左边变量相同;而语句本身无值的概念;表达式是用来构成语句的。注:表达式中变量可用给该变量赋值的赋值表 达式代替(应加圆括号)例:a=123;b=456;sum=a+b;可改为:sum=(a=123)+(b=456);注意:在定义中不允许连续赋值,如:int a=b=c=5是不合法的 而int a,b,c;a=b=c=5则是合法的,void main()char a,b;a=120;b=121;printf(%c,%cn,a,b);printf(%d,%dn,a,b);运行结果:x,y 120,121,向字符变量赋以整数,定义a,b为字符型,赋值语句中赋以整型值,格式符c“,输出字符,格式符为d,输出整数,void main()char a,b;a=a;b=b;a=a-32;b=b-32;printf(%c,%cn%d,%dn,a,b,a,b);运行结果:A,B 65,66,a,b被定义为字符变量并赋予字符值,用字符的ASCII 码参与运算,大小写字母的ASCII 码相差32,因此运算后把小写字母换成大写字母。然后分别以整型和字符型输出,3、变量、变量名、变量类型、变量值、给变量赋值之间的关系,变量杯 变量名杯子的号码变量类型所装的材料名称 变量值所装的东西多少 给变量赋值把某材料倒进杯子,若类型不一致、以变量为准,int a;a=123.5;则a为123,*变量的特性:,一个变量只有一个值新的不来、旧的不去,新的一来、旧的立即丢失 取之不尽例:int a;a=3;a=7.8;,这段时间 a 值为3,这段时间 a 值为7,4、两类常用赋值表达式的特别表示,(1)自增、自减运算符=+1 可用+代替 例:i=i+1、count=count+1=1 可用 代替 例 k=k1、num=num1+与+的区别+的值为变量增一前的值+的值为变量增一的值同样,的值为变量减一前的值 的值为变量增一的值,提高可执行程序的质量,+i+count,k num,例:void main()int i,j,k;i=3;j=+i;i=3;k=i+;printf(”%d,%dn”,j,k);i=3;j=i;i=3;k=i;printf(”%d,%dn”,j,k);,j为4i为4,i为3重新赋值,k为i增1前的值,i为3重新赋值,结果:4,3 2,3,例:void main()int i,j,k;i=3;j=+i;k=i+;printf(”%d,%dn”,j,k);i=3;j=i;k=i;printf(”%d,%dn”,j,k);,j为4i为4,k为4,运行之后i为5,j为3,运行之后i为2,结果:4,43,1,(2)复合的赋值运算符=+表达式=表达式=*表达式 分别可用+=表达式=表达式*=表达式 代替,i=i+3sum=sum+y+8,n=n2sum=sum3*w,n=n*2sum=sum*(3+w),i+=3sum+=y+8,n=2sum=3*w,n*=2sum*=3+w,+=、=、*=、/=%=求余=右移&=按位与=按位异或|=按位或,10种复合的赋值运算符:,3.5 符号常量,用#define命令宏定义一个符号常量(用标识符命名)代表某一常量作用:减少程序中重复书写某些常量的工作量例#define PI 3.141592#include void main()printf(”%f,%f n”,sin(35*PI/180),cos(35*PI/180);注意:1.符号常量名中的英文字母习惯用大写 2.不能象给变量赋值那样给符号常量赋值 3.符号常量即以后要讲的宏名的用途。,调用函数库中的函数,a=3.14159合法,3.14159=a非法,例:#define S“This is a C Program.”void main()printf(S);,双引号,3.6 运算符与表达式,由P365附录III中的运算符把常量、符号常量、变量、函数等连接起来的有意义的式子:如:a+=a*=(b=2)/(float)(int)(a=4.5).,(1)算术运算符:用于各类数值运算:加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(+)、自减(-)共七种。(2)关系运算符:用于比较运算:大于()、小于(=)、小于等于(=)和不等于(!=)六种。(3)逻辑运算符:用于逻辑运算:与(&)、或(|)、非(!)三种。,3.6.1 语言的运算符:P365,(4)位操作运算符:参与运算的量,按二进制位进行运算:位与(&)、位或(|)、位非()、位异或()、左移()六种。(5)赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,=,=,=)三类共十一种。(6)条件运算符:这是一个三目运算符,用于条件求值(?:)。,(7)逗号运算符:用于把若干表达式组合成一个表达式(,)。(8)指针运算符:用于取内容(*)和取地址(&)二种运算。(9)求字节数运算符:用于计算数据类型所占的字节数(sizeof)。(10)特殊运算符:有括号(),下标,成员(,.)等几种。,3.6.2 表达式,一、赋值表达式:1三种形式的赋值表达式 一般赋值表达式:自增自减表达式:复合赋值表达式:,2、赋值表达式举例:,a=b=c=5a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2),二算术表达式:类似数学中的代数式。例:,pow(a,2)*b/c+1.5*fabs(sin(x*3.14159/180)/a,P371函数,a2b/c+1.5|sin(3.14159x)/180|/97,abs(整型)fabc(实型/整型),1、算术运算符的有关说明:,两个整数相除,如果有小数部分:1、结果为整数:舍去小数部分,取整;2、结果为负数:舍入方向不固定,采取“向零取整”的方法,即取整后向“0”靠拢。如:-5/3=-1,l运算符的优先级:P365,优先级较高的先于优先级较低的。一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。l运算符的结合性:分为左结合性(自左至右)和右结合性(自右至左)。x-y+z(左结合性):x=y=z(右结合性):,与“-”号结合,执行x-y,执行+z,执行y=z,执行x=(y=z),2、算术表达式的有关说明:,1、对表达式:(+i)+(+i)+(+i)Turbo C将3 作为表达式中所有i的值,因此3个i相加,得表达式的值为9。编程时应避免这种歧义性,应写成:i=3;a=i+;b=i+;c=i+;d=a+b+c;2、设i的初值为3,语句printf(“%d,%d”,i,i+);有的系统具有左结合性,而另一些系统具有有结合性,结果分别为:3,3和4,3。编程时应避免这种歧义性,应写成:j=i+;printf(“%d,%d”,j,i);,3含有强制类型转换运算符的表达式:即表达式中含(类型名)(表达式)例(int)a例 w+(float)(j%k)/5,整体的值为int类型,a及a的值为原类型,值为float类型,j、k及它们的值仍为原来的类型,例:void main()float x=3.6;int k;k=(int)x/5;printf(”x=%f,k=%dn”,x,k);结果 x=3.600000,k=0,3,强制转换运算符的意义,例如:1/2*sqrt(x+y),结果为0,int,float,int,float,(float)1/2*sqrt(x+y),0.5取整,一般写为1.0/2,例如:float k=3必须写成 abs(int)k)因为abs函数中的参数必须是整型的见P371,求整数的绝对值函数,三、逗号表达式:,格式:表达式1,表达式2,表达式n 功能:从左至右顺序计算各表达式的值,以表达式 n的值作为逗号表达式 的值(整体)例1.定义:int s,p;则执行 s=5;p=s+,+p,p+2,p+;,优先级最低,p为5,先将5赋给p后,s的值再加1,p为6,p的值是7,是整个逗号表达式最终的值,未赋值,例:若有定义:int a,b;则表达式:a=4,b=3,a+b+2,a+,a+b+2,值是10,是整个逗号表达式最终的值,a为4,b为3,a为5,最终b值为3,优先级高,a、b未赋值,例:void main()int a=2,b=4,c=6,x,y;y=(x=a+b),(b+c);printf(y=%d,x=%d,y,x);运行结果:y=6,x=6,x为6,赋值优先,y为6,逗号表达式的值为10,对于逗号表达式还要说明两点:,1)逗号表达式一般形式中的表达式1和表达式2 也可以又是逗号表达式(嵌套)。例如:表达式1,(表达式2,表达式3)因此可以把逗号表达式扩展为以下形式:表达式1,表达式2,表达式n整个逗号表达式的值等于表达式n的值。2)程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。,并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。,四、组合运算符,例:i+j 可理解为(i+)+j 不能理解为 i+(+j)组合原则:,尽可能多地(自左而右)将若干个字符组成一个运算符,五、表达式的运算顺序:,一般按从左至右、P 365 附录III 优先级序数(1先,7后)进行;(但赋值运算、自增、自减、负号运算、类型转换等从右至左),优先级高的先算,“左结合性”:自左至右的结合方向。算术运算符的结合性是自左至右,即先左后右。如:表达式 x-y+z(1)y应先与“-”号结合,执行x-y运算;(2)再执行+z的运算。“右结合性”:自右至左的结合方向。最典型的右结合性运算符是赋值运算符。如:表达式 x=y=z,由于“=”的右结合性,(1)先执行y=z运算;(2)再执行x=(y=z)运算。,语言运算符中有不少为右结合性,应注意区别,以避免理解错误。附录III,3.7 各类型数据的混合运算,在计算过程中、若某次运算时碰到运算对象为不同类型才需要进行转换,且由低向高转换。注意边计算边转换。但 float型数据都要转换成double型 char型与short型数据都要转换成int型 转换规则如下图:,float,低,高,P54,例:设已定义 float a=14.7;long c=5;计算 13/5*a+(a+b)/c的步骤及转换类型,13/5*a+(a+b)/c,1,2 int,2.0double,14.7double,2,29.4 double,97 int,98 int,3,195 int,195 long,5 long,4,39 long,39 double,5,68.4 double,例:设定义 float a;int b;从右至左运算表达式:a+=a*=(b=2)/(float)(int)(a=4.5),1,2 int,2,4.5 float,3,4 int,4,4.0 float,2.0double,4.0 double,5,0.5 double,4.5 float,4.5 double,6,2.25 double,7,4.5 double,2.25 double,给a 赋值,给a 赋值,例:void main()float PI=3.14159;int s,r=5;s=r*r*PI;printf(s=%dn,s);运行结果:s=78,实型,此语句将r和PI都转换成double型计算,结果为double型,但由于s为整型,故赋值结果仍为整型,舍去了小数部分。,3.8 不同类型赋值的结果,赋给变量的数据类型、大小一般不受限制唯一限制:3.8.1 变量或数据中含有实型的:值大小不变1、double型数据赋给float型,截取前7位有效数据。2、float型数据赋给double型,有效数据扩展到16位,但范围不能溢出。3、若把实型数据赋给整型变量,则舍去小数部分。,不允许给实型变量赋超出其所能表示范围的数据,例:void main()float a=6.16392e1;int i;char j;i=a;j=a;printf(”%d,%d,%c n”,i,j,j);j=12;a=j;printf(”%fn”,a);结果:61,61,=12.000000,61,61,整形转实型,6.16392*10,短的整型数据赋给长的整型数据:值大小不变 例:void main()unsigned a1=32768;int a2=32768;long b1,b2;b1=a1;b2=a2;printf(”%ld,%ldn”,b1,b2);结果 32768,32768 注意:a2值为32768+k*65536且范围内,2字节16位,-32768,4字节32位,转换过,int范围:3276832767,数,系数,模 232,例:void main()unsigned char c1=376;char c2=376;int a1,a2;a1=c1;a2=c2;printf(”%d,%dn”,a1,a2);结果 254,2 注意:char(带符号整数)范围128127 c2值为254+k*256且范围内,范围:0256,范围:-128127,(254)10,数,系数,模 28,3.8.3 长的整型数据赋给短的整型变量:取所需的低位void main()int a=355;char c1;unsigned char c2;c1=a;c2=a;printf(”%c%c%d,%dn”,c1,c2,c1,c2);结果¥99,157,范围:0256,范围:-128127,-355+256,范围:-3276832767,-355+512,-99+256=157,代表¥,int a 范围-3276832767,十进制:,65536-355=65181,十六进制:,FE9D,每一位为一个8位二进制,取低位:9D(十六进制),十进制157,查 ASCII,转成正数,1、存储到int变量中:模是65536,范围是(3276832767)2、存储到long 变量中:类似int,但用32位,模是4294967296,范围(-21474836482147483647)3、存储到char 变量中:模是256,范围(128127),4、存储到unsigned char 变量中:模是256,范围(0255)5、存储到unsigned int 变量中:模是65536(16位,2字节),范围(065535)6、存储到unsigned long 变量中:数据存储形式,类似unsigned int,但用32位。模是:4294967296 范围:(04294967295),

    注意事项

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

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开