c语言知识点串讲_第1页
c语言知识点串讲_第2页
c语言知识点串讲_第3页
c语言知识点串讲_第4页
c语言知识点串讲_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

1、主讲人:高尚华邮箱:通院科协微信公众号:xdtykx(很关键,一定要关注( _ ) )其他内容不幸被考到不要骂我 总结:1、一个C源程序由函数组成,这使得程序容易实现模块化。其中有且仅有一个main()主函数,它是程序的入口,与main函数的位置无关;2、分号“;”是C语句的一部分,每一条语句均以分号结束,即使是程序中最后一条语句也应包含分号 ;5、程序的注释部分应该在/*/之间,/和*之间不允许有空格。标识符:C语言中的标识符用于给程序中的常量,变量,函数,文件指针和数据类型等命名。其构成规则如下: C语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。大小写

2、区分 2.1 2.1 常量与变量常量与变量2.2 2.2 基本数据类型基本数据类型2.3 2.3 运算符与表达式运算符与表达式2.5 2.5 输入输出函数输入输出函数C语言提供了以下一些数据类型。 3 3,后面累加,后面累加restday=restday=(enum enum ; 2.1.2 2.1.2变量变量 变量代表内存中具有特定属性的一个存储单变量代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值,在元,它用来存放数据,也就是变量的值,在程序运行期间,这些值是可以改变的程序运行期间,这些值是可以改变的。 变量名实际上是以一个名字对应代表一个地址。2.2.4 字符型数据字

3、符型数据 用一对单引号括起来的单个字符。用一对单引号括起来的单个字符。(只能包含一(只能包含一个字符)个字符) 转义字符转义字符(x 只占一个字节)只占一个字节)。如: n 换行字符型变量用来存放字符常量,注意只能放一个字符型变量用来存放字符常量,注意只能放一个字符。字符。字符变量的定义形式如下:字符变量的定义形式如下:char c1,c2;对对c1,c2赋值:赋值: c1a;c2 b ;1、字符常量、字符常量变量变量4 4、字符串常量、字符串常量 字符串常量是一对双撇号括起来的字符序列. 合法的字符串常量:“How do you do.”, “CHINA” 结论:结论:不能把一个字符串常量赋

4、给一个字符变量。不能把一个字符串常量赋给一个字符变量。 1. 1. 语言语言的运算符有以下几类:的运算符有以下几类:算术运算符 (+ - * / %)关系运算符 (!)逻辑运算符 (! |)单目运算符都是自右向左结合的:*&!赋值运算符 (及其+= 复合赋值)条件运算符 (?:)(从右向左结合)逗号运算符 (,)(8)指针运算符 (*和)(10)强制类型转换运算符( (类型) )(12)下标运算符()ab?a:cd?c:d ab?a:(cd?c:d) 1. 1. 基本的算术运算符基本的算术运算符: :符号符号功能功能例子例子+加法运算或正值运算加法运算或正值运算1+2,+9-减法运算或

5、负值运算减法运算或负值运算4-8,-8*乘法运算乘法运算5*3/除法运算除法运算4/3%取余运算取余运算7%3使用说明:1、两个整数相除的结果为整数,如4/3的结果为1,小数部分被舍去;2、%运算符要求两个操作数都是整数,否则编译器会报错。例如5.3%3就是错误的表达式。如果运算,可以先将其强制类型转换为整数,再进行求余,如(int)(5.3)%3=2(int)(5.3)%3=2;1.关系运算符及其优先次序 (小于) (大于)= (大于或等于)= (等于)!= (不等于)优先级相同(高)优先级相同(高)优先级相同(低)优先级相同(低)说明:说明:关系运算符的优先级低于算术运算符关系运算符的优先

6、级高于赋值运算符关系表达式的值是一个逻辑值,即“真”或“假”。例:关系表达式”ab”的值为“真”,表达式的值为1。C C语言中没有专用语言中没有专用的逻辑值,的逻辑值,1 1代表代表真,真,0 0代表假代表假1.逻辑运算符及其优先次序& (逻辑与) 相当于其他语言中的AND| (逻辑或) 相当于其他语言中的OR! (逻辑非) 相当于其他语言中的NOT例:a&b 若a,b为真,则a&b为真。 a|b 若a,b之一为真,则a|b为真。 !a 若a为真,则!a为假。优先次序:!(非)-&(与)-|(或)逻辑运算符中 “&”和“|”低于关系运算符,“!”高于算术

7、运算符2.逻辑表达式逻辑表达式的值应该是一个逻辑量“真”或“假”。任何非零的数值被认作任何非零的数值被认作“真真”a的值为的值为3,b的值为的值为9时,逻辑表达式时,逻辑表达式a=6&a+b8的值为的值为_1_。 &和和|运算的求值顺序(掌握!)运算的求值顺序(掌握!)在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。(1)a&b&c (1)a&b&c 只有只有a a为真时,才需要判断为真时,才需要判断b b的值,只有的值,只有a a和和b b都为真时,都为真时, 才需要判断才需要判断

8、c c的值。的值。(2)a|b|c (2)a|b|c 只要只要a a为真,就不必判断为真,就不必判断b b和和c c的值,只有的值,只有a a为假,才为假,才 判断判断b b。a a和和b b都为假才判断都为假才判断c c。c值不为0时,在下列选项中能正确将c的值赋给变量a、b的是_A、c=b=a; B、(a=c) | (b=c);C、(a=c)&(b=c); D、a=c=b; ! !非非 高高 算术运算符算术运算符关系运算符关系运算符 & & | |赋值运算符赋值运算符优先级关系优先级关系 低低逗号运算符逗号运算符: :将两个表达式连接起来,又称为“顺序求值运算符”。

9、 一般形式一般形式: : 表达式,表达式表达式,表达式求解过程:求解过程: 先求解表达式,再求解表达式。整个逗号先求解表达式,再求解表达式。整个逗号表达式的值是表达式的值。表达式的值是表达式的值。 已知int x=40,y=20,z=10; 以下语句执行后x,y,z的值是( )if(xy) ;z=x, x=y, y=z; 2.3.7 2.3.7 自增、自减运算符(自右向左)自增、自减运算符(自右向左) 作用是使变量的值增或减仅用于整型变量和指针变量如如:,(在使用之前,先使的值加(减),(在使用之后,使的值加(减) + + 自增1 自减1Ex:i = 0; a = 0;a = i+;a = +

10、i;*p+ +与与*优先级相同,自右向左结合优先级相同,自右向左结合 先看先看p+,但是,但是+运算符需要先对运算符需要先对p操作,所以先取操作,所以先取*p, p再再+1若若b为为float型变量,且已赋值型变量,且已赋值8.79452,能正确使,能正确使b中的值保持两位小数中的值保持两位小数,删去此后小数的语句是,删去此后小数的语句是( c ) b=b*100/100 b=(int)b*100/100.0; b=(int)(b*100)/100.0 b=int (b)*100/100.0 C语言本身不提供输入输出语句,输入和输出操作是由C函数库中的函数来实现的例如例如: :字符输入函数:g

11、etchar字符输出函数:putchar格式输入函数: scanf 格式输出函数: printf字符串输入函数:gets 字数穿输出函数:puts C语言提供的选择结构有两种:语言提供的选择结构有两种:if语句、语句、switch语句。语句。 3.1 选择结构选择结构3.3.1 if3.3.1 if语句语句 if if语句:对所给条件进行判定,根据判定结语句:对所给条件进行判定,根据判定结果决定是否执行程序段。果决定是否执行程序段。 语句形式:语句形式: if (if (表达式表达式) ) 语句语句 ; 语句执行流程:语句执行流程: 表达式语句真(非0)假(0)语句形式:语句形式: switc

12、h (表达式)(表达式) case 常量常量1: 语句语句 1; case 常量常量2: 语句语句2; case 常量常量3: 语句语句3; . case 常量常量n: 语句语句n; default : 语句语句n+1; 。数值型枚举型字符型常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。千万不能接(;)号3.1.5 switch 3.1.5 switch 语句语句if (if (表达式)表达式) 语句语句1 1; else else 语句语句2 2; 表达式语句1真(非0)假(0)语句23.3.2 if-else 3.3.2 if-else 语句语句 i

13、f-else if-else 语句适合于解决双分支选择问题语句适合于解决双分支选择问题elseelse与上边一个与上边一个ifif配对配对语句形式:语句形式:语句执行流程:语句执行流程: 条件条件 语句语句1 语句语句2YN 在在C语言中有三种循环结构:语言中有三种循环结构:while,do-while和和for循环。循环。 构成有效循环的条件:循环体构成有效循环的条件:循环体和循环结束条件。和循环结束条件。whilewhile语句用来实现语句用来实现“当型当型”循环结构循环结构。一般形式:一般形式: while (while (表达式表达式) ) 语句语句 当表达式为非当表达式为非0 0值时

14、,执行值时,执行 whilewhile语句中的内嵌语句。语句中的内嵌语句。其特其特 点是点是: :先判断表达式,后执行语先判断表达式,后执行语 句。句。 do-whiledo-while语句的特点语句的特点: :先执行循环体,然后判断循先执行循环体,然后判断循环条件是否成立。环条件是否成立。 一般形式一般形式: : do do 循环体语句 whilewhile (表达式); 执行过程:执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”) 时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。本行的分号不本行的分号不能缺省能缺省int a=1

15、0;docout#;while(a-); 一般形式一般形式: : for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3) 3) 语句语句表达式1:用于循环开始前为循环变量设置初始值。表达式2:控制循环执行的条件,决定循环次数表达式3:循环控制变量修改表达式。循环体语句:被重复执行的语句,每执行一次,表达式3就改变一次循环变量的值,直到表达式2条件不再满足。 forfor语句的执行过程:语句的执行过程: (1) 先求解表达式1。 (2) 求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)

16、步。 (3) 求解表达式3。 (4) 转回上面第(2)步骤继续执行。 (5) 循环结束,执行for语句下面的一个语句。 1. 问题的提出问题的提出 假设我们将假设我们将26个数分别存放在个数分别存放在26个变量中,要个变量中,要计算计算26个变量个变量的的和和,如何做如何做? 将将26个变量逐个加起来?个变量逐个加起来? 能否使用循环语句能否使用循环语句? for(sum=0,i=0;i26;i+) sum=sum+i; 正确吗正确吗?4.1 4.1 数组的概念数组的概念2. 使用数组解决问题(掌握!)使用数组解决问题(掌握!)定义一个变量,包含定义一个变量,包含26个数据,称为数组变量。个数

17、据,称为数组变量。main() int i,sum=0, a26 ; for(i=0;i26;i+) scanf(“%d”,&ai); for(i=0;i26;i+) sum=sum+ai; printf(%d,sum); C语言为这些数据,语言为这些数据,提供了一种构造数据提供了一种构造数据类型:数组。类型:数组。所谓数所谓数组组就是一组具有相同就是一组具有相同数据类型的数据的有数据类型的数据的有序集合。这些数据被序集合。这些数据被称为称为数组的元素数组的元素。4.2 4.2 一维数组的定义和引用一维数组的定义和引用4.2.1 4.2.1 一维数组的定义一维数组的定义1、定义一维数组

18、的一般方式:、定义一维数组的一般方式: 类型说明符类型说明符 数组名数组名 常量表达式常量表达式 ; ;指明数组元素指明数组元素的数据类型的数据类型指明数组所含的元素指明数组所含的元素个数,下标从个数,下标从 0 开始开始常量表达式说明数组元素的个数,必须是大于常量表达式说明数组元素的个数,必须是大于0的整型常量的整型常量表达式(包括常量和符号常量)。不允许是变量,不能进行表达式(包括常量和符号常量)。不允许是变量,不能进行动态定义。动态定义。方法:将初值依次写在花括号方法:将初值依次写在花括号 内。内。如:如: int a5= 2 , 4 , 6 , 8 , 10 ;说明:说明:(1) 只给

19、数组中部分元素赋初值,其他元素按零只给数组中部分元素赋初值,其他元素按零处理。处理。 如:如: int a9=1,2; 则则 a0= 1, a1= 2, a2a8值全为值全为0。(2) 对数组元素全部置。对数组元素全部置。 int a5= 0, 0, 0, 0, 0 ; 或:或:int a5=0;4.2.3 4.2.3 引用一维数组元素引用一维数组元素1.1.数组元素的表示形式:数组元素的表示形式: 数组名下标z当数组的元素类型为字符型时,被称为当数组的元素类型为字符型时,被称为字符字符数组数组。 如:如: char c10; 则则c为字符数组。为字符数组。z字符数组的定义、初始化和元素的引用

20、与一字符数组的定义、初始化和元素的引用与一般的数组相同。般的数组相同。 字符数组字符数组4.4.1 4.4.1 字符数组的定义字符数组的定义4.4.4 4.4.4 字符数组的输入输出字符数组的输入输出 字符数组的输入输出可以有两种方法:字符数组的输入输出可以有两种方法: 逐个字符输入输出。用格式符逐个字符输入输出。用格式符“%c”%c”输入或输出输入或输出一个字符。一个字符。 将整个字符串一次输入或输出。用将整个字符串一次输入或输出。用“%s”%s”格式符,格式符,意思是对字符串的输入输出。意思是对字符串的输入输出。 假设有定义假设有定义 char a10;1.1.用格式符用格式符“%c%c”

21、逐个字符逐个字符输入输出输入输出: : scanf( scanf(“%c%c”,&a0);,&a0); printf( printf(“%c%c”,a0); ,a0); /*每次输入输出一个字符*/2. 用格式符“%s”整个字符串输入输出:例 用%s main() char str5; scanf(“%s”, str); printf(“%s”, str);用字符数组名用字符数组名,不要加不要加&输入串长度输入串长度 数组长度数组长度遇遇0结束结束, 但但输出字输出字符不包括结束符符不包括结束符01. puts1. puts函数函数其一般形式为其一般形式为: : put

22、s (puts (字符数组字符数组) )其作用是将一个字符串其作用是将一个字符串( (以以00结束的字符序列结束的字符序列) )输出到终端。输出到终端。4.4.5 4.4.5 字符串处理函数字符串处理函数2. gets2. gets函数函数其一般形式为:其一般形式为:gets(gets(字符数组字符数组) )其作用是从终端输入一个字符串到字符数组,其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的并且得到一个函数值。该函数值是字符数组的起始地址。起始地址。3. strlen函数函数 其一般形式为其一般形式为:strlen (字符数组字符数组) strlen str

23、len是测试字符串长度的函数。函数的值为是测试字符串长度的函数。函数的值为字符串中的实际长度字符串中的实际长度( (不包括不包括00在内在内) )。#include #include #define Size 100main() char strSize; int len,i, letter=0,digit=0,space=0,other=0; printf(please input a stringn); gets(str); len=strlen(str); for( i=0;i=a & stri = A & stri = 0 & stri =9) digit+;

24、else if(stri = ) space+; else other+; printf(%d lettersn%d digitn%d spacen%d othern,letter,digit,space,other);例例4-10 输入一行字符,统计其中英文字符、数字、空格及其他字符的个数。输入一行字符,统计其中英文字符、数字、空格及其他字符的个数。 5.1 5.1 地址和指针的概念地址和指针的概念 5.2 5.2 变量的指针和指向变量的指针变量变量的指针和指向变量的指针变量 5.3 5.3 通过指针引用数组通过指针引用数组 5.4 5.4 通过指针引用字符串通过指针引用字符串5.2.1 5

25、.2.1 怎样定义指针变量怎样定义指针变量定义指针变量的一般形式为:基类型基类型 *指针变量名;指针变量名;1)定义并初始化指针变量)定义并初始化指针变量int i=3;int *p = &i;2)定义指针变量,将变量地址赋值给指针变量)定义指针变量,将变量地址赋值给指针变量int i=3;int *p; p = &i; 有关的两个运算符:有关的两个运算符: 取地址运算符。取地址运算符。 &a是变量是变量a的地址。的地址。 * 取内容运算符(或称取内容运算符(或称“间接访问间接访问”运算符)。运算符)。*p是指针变量是指针变量p指向的对象的值。指向的对象的值。 *运算符

26、与运算符与&运算符的优先级相同,且都是运算符的优先级相同,且都是“右结右结合合”。*p=.中的中的*与指针变量定义中的与指针变量定义中的*是不同是不同的。的。例如:例如: int x,*px=&x; 则则 &(*px) : 表示指针表示指针px(取指针的目标变量(取指针的目标变量 *px(即变量即变量x)的地址)的地址) *(&x) : 表示变量表示变量x(取变量(取变量x的地址中所的地址中所 存储的内容)存储的内容) 语言规定在指针指向数组元素时,可以对指针语言规定在指针指向数组元素时,可以对指针进行以下运算:进行以下运算: 加一个整数加一个整数(用用+或或+

27、=),如,如p+1 减一个整数减一个整数(用用-或或-=),如,如p-1 自加运算,如自加运算,如p+,+p 自减运算,如自减运算,如p-,-p *(p+)和和*(+p)5.2.4 5.2.4 指针的运算指针的运算若若p指向变量指向变量x,则:,则: (*p)+; 相当于相当于 x+。 +(*p); 相当于相当于 +x。 .3 .3 通过指针引用数组通过指针引用数组在在C语言中,语言中,数组名数组名代表该数组的首代表该数组的首地址,即数组中第一个元素的地址,也称地址,即数组中第一个元素的地址,也称为该为该数组的指针数组的指针。每一个数组元素也有一。每一个数组元素也有一个地址,称为该元素的指针。

28、个地址,称为该元素的指针。5.3.1 5.3.1 数组元素的指针数组元素的指针例如:例如:int a10; (定义定义a为包含为包含10个整型数据的数组个整型数据的数组) int *p; (定义为指向整型变量的指针变量定义为指向整型变量的指针变量) p&a0;和和p=a;是等价的;是等价的(把把a0元素的地址赋给指针变量元素的地址赋给指针变量p,即使指向,即使指向数组的第号元素数组的第号元素 。 ) 同理,同理,p=a+1;和和p=&a1;两个语句也是等价的。;两个语句也是等价的。它们的作用是把数组它们的作用是把数组a中第二个元素中第二个元素a1的地址赋给指的地址赋给指针变量针

29、变量p。 以此类推,以此类推,若指针变量若指针变量p=a,下面三个表达式等价,下面三个表达式等价 p+i a+i &ai (它们均表示第(它们均表示第i个元素的地址个元素的地址 )5.3.2 5.3.2 引用数组元素引用数组元素( (综合综合!) !) 引用一个数组元素,可以用:()() 下标法,如形式;下标法,如形式;()() 指针法,如指针法,如*()或()或*()()。其中是数组名,是指向数组元素的指针变量,其初值。例:例: 输出数组中的全部元素输出数组中的全部元素 假设有一个数组,整型,有个元素。要输出各元素的值有三种方法: 形式形式意义意义p+i , a+i表示表示ai的地址

30、,指向数组的第的地址,指向数组的第i个个元素元素*(p+i) ,* (a+i)表示表示p+i和和a+i所指对象的内容,即所指对象的内容,即aipi表示表示*(p+i) ,即通过带下标的指针,即通过带下标的指针引用数组元素,等价于引用数组元素,等价于ai(3) 用指针变量指向数组元素。用指针变量指向数组元素。#include void main() int a10; int *p=a; for(;pa+10;p+) scanf(%d,p); printf(n); for(p=a;pa+10;p+) printf(%d ,*p); int a10,i,*p; p=a; for(i=0;i10;i+

31、) scanf(%d,p+i); printf(n); for(i=0;i10;i+) printf(%d ,*(p+i);a和和a0具有不同含意。具有不同含意。前者是一个地址常量前者是一个地址常量,是存储单元,是存储单元a0的地址;的地址;而而后者是一个变量后者是一个变量名,代表一个存放数据的存储单元名,代表一个存放数据的存储单元。p是地址变量是地址变量,它可以指向任何地址变量,因,它可以指向任何地址变量,因此,可以对其进行加、减和赋值运算。此,可以对其进行加、减和赋值运算。 p+; p=a; p=&ai ; 是合法的。是合法的。而由于而由于数组名数组名a代表一个地址常量代表一个地址

32、常量,其,其值是不值是不能改变的能改变的,因此,因此,a+; a=p; a+=i; 是非法的是非法的 当把一个字符串赋给一个字符指针变量时当把一个字符串赋给一个字符指针变量时,是把该字符串的首地址赋给了指针变量,是把该字符串的首地址赋给了指针变量。 例如:例如:char *str=“Hello!; 1、数组名是地址常量,不能重新赋值。、数组名是地址常量,不能重新赋值。 char str =Hello!; 或或 char str20; str=“Hello!”; /把一个字符串赋给数组名是错误的。把一个字符串赋给数组名是错误的。2、可将一个字符串常量赋值给一个字符指针变量。、可将一个字符串常量赋

33、值给一个字符指针变量。 char *str=Hello!; 或或 char *str; str=“Hello!”; 程序运行后,输出结果是程序运行后,输出结果是_Void main( )char *p=abcdefg;p+=3; printf(%sn,p);本章要点6.1.2 6.1.2 函数的定义函数的定义1 1、定义函数的一般形式为、定义函数的一般形式为:类型标识符类型标识符 函数名函数名(形式参数表列)(形式参数表列) 声明部分声明部分 / /* *函数体变量说明语句 * */ / 语句部分语句部分 / /* *函数体执行语句*/ 类型标识符类型标识符 参数参数1 ,类型标识符类型标识符

34、 参数参数2, 函数的定义不能嵌套定义函数的定义不能嵌套定义。(1) 如果被调用函数放在调用函数之前定义。如果被调用函数放在调用函数之前定义。 例如:/*被调函数*/ int fun1(int a2,int b2,int c2,. ) main( ) fun1(a1,b1,c2,. ); /*调用函数调用函数*/ (2) 在调用函数内声明。在调用函数内声明。例如: main( ) int fun1(int a2,int b2,int c2,. ) ;/*函数声明函数声明*/ fun1(a1,b1,c2,. ); /*函数调用函数调用*/ int fun1(int a2,int b2,int c

35、2,. ) /*函数定义函数定义*/ (3) 如果文件开头对所调用的函数进行了声明,则各如果文件开头对所调用的函数进行了声明,则各函数中不必对所调用函数再作声明函数中不必对所调用函数再作声明 。例如: int fun1(int a2,int b2,int c2,. ) ;/*函数声明函数声明*/ main( ) fun1(a1,b1,c2,. ); /*函数调用函数调用*/ int fun1(int a2,int b2,int c2,. ) /*函数定义函数定义*/ 6.2.4 6.2.4 函数的返回值函数的返回值函数的返回值函数的返回值是通过函数调用使主调函数得到的确定值。注意:注意:凡不加类型说明的函数,自动按整型处理。凡不加类型说明的函数,自动按整型处理。说明:说明: 1.函数的返回值是通过函数中的return语句获得的。return语句后面的括弧也可以不要语句后面的括弧也可以不要例如例如: “return ;” 等价于等

温馨提示

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

评论

0/150

提交评论