C语言实例教程-应用函数程序设计_第1页
C语言实例教程-应用函数程序设计_第2页
C语言实例教程-应用函数程序设计_第3页
C语言实例教程-应用函数程序设计_第4页
C语言实例教程-应用函数程序设计_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

1、应用函数程序设计 成绩管理的模块化设计案例引入假设学生成绩表如下:任务描述成绩管理的模块化设计案例引入1.编写函数average,对n个学生的成绩score,计算平均分数,并返回其值。2.编写函数grade,对n个学生的成绩score,分别统计及格人数c1和不及格的人数c2,并输出。3.编写主函数main,通过键盘输入用户的选择s,用户输入1时调用average统计平均分,输入2时调用grade统计及格或不及格人数,输入0时返回。成绩管理的模块化设计案例引入当分数存放在数组时,如何传递参数?对于函数grade,如何返回及格的人数c1和不及格的人数c2? 另外,可以根据自己对问题需求的理解设计相

2、对完美的程序,例如第1章的案例,补充chengjiguanli(),增加系统的功能模块。能力目标 1.能够熟练掌握函数的基本概念和基本应用方法。2.能够根据程序需要进行函数的定义和调用。3.能够合理使用参数的设计。4.明确函数调用时的数据传递。 5.能够对实际问题进行模块化设计。函数的概述1函数的定义和返回值2函数的调用3函数的嵌套调用和递归调用4局部变量和全局变量5内部函数和外部函数6编译预处理7技能训练8知识要求7.1函数的概述C程序是由函数组成的,即函数是C程序的基本模块,通过函数模块的调用实现各种各样的功能。在每个程序中,主函数main()是必须的,所有程序的执行都是从main()开始

3、的。而不论main函数在程序中的位置。可以将main函数放在整个程序的最前面,也可以放在整个程序的最后,或者放在其它函数之间。通常main()函数调用其他函数,但不能被其他函数调用。如果不考虑函数的功能和逻辑,其他函数没有从属关系,可以相互调用。7.1函数的概述C语言提供了极为丰富的库函数,还允许用户建立自己定义的函数。用户可以把自己的算法和功能编成一个个相对独立的函数,然后函数调用使用函数。可以说C语言程序的全部工作都是由各种各样的函数来完成的,所以C语言又叫函数式语言。从函数定义的角度看,C函数可以分为用户定义函数和库函数两种。由C语言系统提供,用户无需定义,只需在程序最前面使用inclu

4、de命令包含有该函数原型的头文件,就可以在程序中直接进行调用。7.1函数的概述7.1.1库函数常用库函数如下: (1)数学函数(头文件math.h):abs( )、fabs( )、sin( )、cos( )、tan( )、exp( )、sqrt( )、pow( )、fmod( )、log( )、log10( )。 (2)字符串处理函数(头文件string .h):strcmp( )、strcpy( )、strcat( )、strlen( )。 (3)字符处理函数(头文件ctype .h):isalpha( )、isdigit( )、islower( )、isupper( )、isspace(

5、)。 (4)输入输出函数(头文件stdio .h):getchar( )、putchar( )、gets( )、puts( )、fopen( )、fclose( )、fprintf( )、fscanf( )、fgetc( )、fputc( )、fgets( )、fputs( )、feof( )、rewind( )、fread( )、fwrite( )、fseek( )。 (5)动态存储分配函数(头文件stdlib.h):malloc( )、free( )。7.1函数的概述7.1.1库函数#include#includemain() double x,y; printf(input data:)

6、; scanf(%lf,&x); y=exp(x); printf(e%.0lf=%lfn,x,y);7.1函数的概述例: 调用C语言的库函数,计算ex7.1.1库函数#define E 2.71828#includedouble myexp(double x) double y=1; int i; for(i=1;i=x;i+) y=y*E; return y; 7.1函数的概述由用户根据实际需要编写的函数,专门用来解决用户的特定需求。main() double x,y; printf(“Input data x:”); scanf(“%lf”,&x); y=myexp(x); printf

7、(“e的%lf次方是%lfn”,x,y);例:用户自定义函数,计算ex7.1.2自定义函数有些同学提出,只用一个main函数就可以编程,没有必要这么复杂将程序分解到函数。对于小程序可以这样做,但是对于一个有一定规模的程序这样做就不合适了。7.1函数的概述7.1.2自定义函数7.1.2自定义函数7.1函数的概述使用函数可以控制任务的规模使用函数可以控制变量的作用范围使用函数,可以重新利用已有的、调式好的、成熟的程序模块使用函数, 程序的开发可以由多人分工协作使用函数的原因7.2函数的定义和返回值函数定义的一般形式:函数返回值类型名 函数名(类型名 形参1,类型名 形参2,) 说明部分 语句部分

8、函数体7.2.1函数的定义7.2函数的定义和返回值7.2.1函数的定义 (1)函数名和形参名都是用户命名的标识符。在同一个程序中,函数名必须唯一,形参只要在同一个函数唯一即可。 (2)定义函数后,形式参数并没有具体的值,只有在被调用时才分配内存单元。在调用结束后,立刻释放所有分配的内存单元。因此,形参只在函数内部有效。函数可以没有形参,但括号不能省略。 (3)在C程序中,一个函数的位置任意,但函数的定义必须放在函数的外部,即不能在函数内定义函数。说明7.2函数的定义和返回值7.2.1函数的定义 (4)若函数的首部省略了函数返回值的类型定义,则默认函数返回值的类型为int类型。 (5)函数返回值

9、类型在函数名前声明,若不返回值,类型定义为void(空的)。 (6)除了返回值为int类型的函数外,函数必须先定义后调用。说明例:用户自定义函数,求s=1+2+3+nint mysum(int n) int i,sum=0; for(i=1;i=n;i+) sum=sum+i; return sum; 7.2函数的定义和返回值7.2.1函数的定义7.2函数的定义和返回值7.2.2函数的返回值 (1)表达式值的类型必须与函数定义类型一致。若不一致,则以函数值的类型为准; (2)返回调用处,并带回函数值; (3)一个函数可以有多个return语句,返回第一次执行的表达式值; (4)若函数内没有re

10、turn语句时,函数没有返回值,函数类型应当说明为void。则程序执行到函数末尾“”处,返回主调函数。格式:return 表达式;或:return (表达式);或:return;说明7.3函数的调用7.3.1函数调用的一般形式格式:函数名(实参表列)1.函数调用出现在表达式中当所调用的函数用于求某个值时,函数的调用一般作为表达式出现在允许表达式出现的任何地方。main() int n; double x; long y; printf(input data:); scanf(%d,&n); x=sqrt(n); y=myfac(n); /*调用,实参n */ printf(%d的平方根是%1f

11、n,n,x); printf(%d的阶乘是1%dn,n,y);例:调用函数求n的平方根和n!#include#includelong myfac(int n) /*定义,形参n */ int i; long fac=1; for(i=1;i=n;i+) fac=fac*i; return fac; 7.3函数的调用7.3.1函数调用的一般形式1.函数调用出现在表达式中7.3函数的调用7.3.1函数调用的一般形式2.函数调用作为独立语句#include stdio.hvoid myprint() int i; for(i=1;i=10;i+) printf(*); printf(n);main(

12、) int i; for(i=1;ib?a:b;7.3函数的调用7.3.2函数调用时的语法要求7.3函数的调用7.3.3函数的声明在C语言中,除了主函数,对于用户定义函数遵循“先定义,后使用”的规则。凡是未在调用前定义的函数,C编译程序都默认函数的类型为int。对于返回值为其他类型的函数,若把函数的定义放在调用之后,应该在调用之前对函数进行声明。7.3函数的调用7.3.3函数的声明函数声明的格式:函数类型 函数名(参数类型,参数类型);说明:C语言的库函数就是位于其它模块的函数,为了正确调用,C编译系统提供了相应的.h文件。.h文件内许多都是函数声明,当源程序要使用库函数时,就应当包含相应的头

13、文件。例:函数声明样例 #include float max(float ,float); /*也可float max(float a,float b) ;*/ main() float x,y; printf(Input data: ); scanf(%f%f,&x,&y); printf(max=%fn,max(x,y); /*先调用,实参x,y */ float max(float a,float b) /*后定义,形参a,b */ return ab?a:b; 7.3函数的调用7.3.3函数的声明7.3函数的调用7.3.4调用函数与被调用函数之间的数据传递C语言中,调用函数和被调用函数

14、之间的数据传递可以通过三种方式进行传递: (1)实在参数和形式参数之间进行数据传递。 (2)通过return语句把函数值返回调用函数。 (3)通过全局变量(通常不提倡)。7.3函数的调用7.3.4调用函数与被调用函数之间的数据传递调用函数和被调函数之间通过实参传递给形参实现数据的传递。参数具体的传递方式有两种: (1)值传递方式(传值):将实参单向传递给形参的一种方式; (2)地址传递方式(传址):将实参地址单向传递给形参的一种方式。7.3函数的调用7.3.4调用函数与被调用函数之间的数据传递 (1)单向传递:不管“传值”、还是“传址”,C语言都是单向传递数据的,一定是实参传递给形参,反过来不

15、行。 (2)“传值”、“传址”只是传递的数据类型不同。传址实际是传值方式的一个特例,本质还是传值,只是此时传递的是一个地址数据值。说明7.3函数的调用7.3.4调用函数与被调用函数之间的数据传递 (3)系统分配给实参、形参的内存单元是不同的。对于传值,即使函数中修改了形参的值,也不会影响实参的值。对于传址,即使函数中修改了形参的值,也不会影响实参的值,但因为传递的是地址,那么就可能通过实参参数所指向的空间间接返回数值。说明7.3函数的调用7.3.4调用函数与被调用函数之间的数据传递 (4)两种参数传递方式中,实参可以是变量、常量、表达式;形参一般是变量,要求两者个数一致、类型匹配、赋值兼容。

16、(5)形参在函数未调用时,并不占内存中的存储单元,只有在函数调用时,函数中的形参才被分配内存单元。在调用结束后,形参所占的内存单元被释放。说明main() int x=10,y=20; printf(1):x=%d,y=%dn,x,y); swap1(x,y); printf(4):x=%d,y=%dn,x,y);7.3函数的调用7.3.4调用函数与被调用函数之间的数据传递例:参数结合样例,实参不变#includevoid swap1(int a,int b) int t; printf(2):a=%d,b=%dn,a,b); t=a;a=b; b=t; printf(3):a=%d,b=%d

17、n,a,b);7.3函数的调用7.3.4调用函数与被调用函数之间的数据传递 程序运行结果: (1):x=10,y=20 (2):a=10,b=20 (3):a=20,b=10 (4):x=10,y=20由运行结果可以看到,x和y的值已传送给函数swap1中对应形参a和b,在函数swap1中,a和b进行了交换,但形参的变化并不影响对应的实参。所以在本程序中,不能通过调用swap函数实现x和y的数据交换。那么如何通过调用swap函数来实现两个数据的交换?想一想例:数组元素作为参数样例,跟简单变量一样。int max(int x,int y) return xy?x:y;7.3函数的调用7.3.5数

18、组作为参数1.数组元素作为参数main() int a2,b23; a0=10; b11=80; a1=max(a0,b11); printf(“%dn”,a1);例:数组作为参数样例。#include void myout(int p5,int n);/*也可以void myout(int p,int n);或 void myout(int p) ;*/7.3函数的调用7.3.5数组作为参数用数组名作为参数,此时实参与形参都应用数组名。2.数组名作为参数main() int a5=1,2,3,4,5; int b10=2,4,6,8,10,12,14,16,18,20; myout(a,5)

19、; myout(b,10); void myout(int p5,int n) int i; for(i=0;in;i+) printf(%4d,pi); printf(n); 例:二维数组的输出。 #include7.3函数的调用7.3.5数组作为参数用多维数组名作为实参和形参,在被调用函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明,但不能把第二维以及其他高维的大小说明省略。 #define M 3 #define N 2void out(int aMN) /*还可以写成 void out(int a N) */ int i,j; for(i=0;iM;i+) for

20、(j=0;jN;j+) printf(%4d,aij); printf(n); main() int aMN=1,2,3,4,5,6; out(a); 3.用多维数组作为参数7.4函数的嵌套调用和递归调用7.4.1函数的嵌套调用函数嵌套调用是指函数调用中又存在调用。如函数1调用函数2,函数2又调用函数3。函数之间没有从属关系,一个函数可以被其它函数调用,同时该函数也可以调用其它函数。函数的定义是平等的,调用却不平等。主函数可以调用任意子函数,子函数间可以互相调用,但是主函数不可以被任何函数调用。7.4函数的嵌套调用和递归调用7.4.1函数的嵌套调用#includeint gcd(int a,i

21、nt b)int r,temp;if(a0时 7.4函数的嵌套调用和递归调用7.4.2函数的递归调用#includelong fac(int); /*原型说明*/main() int m; long y; printf(Input data:); scanf(%d,&m); y=fac(m); /*函数调用*/ printf(%d!=%1d,m,y);long fac(int n) /*函数定义*/ if(n=1) return 1; else return n*fac(n-1); /*函数递归调用*/ 程序(例如n=4)n=4t=4*fac(3); (6)return tn=3t=3*fac

22、(2); (2)return tn=2t=2*fac(1); (1)return tn=1return 1调用 fac(4)(24)7.4函数的嵌套调用和递归调用7.4.2函数的递归调用运行程序存储类别确定了所说明对象在内存中的存储位置,从而也确定了所说明对象的作用域和生存期。动态存储区用来保存函数调用时的返回地址、自动类别的局部变量等。静态存储区用以存放全局变量及静态类别的局部变量。7.5局部变量和全局变量7.5.1程序的存储空间程序代码区静态存储区动态存储区(堆栈)7.5局部变量和全局变量7.5.2局部变量1.局部变量简介局部变量是在一定范围内有效的变量,也称为内部变量。C语言中,在以下位

23、置定义的变量属于局部变量。 (1)在函数体内定义的变量,在本函数范围内有效,作用域仅限于函数体内。 (2)有参函数的形式参数也是局部变量。只在其所在的函数范围内有效。 (3)在复合语句内定义的变量,在本复合语句范围内有效,作用域仅限于复合语句内。7.5局部变量和全局变量7.5.2局部变量1.局部变量简介 (1)不同函数中和不同的复合语句中可以定义(使用)同名变量。因为它们作用域不同,程序运行时在内存中占据不同的存储单元,各自代表不同的对象,所以它们互不干预。 (2)局部变量所在的函数被调用或执行时,系统临时给相应的局部变量分配存储单元,一旦函数执行结束,则系统立即释放这些存储单元。所以在各个函

24、数中的局部变量起作用的时刻是不同的。说明7.5局部变量和全局变量7.5.2局部变量2.局部变量的作用域和生存期autoexternstaticregister存储类型外部或全局型静态型自动型寄存器型7.5局部变量和全局变量7.5.2局部变量2.局部变量的作用域和生存期自动变量属于自动类别,存储单元被分配在内存的动态区。例如:auto(可缺省)float a;作用域:定义位置起,到函数体(或复合语句)结束为止。生存期:进入函数体(或复合语句)时生成,退出函数体(或复合语句)时消失。 无定义:未赋初值的自动变量其值不确定。赋初值:运行时进行,每次进入函数体或复合语句,就赋一次指定的初值。优点:各函

25、数互不干扰,标识符同名也互不影响。auto变量f(int a) auto int c=3,b=0; b=b+1; c=c+1; return a+b+c;main() int a=2,i; for(i=0;i3;i+) printf(%d ,f(a);7.5局部变量和全局变量7.5.2局部变量2.局部变量的作用域和生存期auto变量例:auto变量的样例运行结果:7 7 77.5局部变量和全局变量7.5.2局部变量2.局部变量的作用域和生存期寄存器变量也是自动类别,值保留在CPU的寄存器中。例如:register int x;作用域:定义位置起,到函数体(或复合语句)结束为止。生存期:进入函数

26、体(或复合语句)时生成,退出函数体(或复合语句)时消失。优点:程序运行时,访问存于寄存器内的值要比访问内存中的值快得多。因此当程序对速度有较高要求时,把那些频繁引用的少数变量指定为register变量,有助于提高程序的运行速度。register变量7.5局部变量和全局变量7.5.2局部变量2.局部变量的作用域和生存期静态类别,存储单元被分配在内存的静态区。作用域:定义位置起,到函数体(或复合语句)结束为止。生存期:程序运行期间永久性保存。赋初值:编译时赋初值(只一次),未赋初值默认为0,运行期间不再赋初值(保留上次运行时得到的值)。优点:函数调用之间保留局部变量值。static变量#inclu

27、def() int a=2; static int b,c=3; b=b+1; c=c+1; return a+b+c;main() int i; for(i=0;ib?a:b; return c; main() int a=8; printf(%d,max(a,b); 7.5局部变量和全局变量例:全局变量与局部变量同名样例运行结果:87.5.3全局变量7.5局部变量和全局变量7.5.4全局变量的作用域和生存期格式:externstatic 数据类型 变量名表;位置:在函数之外定义。静态类别,存储单元被分配在内存的静态区。作用域:从定义点开始到本源文件结束。1.全局变量的作用域7.5局部变量和

28、全局变量7.5.4全局变量的作用域和生存期生存期:程序运行期间永久性保存。赋初值:编译时未赋初值默认为0。优点:保留一直要使用的数据。2.全局变量的生存期#includeint sum;void fun();main() int sum=10; printf(1)%4d n,sum); fun(); printf(2)%4d n,sum);void fun() sum=20 ; printf(fun%4d n,sum);7.5局部变量和全局变量例:全局变量的样例 运行结果:(1) 10 fun 20(2)10 7.5.4全局变量的作用域和生存期运行程序7.5局部变量和全局变量7.5.4全局变量

29、的作用域和生存期全局变量的生存期是整个程序的运行期间。在引用全局变量时如果使用“extern”声明全局变量,可以扩大全局变量的作用域。例如,扩大到整个源文件(模块),对于多源文件(模块)可以扩大到其它源文件(模块)。在定义全局变量时如果使用修饰关键词static,表示此全局变量作用域仅限于本源文件(模块)。小结7.6内部函数和外部函数函数本质上是全局的,因为一个函数要被另外的函数调用,但是,也可以指定函数不被其他文件调用。根据函数能否被其他源文件调用,将函数分为内部函数和外部函数。7.6内部函数和外部函数7.6.1内部函数内部函数是只能被本源文件(模块)中的各个函数所调用,不能为其它模块中函数

30、所调用的函数。内部函数的定义:static 函数类型 函数名(形参表) .7.6内部函数和外部函数7.6.1内部函数 (1)内部函数又称为静态函数,其使用范围仅限于定义它的模块(源文件)内。对于其它模块它是不可见的。 (2)不同模块中的内部函数可以同名,它们的作用域不同,事实上根本就是不同的函数。 (3)内部函数定义,static关键词不能省略。说明7.6内部函数和外部函数7.6.2外部函数外部函数是能被任何源文件(模块)中的任何函数所调用的函数。 外部函数的定义: extern 函数类型 函数名(形参表) . 7.6内部函数和外部函数7.6.2外部函数 (1)外部函数定义,extern关键词

31、可以省略。如果省略,默认是外部函数。 (2)外部函数可以在其它模块中被调用。如果需要在某个模块中调用它,可以在模块中某个位置声明extern 函数类型 函数名(形参表);就可以了。说明7.7编译预处理C源程序除了包含程序命令(语句)外,还可以使用各种编译指令(编译预处理指令)。编译指令(编译预处理指令)是给编译器的工作指令。这些编译指令通知编译器在编译工作开始之前对源程序进行某些处理。编译指令都是用“#”引导。编译预处理就是编译前根据编译预处理指令对源程序的一些处理工作。C语言编译预处理主要包括宏定义、文件包含、条件编译。7.7编译预处理7.7.1宏定义宏定义是用标识符来代表一个字符串(给字符

32、串取个名字)。C语言用“#define”进行宏定义。C编译系统在编译前将这些标识符替换成所定义的字符串。宏定义分为不带参数的宏定义和带参数宏定义。概念7.7编译预处理7.7.1宏定义1.不带参数的宏定义定义格式:#define 标识符 字符串 (1)宏名遵循标识符规定,习惯用大写字母表示,以便区别普通的变量。 (2)#define之间不留空格,宏名两侧空格(至少一个)分隔。说明7.7编译预处理7.7.1宏定义1.不带参数的宏定义 (3)宏定义字符串不要以分号结束,否则分号也作为字符串的一部分参加展开。从这点上看宏展开实际上是简单的替换。例如:#define PI 3.14; 展开为s=3.14

33、;*r*r;(导致编译错误) (4)宏定义用宏名代替一个字符串,并不管它的数据类型是什么,也不管宏展开后的词法和语法的正确性,只是简单的替换。是否正确,编译时由编译器判断。例如:#define PI 3.I4 照样进行宏展开(替换),是否正确,由编译器来判断。说明7.7编译预处理7.7.1宏定义1.不带参数的宏定义 (5)#define宏定义宏名的作用范围从定义命令开始直到本源程序文件结束。可以通过#undef终止宏名的作用域。 (6)宏定义中,可以出现已经定义的宏名,还可以层层置换。 (7)宏名出现在双引号“”括起来的字符串中时,将不会产生宏替换。(因为出现在字符串中的任何字符都作为字符串的

34、组成部分)。 (8)宏定义是预处理指令,与定义变量不同,它只是进行简单的字符串替换,不分配内存。说明7.7编译预处理7.7.1宏定义 (1)程序中的常量可以用有意义的符号代替,程序更加清晰,容易理解(易读); (2)常量值改变时,不要在整个程序中查找,修改,只要改变宏定义就可以。比如,提高PI精度值; (3)带参数宏定义比函数调用具有更高的时间效率,因为相当于代码的直接嵌入。(空间效率:多次调用占用空间较多,一次调用没有什么影响)。1.不带参数的宏定义7.7编译预处理7.7.1宏定义2.带参数宏定义带参数宏定义不只是进行简单的字符串替换,还要进行参数替换。定义的格式:#define 宏名(参数

35、表) 字符串例如:#define S(a,b) a*b其中S-宏名,a,b是形式参数。程序调用S(3,2)时,把实参3,2分别代替形参a,b。7.7编译预处理7.7.1宏定义2.带参数宏定义在程序中如果有带实参的宏定义,则按照#define命令行中指定的“字符串”从左到右进行置换。如果串中包含宏定义中的形参,则将程序中相应的实参代替形参,其它字符原样保留,形成了替换后的字符串。 注意:还是一个字符串的替换过程,只是将形参部分的字符串用相应的实参字符串替换。小提示 (1)正因为带参宏定义本质还是简单字符替换(除了参数替换),所以容易发生错误。 (2)定义带参数宏时还应该注意宏名与参数表之间不能有

36、空格。有空格就变成了不带参数的宏定义。 (3)带参数的宏定义在程序中使用时,它的形式及特性与函数相似,但本质完全不同。 (4)许多问题可以用函数也可以用带参数的宏定义。 (5)宏占用的是编译时间,函数调用占用的是运行时间。在多次调用时,宏使得程序变长,而函数调用不明显。7.7编译预处理7.7.1宏定义2.带参数宏定义说明 说明: (1)被包含的文件常常被称为“头文件”(#include一般写在模块的开头)。头文件常常以“.h”为扩展名(也可以用其它的扩展名,.h只是习惯或风格);7.7编译预处理7.7.2文件包含一个C源文件可以使用文件包含命令将另外一个C源文 件的全部内容包含进来。格式 :#include “文件名”或#include 7.7编译预处理7.7.2文件包含 (1)被包含的文件常常被称为“头文件”(#include一般写在模块的开头)。头文件常常以“.h”为扩展名(也可以用其它的扩展名,.h只是习惯或风格); (2)一条#include只能包含一个头文件,如果要包含多个头文件,使用多条#include命令; (3)被包含的头文件可以用“”括起来,也可以用括起来;说

温馨提示

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

评论

0/150

提交评论