photoshop图形图像处理4.1 函数电子教案 中职c语言程序设计基础.ppt

上传人:春哥&#****71; 文档编号:90588572 上传时间:2023-05-16 格式:PPT 页数:42 大小:1.99MB
返回 下载 相关 举报
photoshop图形图像处理4.1 函数电子教案 中职c语言程序设计基础.ppt_第1页
第1页 / 共42页
photoshop图形图像处理4.1 函数电子教案 中职c语言程序设计基础.ppt_第2页
第2页 / 共42页
点击查看更多>>
资源描述

《photoshop图形图像处理4.1 函数电子教案 中职c语言程序设计基础.ppt》由会员分享,可在线阅读,更多相关《photoshop图形图像处理4.1 函数电子教案 中职c语言程序设计基础.ppt(42页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、photoshop图形图像处理4.1 函数电子教案 中职 高教版 c语言程序设计基础了解了解C C语言函数的分类语言函数的分类掌握函数定义的一般格式,调用函数的一般形式掌握函数定义的一般格式,调用函数的一般形式了解在函数调用中数据是如何传递的了解在函数调用中数据是如何传递的能力目标:能力目标:任务一任务一 考察函数考察函数 C C语言是函数式语言,构成语言是函数式语言,构成C C源程序的是各种各样的函数。在前面源程序的是各种各样的函数。在前面的学习中,我们一直都在使用函数,如运行源程序必不可少的主的学习中,我们一直都在使用函数,如运行源程序必不可少的主函数函数mainmain()、输入输出函数

2、()、输入输出函数printfprintf()等。()等。事实上,一个实用的应用程序除了主函数和输入输出函数外,还事实上,一个实用的应用程序除了主函数和输入输出函数外,还可以包括其他的多个函数,这些函数完成各自不同的功能。现在我们可以包括其他的多个函数,这些函数完成各自不同的功能。现在我们就通过观察程序结果,上机验证等方法,来具体了解函数的定义、调就通过观察程序结果,上机验证等方法,来具体了解函数的定义、调用的方法。用的方法。任务一 考察函数程序程序1 1:#include stdio.h#include stdio.hmain()main()int x=10;int x=10;printf(

3、%d,x);printf(%d,x);1 1请观察下面请观察下面2 2个程序的结构和组成个程序的结构和组成,进行对比。进行对比。程序程序2 2:#include stdio.h#include stdio.hmain()main()pstar();pstar();pstar()pstar()printf(*);printf(*);uC C语言中函数分为语言中函数分为2 2大类:库函数和自定义函数。大类:库函数和自定义函数。u库函数是系统提供的,无须用户定义就可以完成各种常用的功能,如库函数是系统提供的,无须用户定义就可以完成各种常用的功能,如输入输出函数输入输出函数printfprintf()

4、和()和scanfscanf()。()。u自定义函数是用户自己编写,按需要完成一定的功能,如上例中的自定义函数是用户自己编写,按需要完成一定的功能,如上例中的pstarpstar()函数。()函数。u库函数的调用方法:库函数的调用方法:TCTC的库函数包含在以的库函数包含在以LIBLIB为扩展名的库文件中,为扩展名的库文件中,而函数的原型说明(如函数的函数类型、函数名、参数类型等)被放到而函数的原型说明(如函数的函数类型、函数名、参数类型等)被放到一个或多个以一个或多个以H H为扩展名的头文件中,如果要在程序中使用这些库函为扩展名的头文件中,如果要在程序中使用这些库函数,那么在程序开头应该用文

5、件包含命令(数,那么在程序开头应该用文件包含命令(#include#include)将相应的头文件)将相应的头文件包含进本程序中。如前面学习过的,要使用字符输入输出函数包含进本程序中。如前面学习过的,要使用字符输入输出函数 getchargetchar()()和和putcharputchar()()就必须要在程序前执行就必须要在程序前执行#include#include stdiostdiohh。函数的分类:函数的分类:知识盘点:2 2函数是系统已经定义好的,完成某些特定功能的函数。而在自定函数是系统已经定义好的,完成某些特定功能的函数。而在自定义函数则是由用户自己定义来完成需要功能,那么怎样

6、定义一个自义函数则是由用户自己定义来完成需要功能,那么怎样定义一个自定义函数呢?定义函数呢?请观察下面几个正确的函数定义。请观察下面几个正确的函数定义。#include stdio.h#include stdio.hvoid pstar()void pstar()int I=3;j;int I=3;j;for for(j=1;j=I;j+)(j=1;jy)if(xy)z=x;z=x;else else z=y;z=y;printf(printf(最大值为最大值为%d,z);%d,z);#include stdio.h#include stdio.hint max1(x,y)int x,y;in

7、t max1(x,y)int x,y;int z;int z;if(xy)if(xy)z=x;z=x;else else z=y;z=y;printf(printf(最大值为最大值为%d,z);%d,z);u在同一个程序中,函数名不能相同。在同一个程序中,函数名不能相同。u“形式参数形式参数”简称简称“形参形参”,当有多个形参时,各形参之间用逗号,当有多个形参时,各形参之间用逗号分隔,且必须说明每个形参的数据类型。当形参的说明放在圆括号内分隔,且必须说明每个形参的数据类型。当形参的说明放在圆括号内时,即使多个形参的数据类型相同,每个形参之前都必须有类型标识时,即使多个形参的数据类型相同,每个形

8、参之前都必须有类型标识符,如上面的符,如上面的maxmax函数。如果形参的说明放在圆括号外,则可以使用上函数。如果形参的说明放在圆括号外,则可以使用上面的面的max1max1函数形式。注意,如果是在函数体中要用到的变量,必须在函数形式。注意,如果是在函数体中要用到的变量,必须在函数体内进行定义,不能放到函数体外。同样,对形式参数的说明,函数体内进行定义,不能放到函数体外。同样,对形式参数的说明,也不能放到函数体中进行也不能放到函数体中进行眼下留神:u函数定义的一般形式函数定义的一般形式类型标识符类型标识符 函数名(函数名(形式参数说明表形式参数说明表)声明部分声明部分执行部分执行部分 或或 类

9、型标识符类型标识符 函数名(函数名(形式参数形式参数)形式参数的说明形式参数的说明 声明部分声明部分执行部分执行部分 函数的定义:函数的定义:知识盘点:函数的定义:函数的定义:知识盘点:对函数定义的一般形式的说明对函数定义的一般形式的说明:(1)(1)类型标识符类型标识符类型标识符说明函数的类型,也就是该函数返回值的类型。这些数据类型标识符说明函数的类型,也就是该函数返回值的类型。这些数据类型可以是类型可以是intint、longlong、floatfloat、charchar中的任何一种。当函数类型为中的任何一种。当函数类型为intint型时,类型标识符可以省略。此外,还有一种数据类型为空类

10、型型时,类型标识符可以省略。此外,还有一种数据类型为空类型voidvoid,它表示此函数不返回任何值,如,它表示此函数不返回任何值,如pstarpstar函数只关心输出函数只关心输出“*”“*”,不需要任何返回值带回给主函数,就可,不需要任何返回值带回给主函数,就可以定义为以定义为voidvoid型。型。(2 2)函数名)函数名函数名是一个标识符,由用户按标识符规则命名。函数名是一个标识符,由用户按标识符规则命名。(3 3)形式参数说明表)形式参数说明表 形式参数表是针对有参函数而言的,为函数接收外来数据提供变量名,形式参数表是针对有参函数而言的,为函数接收外来数据提供变量名,以便于在函数中使

11、用,规定了传递数据的类型及个数。以便于在函数中使用,规定了传递数据的类型及个数。函数的定义:函数的定义:知识盘点:对函数定义的一般形式的说明对函数定义的一般形式的说明:(4 4)函数体)函数体函数体是用一对花括号括起来的语句序列,由声明部分和执行部分函数体是用一对花括号括起来的语句序列,由声明部分和执行部分2 2部部分组成。声明部分是用于对形式参数以外的变量或者其他函数进行类分组成。声明部分是用于对形式参数以外的变量或者其他函数进行类型说明,一般放在函数体的开始;执行部分实现该函数的功能。如型说明,一般放在函数体的开始;执行部分实现该函数的功能。如maxmax函数中的执行部分就是完函数中的执行

12、部分就是完成求成求2 2个数中较大的一个数。个数中较大的一个数。(5 5)空函数)空函数定义函数时,函数类型、形式参数、函数体均可以省略,称为空函数。定义函数时,函数类型、形式参数、函数体均可以省略,称为空函数。调用空函数时,不执行任何操作,没有任何实际的作用,但空函数在调用空函数时,不执行任何操作,没有任何实际的作用,但空函数在程序设计中是非常有用的,在实际编程中,可以利用空函数来代表没程序设计中是非常有用的,在实际编程中,可以利用空函数来代表没编好的模块,以确保程序编好的模块,以确保程序结构的完整。结构的完整。3 3通过前面的例子,同学们也许会产生疑问:什么时候定义函数时应通过前面的例子,

13、同学们也许会产生疑问:什么时候定义函数时应该使用形参,什么时候又不使用呢?什么时候函数又需要带回返回值,该使用形参,什么时候又不使用呢?什么时候函数又需要带回返回值,什么时候又不需要呢?请观察下面几个例子,一起来找出答案。什么时候又不需要呢?请观察下面几个例子,一起来找出答案。定义一个可以输出定义一个可以输出5 5个个“*”“*”号的函数号的函数1 1。#include stdio.h#include stdio.hvoid star()void star()printf(*n);printf(*n);定义函数定义函数2 2,输出,输出n n个个“*”“*”号,要求号,要求n n 的值由主函数

14、确定。的值由主函数确定。#include stdio.h#include stdio.h void star1void star1(int nint n)int i int i;for(i=1;i=n;i+)for(i=1;i y)if(xy)max=x;max=x;else else max=y;max=y;return(max);/*return(max);/*返回最大值给主函数返回最大值给主函数*/*/*以函数表达式的形式调用函数以函数表达式的形式调用函数maxnum(),maxnum(),并将确定的实参的值并将确定的实参的值a a、b b传递给形式参数传递给形式参数x x、y y,再将

15、,再将函数的返回值以赋值的形式传回函数的返回值以赋值的形式传回给变量给变量c*/c*/u函数调用的一般形式函数调用的一般形式根据有无形式参数分为两类:根据有无形式参数分为两类:(1 1)无参函数调用的一般形式)无参函数调用的一般形式 函数名(函数名()(2 2)有参函数调用的一般形式)有参函数调用的一般形式 函数名(实际参数表)函数名(实际参数表)注意:函数的调用出现在主调函数中,无论有无实际参数,调用函注意:函数的调用出现在主调函数中,无论有无实际参数,调用函数时,函数名后的圆括号不能省略。对于有参函数调用中的实际函数数时,函数名后的圆括号不能省略。对于有参函数调用中的实际函数(简称(简称“

16、实参实参”),可以是常量、变量或表达式,但必须是确定的值。),可以是常量、变量或表达式,但必须是确定的值。函数调用的一般形式及应注意的问题函数调用的一般形式及应注意的问题:知识盘点:函数调用的一般形式及应注意的问题函数调用的一般形式及应注意的问题:知识盘点:函数调用的几种方式函数调用的几种方式(1 1)函数语句,一般形式为:)函数语句,一般形式为:函数名(实参表);函数名(实参表);把函数调用作为一个独立的语句。这种方式通常用于调用一个不要把函数调用作为一个独立的语句。这种方式通常用于调用一个不要求返回值的函数,调用函数后只要求完成一定的操作。求返回值的函数,调用函数后只要求完成一定的操作。(

17、2 2)函数表达式,一般形式为:)函数表达式,一般形式为:变量名变量名=函数表达式;函数表达式;函数出现在一个表达式中,这种表达式称为函数表达式。这种方式函数出现在一个表达式中,这种表达式称为函数表达式。这种方式通常用于调用要求有返回值的函数。函数的返回值将参加表达式的通常用于调用要求有返回值的函数。函数的返回值将参加表达式的运算。运算。5 5上机运行下面上机运行下面2 2个程序,对比运行结果,找出影响结果的原因。个程序,对比运行结果,找出影响结果的原因。程序程序1:1:#include stdio.h#include stdio.hmain()main()float x,y;float x,

18、y;printf(printf(请输入圆的半径:请输入圆的半径:););scanf(%f,&x);scanf(%f,&x);y=cir(x);y=cir(x);printf(printf(圆的周长为圆的周长为%fn,y);%fn,y);float cir(float r)float cir(float r)float c;float c;c=2*3.14*r;c=2*3.14*r;return(c);return(c);输入半径为输入半径为2 2。程序程序2 2:#include stdio.h#include stdio.hmain()main()float x,y;float x,y;fl

19、oat cir(float);float cir(float);printf(printf(请输入圆的半径:请输入圆的半径:););scanf(%f,&x);scanf(%f,&x);y=cir(x);y=cir(x);printf(printf(圆的周长为圆的周长为%fn,y);%fn,y);float cir(float r)float cir(float r)float c;float c;c=2*3.14*r;c=2*3.14*r;return(c);return(c);输入半径为输入半径为2 2。对被调函数的声明对被调函数的声明:对被调函数声明对被调函数声明对被调函数的声明一般有对被

20、调函数的声明一般有3 3种形式,上面的例子中使用的就是其中的一种形式,上面的例子中使用的就是其中的一种:种:(1 1)函数类型)函数类型 函数名(参数类型函数名(参数类型1 1,参数类型,参数类型2 2,)(2 2)函数类型)函数类型 函数名(参数类型函数名(参数类型1 1 参数名参数名1 1,参数类型,参数类型2 2 参数名参数名2 2,)(3 3)函数类型函数类型 函数名(函数名()知识盘点:对被调函数声明的几点说明:对被调函数声明的几点说明:在以下几种情况下,也可以不对被调函数进行声明。在以下几种情况下,也可以不对被调函数进行声明。当被调用函数的类型为当被调用函数的类型为intint或或

21、charchar时,可以不对被调用函数进行声时,可以不对被调用函数进行声明,而直接调用。明,而直接调用。当被调用函数的定义出现在主调函数之前时,可以不对被调用函当被调用函数的定义出现在主调函数之前时,可以不对被调用函数进行声明。数进行声明。如果在所有函数定义之前,在函数的外部已做了函数声明,则在如果在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必对所调用的函数再做声明。各个主调函数中不必对所调用的函数再做声明。知识盘点:任务二任务二 在程序中使用函数在程序中使用函数 在前面的章节中我们学习了函数的定义,了解了函数的调用。在在前面的章节中我们学习了函数的定义,了解了函数的调

22、用。在实际的问题中,怎样使用自定义函数来解决问题呢?我们一起来通实际的问题中,怎样使用自定义函数来解决问题呢?我们一起来通过对下面例子的观察和探索来解决这个问题。过对下面例子的观察和探索来解决这个问题。1 1调用一个自定义函数,求出调用一个自定义函数,求出3 3个数中的最大数,要求这个数中的最大数,要求这3 3个数个数从主调函数中输入。从主调函数中输入。任务二 在程序中使用函数#include stdio.h#include stdio.hmain()main()int a,b,c,max;int a,b,c,max;接下页接下页 printf(printf(请输入三个数请输入三个数n);n)

23、;scanf(%d%d%d,&a,&b,&c);scanf(%d%d%d,&a,&b,&c);max=maxnum(maxnum(a,b),c);max=maxnum(maxnum(a,b),c);printf(printf(最大数为最大数为%dn,max);%dn,max);maxnum(int x,int y)maxnum(int x,int y)int z;int z;if(xy)if(xy)z=x;z=x;else else z=y;z=y;return(z);return(z);任务二 在程序中使用函数任务三任务三 在函数间实现数据传递在函数间实现数据传递 一般情况下,在调用函数时,

24、只要出现了形式参数,主调函数与一般情况下,在调用函数时,只要出现了形式参数,主调函数与被调函数之间有数据传递的关系,否则,被调函数将得不到任何数据。被调函数之间有数据传递的关系,否则,被调函数将得不到任何数据。那么,函数之间是通过怎样的方式来实现数据传递的呢?通过下面的那么,函数之间是通过怎样的方式来实现数据传递的呢?通过下面的例子,大家一起来分析一下。例子,大家一起来分析一下。1 1请上机实验,写出下面程序的运行结果。请上机实验,写出下面程序的运行结果。任务三 在函数间实现数据传递#include stdio.h#include stdio.hmain()main()float a,b,m;

25、float a,b,m;flaot sum(float,float);flaot sum(float,float);接下页接下页a=5.5;b=10.2;a=5.5;b=10.2;m=sum(a,b);m=sum(a,b);printf(a printf(a 的值为的值为%f,b%f,b的值为的值为%fn,x,y);%fn,x,y);printf(printf(和为和为%f,m);%f,m);float sum(float x,float y)float sum(float x,float y)flaot s;flaot s;x+=4;y-=2;x+=4;y-=2;s=x+y;s=x+y;pr

26、intf(x printf(x的值为的值为%f,y%f,y的值为的值为%fn,x,y);%fn,x,y);return(s);return(s);任务三 在函数间实现数据传递基本数据类型做参数实现函数间数据传递基本数据类型做参数实现函数间数据传递:当函数参数为基本数据类型时,实参向形参的数据传递是当函数参数为基本数据类型时,实参向形参的数据传递是“单向单向的值传递的值传递”,即只能由实参传递给形参,不能由形参传给实参。,即只能由实参传递给形参,不能由形参传给实参。关于实参和形参还有以下几点说明:关于实参和形参还有以下几点说明:函数定义中指定的形参,在未出现函数调用时,并不占用内存函数定义中指定

27、的形参,在未出现函数调用时,并不占用内存中的存储单元。只有在发生函数调用时,函数中的形参才被分配中的存储单元。只有在发生函数调用时,函数中的形参才被分配内存单元。调用结束后,形参所占的内存内存单元。调用结束后,形参所占的内存单元立即被释放。单元立即被释放。进行函数调用时,若函数参数为基本数据类型,则实参和形参进行函数调用时,若函数参数为基本数据类型,则实参和形参在内存中占不同的在内存中占不同的存储单元。因此,当实参把值传递给形参时,形参是在与实参不存储单元。因此,当实参把值传递给形参时,形参是在与实参不同的内存单元中进行操作的,因此,形参值的变换不会引起实参同的内存单元中进行操作的,因此,形参

28、值的变换不会引起实参值的变化。值的变化。知识盘点:2 2通过上面的例子,我们知道形参的值不能传回给实际参数,有通过上面的例子,我们知道形参的值不能传回给实际参数,有没有其他办法将形参值的变化返回给主调函数呢?通过上机实验,没有其他办法将形参值的变化返回给主调函数呢?通过上机实验,观察下面程序的结果来分析。观察下面程序的结果来分析。#include stdio.h#include stdio.hmain()main()char ch=A;char ch=A;char zh(char);char zh(char);printf(ch=%cn,ch);printf(ch=%cn,ch);ch=zh(

29、ch);ch=zh(ch);printf(ch=%cn,ch);printf(ch=%cn,ch);char zh(char c)char zh(char c)c=c+32;c=c+32;printf(c=%cn,c);printf(c=%cn,c);return(c);return(c);u利用返回值的形式,可以不通过在形参和实参之间传递数据,而是利用返回值的形式,可以不通过在形参和实参之间传递数据,而是通过函数调用后直接返回一个值到主调函数中。它一般是通过通过函数调用后直接返回一个值到主调函数中。它一般是通过returnreturn语句实现的,而且要求接受返回值的参数是实参,这样形参的变化

30、才语句实现的,而且要求接受返回值的参数是实参,这样形参的变化才会引起实参的变化。会引起实参的变化。利用返回值来实现函数间数据的传递:利用返回值来实现函数间数据的传递:知识盘点:3 3除了基本的数据类型外,还有什么其他的数据类型可以做函数的除了基本的数据类型外,还有什么其他的数据类型可以做函数的参数呢?通过上机运行下面这个例子,观察结果,找出答案。参数呢?通过上机运行下面这个例子,观察结果,找出答案。#include stdio.h#include stdio.hmain()main()int a2,i;int a2,i;printf(printf(请输入请输入2 2个数:个数:););scan

31、f(%d,%d,&a0,&a1);scanf(%d,%d,&a0,&a1);swap(a0,a1);swap(a0,a1);printf(a0=%d,a1=%dn,a0,a1);printf(a0=%d,a1=%dn,a0,a1);swap(int x,int y)swap(int x,int y)int i int i t=x;x=y;y=t;t=x;x=y;y=t;printf(x=%d,y=%dnx,y)printf(x=%d,y=%dnx,y)输入输入2 2个整数个整数1616,2828u当数组元素做函数参数时,所遵循的规则和基本数据类型一致,也是当数组元素做函数参数时,所遵循的规则和

32、基本数据类型一致,也是“单向的值传递单向的值传递”。利用数组元素完成函数间数据的传递:利用数组元素完成函数间数据的传递:知识盘点:4 4除了基本数据类型、数组元素可以做函数参数外,还有别的数除了基本数据类型、数组元素可以做函数参数外,还有别的数据类型可以做函数参数吗?请上机运行下面的程序,找出答案。据类型可以做函数参数吗?请上机运行下面的程序,找出答案。#include stdio.h#include stdio.hmain()main()int a2;int a2;printf(printf(请输入数组请输入数组a a的值:的值:);scanf(%d%d,&a0,&a1);scanf(%d%

33、d,&a0,&a1);printf(a0=%d,a1=%dn,a0,a1);printf(a0=%d,a1=%dn,a0,a1);swap(a);swap(a);接下页接下页printf(a0=%d,a1=%dn,a0,a1);printf(a0=%d,a1=%dn,a0,a1);swap(int x2)swap(int x2)int t;int t;t=x0;x0=x1;x1=t;t=x0;x0=x1;x1=t;printf(x0=%d,x1=%dnx0,x1);printf(x0=%d,x1=%dnx0,x1);运行时输入运行时输入 1616,2828u当数组名做函数参数时,形参的变化会影

34、响实参的值。因为数当数组名做函数参数时,形参的变化会影响实参的值。因为数组名在组名在C C语言代表该数组的首地址,因此,函数之间传递的应该是语言代表该数组的首地址,因此,函数之间传递的应该是数组的首地址,因此,实参和形参占用相同的内存单元。所以,数组的首地址,因此,实参和形参占用相同的内存单元。所以,形参的值发生改变,实参的值也跟着发生变化。形参的值发生改变,实参的值也跟着发生变化。利用数组来完成函数间数据的传递:利用数组来完成函数间数据的传递:知识盘点:任务四任务四 利用函数来完成模块化程序设计利用函数来完成模块化程序设计 1 1怎么利用函数来完成模块化的程序设计?请通过下面的程序及怎么利用

35、函数来完成模块化的程序设计?请通过下面的程序及老师的分析,进一步的了解模块化程序设计。老师的分析,进一步的了解模块化程序设计。编写一个可以帮助小学生进行算术练习的程序。它的功能是:提供编写一个可以帮助小学生进行算术练习的程序。它的功能是:提供加、减、乘、除这四种基本算术运算题目,并且每道运算题中的操作数加、减、乘、除这四种基本算术运算题目,并且每道运算题中的操作数都是随机产生的。练习者根据显示出的题目输入自己的答案,程序自动都是随机产生的。练习者根据显示出的题目输入自己的答案,程序自动判断输入的答案是否正确,并显示出相应的信息。如果练习者的答案错判断输入的答案是否正确,并显示出相应的信息。如果练习者的答案错了,程序就会发出了,程序就会发出“报警声报警声”,并给出正确答案。,并给出正确答案。任务四 利用函数来完成模块化程序设计任务四 利用函数来完成模块化程序设计分析:分析:这道题目对与初学者来说,要完成的任务较多。我们首先应该这道题目对与初学者来说,要完成的任务较多。我们首先应该为该程序划分功能模块。为了方便问题的解决,这个程序至少应该为该程序划分功能模块。为了方便问题的解决,这个程序至少应该划分为五个模块:一个主函数和四个分别实现加减乘除四种算术运划分为五个模块:一个主函数和四个分别实现加减乘除四种算术运算的函数。算的函数。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com