第4章数组(C语言基础).ppt_第1页
第4章数组(C语言基础).ppt_第2页
第4章数组(C语言基础).ppt_第3页
第4章数组(C语言基础).ppt_第4页
第4章数组(C语言基础).ppt_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 数组,4.1 数组的引人 4.2 一维数组的定义和应用 4.3二维数组的定义和应用 4.4字符数组和字符串 4.5本章小结,1,4.1数组的引入,例4.1 现需要编写一个程序,实现对一个班级学习C语言的学生的成绩输入,然后分别统计优、良、中、及格和不及格五个等级的人数并计算高于平均成绩的人数,最后输出成绩清单。假如这个班级共有6名学生学习了C语言。,2,编程分析:,为了保存6名学生的C语言成绩,需要定义6个float型的变量,变量定义如下: float stud1,stud2,stud3,stud4, stud5,stud6; 接着为了输入这6个学生的成绩,编程如下: scanf(“%

2、d%d%d%d%d%d”, ,3,现在如何来统计优良中差各等级人数和计算平均成绩呢?我们必须针对每一名学生,都写一段程序来完成优良中差各等级的判定功能,先对stud1变量判定,编程思路如下: if(stud1 = 90.0)优秀人数+ ; else if(stud1 = 80.0) 良好人数+ ; else if(stud1 = 70.0)中等人数+ ; else if(stud1= 60.0) 及格人数+ ; else不及格人数+ ; 然后分别对stud2,stud3,stud4, stud5, stud6变量重复进行和上面相同的判定程序,显然程序代码将十分冗长而且容易出错。 特别是:当学生

3、人数发生变化,从6增加到80或者甚至增加到1000,我们需要怎样的耐心来写如此多的重复代码?!这肯定不是我们想要的编程方法,该怎么办呢? 请数组来帮忙。,4,4.2.1 一维数组的定义,定义: 类型标识符 数组名整型常量表达式; 所以针对例4.1编程需要,可以如下定义一个数组: float stud6; 以上定义表示:该数组名为stud,共包含了6个元素, 这6 个元素都是float型变量。如果需要处理100个学生的C语言的成绩,则定义如下: float s100; 说明: 类型标识符指明该数组中所有元素的数据类型,可以是char、int、float、double等基本的数据类型标识符。,5,

4、4.2.1 一维数组的定义(续1),2. 数组名命名规则和变量名命名规则相同,都遵循标识符命名规则。 3. 方括号中的数字指明了数组共含有多少个变量,也称数组的长度,所以必须是大于或等于1的整数,不能为浮点型的常量;其表现形式可以整型常量、符号常量或整型常量表达式,但不能含有变量的表达式。 例如:int m=8, xm; /* 数组的大小不能用变量的值指定 ,所以这是不合法的*/ #define NUMBER 80 float scoreNUMBER; /用符号常量 /* 数组的大小可用符合常量 ,所以这是合法的*/,6,4.2.1 一维数组的定义(续2),4.允许在同一数据类型的变量定义中,

5、定义多个变量和多个数组。 例如: int i , j , a5 , b10; 还可以按如下形式定义一维数组: float string2; int a5*2+10; 分析: 定义了一个名为string 的数组,因为字符常量2的ASCII值为50,所以string 数组共有50个元素 定义了一个名为a 的数组,共有20个元素,每个元素的类型是整型。,7,4.2.2 数组元素的名称,当定义好一个数组后,数组中的每个元素的名称分别是什么呢? C语言标准规定:当定义好一个数组后,可以通过数组名加元素下标的方式来使用数组元素,数组中的每个元素按照在内存中排列的顺序都有相应的编号即下标,数组中的元素编号从

6、0开始,依次为1、2、3直到“数组元素个数1”为止;下标用中括号括起来。因而数组元素的名称为: 数组名下标 注意:其中下标是一个整型表达式,可以是变量或常量表达式,这与数组定义时要求只能是常量不同,但必须保证下标值=0。,8,4.2.2 数组元素的名称举例,例如: int a5; 说明: a数组中的5个整型变量的名称分别为:a0 、a1 、 a2 、a3,a4, 这5个元素的 下标分别为:0、1、2、3 、4 注意:a 数组没有名为 a5 这样的元素! 数组a 有如下图所示的逻辑结构。,9,4.2.3数组在内存中的表示,一个基本类型的变量(如int、char或double类型的 变量)在计算机

7、内存中是如何表示? 计算机内存是计算机用于存储程序和数据的,内存按照各字节的排列顺序依次编号(一个字节包含8位二进制数),每一个字节的编号即为其内存地址。如下定义一个double类型的变量: double d; 由于double类型的变量长度是64位,变量d需要在内存占用8个字节,且在内存中这8个字节是相邻的,所以变量d共包含8个内存地址。我们规定:当说到“一个变量的地址”时,是指该变量所占用的第一个字节的地址;可以用取地址运算符 说明:该数组共有4个类型为double的变量;根据数组f的定义,计算机会分配可容纳数组f所有元素的相邻的连续内存空间:即共48个字节,并把变量f0的地址作为整个数组

8、的首地址,而数组名f中存放了数组的首地址。 所以下面两个printf语句输出相同的结果。 printf(“%f”, ,11,4.2.3数组在内存中的表示(续2),该数组的内存排列示意图见下图:,12,4.2.4 访问数组元素,数组定义好后,当需要给数组元素输入数据,则应当逐个访问一个个元素。例如: void main() float stud6; /数组定义 scanf(“%f”, 上面程序也可用如下代码来实现:,13,4.2.4 访问数组元素(续),void main() float stud6; /数组定义 int i; for(i=0;i6;i+) scanf(“%f”, 对比上面两个完

9、成同样功能的程序,可以清楚地看到: 当把循环用于数组时可大大简化程序的编写。,14,4.2.5 数组的初始化,C语言标准规定,在数组定义的同时对数组元素赋值,称之为数组初始化,其格式如下: 类型标识符 数组名整型常量表达式 = 表达式1,表达式n; (1)定义数组时对数组的全部元素赋初值 例:int a4=1,2,3,4; 和 int a4; a0=1; a1=2; a2=3; a3=4;效果一样 (2) 只给数组的前面一部分元素设定初值 例:int e5 = 0, 1, 2; 即:e0=0; e1=1; e2=2; e3=0; e4=0;,15,4.2 .5 一维数组初始化(续1),说明:

10、当数组前n个元素被设定了初值,未明确设定初值的元素自动被设定为0。 当定义数组时,如未对它的任何元素指定过初值,则它的元素的值是不确定的。 (3) 当对一维数组的全部元素都明确设定初值时,可以不指定一维数组元素的个数。 例如: int g = 5, 6, 7, 8, 9 ; 说明:由花括号内的初值个数确定数组的元素个数,16,4.2.5 数组初始化常见错误分析, 数组初始化时初始值个数不能大于元素个数 例如:int a3=1,2,3,4; 系统报告错误如下:初始化的值太多。 不能直接给数组名赋值,因为数组名是一个地址常量 例如:int b3;b=1,2,3; 系统报告错误如下:赋值运算符的左边

11、不能是常量,17,4.2.5 数组初始化常见错误分析(续), 如果要给一个数组中的全部元素初始化为0,不可以写成:int a5=0*5; “初值列表”的方式只限于数组的初始化,不能出现在赋值语句中 例如:int c4; c4=1,2,3,4; /错误 两个数组不能直接进行赋值运算,但数组元素可以 例如: int a4=5,6,7,8; int b4;b=a;/错误 如果希望将 a数组中的数据送给b数组,可以使用 如下代码: for(i=0;i4;i+) bi=ai;,18,例4.2 输入5个整数,编程求出其中最大和最小的整数并输出 编程步骤分析: 1.先定义有 5 个元素的数组iArr, 然后

12、用for循环输入5个整数 2. 处理: (a) 给变量max和min赋初值:max=min= iArr 0 (b) 依次用iArri(下标i依次取值为1、2、3、4) 和max,min比较: 若maxiArri,令min=iArri; 3. 输出:max和min,19,4.2.6 数组应用举例,举例分析: 1.假设数组iArr 中的5个元素分别是: 467-1214599 2.给变量max和min赋初值,使max和min 的初值同为4; 第一次用元素iArr1 的值67 分别和max、min 比较大小,因为67max, 所以max 的值变为67,min 的值不变; 第二次用元素iArr2 的值

13、-12 分别和max、min 比较大小,因为-12min,所以min 的值变为 12,而max 的值不变; 依次进行第三次和第四次比较,最后得出:max 的值为145,min 的值为-12。 3.用输出函数printf 输出:max和min,20,数组应用举例1,程序代码: #include #define SIZE 5 void main() int iArr SIZE,max, min; int i; printf(Enter 5 integers:n); for(i=0;iiArri) min=iArri; printf(Maximum value is: %dn,max); print

14、f(Minimum value is: %dn,min); ,21,数组应用举例1,例4.3 用选择排序,对6 个整数按由小到大进行排序 思路分析: 选择排序的思想是:第一次从数组的6个元素中寻找最大数及其下标,然后将此数与其下标为5的元素进行交换;如果求出的最大数正好是下标为5的元素,可以不进行交换。第二次在下标为0、1、2、3、4 这五个元素中寻找最大的元素及其下标,并把该次找到的最大数和其下标为4 的元素进行交换;类似进行第三次、第四次和第五次查找和交换过程,最终实现将6 个整数按照由小到大进行排序。可以借鉴刚才求最大数的代码,来完成选择排序算法。,22,数组应用举例2,举例: 若有六个

15、整数: 49 38 65 97 2 13 算法过程如下: 第一次,从所有6个整数中找出最大数97及其下标值为3,将此数与其下标为5的元素13进行交换(排好序的元素放在小括号内);变化过程如下: 第一次排序开始前: 49 38 65 97 2 13 第一次排序结束后: 49 38 65 13 2 (97) 第二次,从剩下的5个数中找出最大数及其下标,将此数与其下标为4的元素交换,变化过程如下: 第二次排序开始前: 49 38 65 13 2 (97) 第二次排序结束后: 49 38 2 13 (65 97),23,数组应用举例2,交换,交换,依次下去,直到只剩2个数时,将大数与其下标为1的元素交

16、换,即完成排序。 最后排序结果:(2 13 38 49 65 97) 显然,编程需要两重循环来完成此算法,外部循环控制剩下的数,内部循环实现从剩下的数中找出最大数及其下标,24,数组应用举例2,25,数组应用举例2代码,#define NUMBER 6 void main() int iArrNUMBER; int iMax; int ind_Max; int i,j,temp; for(i=0;i= 0;i-) iMax = iArri;ind_Max = i; for(j=0;ji;j+) if(iMax iArrj) iMax = iArrj;ind_Max = j; if(ind_Ma

17、x != i) /条件成立则需要交换 temp = iArri; iArri = iArrind_Max;iArrind_Max = temp; for(i = 0;iNUMBER;i+) printf(%dt,iArri); ,例4.4 用数组求Fibonacci数列前20个数,#include void main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%5=0) printf(n); printf(%12d,fi); ,例 用冒泡法对10个数排序,排序过程: (1)比较第一个数与第二个

18、数,若为逆序a0a1,则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束,有n个数,要进行(n-1)轮比较,第i轮比较(n-i)次,8 5 5 5 5,5 8 6 6 6,6 6 8 3 3,3 3 3 8 2,2 2 2 2 8,第 二 轮,9 8 8 8 8 8,8 9 5 5 5 5,5 5 9 6 6 6,6 6 6 9 3 3,3 3 3 3 9 2,2 2 2 2

19、 2 9,第 一 轮,#include void main() int a11,i,j,t; printf(Input 10 numbers:n); for(i=1;iai+1) t=ai; ai=ai+1; ai+1=t; printf(The sorted numbers:n); for(i=1;i11;i+) printf(%d ,ai); ,#include void main() int i,j,a10,temp; for(i=0;iai+1) temp=ai;ai=ai+1;ai+1=temp; for(i=0;i10;i+) printf(%dt,ai); ,数组的基本概念总结,

20、在语言中,数组类型是这样一种数据结构: 数组中每个元素的数据类型相同,每个元素对应一个序号(称为下标),各元素按下标存取 数组元素的存储顺序与其下标对应,数组元素的下标从0开始顺序编号。 数组元素是变量,其值是可以变化的。数组元素和相同类型的独立变量同等语法地位,只是变量名的格式不同。 使用数组元素所需的下标个数由数组的维数决定,数组有一维数组、二维数组或多维数组之分。,31,例4.5 某气象部门收集了该地区2006年到2010年各月的降水量数据,请编写程序,求年均降水量,以及5年来每一个月的平均降水量。 分析: 我们刚学过一维数组,一个自然的方法,可以定义五个一维数组,每个一维数组的元素个数

21、为12,用来分别存放5年中各个月份的降水量,接着,通过输入函数输入五年的各月降水量,最后,处理数组求出年均降水量和月均降水量。,32,4.3.1 二维数组的引入,#define MONTHS 12 #define YEARS 5 void main() float a1MONTHS,a2MONTHS,a3MONTHS, a4MONTHS,a5MONTHS; float total=0,rain; int i; /依次输入五年的各月降水量 for (i=0;i MONTHS;i+) scanf(%f%f%f%f%f, ,分析: 随着年份数量的增加,定义一维数组的个数也增加,所以会很繁琐,不可取。

22、如果我们将5年共60个月的数据全部放在一个一维数组中,虽然数组个数减少了,但程序逻辑却变得很复杂,也不可取。 联想到数学中的矩阵,如果能够将数据存放在类似矩阵的变量中,就可以很好地解决此问题。为了方便解决如例4.5等的实际问题,C语言中提供二维数组,34,例4.5程序分析,二维数组的定义格式为: 数据类型标识符 数组名整型常量表达式1 整型常量表达式2; 说明: 1.数据类型标识符、数组名和一维数组定义格式中的要求一样,其中的常量表达式由一个增加到2个,但整型常量表达式的取值要求不变,仍要求是正整数的常量表达式,其表现形式可以是整型常量、符号常量或整型常量表达式,但不能是变量或变量表达式 例如

23、: int aa2*3;,35,4.3.2 二维数组的定义,2.一维数组中的每个元素按照在内存中排列的顺序都有自己的编号即下标。数组中的元素编号从0开始,依次为1、2、3直到“数组元素个数1”为止。而二维数组要确定与矩阵对照,整型常量表达式1的值相当于矩阵的行数,整型常量表达式2的值相当于矩阵的列数,二维数组的元素个数= 整型常量表达式1的值*整型常量表达式2的值。 所以针对针对例4.5,可以定义如下的二维数组: float fRain512; 其中的第一维5代表年份,第二维12代表月份,fRain即为一个包含 5*12个元素的二维数组。,36,4.3.2 二维数组的定义(续),在学习二维数组

24、初始化之前,首先应当了解二维数组元素在内存中的存放顺序。 为了形象起见,我们把二维数组看作是一个矩阵,于是用int iMatrix34;定义的二维数组iMatrix相当于一个3行4列的矩阵,用矩阵表示如下: 其中iMatrix的第一维相当于矩阵的行,第二维相当于矩阵的列,后面,为简化起见,简称为iMatrix的行和列。,37,4.3.3 二维数组的初始化,在C语言中,二维数组元素是按行存放的,即在内存中,首先存放第0行,然后依次存放第1行,第2行 ,到最后一行。 二维数组iMatrix的内存排列参右图,38,4.3.3 二维数组的初始化(续1),iMatrix数组,元素名,针对二维数组的特点,

25、C语言规定了两种不同的二维数组初始化方法。 1、分行初始化 其格式为: 数据类型标识符 数组名常量表达式1 常量表达式2 = 第0行初始值,第1行初始值, ; 注意: 其中数据的行数不能大于常量表达式1的值,每一行数据的个数不能大于常量表达式2的值,否则出现编译错误。 初始化的常见形式: int a23=1,2,3,4,5,6; int b32=1,2,4 ; int c2=1,2,4 ;,39,4.3.3 二维数组的初始化(续2),2、按照元素在内存中的存放顺序初始化 其格式为: 数据类型标识符 数组名常量表达式1 常量表达式2 = 所有初始化的数据; 注意: 数据的个数不能多于数组元素的个

26、数,否则出现编译错误 说明: 与分行初始化不同,按照数组元素在内存中的存放顺序,将初始化的数据依次赋给数组元素。同样,这种初始化格式也允许部分初始化,即允许初始化数据的个数比元素个数少。,40,4.3.3 二维数组的初始化(续3),初始化的常见形式: int a123=1,2,3,4,5,6; /全部元素初始化 int a232= 1,2,4;/部分元素初始化 该数组的内存排列和图4.5 的b 数组一样 int a32= 1,2, 4 /不指定数组的行数 根据初始化数据可以得知:有两行,因而可以省略行数。该数组的内存排列和图4.6的 c 数组一样。,41,4.3.3 二维数组的初始化(续4),

27、关于省略问题: 当一维数组初始化时,若元素个数与初始化数据个数相同时,可以省略指定元素个数。 当二维数组初始化时,由于根据初始化数据可以确切知道行数,可以不指定数组的行数即省略行数,但列数不可省略。 两种初始化形式的比较: 当数组的行和列很多时,按照元素在内存中的存放顺序初始化容易出错,而分行初始化简单直观,提倡使用分行初始化方法。,42,4.3.3 二维数组的初始化(续5),43,4.3.4 二维数组的使用,当我们定义好二维数组后,同样,也存在着如何使用二维数组元素的问题。与一维数组类似,也是通过数组名加元素下标的方式来使用数组元素,由于是二维数组,因而元素下标有两个,对应于该元素在二维数组

28、的行号和列号,和一维数组下标的编号一样均从0开始到“该数组元素个数1”,所以二维数组元素的使用格式为: 数组名下标1下标2 和一维数组的使用格式一样,其中两个下标都是一个整型表达式,可以是变量或常量表达式,这与数组定义时要求只能是常量不同,但必须保证下标值=0。,44,4.3.5 二维数组的应用举例(1),例4.6 用二维数组编程解决 例4.5 的问题。 根据前面的分析,定义一个二维数组fRain,它的行代表年,列代表月 程序代码: #include #define MONTHS 12 / 每一年的月数#define YEARS 5 / 年数,45,/主函数代码 void main(void)

29、 float fRainYEARSMONTHS; int year, month; float subtot, total; for (year = 0; year YEARS; year+) for (month = 0; month MONTHS; month+) scanf(%f , ,46,4.3.5 二维数组的应用举例(2),例4.7 试用二维数组实现两个2行3列整数矩阵相加 分析: 根据前面的学习,可以用两个2行3列的二维数组来表示两个2行3列的矩阵,根据矩阵相加的含义, 设两个矩阵为 和 ,其和为 则: 其中i=1,2,j=1,2,3; 用两个二维数组iMatrixA和iMatr

30、ixB分别表示矩阵A和B,用一个二维数组iMatrixC表示它们的和,根据相加的含义,有: iMatrixCij = iMatrixAij + iMatrixBij, i=1,2,j=1,2,3。,47,应用举例(2)代码,#include #define ROWS 2 #define COLS 3 void main() int iMatrixAROWSCOLS;/* 定义矩阵A */ int iMatrixBROWSCOLS;/* 定义矩阵B */ int iMatrixCROWSCOLS;/* 定义矩阵C */ int i,j;printf(Please input matrix A:n

31、);/输入矩阵A元素的值 for(i = 0;i ROWS;i+) for(j = 0;j COLS;j+) scanf(%d, ,【例1】逐行输入输出二维数组元素,#include void main() int a34, i, j; /* 假设数组 a 有3行4列 */ for(i = 0; i 3; i+) /* 二维数组的元素逐行输入 */ for(j = 0; j 4; j+) /* 每行逐列输入 */ printf(Enter a%d%d , i, j); scanf(%d, /* 一行元素输出后换行 */ ,48,程序举例补充,49,程序举例补充,例2 将二维数组行列元素互换,存

32、到另一个数组中,void main() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for(i=0;i=1;i+) for(j=0;j=2;j+) printf(%5d,aij); bji=aij; printf(n); ,50,例 3求二维数组中的最大值及其行列号,void main() int a34; int i,j,row=0,colum=0,max; for(i=0;imax) max=aij; row=i,colum=j; printf(max=%d,row=%d, colum=%dn,max,row,colum); ,

33、除了一维和二维数组,C语言还可以定义三维、四维等多维数组,其定义格式为: 数据类型标识符 数组名常量表达式1 常量表达式2常量表达式n; 其中n=3。 例 下列语句定义了两个多维数组 int iCube342; float fQuart2234; 第一个语句定义了一个3*4*2的三维整型数组,第二个语句定义了一个2*2*3*4的四维浮点型数组。 由于四维以上的数组结构复杂,很少使用。三维数组的使用和初始化与二维类似。,51,4.3.6 多维数组,4.4 字符数组和字符串,4.4.1 字符数组的概念 当使用数据类型char定义数组时,即定义了 字符数组。所以,前面介绍的数组的定义格式、 使用方式

34、也都适用于字符数组。 例如: char str5; 表示: 数组str有5个元素,每个元素能存放一个字符,整个数组最多可存放5个字符。 归纳字符数组的定义格式如下: char 数组名整型常量表达式;,52,4.4.2 字符数组的初始化,53,字符数组初始化时有两种形式: 1. 类似4.2.5 中介绍的初始化方法 ,用数组定义指定的类型:字符型常量初始化数组。 (1) 定义数组时对数组的全部元素赋初值 例如: char str13= a,1,b; 相当于:char str13; str10= a; str11= 1; str12= b; 注意:整型常量 1 和字符型常量 1 可以只给部分数组元素

35、赋初值 例如:char str24= 97,8; 相当于:char str24; str20= a; str21= 8; str22= 0;str23= 0 /因为a的ASCII值是97 给全部数组元素赋初值时,可以不指定数组元素的个数 例如: char str3=i, A, B; 相当于:char str33; str20= i; str31= A;str32= B 系统根据花括号中初值个数确定数组元素个数为3。这种方式可以方便编程人员修改元素个数。,4.4.2 字符数组的初始化(续1),54,2. 用字符串常量初始化字符数组。 char string15 = Good; 相当于:char

36、string15; string10= G; string11= o; string12= o;string13= d; string14= 0 char string25 = “Good”;/花括号可以省略 char p = “Good”; 相当于:char p5; p0= G; p1= o; p2= o;p3= d; p4= 0 数组p 的元素个数即数组长度是5 char q = G, o, o, d; 数组q 的元素个数是4 对照分析:当用字符串常量初始化字符数组,系统自动会在字符串常量的最后加上一个字符串结束标志 0,所以数组长度=4+1;而用单个字符常量初始化字符数组时,系统不加字符

37、 0,所以数组长度=4,但这种方式因为没有字符结束标记,所以会给程序留下隐患,不可取。,4.4.2 字符数组的初始化(续2),55,关于二维字符数组的初始化 和4.3.3 介绍的相同,也有两种初始化方法: 分行初始化 按照元素在内存中的存放顺序初始化 和一维字符数组一样初始化时有两种初值形式: 字符型常量初始化数组。 用字符串常量初始化字符数组。 例如: char str1210= W,o,r,k,h,a,r,d; char str2210= W,o,r,k,h,a,r,d; char str3210= “Work”,“hard”;,3、字符串结束标志 当使用一个字符数组时,定义的数组长度常常会大于实际存放的字符数,此时没有办法确定实际的字符数,为此,C语言中有一个约定

温馨提示

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

评论

0/150

提交评论