新手学C语言之入门_第1页
新手学C语言之入门_第2页
新手学C语言之入门_第3页
新手学C语言之入门_第4页
免费预览已结束,剩余23页可下载查看

下载本文档

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

文档简介

1、学习 C 语言(新手入门)年轻的小荣子阿尔法和李世石的围棋对弈让我们感受到了计算机的强大,事实上计算不仅要靠硬件设备的支持,还需要在里面运行代码(很多种,包括 c),这些代码就是它的灵魂(譬如我们的思想) 。介绍几部通过在计算机里头运行代码从而创造无限可能的电影, 个人觉得不错的:黑客帝国,超验骇客,创战纪,人工智能等。正题,能编辑 C 语言的软件非常多,比如visual c+ 6.0/7.0 ,turbo c 等。理论总是离不开实践,在要学习 C 语言理论之前先要找到属于自己的能实现代码结果的软件。这样说,计算机语言和人的语言的区别在于, 人通过各种发音实现交流, 但是计算机主要是通过电流来

2、传达信息, 所以只能用 0/1 来表示电流拥有的两种状态,这样最底层的计算运作就是通过一段长长的 0/1 代码,通过 0 和 1 的不同组合来表示文字或者信息。 C 语言当然不是最底层的 0/1 代码,他是一个沟通的中介,比如等于号在 c 语言里就是两个等号“ =”,这样使得我们更容易和计算机交流了,只要学会了 C 语言,它就能把我们的语言翻译成计算机的语言。以下内容从简单到困难,先来学会如何运行c 语言代码(用vc 6.0 中文版):1.按以下步骤打开界面(以后都可以这样打开):2.一些常用的功能键:( 1 是 compile 编译的意思,就是把这些我们能看懂的符号转换成计算机代码,同时按这

3、个键可以检查错误和验证是否能运行。 2 是 build ,建立一个可以运行的EXE类文件,就是把这些代码弄成一个能运行的东西。 3 就是 run 运行,只有经过查错和建立才可以按运行。是不是很简单,自己动手一遍就会)3.输入代码并运行(里面的代码如下:#include<stdio.h>main()int a,b,c;a=1,b=2;c=a+b;printf("%d",c);Include 的英文意思是包含、包括,顾名思义,#include<stdio.h>就是把 stdio.h这个东西包含进去,其实 #include< >是 c 语言里的

4、一种格式,就是把什么包含进来的意思(这里是口语表达) 。stdio.h 叫做头文件 ,什么是头文件呢?打个比方,在 C 语言里我们要用到很多的比如开根号、乘方、阶乘 n!等等数学公式函数,那么就可以把这些常用的同类型的函数放到一起形成一个函数库, 然后给它取个名字比如叫 math.h,这样当要用到这些函数的时候就不用自己的写了,直接用 #include<math.h>把整个库包含进来, 里面的函数就可以直接调用。同样的, stdio.h 也是这样一个库,里面有输入输出函数(就是支持键盘输入和屏幕输出)可以调用。类似的还有 graphic.h 图形函数库, string.h 字符串函

5、数库等等,调用格式一样的。Main() 代码; 是 C 语言里必须有的一个格式,main 翻译是 ”主要 “,main 函数就是主函数,相当于程序从这里入口并开始运行。运行的内容就是花括号 里头的代码。了解 #include<stdio.h> main() 的功能之后,就真正的开始代码实现的部分了。上面有一条简单的代码:int a,b,c;a=1,b=2;c=a+b;printf("%d",c);我们每句话结束用句号“。 ”来结束, C 语言里用的是分号 “; ”来结束一个语句,上面每个语句后面都有一个分号。a=1 表示赋值,把等号右边的数值赋予给左边,赋值之后

6、 a 等于 1,b 等于 2。同理可知 c=a+b就是把 a+b 的结果数值赋予给 c,这样 c 的值就是 3.print 的翻译是打印, printf()函数实现的功能是输出 (打印在屏幕上)。而 printf ()函数是属于 stdio.h 的,这就是为什么上面要写 #include<stdio.h>原因。int a,b,c; 定义 a,b,c 三个变量, int 是数据类型里的一种, int 是整型,就是说 a,b,c 都是整数而不能是其他类型。另外 float 浮点型,如果用 float a,b,c,那么 a,b,c 就能赋予小数值。 还有 char 字符型,比如 char

7、 a,b,,那么 a,b 只能赋予字符的值。这是因为在定义 a,b,c 变量的同时,要在计算机内存中分配给它们空间,整数占用 2 个字节而小数占 4 个字节,所以 int a 后 a 分配到的空间就是能装下 2 个字节的东西,然后如果用 a=1.23,由于 1.23 是小数占用 4 个字节装不下,那么这个赋值就出错。因此, int ,float ,char 等数据类型定义的意义就在于给变量分配一个多大的内存空间, 存储对应类型大小的数据 (任何没有定义数据类型的变量是不会分配内存空间所以是不能使用的! )。来看下运行结果( print 出结果 c 的值):所以这样就实现了计算a+b 赋值给 c

8、 并输出 c 的值。数据类型 一览(当想要使用何种类型变量,直接用以下来定义即可):C 语言和数学语言也还是有所区别的,比如数学里判断a 等于 b 用“ a=b?”,但是 C 语言里“ a=b?”就变成了赋值,它的等号是两个数学等号组成“=,”所以 C 里正确的表达是“ a=b?”(不要纠结为什么要用两个等号,这是大神们设定的),为了能让计算机理解自己的代码,下面来认识 C 语言有哪些 运算符 :+ 加- 减* 乘/ 除;不存在÷号,表达式里“ / ”就是除号。% 取余数; 17%5 等于 2,余数是 2。> 大于< 小于>=大于等于<=小于等于!=不等于=

9、等于= 赋值,右边值赋予左边变量( a=a+1+2)。&& 与;(1=1)&& (1!=2),判断两边都真结果为真。| 或;判断有一边为真结果为真。! 非;!(1=1),判断条件的相反。? :条件运算; (2>1)?3:4,判断为真,结果取 3,否则取 4.+自增; a+,相当于 a=a+1。- 自减; a-,相当于 a=a-1。其他经历一遍胜过深思千回,在软件上尝试几遍便能熟记于心。#include<stdio.h>int main() int a,b,c,d; a=1; b=a+1; c=b*2; c+; d=c%3; printf( ps

10、:输出“结%d果”,d);。 / return 0;写一个能计算圆的周长和面积的C 代码:定义三个浮点型float (含有小数)变量s、l、r 。scanf()是输入函数, scan 是扫描的意思,从键盘扫描你的输入,这个函数也是 stdio.h 头文件里的一个函数。 Scanf()括号里的是参数,跟 printf ()一样,格式有所不同。 printf ( “%d”, c)表示输出结果 c, c 的数据类型是整型( int ),用 “%d”格式。如果输出结果是浮点型( float )则用 “%f格”式,比如 printf (“%f,” 1.23)。如果是字符型( char),用 printf

11、 (“ %c,”)s等。“%_” 类型Printf( “%_”,s);对应数据类型格式dint,short以十进制形式输出带符号整数(正数不输出符号 )o以八进制形式输出无符号整数(不输出前缀 0)x,X以十六进制形式输出无符号整数(不输出前缀 Ox)u以十进制形式输出无符号整数ffloat,double以小数形式输出单、双精度实数e,E以指数形式输出单、双精度实数g,G以 %f 或 %e 中较短的输出宽度输出单、双精度实数cchar输出单个字符s字符串输出字符串Scanf(“%d“,&r )比 printf (“%d“,r)多了个地址运算符 &,因为 scanf 是输入,把数

12、据存入到 r 变量的地址空间,所以 scanf()函数统一要加个地址运算符。(在代码中添加备注用 / 备注 ,本行此符号之后的都为备注,也可以用 /* 备注 */ ,两个符号之内的是备注,可囊括多行。 )上面代码中:#include<stdio.h>int main()return 0;是标准主函数格式, int main()表示返回 int 型,return表示返回,返回值为 0。不必深究。float s,l,r; / 备注:面积 s,周长 l,半径 r。scanf("%f",&r);l = 2 * 3.14159 * r;s = 3.14159 *

13、r * r;printf(" 周长为: %f,面积为: %f n",l,s);相当于一个能计算圆的周长和面积的计算器,只要 scanf()输入 r 的值,就能 printf ()输出 l(周长)和 s(面积)的值,结果图示:可以通过输入不同的半径来得到其周长和面积。同理可以利用 c 语言来求得其他数学公式的结果:求 y=x2+2x-3当 x 取某个数时的值。代码:int x,y;scanf("%d",&x); / 这里输入 x 的值。y=x*x+2*x-3;printf(" 输出结果 y: %d",y);对于这样的函数式:x*

14、x+2*x-3(0<x<10)Y=x+2(x>=10)要用到条件语句。( 1) if 语句if(表达式)语句 1;else语句 2;( 2) if 语句的嵌套If(表达式 1)语句 1; / 语句 1 也可以嵌套 if 语句。elseif(表达式 2)语句 2-1;else语句 2-2;/ 这样的嵌套可以多重 .if()里的表达式如果正确则为真,执行紧接着的语句1,否则执行 else 下面的语句 2。因此上面数学函数式的代码:#include<stdio.h>int main()int x,y;scanf("%d",&x);/scanf

15、 输入 x 的值。if(x>0 && x<10)/x>0 和 x<10 是与的关系,若同时为真则结果为真。y=x*x+2*x-3;elseif(x>=10)y=x+2;printf(" 输出结果 y:%d",y);/ 双引号里的文字原样输出, %d 输出为 y 的值。return 0;ps: if()里的表达式常用到逻辑表达式“与或非”。( 3) switch 语句switch (表达式)case 常量 1: 语句 1case 常量 2: 语句 2case 常量 3: 语句 3case 常量 .: 语句 .case 常量 n:

16、语句 ndefault:语句 n+1switch 是匹配的意思,就是用表达式的值从常量 1 开始比较是否相等,如果相等,从相等的那条语句开始执行, 到 default 的语句结束。 如果想执行完这一句就结束,可以在其后加上 break ;语句来打断跳出 switch 。下面是输入小明同学的分数判断他的成绩级别的代码:假如小明的成绩是 a=76,那么十位数 i=7 ,利用 switch 函数匹配, case 7 符合,执行之后的 printf (“Cn ”)语句,又因为 break ;语句打断,所以不再执行之后的 case,直接跳出 switch () 。如果是 59 到 0,都只有一条语句可执

17、行。( 4) while 循环语句写一个代码, 让你输入一个数字, 如果你输入的数字不大于100 则重新输入, 否则结束。这里就用到了循环, 循环必须要有判断条件语句,循环不能是没有结束条件的。格式:while (表达式)语句 1如果表达式为真(判断正确) ,则执行语句 1,直到表达式为假。代码:#include<stdio.h>int main()int a;scanf(“%d”,&a);/输入数字a。while(a<=100)/判断是否小于等于100,是则循环,否则结束。scanf(“%d”,&a); /重新输入areturn 0;红色部分是循环体,花括号

18、 里可以写多条语句,作为一个整体一并运行。执行的顺序是,判断 while (表达式)真假,为真则执行循环体,执行完毕跳回到 while (表达式)开始下一次的判断,直到判断为假结束循环。所以上面会不断循环要输入 a,直到输入的值大于 100,表达式为假结束。另一种是 do-while语句,区别只是先执行循环体,再判断,直到判断为假,while( 表达式 ) 后跟着一个分号!代码如下:#include<stdio.h>int main()int a;doscanf( “%d”,&a); /输入 a while(a<=100) ; /判断是否小于等于 100,是则循环,否

19、则结束。return 0;( 5) for 循环语句for( 表达式 1; 表达式 2; 表达式 3);循环体语句实例:以上加入了一个for 循环( /*多行备注 */ ),表达式 1 “a=1” 是 for 循环的入口,是进入 for 循环第一个运行的语句,而且只运行一次。表达式 1 之后就到表达式 2,表达式 2 “a>b”后面虽然没有问号,但是它是一个判断语句,就像 if 语句或者 while 语句的判断表达式一样, 在这里如果 a>b 判断为真,则继续执行循环体语句,否则结束跳出 for 循环。如果表达式 2 为真,接下来执行 循环体语句 ,再接下来是 表达式 3,然后开始

20、下一次的循环:表达式 2(先判断是否为真) > 循环体语句 > 表达式 3 ,表达式 1 会且只会运行一次, 之后的循环都不再执行, 而且以上的表达式和循环体都可以是多个语句的组合,比如表达式 1 可以是“ a=2,b+, ”。(3,4,5 为一个循环)让我们来输出一个星号 * 构成的正方形:表达 1 赋值使得 i=1,j=4 ,判断 i<=j 为真,执行循环体 后输出五个星号和换行,然后 i=i+1 (即 i 变成了 2,j 不变),继续下一次的循环:判断 2<4 为真,继续执行循环体语句,再输出一行星号并换行, 如此重复到 i=5 大于 j 判断为假,结束 for

21、循环,这时共执行了 4 次循环体,打印出了 4 行星号,如上图。事实上 for 循环里还可以套用for 循环,也可以套用 while 循环,前者最为常见和好用。假如要输出3 次上面的矩形星号,那么把上面的for循环嵌入到另一个for循环中即可:这样就把里面的for 当成了外面 for 循环的循环体语句,按步骤执行即可!兴趣是最好的老师, 实践是最好的证明, 如果有哪些记不住的地方, 上机写代码运行处结果, 让事实来让自己信服, 这样不单更容易记住, 而且还能提高动手能力。如果遇到有疑问的地方, 上网寻找答案, 或者上机调试 (就是对代码的执行结果有疑问,认为可能出现多种结果) ,看结果是否如自

22、己所想,也是验证和解疑的一种好办法。问题:输入两个正整数m和 n,求其最大公约数解题算法 :辗转相除法, 又名欧几里德算法( Euclidean algorithm )乃求两个正整数之最大公约数的算法。算法思路 :假如求 m和 n 的最大公约数( m>n),设 y 为 m÷n的余数,继续用除数 n 除以余数 y,直到余数为 0。比如求 99 和 21 的最大公约数,有:99÷21 余 1521÷15 余 6(这里的被除数和除数分别是上面的除数和余数,相当于后移一位)15÷6余 36÷3余 0(整除)那么最后一个除数 3 就是一开始两个数

23、99 和 21 的最大公约数,此算法可以应用到任何两个正整数上,这就是辗转相处求公约数的算法。算法应用:1、直接用scanf("%d%d", &m, &n)输入需要求公约数的两个正整数;2、m%n的余数为c3、把 n 的值赋给 m,把余数 c 的值赋给 n(除数变成被除数,余数变成除数)4、判断 c 是否为 0,是则最后一个除数 n(已经赋值给 m)就是最大公约数,并输出最大公约数 m即可( printf("m 和 n 的最大公约数是 :%dn",m); )。5、如果 c 不为 0,继续执行步骤2,直到符合步骤 4 结束。代码:#incl

24、ude<stdio.h>int main()/*辗转相除法求最大公约数*/int m, n, c;printf("输入两个正整数: n");scanf("%d%d", &m, &n);c=n;while(c!=0) /*余数不为 0,继续相除,直到余数为0 */c=m%n;m=n;n=c;printf("m和 n 的最大公约数是 :%dn",m);return 0;自定义函数下面代码显示 1 个错误, 0 个警告,双击错误提示,会在错误的当行出现一个箭头标识:原来是 math.h 前把 <写成(,在

25、printf ()后漏了分号;。在 math.h 中有一个求平方根的函数 sqrt (x)用于求实数 x 的平方根,比如 sqrt (1.21 )的值等于 1.1 。intmain() return0; 是代码中仅有的一个主函数,其实sqrt (), printf()都是函数,只是其他的非主函数一般都是在主函数中“调用” 。也就是说可以在主函数 main() 的外面自己定义一个函数如 love () ,在花括号中写这个函数实现的功能,然后在 main()函数中调用自己定义的 love ()函数,它就能实现其功能。好比 sqrt ()就是定义在 math.h 库中的一个函数,然后在主函数 mai

26、n()中直接调用就可以求平方根,这里只需要调用名称,不用管怎么实现的,功能实现只写在定义函数的花括号 内。自定义函数主要有三个点, 函数的入口,内部代码实现,出口(返回值的输出)。 intAnd(int a, int b)int c;c=a+b;returnc;上面是一个计算a+b 的自定义函数 And() ,其中()里的int a, int b是入口,表示到时将会有两个int 型的数进来,然后里面的代码是实现a+b,最后的 return用来返回这个函数的结果值c,并且在 And 前面的 int是规定这个返回值据类型的。因此,在主函数 main()中可以这样用:main()c 的数int dd

27、=Andprintf;(3,5 );(“%d”, d);(ps:运行时不接受任何中文输入法符号)那么输出的 d 的值是多少呢?由于 3 和 5 都是 int 型符合 And()函数的“入口”,事实上 3 和 5 叫做实参(实际的参数),a 和 b 叫做形参(形式上的参数) ,在调用这个函数之后,会把实参的值传递给形参,所以 a=3,b=5 。计算之后得出 c 的值为 8,这就是 And()内部代码的实现,然后通过 return 提供 int 型的返回值c,所以最终整个 And( 3,5 )的值就是 8。这样,就可以把实现某个功能的代码自定义为一个独立的函数, 然后在主函数中调用, 好处是可以多

28、次调用, 而且调用只需要写一次调用的函数名和写入实参,简便许多。另外自定义函数的函数名可以自己随便起, 但是不能使用中文等, 只能是标识符,大小写有别,不能跟 int ,for 这些关键字相同,标识符由字母,数字,下划线组合而成,不能以数字开头。一般使用英语单词或简称比较好记。下面用自定义函数实现a+b:截图自定义函数一般写在 main 函数后面或者放到其他地方,然后把定义函数的名称那一行照搬到 main()函数的前面加个分号进行“声明”,声明之后的自定义函数才能在 main()函数中合法被调用。所以,自定义函数就这样, 根据需要,自己设定返回值的类型, 自己设定函数名,自己设定有多少个形参和

29、各个形参的类型,函数里就像 main()里一样实现各种功能,然后 return 后写上想返回的值,返回值可以是一个数字如 10,可以是一个存在的变量如 c,也可以是一个表达式如( 2*c+a ),以此返回值作为整个定义函数的结果。把上一节求最大公约数的解法写成一个自定义函数,返回值类型是名为 gcd,入口有两个形参设为( int m ,int n ),所以声明部分为:int,取函数int gcd(int m,int n);/ 这里加分号(定义过形参 m, n 后在函数内部就不用重复定义了,直接用,其他没有定义的如果需要必须定义。)定义函数为:int gcd(int m,int n)/ 这里不能

30、加分号int c;printf("输入两个正整数:scanf("%d%d",&m, &n);n");/ 这一句去掉,通过入口传递进形参m和n 的值c=n;while(c!=0) /*余数不为0,继续相除,直到余数为0 */c=m%n;m=n;n=c;return m;主函数为 :int main()/ 主函数int a,b,d;scanf("%d%d", &a, &b);d=gcd(a,b);/ 调用定义的函数gcd()printf("%d n",d);return 0;int m

31、= 0;int Digui(int i)有兴趣可以写几个自定义函数:分别求最大公约数, a+b,求 1+2+3+ +n,然后在同一个主函数中调用它们。自定义函数与 递归:递归,顾名思义就是传递过去,然后归来。比如阶乘5!,传递过去成为5×4!,再传递过去成为5×4×3!直到变成 5× 4× 3× 2× 1!之后,再倒过来归回来,因为 1 是直接已知的,然后归来乘以2,再归来乘以 3 递归的前提条件是下一步的形式跟原来的是一致的,比如n!变成 n×( n-1 )! ,(n-1 )!变成( n-1 )×( n

32、-2 )!。另外递归必须有个出口,不能无限的递下去却没有归回来,要有个终止点(具体的),比如阶乘最后的2×1。用知乎作者 Memoria 的话来说就是:假设你在一个电影院,你想知道自己坐在哪一排,但是前面人很多,你懒得去数了,于是你问前一排的人你坐在哪一排?,这样前面的人 ( 代号 A) 回答你以后,你就知道自己在哪一排了,因为只要把 A 的答案加一,就是自己所在的排了。不料A 比你还懒,他也不想数,于是他也问他前面的人 B 你坐在哪一排?,这样A 可以用和你 一模一样的步骤知道自己所在的排。然后 B 也如法炮制。直到他们这一串人问到了最前面的一排,第一排的人告诉问问题的人 我在第一

33、排 。最后大家就都知道自己在哪一排了。就是这样,以同样的形式向前传递问题,到第一排有具体的答案后向后一层层返回答案。这里的第一排就是递归的出口。 / 求 i 的阶乘,返回值为i !if(0 = i)return (1);elsem = i * Digui(i-1);return m;(ps:也可以用单词来做变量,比如int sum ,number;)假如输入实参 i 的值为 4,不等于 0,执行 else 之后语句 m = i * Digui(i-1) ,这样就变成了求 4*Digui ( 3),调用了自身 Digui (3),然后 Digui (3)又变成了 3* Digui ( 2),直到

34、参数等于 0,执行 if 之后的 return 1 ,不再调用自身函数,最终计算出 4*3*2*1 。递归的好处显而易见:变化成一个跟自身形式相同但是更加简单的问题, 从而可以再利用自身求解, 直到这个问题最终变成一个具体的值,然后再逆推回来得到结果。递归的基本思想无非就是把规模大的问题转化为规模小的相似的子问题来解决。另外递归跟循环有些相似,计算的方向刚好相反。有兴趣可以上各大高校acm、oj 题库做题(网搜 oj ):题库:选 ID1000 题进去可以看到问题的描述:按 summit 键提交自己的代码:然后看到系统的判断(通过与否) :(分别给出所提交题的代码类型,运行时间,代码量和提交时

35、间)水题:一、题目要求: 求具有 abcd=(ab+cd)2 性质的 4位数。编写一个程序求出具有所有这样性质的4位数。示例: 3025这个数字是(30 + 25)的平方输入要求: 无输入输出要求: 输出所有的具有所有这样性质的4 位数。提示:设 abcd四个数,变成 4 位数是 a*1000+b*100+c*10+d。几层循环, a 从 19,b、c、d 从 0 到 9。二、题目要求: 阶梯式打印出九九乘法表:提示:用嵌套的 for 循环,外层 for 决定输出几个等式, 内层的 for 决定当行的具体内容。三、题目要求:输入任意一个正整数, 将其各位数字反序输出 (例如输入 123,输出

36、321)【循环】1、int n;2、输入正整数 n.3、输出 n%10(n 除以 10 的余数,即 n 的个位数)4、令 n=n/10. (除以 10 去掉个位,使得十位变成个位)5、回到步骤 3 循环6、直到 n 最后为 0.这样最终输出的就是n 的反向。数组数组名 表达式 习惯上用 a,b,c,d 来表示变量,但是如果要表示100 个变量,就太过繁琐了,数组的使用大大方便了多个变量的定义,最重要的是数组定义的多个变量之间是有顺序关系的,非常的条理清晰整齐。char a10; 定义了 10 个字符变量,但是只有一个数组名标识符a,用 来区分各个变量。比如 int b3 定义了 3 个整型变量

37、,分别是 b0,b1,b2 ,使用上跟 a,b,c 是一样的。 里的数字是数组的下标, 所有数组的第一个变量都是从 0 下标开始,不是从 1 开始。int a3;a0=1,a1=2;a2=a0+a1;printf(“%d”,a2);数组的数字标识使得同名数组的各个变量之间有了顺序关系, 不再是一个个独立的变量,这样我可以用 for 循环来有次序的改变数组变量的值: int i;int a10;for(i=0;i<=9;i+)ai=i+1;那么 for 循环之后, a0=0+1=1,a1=2,a2=3 直接用下标数字来确认变量。注意的是 定义的时候 数组的 里面的必须是常量数字 1,2,3 ,不能是变量。如此,可以用啊 an=an-1+an-2

温馨提示

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

评论

0/150

提交评论