C语言程序设计基础课件 第5章 函数_第1页
C语言程序设计基础课件 第5章 函数_第2页
C语言程序设计基础课件 第5章 函数_第3页
C语言程序设计基础课件 第5章 函数_第4页
C语言程序设计基础课件 第5章 函数_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

第5章函数5.1模块化设计与函数5.2变量的作用域和生存期 5.3变量的存储属性5.4内部函数和外部函数5.5传给main()函数的参数5.6函数综合应用举例程序设计基础1第5章知识导图程序设计基础2第5章函数教学目标理解模块化编程思想掌握函数的定义及调用方法掌握递归函数掌握变量的作用域和生存期了解内部函数和外部函数程序设计基础35.1.1定义函数函数结构及书写函数的语法规定如下返回值类型说明符函数名([形式参数类型及说明表列]){

…//函数体语句}例如:intmax(inta

,

intb){

returna>b?a:b;}5.1.1定义函数返回值类型intmax(inta

,

intb){

returna>b?a:b;}程序设计基础5返回值类型说明符:用于声明函数返回值的数据类型。函数应返回执行函数对数据产生的处理结果,即函数的返回值。一个函数可以有返回值,也可以没有返回值。若有返回值,则只能返回一个值。说明符声明该函数的返回值的数据类型。这个类型说明符由返回值的数据类型决定。如果函数确实不需要返回值,则视为返回一个空值,返回值类型说明符使用void关键字5.1.1定义函数函数名intmax(inta

,

intb){

returna>b?a:b;}程序设计基础6函数名是由编程者按照C语言的标识符命名规则自定义的函数名称。在C语言中,函数名应独一无二。函数命名应见名知意。调用函数需按函数名调用。5.1.1定义函数圆括号()intmax(inta

,

intb)

{

returna>b?a:b;}程序设计基础7“()”被视为是函数的标志,必不可少。5.1.1定义函数参数intmax(inta,intb){

returna>b?a:b;}程序设计基础8形式参数是形式上告诉系统,该函数需要几个、什么类型的变量,以便借助这些变量在调用函数时,从外界传递数据到函数体。形参是变量,声明形参应同时声明形参变量的类型和名称,多个形参变量用逗号隔开,所有形式参数的数据类型均不能省略。如果调用函数时不需要传递数据,则()里面就不必列出形参。intmax(inta,b)

错误5.1.1定义函数函数体intmax(inta,intb){

returna>b?a:b;}程序设计基础9函数体就是实现函数功能的一段代码,它可以直接使用函数的形参变量。形参变量在函数被调用时创建,函数执行结束,形参变量也随之消失。在调用函数时,通过形参把待处理数据传给函数体。5.1.1定义函数函数体intmax(inta,intb){

returna>b?a:b;}程序设计基础10函数是一个独立的结构。不能在函数体里去定义其他函数,也不允许两个函数的函数体发生交叉。函数之间地位是平等的,函数之间只存在调用与被调用的关系,不存在函数包含与被包含的关系。5.1.1定义函数【例5.1】定义函数示例//返回值数据类型为longlong,int型形参两个longlongpower(inta,intb){

//局部变量,只在本函数体内有效,函数执行结束随之消失

inti;

longlongs=1;

for(i=1;i<=b;i++)//循环,实现b个a相乘

s=s*a;

returns;//把s的值作为函数值返回}程序设计基础115.1.2调用函数函数声明在前,调用在后一个单文件的C源程序的结构如下:预处理命令区[自定义函数声明区][全局变量声明区]main(){调用函数}[自定义函数的代码区]程序设计基础125.1.2调用函数函数声明语句一般形式如下

返回值类型说明符函数名(形参1,形参2,……);例如:longlongpower(inta,intb);或longlongpower(int,int);作用声明函数的返回值类型、函数名、形参类型和个数等关键信息。程序设计基础135.1.2调用函数函数声明语句注意(1)应当保证函数的声明与函数的头部写法上的一致,即函数类型、函数名、参数个数、参数类型和参数顺序必须相同。(2)如果被调函数的定义语句出现在主调函数之前,就不必再声明。(3)建议在自定义函数声明区中集中声明所有的自定义函数,并保证这个区的代码出现在所有函数的定义语句之前,这样可确保调用任何函数都不会出现函数名notdeclared(未声明)的语法错误。程序设计基础145.1.2调用函数函数的调用函数调用的一般形式

函数名([实参表达式1,实参表达式2,…]);注意(1)调用函数时,给出的参数必须是实际值,称为实际参数。实参以表达式形式给出(多为单独的常量、变量)。多个实参之间用逗号分隔,所有的实参均不能再写数据类型。例如,i=max(int5,6);,i=max(intm,6);都是错误的。(2)调用函数不能再书写函数的返回值类型标识符。例如,intprintf("C语言并不难\n");,i=intmax(3,5);,voidswap();,都是错误的。程序设计基础155.1.2调用函数【例5.2】编写程序,从键盘输入一个数x,求x的正弦值。其中求正弦值的函数根据下面的泰勒展开式自己定义。要求精确到小数点后6位。程序设计基础16【例5.2】求x的正弦值//预处理语句区

#include<stdio.h>#include<math.h>//调用sin(x)//自定义函数声明语句区longlongfactor(intn);//求n的阶乘doublepower(doublex,intn);//求xndoublemysin(doublex);//求x的正弦值程序设计基础17【例5.2】求x的正弦值//主函数代码区

intmain(){inti;doublex;printf("请输入一个实数:\n");scanf("%lf",&x);//按实数的格式输入一个数存入变量x中

printf("%lf\n",mysin(x));//%lf位置输出表达式mysin(x)的值,即调用mysin(x)

printf("%lf",sin(x));//调用系统函数sin(x)并输出其值

return0;}程序设计基础18【例5.2】求x的正弦值//自定义函数的代码区/*函数factor计算n的阶乘*/longlongfactor(intn){

inti;

longlongs=1;

for(i=1;i<=n;i++)

s=s*i;

returns;}程序设计基础19//函数power求xndoublepower(doublex,intn){doublep=1.0;inti=1;while(i++<=n)p=p*x;returnp;}请尝试独立完成【例5.2】求x的正弦值//自定义函数的代码区doublemysin(doublex)//求x的正弦值{

doubles=0,t;

inti=1;

t=power(x,2*i-1)/factor(2*i-1);//调用函数power与factor求第i项

while(t>0.000001)

{

s=s+power(-1,i-1)*t;//power(-1,i-1)求第i项的系数是1还是-1

i++;//i=项的序号,加1是为了求第i项的下一项

t=power(x,2*i-1)/factor(2*i-1);//求第i项的值

}

returns;}程序设计基础205.1.3函数的参数函数的参数分为形参和实参两种。在定义函数的语句中,函数的参数称为形参在调用函数的语句中,函数的参数称为实参调用函数时,把实参值传递给对应位置的形参变量函数的形参和实参具有以下特点

(1)形参必须是变量,作为函数的“(数据)接口”,它只能在函数头语句的圆括号里定义,只有形参变量才能从主调函数接收数据。(2)实参必须是“值”,以表达式方式给出。(3)调用函数时给出的实参(值),在数量上、类型上、顺序上必须和形参严格一致,否则会发生语法错误。(4)调用函数时,实参(值)向形参(变量)的数据传送是单向的,函数体内只能对形参变量进行处理,形参变量值的变化对实参变量没有丝毫的影响。程序设计基础215.1.3函数的参数【例5.3】编写一个接收两个整数并使之交换的函数。程序设计基础22#include<stdio.h>voidswap(inta,intb)//为形参变量a、b分配存储空间{

intt;//为t分配存储空间

t=a;//把a的值存到t中,暂时保存

a=b;//把b的值存到a中,a中原存值被b的值覆盖

b=t;//把t中存储的变量a的原值存到b中,至此实现a、b值的交换}//函数执行结束,形参变量及函数体内定义的变量均消失

intmain(){

intx,y;//为变量x、y分配存储空间

printf("输入两个数:\n");

scanf("%d,%d",&x,&y);

printf("调用之前x=%d,y=%d\n",x,y);

swap(x,y);//调用函数,把实参变量x、y的值赋给对应位置的形参变量a、b

printf("调用之后x=%d,y=%d\n",x,y);

return0;}程序设计基础235.1.4函数的嵌套调用按照模块化编程思想,C程序源代码由一个主函数main()和若干个编程自定义的其他函数组成。main()是程序的执行入口,它不能被别的函数调用。其他函数之间,根据要实现的功能进行调用。调用其他函数的函数称为主调函数。被调用函数称为被调函数。程序设计基础245.1.4函数的嵌套调用程序设计基础255.1.5函数的递归调用定义C语言允许函数递归调用。函数若直接或间接地调用自己,称为递归调用。程序设计基础26直接调用voidfun1(){…fun1();//调用fun1自身…}间接调用voidB();//此处必须有对函数B的声明语句voidA(){…B();…}voidB(){…A();…}//B函数的代码在A函数的代码之后,必须要先声明B函数的存在//A函数的代码在B函数的代码之前,可以不声明A函数而直接调用5.1.5函数的递归调用算法的两种设计思想迭代典型:循环结构例:求n的阶乘,因n!=n*(n-1)*…*1longlongfact(intn){longlongs=1;while(n>0){s=s*n;n--;}returns;}递归程序设计基础275.1.5函数的递归调用算法的两种设计思想迭代典型:循环结构递归例:求n的阶乘程序设计基础28longlongfact(intn){

if(n==0)

return1;

else

returnn*fact(n-1);//递归调用fact(n-1),求出(n-1)!}5.1.5函数的递归调用递归调用两个条件

(1)每次递归调用都应使问题的规模更接近递归终止条件。(2)要有不能再递归的边界,而且当问题的规模处在边界条件时,问题的解是显而易见、可以直接返回的。经典问题

汉诺塔问题梵塔内有3个座A、B、C,开始时A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示。要想把A座的n个盘子全部移到C座,每次只允许移动一个盘子,可以移动到B座暂放,但无论哪个座上的盘子,均须始终保持大盘在下,小盘在上。要求编程输出移动过程。程序设计基础295.1.5函数的递归调用汉诺塔问题算法步骤:(1)将A座上前n-1个盘子当作一个整体借助空座C移到B座上,移动这n-1个盘子使用递归调用。(2)A座只剩下一个盘子,编号为n,将其移到C上。(3)递归调用,将B座上的n-1个盘子借助A座移到C座上。程序设计基础30汉诺塔问题voidhanoi(intn,chara,charb,charc)//递归函数{//形参:n=待移动盘子总数,a=盘子原在座,b=移动过程借助的座,c=移动到的座if(n==1)//如果只有1个盘子 printf("把盘子%d从%c座移到%c座\n",n,a,c);//一次移动到位else{

hanoi(n-1,a,c,b);//把a的前n-1个盘子借助c移动到b上 printf("把盘子%d从%c座移到%c座\n",n,a,c);//a上剩下的一个盘子移动到位

hanoi(n-1,b,a,c);//再把b上n-1个盘子借助a移动到c上。}}程序设计基础315.1.6C语言提供的标准函数C语言提供了功能强大的标准函数分类类型转换函数、字符判别与转换函数、字符串处理函数、标准I/O函数、文件管理函数、数学运算函数如何使用标准函数由C系统提供,只需在程序前包含该函数原型的所在的头文件即可在程序中直接调用。程序设计基础325.1.6C语言提供的标准函数【例5.5】计算平面上两点之间的距离分析:利用C语言提供的sqrt()数学函数完成平方根运算。#include<math.h>//函数sprt()的声明在此头文件,须先包含此头文件才能调用sprt()#include<stdio.h>intmain(){

doublex1,y1,x2,y2,dist;

scanf("%lf,%lf,%lf,%lf",&x1,&x2,&y1,&y2);//输入平面上两个点的x轴和y轴坐标

dist=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));//利用sqrt()函数计算两点间距离

printf("%.2f",dist);

return0;}程序设计基础335.1.6C语言提供的标准函数注意(1)使用标准函数应知道其函数名及其功能。(2)应知道标准函数所在的头文件,在源代码开头位置用#include命令包含头文件。(3)应清楚知道标准函数的形参个数、类型,特别是形参变量的用途。程序设计基础345.2变量的作用域和生存期变量的作用域指的是变量可以被访问和使用的代码区域,而生存期则描述了变量与其分配的存储空间之间的“占用”关系,直到该关系被“释放”。通常情况下,作用域与生存期是一致的,但也有例外,即变量虽然存在,却无法在某些代码区域被访问。程序设计基础355.2变量的作用域和生存期变量的作用域局部变量全局变量程序设计基础365.2.1局部变量定义局部变量是指在一对大括号{}内定义的变量。函数形参也是一种局部变量。程序设计基础375.2.1局部变量intf1(inta){//形参变量a的作用域由此开始…//这里能用a但不能用下面定义的sints=1,d=1;//局部变量s、d的作用域由此开始if(a>0){ints;//局部变量s作用域开始,会屏蔽本复合语句外定义的同名变量s=a+d;//此s不是ints,d;定义的s,但d是ints,d;定义的d…}//ints;定义的变量s的作用域和生存期到此为止,为其分配的存储空间被释放…}//形参变量a,ints=1,d=1;定义的变量s、d的作用域和生存期到此为止程序设计基础385.2.1局部变量【例5.6】函数中定义的局部变量的作用域与生存期#include<stdio.h>voidfun(){

inta=3,b=4;//局部变量,生存期和作用域仅限它所在的复合语句。

printf("%d,%d\n",a,b);//可使用与本语句处在同一个复合语句中定义的变量a、b}//复合语句结束,里面定义的变量生存期结束intmain(){

inta=1,b=1;

fun();//输出自己定义的变量a、b。

printf("%d,%d",a,b);//此处的a、b不是函数fun()定义的变量a、breturn0;}程序设计基础39讨论分析程序运行输出结果5.2.1局部变量【例5.7】在复合语句中定义变量示例。#include<stdio.h>intmain(){//最外层复合语句开始

inti=1,j=6,k;//变量i、j、k自本语句起开始生存期,后面的代码中均可使用

k=i+j;

{//第一层内嵌的复合语句开始

intk=5;//定义变量k,与本复合语句之外定义的变量k同名,是两个不同变量

if(i==1)//此处i是本复合语句之外定义的变量i

{//第二层内嵌的复合语句开始

i=3;//此处的i仍是最外层复合语句定义的

printf("k=%d\n",k);//变量k是第一层内嵌复合语句中定义的

}//第二层内嵌的复合语句结束

}//第一层内嵌的复合语句结束,其内定义的变量失去生存期,不复存在

printf("i=%d\nk=%d\n",i,k);//变量k是最外层复合语句中定义的return0;}//最外层复合语句结束,其内定义的所有变量不复存在程序设计基础40讨论分析程序运行输出结果5.2.2全局变量定义变量的语句出现在所有的复合语句之外,即出现在所有的{}之外,这种变量称为全局变量。作用域全局变量的作用域从定义它的位置开始,到当前源文件结束。定义之前的函数无法使用它。程序设计基础415.2.2全局变量【例5.8】输入圆柱体的底面积半径r和高h,求体积及2个面积(底面积、侧面积)。程序设计基础42程序设计基础43#include<stdio.h>//预处理语句#definePI3.14doubles1,s2;//此处定义的变量为全局变量,定义语句在所有的复合语句之外doublefun(intr,inth)//定义函数的代码{//复合语句从此处开始doublev;//局部变量v,作用域从此处开始v=PI*r*r*h;s1=PI*r*r;//此处的s1是函数体外定义的全局变量,在此可以使用s2=2*PI*r*h;returnv;//把v的值作为函数值返回调用语句}//复合语句到此处结束,形参变量r、h和函数体内定义的局部变量v均在此处消失intmain(){//复合语句从此处开始intr,h;//主函数中定义的局部变量doublev;printf("输入圆柱体的底面积半径和高:\n");scanf("%d%d",&r,&h);v=fun(r,h);//调用函数fun(),返回值存入变量vprintf("v=%.2fs1=%.2fs2=%.2f\n",v,s1,s2);return0;}//该复合语句内定义的变量消失,但在该复合语句外定义的全局变量s1、s2仍存在5.2.2全局变量允许全局变量和局部变量同名。但在局部变量的作用域内,全局变量被屏蔽,但它的生存期仍在。程序设计基础44程序设计基础45【例5.9】局部变量和全局变量同名示例#include<stdio.h>intlen=3,w=4,h=5;//定义全局变量voidvs(intlen)//形参变量也是局部变量,它也会屏蔽同名的全局变量{

intw=0;//定义局部变量与全局变量w同名,此语句之后,全局变量w被屏蔽

len++;//因形参变量len屏蔽了同名的全局变量,此处使用的是形参变量len

h++;//此处使用的是全局变量h

printf("len=%d,w=%d,h=%d\n",len,w,h);//输出len、w、h的值。}//此处,函数定义的局部变量消失,但函数对全局变量h的改变仍然存在。intmain(){

printf("len=%d,w=%d,h=%d\n",len,w,h);//输出全局变量len、w、h的值。

vs(5);//把实参值5赋给形参变量len,程序流程跳转到函数vs

printf("len=%d,w=%d,h=%d\n",len,w,h);//输出全局变量len、w、h的值。return0;}讨论分析程序运行输出结果5.3变量的存储属性从变量的生存期来看,可分为静态(存储)变量和动态(存储)变量。“动态”是指,只有执行到定义该动态变量的语句时,才在内存中为该变量分配存储空间。生存期结束时,变量与存储空间的占用关系被释放。“静态”是指静态变量在系统编译程序时就分配存储空间,其生存期一直持续至整个程序结束。程序设计基础465.3变量的存储属性四类存储类型auto:自动类型,是默认的变量类型,它的作用域和生存期均限于定义它的语句所在的一对大括号(复合语句)内。extern:外部类型,作用域是全局的,生存期是永久的。static:静态类型,作用域限于定义它的语句所在的复合语句中,但生存期贯穿程序运行始终。register:寄存器类型,作用域与生存期的规定与auto类型相同,这个类型变量一般用作循环变量。变量说明的完整形式存储类型说明符数据类型说明符变量名1[,变量名2…];staticinta,b;//说明a,b为静态整型变量autocharc1,c2;//说明c1,c2为自动字符变量externintx,y;//说明x,y为外部整型变量程序设计基础475.3.1自动变量C语言规定,auto类型说明符可以省略,函数内凡未加存储类型说明的变量均为自动变量。函数形参也是自动变量,但是不能用auto类型说明符。例如intfun(intx)//x为形参,具有自动变量的属性{autointa,b;//定义a,b为自动变量floaty;//定义y,缺省存储类型时为自动变量......}程序设计基础485.3.2寄存器变量用关键字register声明存储类型的变量称为寄存器变量使用语句形式register变量类型变量名列表;例如,registerinta;register变量使程序相应的变量保存在CPU的寄存器中,以加快其存储速度。程序设计基础495.3.3静态变量用关键字static声明存储类型的变量称为静态变量。使用语句形式static变量类型变量名列表;分类静态局部变量静态全局变量程序设计基础505.3.3静态变量静态局部变量函数中或者一个单独的复合语句中用关键字static声明的变量是静态(存储)局部变量。特点(1)静态局部变量的生存期贯穿整个程序运行始终,而不是像自动变量那样仅限于定义它的语句所在的复合语句中。(2)静态局部变量的生存期虽然为整个源程序,但是其作用域也是仅限于定义它的语句所在复合语句中。(3)静态局部变量若不初始化,系统会自动初始化为0。建议显式初始化以提高可读性。程序设计基础515.3.3静态变量【例5.10】auto属性变量的生存期示例#include<stdio.h>voidfun(); /*函数声明语句*/intmain(){inti;for(i=1;i<=3;i++)fun(); /*函数调用3次*/return0;}voidfun() /*函数代码*/{

autointk=0;//变量k为auto属性,生存期限于本语句所在的复合语句内。printf("%d\t",++k);}//复合语句结束,变量k消失。程序设计基础525.3.3静态变量——【例5.11】#include<stdio.h>voidfun();//函数声明语句voidfun2();main(){

inti;

for(i=1;i<=3;i++)

fun();//函数调用

printf("\n");

for(i=1;i<=3;i++)

fun2();//调用函数}voidfun()//函数代码{

staticintk=0;//定义静态变量,初始化只做一次,作用域限于本复合语句

k++;

printf("%d\t",k);}voidfun2()//函数定义{

staticintk=10;//不同复合语句中可以定义同名的静态变量

k++;

printf("%d\t",k);}程序设计基础535.3.4外部变量对于在一个程序文件中定义的非静态全局变量,可以在其他程序文件中通过关键字extern的声明,使其作用域扩展到其他文件中。一般形式如下extern变量类型变量名列表;例如,externintx,y;程序设计基础545.3.4外部变量当一个源程序由若干个文件组成时,在一个文件中定义的外部变量在其他的文件中也有效。例如,有一个源程序由文件F1.C和F2.C组成。F1.C:inta,b;//外部变量定义charc;//外部变量定义intmain(){…}F2.C:externinta,b;//变量a、b在其他文件中定义,这里是声明要使用它们,而不是新定义externcharc;//变量c在其他文件中定义,这里是声明要使用它,而非新定义一个变量cfunc(intx,y){…}程序设计基础555.4内部函数和外部函数C语言把仅限被同一个文件中函数调用的函数称为内部函数,把可以跨文件调用的函数称为外部函数。内部函数内部函数又称为静态函数。在定义内部函数时,在函数名和函数类型前加static。static类型说明符函数名(形参表);例如staticintf(inta,intb);使用内部函数,可以使函数的作用域只局限于所在文件。程序设计基础565.4内部函数和外部函数外部函数除内部函数外,其余的函数都可以被其他文件中的函数所调用。在一个文件的函数中调用其他文件中定义的外部函数时,应使用extern声明被调函数。

extern类型说明符函数名(形参表);例如,externintf(inta,intb);程序设计基础575.4内部函数和外部函数外部函数F1.C(文件一):externintf1(inti);//外部函数声明语句,表示f1()函数的定义在其他文件中main(){intt;t=f1(5);//被调用的函数f1()是定义在文件f2.c中的外部函数…}F2.C(文件二):externintf1(inti)//外部函数定义,extern可省略{…}程序设计基础585.5传给main()函数的参数main()函数的标准原型(1)intmain();(2)intmain(intargc,char*argv[]);或者写作双重指针方式intmain(intargc,char**argv);程序设计基础595.5传给main()函数的参数【例5.12】main()函数的形参使用示例#include<stdio.h>main(intargc,char*argv[]){

intcount;

printf("命令行除程序名之外还有%d个参数(字符串):\n",argc-1);

for(count=1;count<argc;count++)

//输出命令行的每个参数(字符串)

printf("参数%d:%s\n",count,argv[count]);}程序设计基础605.6函数综合应用举例【例5.13】编写函数,输入土壤湿度、环境温度和光照强度,判断是否需要灌溉。说明:当土壤湿度<30%,

急需灌溉;当土壤湿度30%-50%且温度>30℃,建议灌溉;当光照>80000Lux且湿度<60%,建议灌溉。程序设计基础61【例5.13】分析:编写函数needIrrigation,实现根据用户输入的土壤湿度、环境温度和光照强度,返回灌溉优先级,0:无需灌溉,1:推荐灌溉,2:急需灌溉。//预处理语句区#include<stdio.h>//自定义函数声明语句区intneedIrrigation(floatmoisture,floattemperature,floatlight);//根据土壤湿度、环境温度和光照强度,返回灌溉优先级程序设计基础62【例5.13】——主函数代码区intmain(){floatmoist,temp,lux;printf("请输入土壤湿度、环境温度和光照强度:");scanf("%f%f%f",&moist,&temp,&lux);intresult=needIrrigation(moist,temp,lux);if(result==2){printf("急需灌溉\n");}elseif(result==1){

温馨提示

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

评论

0/150

提交评论