基于自然语言思想的递进C_C++教程3ppt.ppt_第1页
基于自然语言思想的递进C_C++教程3ppt.ppt_第2页
基于自然语言思想的递进C_C++教程3ppt.ppt_第3页
基于自然语言思想的递进C_C++教程3ppt.ppt_第4页
基于自然语言思想的递进C_C++教程3ppt.ppt_第5页
已阅读5页,还剩135页未读 继续免费阅读

下载本文档

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

文档简介

我 们 采 用 的 教 材 4.1 简单指针类型和指针量值(常量和变量) 第4章 C/C+语言的纵向名词性扩充(1):指 针 4.1.1 变量的三层含义 -简单的C赋值语句: int a=10; 包含着变量的三层含义。 图4. 1变量的三层含义 变量的指针:就是用来存储变量值的若干字节内存 的起始地址值 当定义一个变量时,该变量的值是可变的(之所 以为变量的原因!),但该变量的指针(地址值) 却是常量,即该变量在内存中的位置是确定的。 4.1.2 变量的指针和指针类型的 变量 指针变量的引出: 当程序规模扩大,逻辑会变得复杂,这时用不同变 量名就很麻烦,甚至是不可能。 需要定义另一个变量,这个变量的值是其它变量的 地址值(指针)。 4.1.2 变量的指针和指针类型的 变量 指针变量:值是另一个变量地址的变量,叫做指 针变量。 指针变量是变量,它也有三层含义 4.1.2 变量的指针和指针类型的变量 图4. 2 指针变量和它指向的变量 p= 此时p的值是2A6B。 4.1.3 与指针相关的动词补充 int* p= printf(“%d“, *p); /输出 a的值10 语句printf(“%d”, *a);输出什么? 4.1.3 与指针相关的动词补充 int* p= printf(“%d“, *p); /输出 a的值10 4.1.3 与指针相关的动词补充 int* p1= /定义指针变量,并指 向不同变量 x3=x1+x2; printf(“n%d %dn“, x3, *p3); *p3=*p1-*p2; /用指针变量实现变量的运算 printf(“n%d %dn“, x3, *p3); 4.1.4 指针和指针变量示例 指向异类集合变量的指针变量 例4. 2用指向结构体变量的指针变量操作结构体 变量。 #include struct Student int id; char name10; float score2; ; void main() Student LiHong; Student * P_Studeng= printf(“n请输入学生编号:n“); scanf(“%d“, printf(“n请输入学生姓名:n“); scanf(“%s“,P_Studeng-name); printf(“n请输入2门成绩:n“); scanf(“%f“, /通过指 针变量操作结构体变量内的数组元素 scanf(“%f“, printf(“n-输出信息- n“); printf(“n%d“, (*P_Studeng).id); printf(“n%s“, P_Studeng-name); printf(“n%f %fn“,P_Studeng-score0, P_Studeng-score1); 指向共用体和枚举类型的指针变量的声明和引用 方法完全相同。 运算符 4.2同类集合变量数组的指针和指针变量 数组的指针就是数组的起始地址。 1.一维数组的存储结构公理一维数组的指针 常量 令ANY代表任何一种已经定义的类型。m是已经定 义的一个常量。 一维变量数组的定义形式是ANY one_demm; one_dem是数组名,是常量。 4.2.1一维数组的指针和操作一维数组的指针变 量 本质上是指向单个变量的指针变量 这m个ANY型的变量(即数组的元素) one_dem0,one_dem1, one_demm-1 。 它们在内存中是连续存放的,如果设每个元素 占用4字节内存,oen_dem数组需要4*m字节的连 续内存。 4.2.1一维数组的指针和操作一维数组的指针变量 本质上是指向单个变量的指针变量 4.2.1一维数组的指针和操作一维数组的指针变 量 本质上是指向单个变量的指针变量 表达式 数组名x是第0号元素地址。 x+i是从数组的起始地址向下移动i个数组元 素的地址长度 *(x+i)等价于* 如下赋值形式都是正确的: AnyP= AnyP=one_dem; 因为one_dem 4.2.1一维数组的指针和操作一维数组的指针变量 本质上是指向单个变量的指针变量 3.用指向一维数组的指针变量操作数组 因为数组元素在内存中的线性连续排列,C/C+ 将 指向一维数组元素的指针变量的整数加减运算,解 释为以数组元素所占内存为单位的加减运算。 4.2.1一维数组的指针和操作一维数组的指针变量 本质上是指向单个变量的指针变量 3.用指向一维数组的指针变量操作数组 AnyP= AnyP+; /AnyP指向one_dem4。 AnyP+=3; one_dem+ ;是错误的。 4.2.1一维数组的指针和操作一维数组的指针变量 本质上是指向单个变量的指针变量 一维数组中 AnyP= AnyP+j int i; printf(“n请输入5个整数,空格分隔,回车结束 n“); for ( i=0; i=0; i-) printf(“%d t“, *(x+i); 4.2.1一维数组的指针和操作一维数组的指针变量 本质上是指向单个变量的指针变量 图4. 3 数组名和指向数组的指针变量操作数组的物理意义 例4. 4 简单类型的一维数组指针和指针变量。用和一维数组名相对 应的指针变量引用整型一维数组。输入5个整数,然后逆序输出 。 #include void main() int x5; int * p; printf(“n请输入5个整数,空格分隔,回车结束 n“); for ( p=x; p=x; p-) printf(“%d t“, *p); 例4. 5 一维结构体数组的指针和指针变量。使用指针引用一 维结构体数组元素,赋值,然后输出。 #include struct Student int id; char name10; float score2; ; void main() int i; Student Class14;/假设1班有4个学生 Student * p; /定义Student型指针变量p p=Class1; /让p指向数组的第0号元素 for (i=0; iid); printf(“n请输入第%d名学生的姓名:n“,i); scanf(“%s“, p-name); printf(“n请输入第%d名学生的两门成绩:n“,i); scanf(“%f“, scanf(“%f“, p+; /使p指向数组的下一号元素 p=Class1; /将指针重新指向数组的起始地址 for (i=0; iid, p-name, p- score0, p-score1); p+; /使p指向数组的下一号元素 1. 复习二维数组从一维数组的演化过程及 一维数组的指针和指针变量 二维数组ANY amn; 逻辑定义过程: (1) 定义一维数组 ANY am; (2) 一维数组a的每一个元素ai都嵌套一个长 度是n的ANY型一维数组ANY (ai)n 4.2.2 二维数组的各级指针 2. 分析一维数组ai。 ai是数组名,其值是数组的地址, ai printf(“n%x“, a); printf(“n%x“, a0); printf(“n%x“, printf(“n%x“, printf(“n“); 4.2.2 二维数组的各级指针 进一步讨论数组起始地址的数值和物理意 义 上面程序输出的四个16进制表示地址的 数是相同的。 但它们的物理意义不同。 4.2.2 二维数组的各级指针 但它们的物理意义不同。 a和 printf(“n%x“, a+2); printf(“n%x“, a2); printf(“n%x“, printf(“n%x“, printf(“n“); 6. 用二维数组名(二维数组指针常量)的各种形式, 操作二维数组 例4. 8 直接操作二维数组元素简单变量法 #include void main() int a34; int i,j; printf(“n请输入12个整数,空格分隔,回车结束:n“); for (i=0; i void main() int a34; int i,j; printf(“n请输入12个整数,空格分隔,回车结束:n“); for (i=0; i void main() int a34; int i,j; printf(“n请输入12个整数,空格分隔,回车结束:n“); for (i=0; i void main() int a34; /定义整型二维数组 int i,j; int * p; / 定义整型简单指针变量,用来指向二维数组元素 printf(“n请输入12个整数,空格分隔,回车结束:n“); for (p= p (*指针变量名)数组的列数; 如int (*p)4; 4.2.3操作二维数组的各种指针变量本质上是指 向简单变量和一维数组的指针变量 例4. 12用指向特定列数的一维数组的指针变量,操作列数 相同的一维和二维数组。 #include void main() int a34=1,2,3,4,5,6,7,8,9,10,11,12; int b4=-1, -2, -3, -4; /定义4列的一维数组 int (*pa)4,(*pb)4; /指向4列的一维数组的指针变 量 int i, j; pa=a; /或者pa= /pa指向二维数组的第0行 pb= /pb指向整个一维数组,而不是第0号元 素 for (i=0; i void main() int a334=-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 int b34=1,2,3,4,5,6,7,8,9,10,11,12; int (*pa)34;/定义指向3行4列二维数组的指针变量pa int (*pb)34;/定义指向3行4列二维数组的指针变量pb int i, j, k; pa=a;/pa指向三维数组a的第0面a0 pb=/pb指向整个二维数组b for (i=0; i void main() int a=5; int * p; int *pp; p= pp= printf(“na= %dt%dn”, *p, *pp); 4.3指向指针变量的指针量值二级指针 我们应该怎样理解输出语句中的*pp呢? 从赋值语句知道p= char name310; /定义字符型二维数组 char * p_name3; /定义长度3的字符型一维指针 数组 /*p_name0=name0; p_name1=name1; p_name2=name2; */ 4.3.1各种复合的二级指针及多级指针 for (i=0; i #include void main() int i; char name310; /定义字符型二维数组 char * p_name3; /定义长度3的字符型指针数组 char * p_p_name; /定义字符型二级指针变量 p_name0=name0; p_name1=name1; p_name2=name2; 4.3.1各种复合的二级指针及多级指针 printf(“n请输入三个姓名字符串,每个回车结束 :n“); for (p_p_name=p_name; p_p_name void main() int a34; /定义整型3行4列二维数组 int (*p)4; int *pmat4; /定义整型的长度4的一维指针数组 int *pp; /定义指向整型的二级指针变量 p=a; pp=a; /= : cannot convert from int 34 to int * pp=p; /= : cannot convert from int (*)4 to int * pp=pmat; p=pmat; /: cannot convert from int *4 to int (*)4 4.3.1各种复合的二级指针及多级指针 1.指针的同类集合指针数组与多级指针 从编译错误提示,可以理解二维数组名(a)及指 向长度确定的整个一维数组的指针变量(p)都具 有明确的行或列的数量含义。 而指针数组名(pmat)和二级指针变量(pp)没 有数量含义。 有数量含义的常量a可以给相等数量含义的变量p 赋值; 4.3.1各种复合的二级指针及多级指针 例4. 18多级指针变量、多级指针数组和二维数组的逻辑关系 #include void main() int a34=-1, -2, -3, -4, 0, 0, 0, 0 , 1, 2, 3, 4 ; int * p; /简单指针变量,可以指向简单变量或一维数组 int *pmat3; /一维指针数组 int *pp; /二级指针变量 int *ppmat3; /二级指针数组,数组的每个元素是二级指针变量 int *ppp; /三级指针变量 p=a0; /简单指针变量指向二维数组0行起始位置 pmat0=p; /一维指针数组0号元素指向简单指针变量p pp=pmat; /二级指针变量指向一维指针数组 /(也可以指向二维指针数组一行) ppmat0=pp; /二级指针数组0号元素指向二级指针变量pp ppp=ppmat; /三级指针变量指向一维二级指针数组 /(也可以指向二维二级指针数组一行) 4.3.1各种复合的二级指针及多级指针 4.3.1各种复合的二级指针及多级指针 指针常量和变量对应(赋值)关系的总结 各种量值: Any a; Any b4; Any c34; Any * p; Any (*pm)4; Any *pmat3; Any *pp; Any *ppmat3; Any *ppp; 正确的赋值关系: 1. p=p=b;p=p=*c; p=ci;p= 2. pm= pm=c; pm= /错 pm= 3. 在1中p出现的位置,pmati都可以 4. pp=pp=pmat; pp= 错pp=c;pp=pm; 5.在4中pp出现的位置,ppmati都可以 6.ppp= ppp=ppmat; ppp= char name10; float score2; ; /定义结构体类型Student struct handle Student *pStu; int *p_int; ; 指针的异类集合指针结构 体 void main() int a5=0,1,2,3,4; Student students3=110,“张红“,56,48,111,“孙 伟“, 77, 78, 112,“李亮“,98,100; handle p; int i; p.p_int=a; p.pStu=students; for (i=0;iid,(p.pStu+i)-name, (p.pStu+i)-score0,(p.pStu+i)- score1); 指针的异类集合类型的同类集合类型指针结构体数 组 例4. 20 指针结构体数组程序 #include struct Student int id; char name10; float score2; ; struct handle Student *pStu; int *p_int; ; void main() int a5=0,1,2,3,4; Student students3=110,“张红“,56,48,111,“孙 伟“,77,78, 112,“李亮“,98,100; handle p3; int i; p0.p_int=a; p0.pStu=students; for (i=0;iid,(p0.pStu+i)-name, (p0.pStu+i)-score0,(p0.pStu+i) -score1); 函数是由若干条语句构成,能够实现特定功能的 程序单位。 第4章 C/C+语言的纵向名词性扩充(2):函 数 5.1函数的构成 函数包含三部分内容:即函数的定义、函数的声 明和函数的调用。 函数的定义: 函数的调用: 函数的声明: 5.1.1函数的定义 函数定义的一般形式: 返回值类型标识符函数名(形式参数类型1 形式参数1,形式参数类型2形式参数2,. ) 函数体 示例: int max(int x, int y) int z; z=xy? x:y; return z; 5.1.2函数的声明和调用 例5. 1函数max及库函数printf的定义、声明和调用 #include /该文件中包含了printf函数的声明 void main()/C/C+程序开始的函数,它被操作系 统调用 int m; int max(int, int); /*函数声明,*/ m=max(4,6);/*函数调用,把返回值赋给m*/ printf(“The max integer is %d“, m); int max(int x, int y)/*函数定义*/ /函数体开始 int z; z=xy? x:y; return z ; /函数体结束,函数定义结束 5.1.3函数的参数和返回值 关于形参和实参的说明: 函数的返回值 5.2不同参数和不同返回值形式的各种函数 5.2.1无返回值函数 例5. 2 无返回值函数的定义、声明和调用 #include void main() int c=15; int d=25; void sum2(int x, int y);/* 无返回值,有参数函数声明*/ sum2(c,d );/*无返回值,有参数函数调用*/ void sum2(int x, int y)/*无返回值,有参数函数定义*/ int sum; sum=x+y; printf(“nc+d= %dn“,sum); 5.2.2 参数或返回值是异类集合量值的函数 例5. 3 用单独的函数实现对结构体变量的输入和输出 #include #include /因为调用字符串操作函数, typedef int Score3; /定义int3数组类型Score typedef char Name10; /定义char10数组类型 Name struct Student int id; Name name; Score score; ; /定义结构体类型Student 5.2.2 参数或返回值是异类集合量值的函数 例5. 3 用单独的函数实现对结构体变量的输入和输出 typedef Student StudentDef; StudentDef StuInput(); /结构体变量输入的函数声 明 void StuOutput(StudentDef TemStu); /输出函数声 明 void main() StudentDef LiLi; /定义结构体变量 LiLi=StuInput(); StuOutput(LiLi); StudentDef StuInput() /输入函数的定义 int i; StudentDef TemStu; printf(“n请输入整数编号,回车结束:“); scanf(“%d“, getchar(); /吃掉回车符 printf(“n请输入姓名字符串,回车结束“); gets(TemS); printf(“n请输入三门课的整数成绩,每门成绩以回车 结束n“); for (i=0; i void swap1(int a, int b) /参数是简单变量的函数 int c; c=a; /通过中间变量c交换a和b的值 a=b; b=c; 5.2.3 参数是简单指针量值的函数 void swap2(int* a, int * b) /参数是指针变量的函 数 int c; /通过中间变量c交换*a和*b的值 c=*a; *a=*b; *b=c; void swap3(int * a, int * b) /参数是指针变量的函 数 int * c; /通过中间指针变量c交换a和b的 值 c=a; a=b; b=c; void main() int x=2; int y=100; swap1(x, y);/以普通变量值为实际参数 ,调用形式参数是普通变量的函数 printf(“nswap1: x= %d, y= %d“, x, y); swap2( /以普通变量的地址为实际参数 ,调用形式参数是指针变量的函数 printf(“nswap2: x= %d, y= %d“, x, y); swap3( /以普通变量的地址为实际参数 ,调用形式参数是指针变量的函数 printf(“nswap3: x= %d, y= %dn“, x, y); 图5. 3函数swap1的量值交换过 程 图5. 4 函数swap2的量值交换过程 图5. 5 函数swap3的量值交换过程 5. 2.4异类集合类型的指针量值作为函数的参数或 返回值 例5. 5 用输入输出函数对结构体变量输入输出, 使用例5.4交换两个整型变量值的各种形式,交 换两个结构体变量的值。 #include #include typedef int Score3; typedef char Name10; struct Student /定义结构体类型 int id; Name name; Score score; ; typedef Student StudentDef; void StuInput(StudentDef *TemStu); /结构体变 量输入函数的声明 void StuOutput(StudentDef TemStu); /结构体变 量输出函数的声明 void swap1(StudentDef a, StudentDef b); /以结构 体变量为形式参数的交换函数声明 void swap2(StudentDef* a, StudentDef * b); /以结 构体指针变量为形式参数的交换函数/声明 void swap3(StudentDef * a, StudentDef * b); void main() StudentDef LiLi, WangHong; StuInput( /调用输入函数给结构体变量 LiLi输入 StuInput( puts(“输入的两人信息是:n“); StuOutput(LiLi); /输出结构体变量LiLi StuOutput(WangHong); /输出结构体变量 WangHong puts(“运行swap1(LiLi, WangHong)后,交换的 结果是:n“); swap1(LiLi, WangHong); /调用交换函数swap1 StuOutput(LiLi); /LiLi,检查是否被交换 puts(“运行swap2( swap2( StuOutput(LiLi); StuOutput(WangHong); /输出WangHong, puts(“运行swap3( swap3( StuOutput(LiLi); /输出LiLi,检查是否被交 换 StuOutput(WangHong); /输出WangHong,检 查是否被交换 void StuInput(StudentDef *TemStu) int i; printf(“n请输入整数编号,回车结束:“); scanf(“%d“, getchar(); printf(“n请输入姓名字符串,回车结束“); gets(TemStu-name); printf(“n请输入三门课的整数成绩,每门成绩 以回车结束n“); for (i=0; iscorei); getchar(); void StuOutput(StudentDef TemStu) printf(“n%d %s %d %d %dn“,TemStu.id, TemS, TemStu.score0, TemStu.score1, TemStu.score2); /*此处以下是和例5.4逻辑意义相同的三个交换两个 变量值函数,请参考例5.4*/ void swap1(StudentDef a, StudentDef b) StudentDef c; c=a; a=b; b=c; void swap2(StudentDef* a, StudentDef * b) StudentDef c; c=*a; *a=*b; *b=c; void swap3(StudentDef * a, StudentDef * b) StudentDef * c; c=a; a=b; b=c; 5.2.5函数的参数是和一维数组名对应的指针量值 例5. 6用独立函数对整型一维数组做输入、输出和 冒泡排序操作。 #include void ArrayInput(int *, int); /一维数组输 入函数的声明 void ArrayOutput(int *, int); /一维数组输 出函数的声明 void BubbleSort(int *, int); /一维数组冒 泡排序函数声明 void main()/主函数,程序运行入 口 int a5; ArrayInput(a, 5);/调用输入函数,为数组赋值 printf(“输入的整数顺序为:n“); ArrayOutput(a, 5); / 调用输出函数,显示输入 的值 BubbleSort(a,5);/调用排序函数对数组排序 printf(“排序后的整数为:n“); ArrayOutput(a, 5); /调用输出函数,显示排序后的值 void BubbleSort(int * p, int n) /一维整型数组冒泡排序函数定义 int i, j; int t; for (i=0; i*(p+j+1)/函数内,用指针变量 操作其指向的数组元素 t=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=t; void ArrayInput( int * p, int n) /一维整型数组 输入函数定义 int *tem; printf(“请输入 %d 个整数 :n“, n); for (tem=p; tem #define M 3 #define N 5 void ArrayInputTwoDem( int (*p)N); void ArrayOutputTwoDem(int (*p)N); void BubbleSortTwoDem(int (*p)N); void main() int aMN; /定义3行5列二维数组 printf(“n请输入 %d 个整数,空格分隔 n“, M*N); ArrayInputTwoDem(a); printf(“输入的整数为:n“); ArrayOutputTwoDem(a); BubbleSortTwoDem(a); printf(“分行排序后的二维数组为:n“); ArrayOutputTwoDem(a); void ArrayInputTwoDem( int (*p)N) /二维数 组输入函数定义 int i, j; for (i=0; i(*(*(p+i)+k+1) ) t=*(*(p+i)+k); *(*(p+i)+k)=*(*(p+i)+k+1); pik+1=t; 5.2.7返回值是指针量值的函数 例5. 8在一维结构体数组中查找某一姓名的人,返 回该人的地址 #include #include typedef int Score2; typedef char Name10; struct Student int id; Name name; Score score; ; void InputStudent(Student * p); void OutputStudent(Student * p); Student * FindName(Student * p, int n, char * name) ; void main() int j ; Student students3; Student *p; char tem10; for (j=0; jid); getchar(); printf(“n请输入姓名字符串,回车结束“); gets(p-name); printf(“n请输入两门课的整数成绩,每门成绩 以回车结束n“); for (i=0; iscorei); getchar(); void OutputStudent(Student *p) /结构体输出函数 printf(“n%d %s %d %d n“, p-id, p-name, p-score0, p-score1); Student * FindName(Student * p, int n, char *name) int i; for (i=0; iname, name) return p; else p+; return NULL; 5.3函数的多级调用 5.3.1 函数的嵌套调用 例5. 9用弦截法求方程x3-5x2+16x-80=0的根1。 #include #include float f(float x) float y; y=(x-5.0)*x+16.0)*x-80.0; return (y); float xpoint(float x1, float x2) float x; x=(x1*f(x2)-x2*f(x1)/(f(x2)-f(x1); return (x); float root(float x1, float x2) float x, y, y1; y1=f(x1); do x=xpoint(x1, x2); y=f(x); if (y*y10) y1=y; x1=x; else x2=x; while (fabs(y)=0.0001); return x; void main() float x1, x2, f1, f2, x; do printf(“请输入 x1, x2的值: n“); scanf(“%f %f“, f1=f(x1); f2=f(x2); while (f1*f2=0); x=root(x1, x2); printf(“方程的一个根是 %8.4f“, x); 5.3.2函数的递归调用 例5. 10用递归法求n!1。 #include float fac(int n) /定义递归形式的阶乘函数 float f; if (n int FindMax(int * p, int n) ; int FindMin(int * p, int n); int Find(int *p, int n); / 查找的框架函数 void main() int arry5=200, 4, 50, 1, 110; /定义一维整型数 组 int val; val=Find(arry, 5); /调用查找框架函数 printf(“要查找的值为: %dn“, val); int Find(int *p, int n) / 查找的框架函数定义 int tem; int (*find)(int *p, int n); puts(“请选择:1查找最大值;2查找最小值。“); scanf(“%d“, switch (tem) /将函数指针变量指向不同的查找函数 case 1: find=FindMax; /函数指针变量指向最大值查找函数 break; case 2: find=FindMin; /函数指针变量指向最小值查找函数 break; tem=find(p, n); /用函数指针变量调用它指向的函数 return tem; /返回查找到的值 int FindMax(int * p, int n) /数组中查找最大值 int i, max; max =*p+; for (i=1; i*p ) min=*p; p+; return min; 例5. 12用指向函数的指针变量做查找函数的形式参 数,通过传递不同的函数,实现一维数组内的最 大值或最小值查找 #include int FindMax(int * p, int n) ; / 在数组中查找最大 值 int FindMin(int * p, int n); / 在

温馨提示

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

评论

0/150

提交评论