收藏 分销(赏)

程序模块-函数.pptx

上传人:a199****6536 文档编号:12544466 上传时间:2025-10-27 格式:PPTX 页数:80 大小:650.23KB 下载积分:18 金币
下载 相关 举报
程序模块-函数.pptx_第1页
第1页 / 共80页
程序模块-函数.pptx_第2页
第2页 / 共80页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,/80,3.2 程序模块函数,3.2.1 模块引入,3.2.2 函数执行,3.2.3 链接与建库,3.2.4 深入认识变量,1,/80,第1页,3.2.1 模块引入,程序普通由一个或若干个相对独立模块组成,,C语言把,模块,称为,函数,。,有一个程序必不可少函数,它是程序运行,起点,函数,,也就是,主函数main(),。,一个程序由,一个主函数,和,若干个其它函数,组成。,2,/80,第2页,由主函数调用其它函数,其它函数也能够相互调用。,同一个函数能够被一个或多个函数调用任意屡次。,子函数必需经过别函数,调用,才能得到运行。,3,/80,第3页,全部函数都是平行,即在定义函数时分别进行,,是相互独立。一个函数并不隶属于另一函数,,即,函数不能嵌套定义,。函数间能够相互调用,但,不能调用main函数。main函数是由系统调用。,程序执行,从main函数开始,,若在main函数中,调用其它函数,在调用后流程返回到main函数,,在main函数中结束整个程序运行,。,4,/80,第4页,1函数分类,标准函数(库函数):,由系统提供,用户无须自己定义。,从函数起源,从函数形式,用户自定义函数:,用于处理专门问题。,无参函数:,在调用时,主调函数和它之间无参数传递。,有参函数,:,在调用时,主调函数和它之间有参数传递。,5,/80,第5页,2函数定义,无参函数,类型标识符,函数名,(),申明部分,语句部分,类型标识符指定函数值类型,即函数带回来值类型。,当函数数据类型为int或无返回值时,可省略此项。,有参函数,类型标识符,函数名,(,形式参数表,),形式参数说明,申明部分,语句部分,6,/80,第6页,函数形式参数说明格调有两种。,(1)func(int a,int b),(2)func(a,b),int a,b;,比如:,int func(a,b),int a,b;,int c;,c=a+b;,return(c);,函数头,函数体,参数说明,函数说明,执行语句,定义语句,执行语句,比如:,printstar(),printf(“*n”);,无形参,无返回值,7,/80,第7页,3函数参数和函数值,形式参数,(,形,参),:,定义函数时函数名后括弧中变量。,实际参数(实参):,主调函数中调用一个函数时,函数名,后括弧中参数(能够是表示式),。,8,/80,第8页,【注意事项】,实参加形参类型应,相同,或,赋值兼容,。,在定义函数时指定形参,并不占内存中存放单元。,只有发生函数调用时,形参才被分配内存单元。调用,结束后,形参所占内存单元也被释放。,实参能够是常量、变量或表示式,如:max(3,a+b);,但要求它们有确定值。调用时将实参值赋给形参。,在被定义函数中,,必须指定形参类型,。,9,/80,第9页,在语言中,实参对形参数据传递是,“值传递”,,即,单向传递,,只由实参传给形参,而不能由形参传回来,给实参。在内存中,实参加形参是不一样单元。执行,被调用函数时,形参值若发生改变,并不改变主调,函数实参值。,10,/80,第10页,函数返回值,格式:,return(表示式);,“()”可省略,作用:,把表示式值返回给调用者;并中止被调函数,执行,把程序控制权从被调函数返回到调用者。,通常,希望经过函数调用使主调函数能得到一个确定,值,这就是函数返回值。,11,/80,第11页,【注意事项】,依据实际需要,函数中能够有return语句,能够没有,return语句,也能够有多个return语句。,函数返回值应该属于某一个确定类型,在定义函数,时指定函数返回值类型。,比如:,int,max,(float x,float y),/*整型,char,letter,(char c1,char c2),/*字符型,double,min,(int x,int y),/*双精度实型,12,/80,第12页,在定义函数时指定函数类型普通应该和return语句中,表示式类型一致,不一致时以函数类型为准。,对于不带回值函数,应用“void”定义函数为“无类型”,(或称“空类型”)。这么系统就确保不使函数带回任何,值,即禁止在调用函数中使用被调函数返回值。此时,在函数体中不得出现return语句。,13,/80,第13页,比如:,#include,void main(),int a,b,c;,scanf(“%d%d”,&a,&b);,c=max(a,b);,/*调用函数max*/,printf(“max is%d”,c);,int max(int x,int y),/*定义函数max*/,int z;,z=xy?x:y;,return(z);,/*返回值z*/,运行:,7,8,max is 8,14,/80,第14页,4函数作用,比如:,计算C,m,n,=m!/n!*(m-n)!。,void main(),long t1,t2;int i,m,n;,printf(“Input two integer(first data=second data)”);,scanf(“%d%d”,&m,&n);,t1=1;,for(i=2;i=n;i+)t1=t1*i;,t2=1;,for(i=2;i=m-n;i+)t2=t2*i;,t1=t1*t2;,t2=1;,for(i=2;i=m;i+)t2=t2*i;,t1=t2/t1;,printf(“The result is%ld”,t1);,/*n!*/,/*(m-n)!*/,/*m!*/,3条for语句功效相同,都是求阶乘。,15,/80,第15页,long jc(int n),long t=1;int i;,for(i=2;i=n;i+)t=t*i;,return(t);,void main(),long t;int m,n;,printf(“Input two integer(first datay?x:y;,return(z);,/*返回值z*/,int max(int x,int y);,或,int max(int,int);,/*申明函数max*/,20,/80,第20页,格式:,函数名(实参表列);,调用有参函数,函数名();,调用无参函数,函数调用时只需写出函数名称并在其后括号中,写出与形参个数相等实参。,假如实参表列包含多个实参,则各参数间用逗号,隔开。实参加形参个数应相等,类型应匹配。,实参加形参按次序对应,一一传递数据。,2函数调用,21,/80,第21页,函数调用方式有3种。,函数语句:,把函数调用作为一个语句,不要求返回值。,比如:,printstar();,函数表示式:,函数出现在一个表示式中,要有返回值。,比如:,c=2*max(a,b);,函数参数:,函数调用作为一个函数实参。,比如:,m=max(a,max(b,c),),;,printf(%d,max(a,b),);,22,/80,第22页,语言,能够嵌套调用函数,,即在调用一个函数,过程中,又调用另一个函数。,语言,不能嵌套定义函数,,即在定义一个函数时,,其函数体内不能包含另一个函数。,3函数调用类型,(1)函数嵌套调用,23,/80,第23页,比如:,24,/80,第24页,比如:,main(),void f1();,void f2();,printf(“go f1-n”);,f1();,printf(“ok!”);,void f1(),printf(“in ff-n”);,printf(“go f2-n”);,f2();,printf(“return main-n”);,void f2(),printf(“in f2-n”);,printf(“return f1-n”);,运行结果:,go f1-,in f1-,go f2-,in f2-,return f1 return main-,ok!,25,/80,第25页,比如:,int,f(int x),z=,f(y),;,在调用一个函数过程中又出现直接或间接地,调用,该函数本身,,称为函数,递归调用,。,(2)函数递归调用,26,/80,第26页,比如:,main(),int ff(int);,printf(“%d”,ff(3);,运行过程:,(功效:求!),int ff(int n),if(n=1)return(1);,else return(n*ff(n-1);,ff(3),main,3*ff(2),ff(3),2*ff(1),ff(2),return 1,ff(1),1,2*1,3*2,输出6,27,/80,第27页,【,注意事项】,递归函数执行分为两个阶段,第一阶段是,向前调用,阶段,;第二阶段是,向后返回阶段,。,在递归调用函数中应该设置,一个特殊条件,,用以中止,向前调用阶段,而进入向后返回阶段。,28,/80,第28页,函数间还能够循环调用。,(3)间接递归调用,比如:,函数A调用函数B,函数B再反回来调用函数A。,29,/80,第29页,比如:,main(),int f(int);,printf(“%d”,f(3),);,int f(int n),int g(int);,if(n=1)return(1);,else return(n*,g(n-1),);,int g(int n),if(n=1)return(1);,else return(n+,f(n-1),);,运行过程:,f(3),main,3*g(2),f(3),2+f(1),g(2),return 1,f(1),1,2+1,3*2,输出6,30,/80,第30页,函数间信息交互方式有4种:,函数含有相正确独立性,但不是完全独立,主调,函数和被调函数间必须有信息交互才能联合完成,程序总功效。,4函数间信息交互,按名共享,被调函数返回主调函数信息,主调函数传递给被调函数信息,按地址共享,31,/80,第31页,按名共享:全局变量,局部变量:,在函数体,中,定义说明变量,其作用域,(使用范围)即,定义它函数体或语句体,。,全局变量:,在函数体,外,定义说明变量,其作用域,(使用范围)是,在其后定义全部函数,。,不提议使用全局变量传递信息,因为它破坏了函数,独立性。,比如:int,x,;,main()int,a,=9,b,=6;int,t,;t=a;a=b;b=t;,32,/80,第32页,被调函数返回主调函数信息:被调函数名,经过return语句由被调函数返回信息给主调函数。,在主调函数中,被调函数名即能表示返回函数值。,比如:,printf(“%d”,f(3),);,33,/80,第33页,主调函数传递信息给被调函数:参数值传递,被调函数参数为形参;主调函数参数为实参。,当形参为普通变量时,称为值参,它接收由实参传递,来数值(,单向传递,)。,比如:,main()int a;,f(,a,);,int f(int,n,)n+;,函数调用过程中形参值发生改变,实参值不变。,34,/80,第34页,按地址共享:参数地址传递,用全局变量传递信息方式不被提倡。,普通变量作参数值传递方式中,经过return语句,被调函数只能返回给调用函数一个函数值。,为了能够方便、安全地从被调函数传送多个信息给,主调函数,C语言提供了一个特殊形参,指针形参,,,其对应实参是,变量地址,。这么经过指针,在被,调函数中就能引用主调函数中定义变量,到达了,函数间共享空间功效,形式上实现了函数间双向,传递信息目标。,35,/80,第35页,比如,:(,“值传递”,),void swap(int a,int b),int t;,t=a;,a=b;,b=t;,main(),int a=5,b=9;,swap(a,b);,printf(“a=%d,b=%d”,a,b);,运行结果:a=5,b=9,5,a,9,b,5,t,a,b,5,9,5,9,36,/80,第36页,再比如:,(,“地址传递”,),void swap(int*pa,int*pb),int t;,t=*pa;,*pa=*pb;,*pb=t;,main(),int a=5,b=9,*p_1,*p_2;,p_1=&a,;,p_2=&b;,swap(p_1,p_2);,printf(“a=%d,b=%d”,a,b);,运行结果:a=9,b=5,p_1,&a,pa,&a,p_2,&b,pb,&b,a,b,5,t,5,9,9,5,37,/80,第37页,用#include文件包含命令,经过链接C语言头文件,(后缀为.h文件)来实现与标准库函数链接。,1标准库函数链接,一个头文件对应一类函数,而不是一个函数。,3.2.3 链接与建库,文件包含命令必须出现在文件开头,且命令尾不要,语句结束符“;”。,文件包含命令在编译之前由编译预处理系统执行。,格式:#include “头文件名”,38,/80,第38页,系统默认头文件在“c:tcinclude”目录下。若TC系统,安装在D盘根目录,则需在其集成环境下经过options,菜单下directories 项改变include目录和lib目录,分,别改为:“d:tcinclude”和“d:tclib”。,比如:,#include “math.h”,#include ,惯用于标准文件,在系统设定标准目录下搜索。,“”惯用于自编文件,先在当前目录下查找,若找不到,,再按系统设定路径搜索。,39,/80,第39页,假设文件,file.c,中函数要调用文件,file1.c,和,file2.c,中,函数,C语言提供以下几个方法进行文件间链接。,2自编函数链接,用#include文件包含命令,用TC集成环境中“项目管理”功效,用tcc和link命令,40,/80,第40页,用#include文件包含命令,在调用函数所在文件file.c开头,用#include文件包含,命令指出子函数所在文件路径。,格式:#include “盘符:路径文件名”,比如:,#include “d:tcfile1.c”,#,include “d:tcfile2.c”,41,/80,第41页,用TC集成环境中“项目管理”功效,在集成环境编辑状态下,输入要链接三个文件,(file.c,file1.c,file2.c)路径,并保留成后缀为.prj,(意为项目 project文件)文件,假设为file.prj。,在project菜单下选project name项,并在对话框中,输入file.prj,即可编译、链接、运行了。,42,/80,第42页,用tcc和link命令,将要链接文件用编译命令tcc 进行编译成目标文件,,后缀为.obj,然后用link命令将它们链接。,命令中无须写后缀,默认为.obj,执行完命令后生成,是可执行文件file.exe。,方法:,tcc file,tcc file1,tcc file2,link file+file1+file2,43,/80,第43页,假设已编写好两个函数,,void f1(,void,),在文件,f1.c,中,,float f2(int i,float x),在文件,f2.c,中,把它们建成函数,mycf,,,即可像标准库函数一样用,#include“mycf.h”,调用。,3建立自己C语言函数库,44,/80,第44页,用命令tcc对f1.c及f2.c分别进行编译后产成两个目标,文件f1.obj及f2.obj。,命令:,tcc f1.c f2.c,建立步骤:,将两个目标文件f1.obj及f2.obj建立成一个函数库文件,(取名为mylib.lib),并建立对应例表文件(例表文件,主要用来检验主函数库使用情况)。,命令:,tlib mylib.lib+f1.obj+f2.obj,mylib.lft,将产生mylib.lib函数库文件拷贝到标准库目录(即,“c:tclib”)下。,45,/80,第45页,建立头文件,可依据函数功效为文件起名,后缀为.h。,设取名为mycf.h。,格式:,extern void f1(void);extern float f2(int,float);,将建立好头文件,mycf.h,拷贝到目录c:tcinclude下。,在用户程序中,按下面方式即可调用函数f1或f2。,#include main()f1();,f2();,46,/80,第46页,3.2.4 深入认识变量、函数,1.变量空间属性全局变量与局部变量,因为定义方式不一样,其空间属性(作用域)就不一样。,全局变量,局部变量,变量作用域又名变量可见性。它是可引用某一,变量范围,只有在作用域内,程序才能使用它。,在C语言中,可按作用域将变量划分为两类:,47,/80,第47页,定义在,函数体内,(或复合语句体内),其作用域是,本函数内,(或本复合语句体内)。,局部变量,比如:,float f1(int a),/*函数f1*/,int b,c;,char f2(int x,int y),/*函数f2*/,int i,b;,void main(),/*主函数*/,int m,n;,a、b、c有效,x、y、i、b有效,m、n有效,48,/80,第48页,比如:,void main(),int x;,.,.,.,int y;,.,.,.,.,.,.,x作用域,y作用域,49,/80,第49页,【注意事项】,主函数中定义变量(m,n)也只在主函数中有效。,主函数也不能使用其它函数中定义变量。,在一个函数内部,不一样复合语句(也称为“分程序”或,“程序块”)中定义局部变量也能够同名。,不一样函数中能够使用相同名字变量,它们代表不一样,对象,互不干扰。比如:函数f1中b和f2中b。,形式参数也是局部变量。比如函数f1中形参a,也只,在函数f1中有效。,50,/80,第50页,main(),int x=10;,printf(“nx=%d”,x);,int x=99;,x+;,printf(“nx=%d”,x);,printf(“n-”);,int x=999;,x+;,printf(“nx=%d”,x);,printf(“nx=%d”,x);.,运行结果:,x=10,x=100,-,x=1000,x=10,比如:,51,/80,第51页,定义在函数体外,能够为本文件中其它函数所,共用。它作用域是从定义变量位置开始到本,源文件结束。,全局变量,比如:,int p=1,q=5,;,/*外部变量*/,float f1(int a),int b,c;,char c1,c2,;,/*外部变量*/,char f2(int x,int y),int i,j;,void main(),int m,n;,p、q作用域,c1、c2作用域,52,/80,第52页,运行结果:,x=11,x=100,x=1000,x=100,x=13,比如:,int x=9;,main(),int x=99;,func();,x+;,printf(“nx=%d”,x);,int x=999;,x+;,printf(“nx=%d”,x);,printf(“nx=%d”,x);,func();,func(),x+=2;,printf(“nx=%d”,x);.,若全局变量与局部变量,同名,则在局部变量,可见性范围内,同名,全局变量为不可见。,53,/80,第53页,【尽可能不要使用全局变量】,全局变量在程序全部执行过程中都占用存放单元,,而不是在需要时才开辟单元。,全局变量降低了程序可靠性和通用性。普通要求把,函数做成一个封闭体,除了能够经过“实参形参”,渠道与外界发生联络外,没有其它渠道。,使用全局变量过多,会降低程序清楚性,人们往往,难以清楚地判断出每个瞬时各个外部变量值。在各,函数执行时都可能改变外部变量值,程序轻易犯错。,所以,要限制使用全局变量。,54,/80,第54页,2.局部变量时间属性动态存放、静态存放,从变量值存在时间(即,生存期,)角度来分,又可,分为,静态存放方式,和,动态存放方式,。,静态存放方式(,static,):,在程序开始执行时给变量,分配存放区,到程序执行完成才释放。,如:,static int a,b;,动态存放方式(auto):,在程序执行当中依据需要给,变量分配存放区,并可能在程序没执行完前就释放。,如:,auto int a,b;,55,/80,第55页,比如:,f(int c),static int b=9;,b=b+c;,return(b);,main(),int a=9;,printf(“%d,”,f(a);,printf(“%d”,f(a);,运行结果:,18,27,说明:,静态局部变量在编译时,分配空间,且同时存放初值,,只进行一次赋初值操作,所以,这类变量在屡次调用中含有,“保值”功效。,56,/80,第56页,【注意事项】,变量时间属性不改变变量空间属性。,在函数中,int a;与auto int a;完全等价。,定义静态局部变量时若不赋值,编译时自动赋值为0。,f(int c),static int b;,b=c*c*c;,main(),int a=9;,f(a);,printf(“%d”,b,);,无权引用b,静态局部变量含有“保值”功效,每一次相同调用,可能产生不一样结果,故请慎重使用。,57,/80,第57页,按照内存使用特征,可将其分为:,静态存放区,动态存放区,程序区(代码区),58,/80,第58页,语言中每一个变量和函数有两个属性:,数据类型,数据存放类型,如:整型、实型、字符型,存放方式分为两大类:,静态存放类,和,动态存放类,。,详细包含4种:,自动(auto),静态(static),,存放器(register),外部(extern),。,59,/80,第59页,3.局部变量存放方式,自动局部变量(自动变量)(auto),静态局部变量(,static,),存放器变量(register),60,/80,第60页,自动局部变量(自动变量)(auto),函数中局部变量,如不专门申明为static存放类别,,都是动态地分配存放空间,数据存放在,动态存放区,。,比如:,int f(int a),auto int b,c=3;,【auto能够省略】,在调用该函数时系统为其分配存放空间并赋初值,每,调用一次函数便重新给一次初值,在函数调用结束时,自动释放存放空间。,假如在定义局部变量时不赋初值,则它值是一个,不确定值。,61,/80,第61页,静态局部变量(static),用static来申明,数据存放在,静态存放区,。,在整个程序运行期间都不释放所占用存放单元。在,编译时赋初值,在程序运行时它已经有初值。以后每次,调用函数时不再重新赋值,而只是保留上次函数调用,结束时值。,假如在定义局部变量时不赋初值,则编译时对其自动,赋初值(对数值型变量)或空字符(对字符变量)。,即使静态局部变量在函数调用结束后仍存在,但其它,函数不能引用它。,62,/80,第62页,比如:,#include,void,main,(),int f(int);,int a=2,i;,for(i=0;i3;i+),printf(“f(a)=%dn”,f(a);,int f(int a),auto int b=0;,static c=3;,b=b+1;,c=c+1;,return(a+b+c);,运行结果:,f(a)=7,f(a)=8,f(a)=9,63,/80,第63页,比如:,输出到3阶乘值。,#include,void,main,(),int fac(int);,int;,for(i=1;i=3;i+),printf(“%d!=%dn”,i,fac(i);,int fac(int n),static int f=1;,f=f*n;,return(f);,运行结果:,1!=1,2!=2,3!=6,64,/80,第64页,存放器变量(register),普通情况下,变量值存放在内存中。当程序用到,某一变量值时,将内存中该变量值送到运算器,中。运算结束后,假如需要保留数,再从运算器将,数据送到内存存放。,65,/80,第65页,这种,存放在CPU存放器中,变量叫做,存放器变量,,用,关键字register来申明。,假如有一些变量使用频繁,则为存取变量值要花费,不少时间。为提升执行效率,语言允许将局部变量,值放在CPU中存放器中,需要用时直接从存放器,取出参加运算,无须再到内存中去存取。,只有,局部自动变量,和,形参,能够作为,存放器变量,,其它,(如全局变量)不行。,66,/80,第66页,比如:,#include,void,main,(),long fac(long);,long i,n;,scanf(%ld,for(i=1;i=n;i+),printf(%ld!=%ldn,i,fac(i);,long fac(long n),register long i,f=1;/*定义存放器变量*/,for(i=1;iy?x:y;,return(z);,70,/80,第70页,用extern将外部变量作用域扩展到其它文件。,比如:,给定值,输入和,求和a,m,值。,文件file1.c:,#include,#include“file2.c”,int a;/*定义外部变量*/,void main(),int power(int);/*函数申明*/,int b=3,c,d,m;,scanf(“%d,%d”,c=a*b;,printf,(“%d*%d,=%dn”,a,b,c);,d=power(m);,printf(“%d*%d,=%dn”,a,m,d);,文件file2.c:,extern a;,/*申明已定义外部变量a*/,int power(int n),int i,y=1;,for(i=1;i=n;i+),y*=a;,return(y);,71,/80,第71页,定义性申明(定义):,需要建立存放空间。,比如:,extern,int a;,引用性申明,(,申明),:,不需要建立存放空间。,比如:,extern a;,变量申明有两种。,72,/80,第72页,(1),从,作用域,角度分,有,局部变量,和,全局变量,。,【存放类别小结】,它们采取存放类别以下:,局部,自动变量,即动态局部变量(离开函数,值就消失),变量,静态局部变量(离开函数,值仍保留),存放器变量(离开函数,值就消失),(形式参数能够定义为自动变量或存放器变量),全局,静态全局变量(只限本文件引用),变量,外部变量(即非静态外部变量,允许其它文件引用),73,/80,第73页,(2),从,生存期,角度分,有,动态存放,和,静态存放,。,静态存放是整个程序运行时间都存在。,动态存放是在调用函数时暂时分配单元。,动态,自动变量(本函数内有效),存放,存放器变量(本函数内有效),形式参数(本函数内有效),静态,静态局部变量(本函数内有效),存放,静态全局变量(本文件内有效),外部变量(其它文件可引用),74,/80,第74页,(3),从,变量值存放位置,分,可分为:,内存静态存放区,静态局部变量,静态全局变量,外部变量,内存动态存放区,自动变量,形式参数,CPU中存放器:,存放器变量,75,/80,第75页,(4),static对局部变量和全局变量作用不一样。,它使,局部变量,由动态存放方式改变为静态存放方式,。,它使,全局变量,局部于本文件,但,仍为静态存放方式,。,(5),能够从两个方面分析变量性质:,从空间角度:,变量有效范围,即,作用域,。,从时间角度:,变量值存在时间长短,即,生存期,。,76,/80,第76页,5.内部函数、外部函数,函数本质上是全局,因为一个函数要被另外函数,调用。不过,也能够指定函数不能被其它文件调用。,依据函数能否被其它源文件调用,将函数区分为:,外部函数(extern),内部函数(static),77,/80,第77页,内部函数(static),内部函数:,只能被,本文件中,其它函数调用。,定义:,static 类型标识符 函数名(形参表),比如:static int fun(int a,int b),78,/80,第78页,外部函数(extern),外部函数:,能被,其它文件,调用。,定义:,extern 类型标识符 函数名(形参表),比如:extern int fun(int a,int b),若在定义函数时省略extern,则隐含为外部函数。,在需要调用此函数文件中,,用extern对函数作申明,,,表示该函数是在其它文件中定义外部函数,。,79,/80,第79页,比如:,有一个字符串,今输入一个字符,要求程序将,字符串中该字符删去。用外部函数实现,。,file1.c(文件),#include,void main(),extern void del_str(char str,char ch);,/*申明外部函数*/,char c,str80;,gets(str);,scanf(%c,del_str(str,c);,printf(%sn,str);,file2.c(文件2),void del_str(char str,char ch),/*定义外部函数*/,int i,j;,for(i=j=0;stri!=0;i+),if(stri!=ch)strj+=stri;,strj=0;,BACK,80,/80,第80页,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服