第3章数据类型和表达式12合知识讲解_第1页
第3章数据类型和表达式12合知识讲解_第2页
第3章数据类型和表达式12合知识讲解_第3页
第3章数据类型和表达式12合知识讲解_第4页
第3章数据类型和表达式12合知识讲解_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章数据类型和表达式C++语言程序设计王卫红/曹玉辉河北经贸大学信息技术学院主要内容预备知识补充数据类型常量变量运算符和表达式函数习题*预备知识补充1.十进制(Decimal)代码:用0~9十个不同的符号来表示即基数(Radix)为10的进制。运算规则:逢十进一,借一当十2.二进制(Binary)代码:只有两个代码“0”和“1”,基数为二的进制运算规则:逢二进一,借一当二。

4.十六进制(Hexadecimal)代码:采用0~9和A、B、C、D、E、F运算规则:逢十六进一,借一当十六。

3.八进制(Octal)代码:只有两个代码“0~7”,基数为八的进制运算规则:逢八进一,借一当八。

1010+011110001(0A)H+(07)H=(11)H常用进制

进位计数制的基数与位权N=an-1×rn-1+an-2×rn-2+…+a0×r0+a-1×r-1+…+a-m×r-mr进制数(Radix-rNumberSystem)N可表示为:R进制数用r个基本符号(例如0,1,2,…,r-1)表示数值基数权数码678.34=6×102+7×101+8×100+3×10-1+4×10-2表3-1不同数制各位的权数(用十进制数表示)

基数4基数3基数2基数1基数0十进制100001000100101二进制168421八进制40965126481十六进制6553640962561612.十进制数据转换成其它进制整数部分采用的是倒除法,即“除基数取余”的方法。小数部分采用“乘基数取整”法。【例2】将(236)D转换成二进制。转换过程如图1-1所示。(236)D=(11101100)B100(D)=144(O)=64(H)例100.345(D)≈1100100.01011(B)1.3800.34520.69022

0.7602

1.5202

10025022521226232100010011

1.04八进制100812818044110016604616十六进制整数部分:除以r取余数,直到商为0,余数从下到上排列。小数部分:乘以r取整数,整数从上到下排列。表3-2将二进制数转变成十六和八进制数000000000001001100100022001100330100004401010055011000660111007710000108100101191010012A1011013B1100014C1101015D1110016E1111017F二进制 八进制十六进制3.1C++的数据类型短整型(short)整型(int)长整型(long)整型实型数值类型字符类型(char)枚举类型(enum)逻辑类型结构体类型(struct)联合类型(union)类类型(class)基本类型复合类型引用类型数据类型单精度型(float)双精度型(double)长双精度型指针类型引用类型数组类型注:整型数据、字符型数据又可加修饰符[signed]有符号型,unsigned表示无符号型。空类型(void)

在程序中,数据通常以两种形式存在:常量和变量。常量在程序执行过程中值不能被改变的量称为常量。C++提供了:整型常量、实型常量、字符常量、字符串常量、枚举常量以及指针常量等。在程序中常量以两种形式存在:字面常量和符号常量(标识符常量).1.字面常量:包括数字常量、字符常量和字符串常量。即字面本身就是它的值。如15,2.4,‘f’,“asd”2.符号常量:在程序中用标识符代表的常数,对应一个存储空间。可以用define、const等命令定义。使用符号常量的优点:(1)含义清楚(2)修改方便3.2常量与变量结果:7741#include<iostream.h>intx=6;#defineNU1x+5//末尾不加;constintNU=x+5;voidmain(){ cout<<NU*7<<NU1*7<<endl;}思考:为何此程序会出现这样的结果?如何改进此程序?#define<符号常量><字符序列>const<类型关键字><符号常量>=<初值表达式>…;变量是其值可以被改变的量。每一个变量都属于一种数据类型,用来表示(即存储)该类型中的一个值。3x变量名变量值存储空间(4字节)变量

变量名、变量类型和存储单元是变量的三要素。进行变量声明后,计算机系统会为声明的变量分配存储空间,用以存放数据.

变量名实际上是一个符号地址。在程序中对变量的赋值和取值操作实际上是通过变量名找到相应的内存地址,然后从对应的存储空间中读取数据。如intx=3;如:inta;floatx,y;charch;intx=4,y=21;//声明时初始化charch=‘A’;

1.变量的声明

(1)格式:数据类型变量名列表;

2.变量的赋值

格式:变量=表达式;如:x=6;y=x+2;a=sqrt(b);y=x=x+2;注1.赋值号是

=,而等于号是==

注2.赋值运算符为右结合性,先计算赋值号右边的表达式的值,再将值赋给左边的变量,最后一个式子等价于y=(x=x+2);注3.表达式包括常量,变量,函数,其他合法的C语言表达式

注4.C++中所有变量必须“先定义,后使用”。“先存值后取值”#include<iostream.h>#defineM=1constintN=10;voidmain(){intx,y;cin>>x>>y;if(x<N)y=M*x+1;elsey=(x+M)*x-3;cout<<x<<““<<y<<endl;}思考:此程序是否有问题?数值类型1.整型常量整型常量可以用十进制、八进制和十六进制表示:a)十进制表示,第一个数字不能是0,如:123,-108,0等。b)八进制表示由数字0打头,如:0123,-011等。c)十六进制表示由0x或0X打头,如:-0x1a2c,0xff等。

可在整型常量的后面加上l或L,表示长整型常量,如:32765L;也可在整型常量的后面加上u或U,表示无符号整型常量,如:4352U;也可以在整型常量的后面同时加上u(U)和l(L),表示无符号长整型常量,如:41152UL或41152LU。如果整型常量后面既没有l(L),又没有u(U),则为int型。

2.整型变量的定义

例:intx,y;shorta,b;unsignedlongz;3.整型数据的存储C标准没有具体规定各类数据存储的字节数,一般以一个机器字(Word)存放1个int数据,16位机上int数据存储用两个字节。32位机上int数据存储用4个字节。以2字节为例:intx=10;0000000000001010无符号整数:最高位与其他位一起表示数值,只能存放正数。范围是:00000000

0000

0000----11111111

1111

1111

即0----65535(216-1)(2)带符号整数:存储时最高位表示符号,0为正,1为负①正数的补码为其二进制数(以shortint型为例)(计算215-1=32767)0000000000001001如:9----正数最大值为32767----0111111111111111②负数的补码:用二进制表示其绝对值,然后按位取反,再加1

负数的最小值为–32768----

1000000000000000011111111111111116位有符号整数取值范围-32768~+32767(-215——215-1)10000000000000001000000000000001-(215-1)最后得-32767215-1(32767)求(-(215-1

))补4.整型数据的溢出

例:inta,b;a=32767;b=a+4;0111111111111111a327671000000000000000a+1-327681000000000000011b-327655.拓展整型为拓展数据处理的范围,C语言通过类型修饰符来改变基本数据类型的含义,使之精确适合于不同应用场合。拓展后的整型有短整型、长整型及无符号整型。定义符字节数范围short2-215~215-1int4-231~231-1long4同上unsignedshort20~65536unsigned[int]40~232-1unsignedlong4同上拓展整型数据类型、存储及表示范围注1:在TURBOC中,短整型与基本整型相同(2个字节)。对于字长为32位的计算机基本整型长度为4字节。注2.长整型数据在VC++中,存储占4个字节,与基本整型相同。实型数据分为单精度和双精度和长双精度三种类型。1、实型数据的书写:定点和浮点形式两种书写方法。定点又称小数表示法,是一种常规形式,由整数部分、小数点、小数部分三部分组成。C语言中的实数可以没有小数部分或没有整数部分,如20.,.375。

浮点形式由尾数、指数符号e或E、指数三部分组成,尾数是一般形式的实数,指数是一个1~3位的十进制的整数。指数形式适于表示较大或较小的实数。如2.34e10、2.34e-10,相应于数学中2.34×1010、2.34×10-10。注:尾数不能少。3.2.3.1.2实型数据错误:8.5e1.73、实型数据的类型及存储格式类型定义符字节数符号阶码尾数范围float41723-3.4E+38~3.4E+38double811053-1.7E+308~1.7E+308

注1:规格化浮点数,小数点位于第一个非零数字的后面。如-7.4E3

注2:对于一个定点数或浮点数,C++默认双精度,若后跟一个F或f,则按单精度数存储。也可在后面加上L(l)表示longdouble型。注3:一个数的有效数字是指从该数最左边不为0的数字位起至最右边不为0的数字位止之间的每一个数字位,而这些数字位的个数称为该数的有效数字位数。如3500,2.705,-0.278,63.00和0.00104的有效数字位数分别为2,4,3,2和3,单精度有效数字7位,双精度有效数字15位。

字符数据简称字符,取值为ASCII码字符集中的字符。长度为一个字节,字符常量有两种类型:

char取值范围(-128-127)

unsignedchar取值范围(0-255)。1.字符常量表示方法

字符数据用单引号作界定符,如′a′、′+′、′%′、′:′、′1′、′2′。

注意:单引号字符本身及双引号、反斜杠字符由于有特定的含义,不能如此表示,数字字符与数字不同。

字符数据转义表示:通过反斜杠后跟ASCII码描述。ASCII码可采用3位八进制数或2位十六进制数,相应描述形式是\ddd与\xhh(位数不够,加0补位),这种表示方法称为转义表示或转码表示表示。如字符A可表示为’A’、

′\101′、′\x41′。详见附表3-2对一些特殊的字符只能用转义表示,如图形字符′■′的表示′\376′,单引号、双引号、反斜杠可表示成′\047′、′\042′、′\134′。对一些常用的特殊字符,C语言还提供特定的字符来转义表示:′\n′:换行′\\′:反斜杠字符

′\‘′:单引号字符′\“′:双引号字符

′\a′:响铃报警′\b′:退格

′\f′:走纸换行′\r′:回车

′\t′:横向跳格′\u′:竖向跳格字符数据和整数在一定范围内互相通用例如://li2_2_2.cpp#include<iostream.h>voidmain(){charch;ch='a';cout<<ch<<““<<int(ch)<<"\n";}

输出结果:a97

(2)字符数据与整数进行算术运算//li2_2_3.cpp#include<iostream.h>voidmain(){charch;intx;ch=‘A’;x=ch+32;cout<<char(x)<<""<<x<<"\n";}输出结果:a97(1)字符数据用整数形式输出

1.字串表示

字串数据用双引号作界定符,如:

″chinaone″、″computer″、″$123.45″、″\nabc″、″%d%f″

2.字串存储

字串数据存储除存储构成字符串的字符序列本身外,还必须附加存储字串的结束标志空操作字符′\0′存储一个字串的字节数等于字符个数加1,即字串长度再加1。“a”a\0“name”name\0注:‘a’和“a”的含义是不同的。字符串常量null枚举是一种构造数据类型,具有这种数据类型的量称为枚举量。枚举量实际上是一个int型常量。语法格式:enum类型名{枚举常量1,枚举常量2,枚举常量3,...};例:enumCOLOR{RED,BLUE,GREEN,WHITE,BLACK};在定义枚举类型时,还确定了枚举表中每个枚举符的取值。默认情况下,其数值从0开始,依次加1。如例中RED赋以0,BLUE赋以1,以此类推。枚举常量一、单目、双目、三目运算符

单目:一般位于操作数前面。如-x,!x双目:位于两个操作数之间。如a+b三目:只有一个即条件运算符。如(a>b)?a:b二、运算符优先级

C语言将运算符的优先级划分为16级,常用运算符优先级顺序为:运算符的说明(1)初等运算()、[]、->(2)单目运算!、~、++、--、-、(类型)、*、&、sizeof(3)算术运算+、-、*、/、%(4)关系运算<、<=、==、!=等(5)逻辑运算&&、||、条件运算式?:(6)赋值运算=、+=、-=等(7)逗号运算优先级最低(8)位运算优先级比较分散。

三、运算符的结合性

运算符的结合性是指:优先级相同的运算从左到右进行(左结合性)还是从右至左进行(右结合性),左结合性是人们习惯的计算顺序。C语言中,只有单目运算(!、~、++、--、-、*、&)、条件运算(?:)、赋值运算(=、+=、-=、*=、/=、%=)的结合性是右结合,其余运算为左结合。1.算术运算符1)单目运算符:-,+,++,--;2)双目运算符:+,-,*,/,%。

注1:双目运算符一般要求两个相同类型的操作数,如果不同,则进行转换,精度低的往精度高的转换。

注2:--、++、%只用于int和char类型数据。

注3:两个整数相除得到的商是它们的整数商,两个整数取余得到的是整余数。如:9/2=4,9.0/2=4.5

注4:自增运算符:++和自减运算符:--自增运算与自减运算一样都是单目运算,操作数也只能是整型变量。有前置、后置两种方式,自增、自减运算比等价的赋值语句生成的目标代码更高效。

++i,在使用i之前,先使i的值增加1,俗称先增后用。i++,先使用i的值,然后使i的值增加1,俗称先用后增。

--i,在使用i之前,先使i的值减1,俗称先减后用。i--,先使用i的值,然后使i的值减1,俗称先用后减。如:i=1999;j=++i;/*先将i的值增1,变为2000,后使用。j的值为2000*/j=i++;/*先使用,j的值为1999。后增,i的值变为2000*/如:i=2000;j=--i;/*将i的值减1,变为1999。后使用,j的值也为1999*/j=i--;/*j的值为2000。后减,i的值变为1999*/自增运算和自减运算的优先级处于第2级,结合性为自右向左。

练习:设k=15,x=1则:a=k+++x;a=++k+x++;a=k+++x--;a=k+(++x);akx16116216017152注5:运算符的组合问题。C语言的运算符一般为一个字符,有的由两个字符组成,在表达式中出现多个字符时如何组合呢?C编译系统在处理时原则上尽可能自左而右将若干字符组合成一个运算符,标识符、关键字也按同样的原则进行处理。如i+++j,解释为(i++)+j,非i+(++j)。如要表示i+(++j),必须加括号2.关系运算符关系运算符是双目运算符:>,<,>=,<=,==,!=。运算的结果为true或false,1或0。其中的true或false是符号常量,关系运算通常用来表示条件。如:if(a>b)x=a;elsex=b;3.逻辑运算符单目逻辑运算符:!(逻辑求反);双目逻辑运算符:&&(逻辑与),||(逻辑或)注1:!<非0>==0注2:短路求值,对于&&和||,如果第一个操作数已能确定运算结果,则不再计算第二个操作数的值。true||x;//结果为true,不再考虑x的值。false&&x;//结果为false逻辑运算符在逻辑运算中,存在着以下3种等价关系:(1)!!a==a(2)!(a&&b)==!a||!b(3)!(a||b)==!a&&!b

相反式:一个逻辑表达式的逻辑非称为这个逻辑表达式的相反式。如:x>=5相反式x<5x==0&&y>1相反式x!=0||y<=1a>=x||b>2*y+10相反式a<x&&b<=2*y+104.赋值运算符是一种双目运算符。=、+=、-=、*=、/=、%=含义:先计算右边操作数的值,然后把计算结果赋给(保存到)左边的变量中。注1:在C++中,赋值是一种运算,该运算将改变第一个(左边)操作数的值,运算结果为左边的操作数。如:(a=b+c)*d是合法的。注2:如果用#代表复合运算符,则a#=b表示a=a#b.D5.位运算符

一般的高级语言处理数据的最小单位只能是字节,C语言能处理到二进制的位,当然C++也可以。在C++中有6个位运算符。<<、>>、~、|、^、&例如:3&53:000000115:000001013&5:00000001例如:3|5

例如:3^5例如:~3例如:5<<2注:左边的操作数是需要移位的数值,右边的操作数是左移或右移的位数。

00000111000001101111110000010100

7.其它运算符三目运算符?:

d1?d2:d3;//d1为真,则表达式的值为d2,否则为d3.如:max=(a>b)?a:b;执行该语句的语义是:如a>b为真,则把a赋予max,否则把b赋予max。使用条件表达式时,还应注意以下几点:

1.条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此max=(a>b)?a:b可以去掉括号而写为max=a>b?a:b

2.条件运算符?和:是一对运算符,不能分开单独使用。

3.条件运算符的结合方向是自右至左。

例如:

a>b?a:c>d?c:d应理解为

a>b?a:(c>d?c:d)这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。

逗号运算符该运算符是一个双目运算符,它的优先级最低。该运算符的功能是用来将多个表达式连成一个表达式,起到一个表达式的作用。含义:先计算第一个式子,再计算第二个式子,……,整个计算式的结果为最后一个计算式的结果。如:x=a+b,y=c+d,z=x+y;等价于:z=a+b+c+d;#include<iostream.h>voidmain(){inta=5;a=3*5+a++,a*4,++a; cout<<"a="<<a<<endl;}运行结果:a=22注:a=3*5+(a++)的值为21。a=3*5+(++a)的值为21。a=3*5+(++a),a*4,++a;结果:a=22注:若定义inty,y=3*5+a++的值为20。y=3*5+(++a)的值为21。#include<iostream.h>voidmain(){inta=5;3*5+a++,a*4,++a; cout<<"a="<<a<<endl;}运行结果:a=7#include<iostream.h>voidmain(){inta=5;3*5+a,a*4,++a; cout<<"a="<<a<<endl;}运行结果:a=6#include<iostream.h>voidmain(){inta=5;3*5,a*4,++a; cout<<"a="<<a<<endl;}运行结果:a=6

sizeof运算符,测试类型名所表示类型长度,或表达式所占用字节数。

sizeof(类型说明符/表达式)

inta;

sizeof(a)=4;sizeof(100)=4;

sizeof(‘a’)=1;

sizeof(double)=8;C++表达式

用运算符将操作对象连接起来就构成了表达式。表达式总是有值的。操作数是运算符的操作对象,可以是常量、变量、函数与表达式。常量、变量、函数本身就是简单表达式,从一般意义上讲,C语言中所有操作数都是表达式。复杂表达式由运算符连接简单表达式形成。当一个表达式出现各种运算符时,要考虑运算符的优先级和结合性。运算符的结合性体现了运算符对其操作数进行运算的方向,如果一个运算符对其操作数从左向右进行规定的运算,称左结合,反之称右结合。

C语言的表达式虽然来源于数学表达式,是数学表达式在计算机中的表示,但在书写时应该注意遵循C语言表达式书写的原则:(1)C语言的表达式只能采用线性的形式书写。例如:①应写成1.0/3+i+j*j*j。②应写成(a+b)/(c+d)*e+f。

(2)C语言的表达式只能使用C语言中合法的运算符和操作数,对有些操作必须调用库函数完成,而且运算符不能省略。例如:①πr2应写成3.14159*r*r。②应写成1.0/2*a*b*sin(alph)。③|x-y|应写成fabs(x-y)。④y+2X应写成y+pow(2,x)。

C语言表达式种类很多,有多种分类方法。我们一般依据运算的特征将表达式分为:①算术表达式,如a+b*2.0-3.0/5.0。②关系表达式,如x>=y,关系表达式可以认为是逻辑表达式的特殊情况。其值为逻辑值。③逻辑表达式,如(x>=2)&&(x<=8)其值为逻辑值④赋值表达式,如a=b=c=1。⑤条件表达式,如(a>b)?a:b。⑥逗号表达式,如a=2,b=a*a,c=sqrt(b)。

一般讲相应的运算只有相应类型的数据才能进行,不同类型数据进行运算时,要进行类型转换。类型转换有自动转换(又称隐含转换)与强制转换两种方式。

1、隐式转换。

一般算术转换

隐式转换由系统自动完成,在不同类型数值型数据间的混合运算时完成。目的:将短的数扩展为机器处理的长度,使运算符

两端有相同的类型。转换的规则如图3-1所示。int→usigned→long→double↑↑short,charfloat例floatx=1.3;inta=10;cout<<x/a;类型转换

纵向箭头方向表示必定要进行的转换,如short型、char型数据必定先转换成int型,再进行运算。又如两个float型数参加运算,虽然它们类型相同,但仍要先转换成double型再进行运算,结果亦为double型。

横向箭头方向表示当运算符两边的操作数为不同类型时的转换,箭头方向表示类型自动转换的方向。由低向高转换,这种转换是一种保值映射,在转换中数据的精度不受损失。如一个long型数据与一个int型数据一起运算,需要先将int型数据转换为long型,然后两者再进行运算,结果为long型。所有这些转换都是由系统自动进行的,使用时只需了解结果的类型即可。赋值表达式中,右值表达式的类型隐式转换为左值的类型。(具有强制性)在被调用函数带有返回值时,将return后面的表达式类型转换为函数类型如:inta;doubled=12.3; a=d;注:任一种赋值运算,其赋值号或复合赋值号左边必须是一个左值。左值:是指具有对应的可由用户访问的存储单元,并且能够由用户改变其值的量。如“变量”就是一个左值,而一个“字面常量”不是。右值:不是左值的量被称为右值。

注:后两种转换是不安全的,因为数据的精度受到损失。

2.显式转换。

用强制类型转换运算符将一个类型的变量强制转换为另一种类型。一般形式:(<类型标识符>)表达式或〈类型标识符〉(〈表达式〉)含义:将表达式的类型强制转换成类型名指定的类型。doubled=21.83;inta;a=(int)d;//或a=int(d);将表达式d的值强制转换成整型,注:强制类型转换在将高类型转换为低类型时,数据精度受损,。对一个变量进行强制转换后,原变量的类型不变,只是得到一个新类型的数据或变量。例:表达式计算。

(1)floatx=2.5,y=4.7;inta=7;计算x+a%3*(int)(x+y)%2/4⑦①④③②⑤⑥①a%3等于1。②x+y等于7.2。③(int)(x+y)等于7。④a%3*(int)(x+y)等于7。⑤a%3*(int)(x+y)%2等于1。⑥a%3*(int)(x+y)%2/4等于0。

⑦x+a%3*(int)(x+y)%2/4等于2.5+0,结果为2.5。(2)inta=2,b=3;floatx=3.5,y=2.5;计算(float)(a+b)/2+(int)x%(int)y②①③⑦④⑥⑤①a+b等于5。②(float)(a+b)等于5.0,强制转换成float型。③(float)(a+b)/2等于5.0/2.0,结果为2.5。④(int)x等于3,强制转换成int型。⑤(int)y等于2,强制转换成int型。⑥(int)x%(int)y等于1。⑦(float)(a+b)/2+(int)x%(int)y等于2.5+1.0,结果为3.5(双精度型)。

(3)inti=3;floatf=1.0;doubled=2.3;计算10+′a′+i*f-d①③②④①′a′转换成97,10+′a′等于107。②i,f转换成双精度型,i*f等于3.0。③107转换成双精度型,10+′a′+i*f等于110.0。④10+′a′+i*f-d等于107.7。在C++中,将数据从一个对象到另一个对象的流动抽象为“流”,输入和输出是由I/O流来实现的。1.输入与输出1)输入

在C++中,键盘输入格式如下:cin>>表达式>>表达式…例如:inta,b,c;cin>>a>>b>>c;

若输入123 a=?,b=?,c=?2)输出

在C++中,键盘输出格式如下:cout<<表达式<<表达式…例如:inta(1),b(1),c(1);

cout<<”a=“<<a<<“b=“<<b<<“c=“<<c<<endl;

输出为:a=1b=1c=12.简单的I/O控制格式

略注意:要包含头文件#include<iostream.h>

#include"iostream.h"voidmain(){inta; a=123+3.2e2-3.6/6-6/8; cout<<a<<endl; doubleb; b=123+3.2e2-3.6/6-6/8; cout<<b<<endl; intc=7,d=4; a=c---++d; cout<<c<<','<<d<<','<<a<<endl;}结果:442442.46,5,2例2:#include"iostream.h"voidmain(){charc1('k'),c2('p'); intn=c1>c2; cout<<n<<endl;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论