《实用C语言程序设计教程》第3章三种基本结构程序设计_第1页
《实用C语言程序设计教程》第3章三种基本结构程序设计_第2页
《实用C语言程序设计教程》第3章三种基本结构程序设计_第3页
《实用C语言程序设计教程》第3章三种基本结构程序设计_第4页
《实用C语言程序设计教程》第3章三种基本结构程序设计_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、O返回 2021-7-12 3.1 顺序结构程序设计 3.2 选择结构程序设计 3.3 循环结构 O返回 2021-7-12 顺序结构程序:就是执行时依语句排 列顺序一条接着一条地执行,不发生 控制流的转移。 特点:每个程序都是按照语句的书写顺 序依次执行的,它是最简单的结构。不 可或缺的若干语句,用把它们括起来 ,这样的语句体称为复合语句。复合语 句在逻辑上等价于一条语句,复合语句 内部还可嵌套复合语句。 A B a b O返回 2021-7-12 main() char ch= a; /*定义变量并赋值 */ int a= 98; unsigned b=1000; long c= 1234

2、56789; float x= 3.14; double y=1.2345678; printf (1) a= % d,a= % c,ch= % d,ch= % cn,a ,a,ch,ch);/*输出*/ printf (2) b= % u n,b); printf (3) c= % ld n,c); printf (4) x= % f,y= % fn,x,y); printf (5) x= % e,y= % e n,x,y); printf (6) y= % - 10.2fn,y); 【例 1】 分析下列程序,观察运行结果 运行结果 (1) a=98,a= b,ch=97,ch= a (2)

3、 b=1000 (3) c=123456789 (4) x=3.140000,y=1.234567 (5) x=3.14000e+00,y=1.23456e+ 00 (6) y=1.23 O返回 2021-7-12 【例 2】 输入一个三位的整数,分解它的符号、百位数字、十位数字和个位 数字,然后依次输出。 #include #include /* 程序中使用了数学函数 abs */ main() char c1,c2,c3,c4; /* 定义变量 */ int x; printf(please input a numer: n);/* 输入提示信息 */ scanf(%d, /* 键盘输入

4、x 的值 */ c4=x=0?+: -; /* 将 x 的符号赋给 c4 */ x=abs(x); /* 取 x 的绝对值 */ c3=x%10+48; /* 求得 x 的个位数字,加 48 转换为对应数字字符的 ASCII 码值*/ x=x/10; /* 去掉个位数, 取出 x 的高位 */ c2=x%10+48; /* 求得 x 的十位数字, 加 48 转换为对应的 ASCII 码值 */ c3=x/10+48; /* 求得 x 的百位数字, 加 48 转换为对应的 ASCII 码值 */ printf(%cn%cn%cn%cn,c4,c3,c2,c1); /* 输出符号位,百位,十位,个

5、位 */ 程序的执行结果: please input a numer: -321 -,3,2,1 O返回 2021-7-12 【例 3】 在屏幕输出 “please input your name:”,再从键盘上输入一个名字 ,然后显示“Hello!”,在下一行显示输入的名字。 # include main () char name 10;/* 存放名子的变量在后面章节再详细介绍 */ printf(please input you rname: n);/* 输出提示信息 */ scanf(% s,name); /* 读入名字 */ printf(Hello! n); /* 输出 Hello!

6、*/ printf(% s,name); /* 输出读入的名字 */ 程序的执行结果: please input your name: Li gang Hello! Li gang O返回 2021-7-12 【例 4】 读入一个小写字母,将其转换成大写字母后输出,同时输出其对应 的 ASCII 编码。 # include main() char ch1, ch2 ; printf ( Enter a lower letter : ) ; ch1=getchar ( ) ; /*利用字符输入函数,实现键盘输入一个字符,赋给字符变量 ch1 */ printf (letter: %c , ASC

7、II:%dn,ch1,ch1 ); /* 屏幕显示键盘输入的字符,并显示该字符的 ASCII 代码值*/ ch2=ch1-32; /*将小写字母转换成对应的大写字母 */ printf (letter: %c , ASCII:%dn,ch2,ch2 ); /*屏幕显示转换后的字符,及该字符的 ASCII 代码值*/ 程序运行情况: Enter a lower letter: a letter: a, ASCII: 97 letter: A, ASCII: 65 O返回 2021-7-12 【例 5】 在100.0g苯中加入13.76g联苯(MB),所形成溶液的沸点为82.40( t2),计算联

8、苯的相对分子量。已知纯苯的沸点为80.10(t1),Kb=2.57。 # include main() float mA,mB,MB,Kb,t1,t2; /*定义变量*/ printf(please input:mA,mB,Kb ,t1,t2n);/*输出“输入数据”提示信息*/ scanf(% f,% f,% f,%f,% f, /*输出联苯的分子量*/ printf (g/mol n ); /*打出分子量的单位*/ 程序运行情况: please input:mA,mB,Kb ,t1,t2 100.0,13.76,2.57,80.10,82.40 MB=153.75 g/mol O返回 20

9、21-7-12 、格式输出函数printf() printf() 函数调用的形式: printf(“格式控制字符串”,输出项表) 或 printf(字符串) 在该函数调用时,在其后面加上分号,就构成了格式输出语句。 printf 中的输出项是和前面的格式控制字符串按顺序一一对应的。“项”可 以是常量、变量、表达式、数组和函数调用,其值应和格式说明相容。 1格式控制字符串 该字符串放在一对双引号中,它可以包含以下三部分内容。 (1)按原样输出的字符: (2)转义字符: (3)与输出项对应的“格式说明符”:要求以%开头,格式说明符在 个数和类型上应该与输出项相对应。 O返回 2021-7-12 格

10、式符输出形式输出项类型数据输出方式 -md -mo -mx -mu d十进制整数 o八进制整数 x十六进制整数 u无符号整数 int, short unsigned int unsigned short char有-,左对齐;无-,右对齐 无 m 或总宽度超过位时按实际宽度输出;不足 m 位时,补空格 -mld -mlo -mlx -mlu ld十进制整数 lo八进制整数 lx十六进制整数 lu 无符号整数 long unsigned long -m.nf -m.ne f十进制小数 e十进制指数 自动选定格式 float double 有-,左对齐;无-,右对齐 无 m.n 或总宽度超过 时,

11、则按实际宽度输出;有 m.n 输出 m 位,其中小 数 n 位;不足 m 位时,加空格 g自动选定f或e格式 float double 不输出尾数中无效的0 ,以尽可能少地占输出宽度 。 -mcc单个字符char 有-,左对齐; 无-,右对齐 无 m 则输出单个字符; 有 m 则输出m 位,不足 m 位时补空格 -m.nss字符串字符串 有-,左对齐;无-,右对齐 无 m.n 则按实际输出全部字符串 有 m.n 则输出前n 个字符串 注意:m、n 均是正整数, m 主要用于控制输出数据的总宽度,n 用于控制输出实数的小 数位数或控制输出字符串时可以输出的实际字符数。 O返回 2021-7-12

12、 2输出项表 printf函数中的 “输出项表”部分由表达式组成,这些表达式应与 “格 式控制字符串”中的格式说明符的类型一一对应,若 “输出项表”中有 多个表达式,则每个表达式之间应由逗号隔开,各输出项可以是任意合 法的表达式(包括常量、变量和函数调用)。因此 printf 函数也具有计算 的功能。 printf ( %dn , 100) ; /*输出显示100*/ printf ( %dn , 1234000+5678) ; /*输出显示:1234+5678*/ printf ( %fn , (x=123.0)+(y=0.4567) ; /*输出显示:123.456700*/ printf

13、 ( %6.2fn , 123.4567) ; /*输出显示:123.46*/ printf ( %.3fn , 123.4567) ; /*输出显示:123.457*/ O返回 2021-7-12 3 printf函数的控制字符的附加说明 标 记作 用 (加号) 空格 # 0 * 输出的正数前面加“+”号,负数前面加“”号 在输出的正数前加一个空格 “#o”使输出的八进制数前加 0 “#x”或“#X”使输出的十六进制数前加0 x或0X 对没有小数部分的浮点数, #迫使 f、e、E、g、G 打 印出小数点且“#g”不去掉尾部的无效0 用0(零)去填充域宽 指定浮点数的输出位数 O返回 2021

14、-7-12 二. 格式输入函数 scanf() scanf()调用的格式: scanf(格式控制字符串,输入地址项表列); 该函数具有按格式字符串中规定的格式,在键盘上输入各输入项的数据,并 依次赋给各输入项,且具有对从输入流中接收到的数据进行格式转换的功能 。因为要求在内存中保存所接收到的数据,因此,需要提供接收数据的变量 的地址。地址运算符 printf(input a, b:n); scanf(d,d, if(a!=b) /*语句 1 是一条复合语句*/ t=a; a=b; b=t; printf(a=d,b=dn,a,b); else printf(equaln); /*语句2*/ 程

15、序的执行结果1: input a, b: 10,12 a=12,b=10 程序的执行结果2: input a, b: 10,10 equal O返回 2021-7-12 【例 7】 输入 3 个整数,输出其中的最大值。 # include void main( ) int a,b,c,max; /*max中放最大值*/ printf(inputa,b,c:n); scanf(ddd, max=a; /*先假设a是最大的数*/ if (maxb) max=b; /*如果 b 比假设的最大值大,再假设 b是最大的数*/ if (max0,方程 有两个不等的实根;(2)若 b2-4ac=0,方程有两

16、个相等的 实根;(3)若 b2-4ac0,方 程有两个复根。 y y n 开始 a= =0 这是一次方程x=c/b delta=b*b4*a*c 输入a,b,c 方程有两个相等的实根 x1,x2=b/(2*a) n 方程有两个虚根 n 方程有两个不相等的实根 x1=(-b+sqrt(delta)/(2*a) x2=(-b-sqrt(delta)/(2*a) 结束 图 3-1 解一元二次方程的流程示意图 y delta= = 0 delta 0 O返回 2021-7-12 main() float a,b,c,delta,x1,x2,realpart,imagepart; printf(请输入

17、a,b,c:n); scanf(% f,% f,% f, 假(0) 真(0) 语句1 表达式 图3-2 单分支结构 语句 1 若多于一条,则需用复合语句 。if 语句的功能如图 3-2 所示。语句中 的“表达式”项可以是算术表达式、关 系表达式或逻辑表达式,甚至可以是任 意类型的数值。 if 语句的执行过程是:遇到 if 关键字,首先计算圆括号中的表达式 的值,如果表达式的值(或数值的)值不为 0(真)时,就执行其后的语 句 1;表达式值为 0(假)时,就跳过其后的语句 1,控制转移到下一 条语句。 O返回 2021-7-12 2.双分支结构程序 格式:if(表达式)语句 1; else 语句

18、 2; 语句 1、语句 2 若多于一条语 句,则应使用复合语句。其执 行过程如图 3-3所示。 假(0)真(0 ) 语句1 表达式 图3-3 双分支结构 语句2 该语句遇到关键字 if,首先运算小括号中的表达式,如表达式的值为非 0,则 执行紧跟其后的语句 1,执行完语句 1 后,执行 if-else 结构后面的语句;如果 表达式的值为 0,则执行关键字 else 后面的语句 2,接着执行 if-else 结构后面 的语句。 O返回 2021-7-12 嵌套形式 1 格式: if(表达式 1) if(表达式 2)语句 1; else 语句 2; else 语句 3; 1.if-else 语句嵌

19、套结构 执行流程如图 3-4所示,在if-else 语句中包含另一 if-else 语句,即第一个 else与第二个 if结合,而最后一个 else与第一个 if结合。 假(0)真(0 )表达式 1 图3-4 嵌套形式1 语句3假(0) 真 (0) 语句1 表达式 2 语句2 O返回 2021-7-12 嵌套形式 2 格式: if(表达式 1) if(表达式 2)语句 1 ; else语句 2; 语句1 语句2 假 (0) 真 (0) 表达式 1 图3-5 嵌套形式2 假 (0) 真 (0) 表达式 2 执行流程如图执行流程如图 3-5所示,在所示,在if- else 语句中包含一个单分支结构

20、语句中包含一个单分支结构 复合语句。即复合语句。即else与第一个与第一个 if结结 合。因为第二个合。因为第二个 if在复合语句中在复合语句中 ,复合语句是一条语句,不能与,复合语句是一条语句,不能与 复合语句外的复合语句外的 else结合。如果把结合。如果把 去掉,则去掉,则 else与第二个与第二个 if结结 合。合。 O返回 2021-7-12 嵌套形式 3 格式: if(表达式 1)语句 1; else if(表达式 2)语句 2; else语句 3; 执行流程如图 3-6所示,在if-else 语句 的else后紧跟另一个if-else 语句。C 语言 规定:else总是与它前面最

21、近的同一复合 语句内的不带 else 的 if结合。在 if语句 嵌套形式 2中可以看到,else与 if在同一 复合语句内才能结合。 图3-6 嵌套形式3 语句3 语句1 假(0)真(0 ) 表达式 1 假(0)真(0 ) 表达式 2 语句2 嵌套形式语句结构执行过程是:从上到下逐一对 if 后面的表达式进行运算 。当某一个表达式的值为真(非 0) 时,就执行紧跟其后的相关子句中的语 句,而后面的其余部分均被跳过。当有 n 个 if 语句,就有 n+1 个分支。 O返回 2021-7-12 2switch 语句 switch 语句的格式: switch (表达式) case 常量表达式 1:

22、 语句组 1; break; case 常量表达式 2: 语句组 2; break; case 常量表达式 n: 语句组 n; break; default: 语句组 n+1;break; O返回 2021-7-12 表达式 常量表达式1 语句组1 break 常量表达式2 语句组2 break default 语句组n+1 break 常量表达式n 语句组n break 图 3-7 switch 语句 O返回 2021-7-12 注意 (1)switch 关键字后面的表达式,可以是任意合法的表达式。 (2)一定要用圆括号把 switch 后面的(表达式)括起来。否则会给出出错信息。 (3)所

23、有 case 子句后所列的常量表达式值都不能相同,且每个 case 关键字后 面的常量表达式的类型,必须与 switch 关键字后面的表达式类型一致。 (4)break 语句的作用是退出 switch 语句。如果“语句组i”的后面没有安 排 break 语句,那么执行完后,会继续往下执行。 (5)default 可以省略。如果有它,其位置不一定放在整个语句的最后。 O返回 2021-7-12 (6)一定要用花括号将 switch 里的 case、default 等括起来。在case后面中虽然 包含一个以上执行语句,但可以不必用花括弧括起来,会自动顺序执行本case后 面所有的执行语句。当然加上

24、花括弧也可以。 (7)执行 switch 语句时,首先计算其后的表达式的值,然后自上而下顺序寻找 一个 case 后面的常量与该值相匹配,找到后按顺序执行此 case 后面的所有语句 ,包括后续的 case 子句,而不再进行判断。如果所有 case 中的常量值都不能与 switch 后面的表达式的值相等,就执行default 关键字后面的语句;若既没有相匹 配的 case,也没有 default 关键字,则直接跳过 switch语句。 O返回 2021-7-12 3if 语句与 switch 语句的区别 if 语句的嵌套形式和 switch 语句都能实现多分支选择,在某种场 合也可以互换替代,

25、但 if 语句适应于各种条件的选择,能够计算 关系或逻辑表达式;switch 语句只适用于检验表达式与哪个值相等 的情形。 O返回 2021-7-12 for 循环语句 while 循环语句 do-while 循环语句 continue/break 语句 goto 语句和语句标号 O返回 2021-7-12 i=1,s=0 i 100 s=s+1 i+ 假 真 图3-8 【例 10】计算 1+2+3+99+100。 # includestdio.h main( ) int s,i; s=0; /*累加和的变量初值为0 */ i=1; /*累加数从1开始 */ loop:if(i=100) /*

26、累加数不大于100 */ s= s+ i; /*进行累加* / i+; /*产生下一个累加数*/ goto loop;/*使程序流程转到if语句,以便继续累加下一个数*/ printf(s=1+2+100= % d n,s);/*输出累加* / 程序运行结果: s=1+2+ +100=5050 O返回 2021-7-12 【例 11】输入任意一个大于等于2的自然数n,判断该数是否是素数并输出相 应的结果。 真 真 真 假 假 假 开始 输入n tag=1,i=2 i n i=i+1 tag=0,break tag= 1n 输出是素数输出不是素数 图3-9 结束 n%i= 0 # include

27、stdio.h main( ) int i,n,tag; printf(请输入一个大于请输入一个大于2的自然数的自然数n:);); scanf(% d, printf(给出所有可能的兑换方案:n); for(i=0;i=100;+i) /*第一层(最外层)循环*/ for(j=0;j=50;+j) /*第二层(中间层)循环*/ for(k=0;k=20;+k) /*第三层(最内层)循环*/ if (i*1+j*2+k*5=100) printf(方案%8d: %8d(1)%8d(2)%8d(5)n, +n,i,j,k); O返回 2021-7-12 【例 14】求自然对数底的近似值,公式为:e

28、=1+1/1!+1/2!+1/n!+。 #include main( ) int i=1; double e=1.0,u=1.0; while (u1e-6) /* while 循环语句*/ u=u/i; e=e+u; i+; printf(ne=%12.10f,e); i=1;e=1.0,u=1.0; do /*do while 循环语句*/ u=u/i; e=e+u; i+; while (u1e-6); printf(ne=%12.10f,e); for(i=1,e=1.0,u=1.0;u1e-6;+i) /* for循环语句*/ u=u/i; e=e+u; printf(ne=%12.

29、10f,e); O返回 2021-7-12 【例 15】找出两个自然数平方之和的所有三位数。 #include stdio.h #include math.h main ( ) int k,j,m,n,flag; for (n100;n1000; n) /*第一层(最外层)循环*/ ksqrt(1.0*n);/*第一层(最外层)循环复合句开始*/ flag0; j1; while(jk)&(flag0) /*第二层(中间层)循环*/ m1; /*第二层(中间层)循环复合句开始*/ while(mk)&(m*m!nj*j) mm1;/*第三层(最内层)循环*/ if (m*mj*jn) flag

30、1; printf(%d%d*%d%d*%dn,n,j,j,m,m); jj1; /*第二层(中间层)循环复合句结束*/ /*第一层(最外层)循环复合句结束*/ O返回 2021-7-12 一“当型”循环 在执行循环语句时,首先判断循环控制表达式是 否为“真”,若为“真”,则反复执行循环体。 若为“假”,则结束循环。如图 3-10所示。 图3-10 假 真 循环体 表达 式 1while语句 格式: while(表达式) 语句(循环体部分) 功能:当表达式的值为真时,执行 while语句中的循环体。 (1)循环体如果包含一个以上的语句,则必须用花括弧括起来,以复合语)循环体如果包含一个以上的语

31、句,则必须用花括弧括起来,以复合语 句的形式出现,否则句的形式出现,否则 while 语句范围只到语句范围只到while后面第一个分号处。后面第一个分号处。 O返回 2021-7-12 (2)在循环体中应有使循环趋向于结束的语句,即设置修改循环条件的语句。)在循环体中应有使循环趋向于结束的语句,即设置修改循环条件的语句。 (3)while语句先判断表达式的值,然后执行循环体中的语句,如果表达式的值 一开始为假 (值为 0),则不执行循环体,直接执行循环体以外的语句。表达 式是控制循环的条件,它可以是任何类型的表达式。 2for语句 格式:for (表达式 1;表达式 2;表达式 3) 语句 功

32、能:首先计算表达式 1 的值;其后检测表达式 2 的 值,若其值为“真”,则执行循环体语句,执行完毕 后,再计算表达式 3,至此完成了一次循环;然后, 再次测试表达式 2 的值是否为“真”,若为“真”, 继续执行循环体语句,直到计算表达式 2的值为 0,即为“假”,则终止循环,执行 for语句下面的一 个语句。如图 3-11所示 图3-11 假 循环体 真 表达式2 表达式1 表达式3 O返回 2021-7-12 (1)for语句中条件测试总是在循环开始时进行;如果循环体部分是多个语句组 成的,则必须用左、右花括号括起来,使其成为一个复合语句。 (2)for语句中,表达式 1通常是为循环变量赋

33、初值的表达式;表达式2是控 制循环的表达式;表达式 3通常是改变循环变量值的表达式。表达式1和表达 式3既可以是一个简单的表达式,也可以是逗号表达式。 (3)for 语句的表示形式相当灵活,可以部分或全部省略,但 “;”不能省略 ,如 for (;)。 O返回 2021-7-12 二“直到型”循环 格式: do 语句(循环体部分) while(表达式);(分号必不可少) 功能:先执行语句,后判断表达式的 值。它的执行过程是:先执行一次指定的 语句,然后判断表达式的值,当表达式的 值为非零(“真”)时,返回重新执行该 语句,如此反复,直到表达式的值等于 0为 止,此时循环结束。如图 3-12所示

34、。 图3-12 真 假 循环体 表达式 O返回 2021-7-12 (1)do while语句的表达式是任意表达式,是控制循环的条件。 (2)先执行后判断。因此,循环体至少执行一次,直到表达式为“假”才退出 循环。因此,在循环体语句中一定要有改变表达式的值的操作,最终使其表达式 的值变为 0,结束循环。否则将成为“死”循环。 (3)如果 do while语句的循环体部分是多个语句组成的话,则必须用左右花括号 括起来,使其形成复合语句。 (4)在关键字 while 的小括号的后面,一定要加分号“;”,千万不能忘记,它 表示 do while语句到此结束。 O返回 2021-7-12 三goto

35、语句 格式:goto 语句标号; 功能:程序执行到 goto语句时,转到语句标号指定的语句去执行。 (1)使用goto语句时,需要预先指定一个有标号的可执行语句作为目的位置, 这个有标号的语句必须与 goto 语句在同一个函数内。语句标号必须用标识 符表示,不能用整数作为标号。 (2)与 if语句一起构成循环结构。从结构化程序设计角度考虑,大多数现 代的编程方法都认为 goto 语句是有害的结构,因此不提倡使用 if和 goto语 句构造循环。 (3)goto语句为无条件转向语句,会跳过程序中的一段代码并转到一个指定 的目的位置。 O返回 2021-7-12 (1)4种循环语句均可以用来处理同

36、一问题,一般情况下它们可以互相代替 。但一般不提倡用 goto语句和if语句构成的循环。 (2)while和 do while循环,只在 while后面指定循环条件,在循环体中包含反 复执行的操作语句,包括使循环趋于结束的语句 (如 i+ + ,或 i= i+ 1等)。 for循环可以在表达式 3中包含使循环趋于结束的语句,甚至可以将循环体 中的操作全部放到表达式 3中。因此 for语句的功能更强,凡用 while循环能完 成的,用 for循环都能实现。 (3)while语句和do while语句只有一个表达式,用于控制循环是否进行。for 语句有三个表达式,不仅可以控制循环是否进行,而且能为

37、循环变量赋初值 及不断修改循环变量的值。 for语句比 while和 do while语句功能更强,更灵活。for语句中三个表达 式可以是任何合法的C语言表达式,而且可以部分省略或全部省略,但其中 的两个分号不能省略。 O返回 2021-7-12 (4)用while和 do while循环时,循环变量初始化的操作应在 while和 do while语 句之前完成。for语句可以在表达式 1中实现循环变量的初始化。 (5)for 循环和 while 循环语句结构均是先判断循环条件,条件成立,才执行 循环体,具有“先判断,后执行”特点,for语句和 while语句可能一次也不执 行循环体;而 do while 循环语句则是先执行循环体,然后再判断循环条件,具 有“先执行,后判断”的特点。do while语句至少执行一次循环体。for和 while 循环属于“当型”循环;而 do while循环属于“直到型”循环。 (6)while语句和do while语句多用于循环次数不定的情况。而do while语句更 适合于第一次循环肯定执行的场合。在初值、增量控制条件明显,或循环次

温馨提示

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

最新文档

评论

0/150

提交评论