C语言程序设计实例教程(慕课版)(第3版)课件 常中华 第6、7章 循环结构程序设计、数组与字符串_第1页
C语言程序设计实例教程(慕课版)(第3版)课件 常中华 第6、7章 循环结构程序设计、数组与字符串_第2页
C语言程序设计实例教程(慕课版)(第3版)课件 常中华 第6、7章 循环结构程序设计、数组与字符串_第3页
C语言程序设计实例教程(慕课版)(第3版)课件 常中华 第6、7章 循环结构程序设计、数组与字符串_第4页
C语言程序设计实例教程(慕课版)(第3版)课件 常中华 第6、7章 循环结构程序设计、数组与字符串_第5页
已阅读5页,还剩117页未读 继续免费阅读

下载本文档

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

文档简介

第6单元

数组摘要6.1一维数组6.1.1一维数组的定义6.1.2一维数组的初始化6.1.3一维数组元素的引用6.2二维数组6.2.1二维数组的定义6.2.2二维数组的初始化6.2.3二维数组元素的引用6.3字符数组与字符串6.3.1字符数组的定义及初始化6.3.2字符串及其处理函数实例分析与实现6.1一维数组6.1.1一维数组的定义一维数组学生成绩管理系统30个学生成绩?300个学生成绩?3000个学生成绩呢?一维数组为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。一维数组一维数组定义的一般形式为:

类型说明符

数组名[常量表达式];类型说明符是任一种基本数据类型或构造数据类型数组名是用户定义的数组标识符常量表达式表示数据元素的个数,也称为数组的长度例如:inta[10];/*整型数组a,有10个元素*/floatb[10],c[20];/*实型数组b,有10个元素,实型数组c,有20个元素*/charch[20];/*字符数组ch,有20个元素*/一维数组对于数组类型说明应注意以下几点:①数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。②数组名的书写规则应符合标识符的命名规范。③数组名不能与其它变量名相同。④方括号中常量表达式表示数组元素的个数,其下标从0开始计算。例如:inta[5];

整型数组a,有5个元素,分别是a[0],a[1],a[2],a[3],a[4]

一维数组对于数组类型说明应注意以下几点:⑤不能在方括号中用变量来表示元素的个数,但是可以用符号常量或常量表达式。例如:#defineFD5intmain(){inta[3+2],b[7+FD];……}//这是合法的例如:#include<stdio.h>intmain(){intn=5;inta[n];……}//这是错误的一维数组对于数组类型说明应注意以下几点:⑥C编译系统为数组分配连续的存储空间,数组名代表数组在内存中存放的首地址。例如:整型数组a[10],其存储情况如下图所示,每个存储单元占4字节。

数组元素a[0]a[1]a[2]a[3]…a[8]a[9]a存储区15161718…2324a6.1一维数组6.1.2一维数组的初始化一维数组数组可以在定义时初始化。初始化赋值的一般形式为:类型说明符

数组名[常量表达式]={值,值,……值};例如:inta[10]={0,1,2,3,4,5,6,7,8,9};

相当于a[0]=0;a[1]=1;...a[9]=9;一维数组

C语言对数组的初始化赋值还有以下几点规定:①可以只给部分元素赋初值。当{}中值的个数少于元素个数时,只给前面部分元素赋值。例如:inta[10]={0,1,2,3,4};表示只给a[0]~a[4]这5个元素赋值,而后5个元素自动赋0值一维数组

C语言对数组的初始化赋值还有以下几点规定:②只能给元素逐个赋值,不能给数组整体赋值。例如:给十个元素全部赋1值,只能写为:inta[10]={1,1,1,1,1,1,1,1,1,1};

而不能写为:inta[10]=1;6.1一维数组6.1.3一维数组元素的引用一维数组数组元素的一般表示形式为:

数组名[下标]

其中,下标只能为整型常量或整型表达式。例如:a[5]、a[i+j]、a[i++]都是合法的数组元素。一维数组在C语言中只能逐个地使用下标变量,而不能一次引用整个数组。例如:输出有10个元素的数组必须使用循环语句逐个输出各下标变量:for(i=0;i<10;i++)printf("%d",a[i]);一维数组【例6.2】用数组来处理求Fibonacci数列问题。

可以发现,除了第1、2项,从第3项开始,每一项都是前面两项之和。将fibonacci数列的前N项依次放入数组之中,用循环语句从第3项开始求解。一维数组【例6.3】某位同学一学期有10门课,根据每门课程的得分情况,试查找出其最高分和最低分。分析:

变量max表示最高分和min表示最低分,先假定最高分和最低分均为a[0],然后利用for循环随着i的变化依次访问a[1]~a[9],在此过程中,让max和min与每一个分数a[i]进行比较,最终得到所有分数的最高分和最低分。冒泡排序【例6.4】用冒泡法对10个整数进行由小到大排序。

分析:

冒泡排序法是对相邻的两个数进行比较。以5个数为例说明排序过程。设inta[5]={10,7,4,5,8};

则排序过程如下:a[0]10a[1]7a[2]4a[3]5a[4]8第一次710458745

10874

1058745

8

10

第二次第三次第四次结果第一轮比较冒泡排序【例6.5】用冒泡法对10个整数进行由小到大排序。

分析:

冒泡排序法是对相邻的两个数进行比较。以5个数为例说明排序过程。设inta[5]={10,7,4,5,8};

则排序过程如下:a[0]7a[1]4a[2]5a[3]8第一次47584578

45

7

8

第二次第三次结果第二轮比较冒泡排序6.2二维数组6.2.1二维数组的定义二维数组二维数组定义的一般形式是:类型说明符

数组名[常量表达式1][常量表达式2]表示第1维下标的长度表示第2维下标的长度按行存储数组名代表首地址二维数组例如:inta[3][3];

定义了一个三行三列的数组,所包含的数组元素及其存储情况如下所示:a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[0]行a[1]行a[2]行6.2二维数组6.2.2二维数组的初始化二维数组二维数组初始化也是在类型说明时给各下标变量赋以初值,以数组元素的存储顺序为依据。二维数组可按行分段赋值,也可按行连续赋值。a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]807592616571596370a[0]行a[1]行a[2]行例如:inta[3][3];按行分段赋值:

inta[3][3]={{80,75,92},{61,65,71},{59,63,70}};按行连续赋值:inta[3][3]={80,75,92,61,65,71,59,63,70};二维数组【例6.5】输出二维数组矩阵。#include<stdio.h>intmain(){inti,j;inta[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};for(i=0;i<5;i++){for(j=0;j<3;j++) printf("%d",a[i][j]);printf("\n");}return0;}二维数组二维数组同样也可以对部分元素赋初值,未赋初值的元素自动取0值。a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]100200300a[0]行a[1]行a[2]行例如:inta[3][3]={{1},{2},{3}};赋值后各元素值:二维数组若对二维数组中全部元素赋初值,则第一维的长度可以省略。例如:inta[3][3]={1,2,3,4,5,6,7,8,9};可写为:inta[][3]={1,2,3,4,5,6,7,8,9};6.2二维数组6.2.3二维数组元素的引用二维数组二维数组元素的表示形式:数组名[下标][下标]

下标应为整型常量或整型表达式

二维数组元素的访问涉及第1维和第2维两个下标,所以对二维数组的操作通常和二重循环结合。二维数组

【例6.6】求二维数组(5行5列)中最大元素值及其行列号。分析:

5行5列的矩阵共有25个数据,可以定义一个5行5列的二维数组来存放这些数据,并定义数组中的第一个元素为最大值,然后利用循环语句,让第一个元素与后面的元素进行比较,如果有更大者,便赋值给最大值,同时记录下最大值的行号和列号。二维数组【例6.7】一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。

张王李赵周Math8061598576C7565638777Foxpro9271709085二维数组【例6.7】一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩(结果保留2位小数)。分析:

可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量average为全组各科总平均成绩。通过循环来接收用户输入的成绩,放入数组a中,同时统计各科总成绩。每接收完一科成绩,计算出单科平均成绩,存入数组v中。最后通过计算数组v中的平均值得到全科的平均成绩。6.3字符数组与字符串6.3.1字符数组的定义及初始化字符数组例如:charc[10];/*定义一个包含10个字符的数组*/

字符数组也可以是二维或多维数组。例如:charc[5][10];/*定义一个5行10列的字符数组*/字符数组也是数组,只是数组元素的类型为字符型。所以字符数组的定义、初始化,字符数组元素的引用与一般的数组类似。字符数组例如:charc[10]={'c','','p','r','o','g','r','a','m'};字符数组也允许在定义时作初始化赋值。当对全体元素赋初值时也可以省去长度说明。例如:charc[]={'c','','p','r','o','g','r','a','m'};字符数组【例6.8】输出字符数组中各元素的值。#include<stdio.h>intmain(){inti,j;chara[][5]={{'C','H','I','N','A',},{'B','a','s','i','c'}};

for(i=0;i<=1;i++){for(j=0;j<=4;j++)printf("%c",a[i][j]);printf("\n");}return0;}字符数组【例6.9】我国自古以来是一个多民族国家。中华人民共和国成立后,经中央人民政府调查与统计正式确认的民族共有56个。汉族是我国的主体民族,约占全国人口总数的91.11%,其他还有55个民族,约占8.89%。汉族和55个少数民族共同组成伟大的中华民族。我国,是一个以汉族为主体、56个民族共同组成的统一的多民族国家。请编程输出我国56个民族名称。分析:定义一个字符数组用来存放民族名称,应用循环结构输出字符数组中各元素的值。6.3字符数组与字符串6.3.2字符串及其处理函数字符串例如:charc[]={'c','','p','r','o','g','r','a','m'};可写为:

charc[]={"Cprogram"};或:charc[]="Cprogram";C语言允许用字符串的方式对数组作初始化赋值。用字符串方式赋值比用字符逐个赋值要多占一个字节,用于存放字符串结束标志'\0'字符串#include<stdio.h>intmain(){charc[]="CHINA\nhello";printf("%s\n",c);return0;}#include<stdio.h>intmain(){charst[15];printf("inputstring:\n");scanf("%s",st);printf("%s\n",st);return0;}在采用字符串方式后,可用printf函数和scanf函数一次性输出输入一个字符数组中的字符串当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为字符串的结束符。字符串处理函数用于输入输出的字符串函数,在使用前应包含头文件"stdio.h",使用其它字符串函数则应包含头文件"string.h"库函数的优点准确性可移植性高效性字符串处理函数功能:把字符数组中的字符串输出到显示器,直到遇到“字符串”结束标志。

字符串输出函数puts(字符数组名);字符串处理函数功能:从标准输入设备键盘上输入一个字符串。本函数得到一个函数值,即为该字符数组的首地址。

字符串输入函数gets(字符数组名);字符串处理函数【小提示】用puts和gets函数只能输出或输入一个字符串,不能写成puts(str1,str2)或gets(str1,str2)字符串处理函数功能:把字符数组2中的字符串连接到字符数组1中字符串的后面,结果放在字符数组1中,并删去字符串1后的串标志“\0”字符串连接函数strcat(字符数组名1,字符数组名2)【例6.15】根据用户输入的姓名x,输出“Mynameisx”。字符串处理函数功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“\0”也一同拷贝。字符串拷贝函数

strcpy(字符数组名1,字符数组名2)字符串处理函数在使用strcpy函数时应注意以下几点:①字符数组1必须定义得足够大,以便容纳被复制的字符串②字符数组1必须写成数组名形式,字符串2可以是字符数组名,也可以是一个字符串常量。③如果在复制前未对字符数组赋值,则字符数组1各字节中的内容是无法预知的,复制时将字符数组2中的字符串和其后的'\0'一起复制到字符数组1中,取代字符数组1中的字符。字符串处理函数功能:测字符串的实际长度(不含字符串结束标志‘\0’)并作为函数返回值测字符串长度函数

strlen(字符数组名)字符串处理函数功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果字符串比较函数

strcmp(字符数组名1,字符数组名2)函数返回的结果值为:(1)字符串1=字符串2,返回值=0(2)字符串1>字符串2,返回值>0(3)字符串1<字符串2,返回值<0字符串处理函数【例6.20】为了保证信息的安全,大多数系统都含有用户登录模块。只有输入正确的用户名和密码之后才能进行相应的操作。编写程序实现用户登录功能。字符串处理函数

分析:要想成功登录,输入的密码和原密码要一致,也就是说,两个字符串要进行比较,这里就用到了我们的字符串比较函数strcmp();通过定义字符数组,可用于存放原密码及用户输入的密码;若输入密码不正确,可再进行尝试,这里考虑通过循环来实现多次尝试输入;若输入密码正确,则提示登录成功,循环结束。字符串处理函数程序流程图:实例分析与实现实例分析与实现1、把一个整数按大小顺序插入已排好序的数组中。分析:为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大进行的。设排序是从大到小进行的,则可把欲插入的数与数组中各数逐个比较,当找到第一个比插入数小的元素i时,该元素之前即为插入位置。然后从数组最后一个元素到元素i,逐个后移一个单元。最后把插入数赋予元素i即可。如果被插入数值比所有的元素值都小,则插入最后位置。实例分析与实现2、《孔子家语》中有一则名言“言必诚信,行必忠正”。诚信是一个人的立身之本,也是一个集体、一个民族、一个国家的生存之基。现编程实现输入社会主义核心价值观24字,并输出。分析:社会主义核心价值观分别从国家、社会、公民3个层面,引领人们的思想,凝聚力量,激励我们为实现中国梦而不懈奋斗。因此,可定义一个3行18列的二维数组来存储输入信息。Thechapterisover!第7单元

函数摘要

7.1函数定义7.2函数调用7.2.1函数调用的形式7.2.2参数的传递方式7.2.3函数的返回值7.2.4函数的参数类型7.3函数的嵌套调用7.4函数的递归调用7.5函数的声明7.6变量的作用域和存储类别7.6.1变量的作用域7.6.2变量的存储类别问题1:如何定义函数?问题2:如何调用函数7.1函数定义7.1函数定义库函数格式化输入、输出函数printf()scanf()字符串连接函数strcat(str1,str2)求字符串长度函数strlen(str)用户自定义函数函数名字函数参数函数返回值函数功能返回值类型

函数名([形式参数列表]){

函数体}7.1函数定义返回值类型:指定函数返回值的数据类型。如果函数没有返回值,则为void。函数名:指定函数的名称,是用户自定义的标识符。形式参数列表:参数是调用函数时传入的数据,函数定义时需要指定函数参数的名称和数据类型。函数体:大括号“{}”括起来的部分,用于实现该函数的功能,是C语言语句7.1函数定义【例】定义一个函数,实现两个整数的求和运算。voidadd(intx,inty){ intresult; result=x+y; printf("%d",result);}voidadd(){ intx,y,result; scanf("%d%d",&x,&y); result=x+y; printf("%d",result);}有返回值函数无返回值函数有参函数无参函数7.1函数定义7.1函数定义函数时构成C程序的基本单位一个源程序文件可以有多个函数一个源程序文件只能有一个main函数,而且必须有一个main函数C99标准中对main函数的返回值类型定义是int。main函数intmain(){…….

return0;}7.2函数调用7.2.1函数调用的形式

要想执行函数,需要在main()函数中调用它。C语言程序必须有一个主函数main(),而且只有一个主函数main(),程序的运行从主函数开始,主函数调用其它的函数。无参函数的调用有参函数的调用7.2.1函数调用的形式7.2.1函数调用的形式1.无参函数的调用7.2.1函数调用的形式1.无参函数的调用【例】输出以下结果如图所示,通过函数调用实现。7.2.1函数调用的形式

在输出的结果中,第一行和第三行分别是一行“_”号,使用模块化编程思想,用一个函数show_single实现输出一行“_”号的功能,用一个函数show_txt实现输出第二行的信息,main函数中调用这两个函数。#include<stdio.h>voidadd(intx,inty){ intresult; result=x+y; printf("x+y=%d\n",result);}main(){ add(5,10);}7.2.1函数调用的形式2.有参函数的调用与无参函数相比,有参函数在调用时,需要调用者传入参数值。7.2函数调用7.2.2参数的传递方式7.2.2参数的传递方式#include<stdio.h>voidadd(intx,inty){ intresult; result=x+y; printf("%d+%d=%d\n",x,y,result);}intmain(){ add(5,10);//调用函数add return0;}【例】定义一个函数,实现两个整数的求和运算。形参实参7.2.2参数的传递方式1、实参可以是常量、变量或表达式,但是必须有确定的值。2、实参与形参必须:

个数相等

顺序对应

类型匹配7.2.2参数的传递方式(1)函数add被调用前,形参x和y并不占用内存空间。(2)函数add被main函数调用时,形参x和y被分配内存空间,并且被实参5和10分别赋值。函数调用过程中的参数传递如图所示。(3)函数add执行期间,由于形参x和y已有值,所以可以执行x+y操作,并且将结果输出。(4)函数add执行结束后,形参x和y的内存空间被释放。

7.2.2参数的传递方式#include<stdio.h>voidswap(intx,inty){

inttemp;

printf("函数内部

交换之前:x=%d,y=%d\n",x,y);

temp=x;

x=y;

y=temp;

printf("函数内部

交换之后:x=%d,y=%d\n",x,y);}intmain(){

intnum1,num2;

scanf("%d%d",&num1,&num2);

printf("交换之前:num1=%d,num2=%d\n",num1,num2);

swap(num1,num2);

printf("交换之后:num1=%d,num2=%d\n",num1,num2);

return0;}7.2.2参数的传递方式值传递思考num1和num2的值为什么没有交换?7.2函数调用7.2.3函数的返回值7.2.3函数的返回值返回值类型

函数名([形式参数列表]){

……… return(表达式);}void函数名([形式参数列表]){

………}

如果想要通过函数调用使主调函数得到一个值,这个值就是函数的返回值。函数的返回值通过函数体中的return语句获得。7.2.3函数的返回值#include<stdio.h>intadd(intx,inty){ intresult; result=x+y; returnresult;}intmain(){ intsum; sum=add(5,10); printf("%d\n",sum); return0;}【例】7.2.3函数的返回值函数被调用的位置可以有三种方式:(1)函数语句例如:fun();(2)函数表达式

例如:sum=add(5,10)。(3)函数参数

例如:printf("处理结果1::%d\n",add(5,10));7.2函数调用7.2.4函数的参数类型7.2.4函数的参数类型intmin(intarray[5])找出最低分intmax(intarray[5])找出最高分【例】使用函数实现下面功能。某位同学一学期有5门课程,根据每门课程的得分情况,找出其最低分和最高分。7.2.4函数的参数类型

当函数的参数类型是数组时,实参向形参传递的是数组首元素的地址,这种传递方式被称为“地址传递”。值传递:实参和形参占用不同的存储单元,只是存储的值相同。地址传递:实参和形参占用相同的存储单元。地址传递7.2.4函数的参数类型【例】某位同学第一学期有3门课程,第二学期有5门课程,根据每门课程的得分情况,找出每个学期中最高分和最低分。intmin(intarray[],intlen)//定义函数时不指定形参数组array的大小{ intminnum=array[0]; for(inti=1;i<len;i++) { if(array[i]<minnum) minnum=array[i]; } returnminnum;}7.3函数的嵌套调用7.3函数的嵌套调用#include<stdio.h>voidfun2(){

printf("调用fun2()函数\n");}voidfun1(){

printf("调用fun1()函数\n");

fun2();}intmain(){

fun1();

return0;}

函数的定义是独立的,在一个函数中不能嵌套定义另外一个函数。但是,函数可以嵌套调用,即在一个函数中调用另一个函数。【例】7.4函数的递归调用7.4函数的递归调用voidfun(){ fun();}

在调用fun函数时,又要调用fun函数,这就是fun函数的递归调用。但是,这里fun函数的调用是无终止的,程序中不应该出现。函数的递归调用必须要有终止条件,通常在函数定义时通过if语句控制。

【例】计算1~n之间整数之和。7.4函数的递归调用

7.4函数的递归调用#include<stdio.h>intfun(intn){ if(n==1)//递归调用结束条件 return1; else returnn+fun(n-1);//fun函数的递归调用}intmain(){ intsum; sum=fun(4); printf("1~4之间的整数和是%d\n",sum); return0; }

7.4函数的递归调用

【例】输出斐波那契数列(FibonacciSequence)的前20个数。斐波那契数列,又称黄金分割数列,因它是数学家莱昂纳多•斐波那契以兔子繁殖为例子而引入的,故又称为“兔子数列”。斐波那契数列可以这样描述,数列的第1个数是1,第2个数是1,以后每个数是其前面两个数的和,即1,1,2,3,5,8,13,21,34,55,…。利用递归的方法分析斐波那契数列,可以得到递归公式:7.4函数的递归调用7.5函数的声明7.5函数的声明1.函数声明的方法

函数定义时的首行被称为函数原型,函数声明时只需要在函数的原型后面加上“;”。例如: intadd(intx,inty);

在函数声明时,形参名也可以省略。例如:intadd(int,int);7.5函数的声明2.函数声明的位置函数声明在主调函数的内部。#include<stdio.h>intmain(){intadd(int,int); intsum; sum=add(5,10); printf("%d\n",sum); return0;}#include<stdio.h>intadd(int,int);intmain(){

………….}函数声明在主调函数的外部。7.5函数的声明用户自定义函数的使用包括3个环节:函数声明函数定义函数调用7.5变量的作用域和存储类别7.5.1变量的作用域7.6.1变量的作用域1.局部变量

在函数内定义的变量,它的作用域是本函数内。2.全局变量

在函数外定义的变量,它的作用域是整个源程序文件内。7.6.1变量的作用域1.局部变量#include<stdio.h>voidfun(){ intx=6; printf("fun函数:x=%d\n",x);}intmain(){ intx=8; fun(); printf("main函数:x=%d\n",x); return0;}7.6.1变量的作用域1.局部变量函数内定义的变量函数的形参复合语句内定义的变量7.6.1变量的作用域1.局部变量#include<stdio.h>main(){inti=1,j=3;{inti=0;i+=j*2;printf("i=%d,j=%d\n",i,j);}printf("i=%d,j=%d\n",i,j);}7.6.1变量的作用域2.全局变量#include<stdio.h>intx=10;//全局变量xvoidfun(){ printf("fun函数:x=%d\n",x);}intmain(){ fun(); printf("main函数:x=%d\n",x); return0;}7.6.1变量的作用域2.全局变量【例】分析程序中全局变量与局部变量同名时各自的作用范围。inta=3,b=5;//定义全局变量a,bintmax(inta,intb)//定义局部变量a,b,只在max函数中有效{

intc;c=a>b?a:b;returnc;}intmain(){ inta=10;//定义局部变量a,只在main函数中有效 printf("%d\n",max(a,b)); return0;}7.5变量的作用域和存储类别7.5.2变量的存储类别7.6.2变量的存储类别动态存储方式在程序运行期间由系统动态的分配存储空间静态存储方式在程序运行期间由系统分配固定的存储空间7.6.2变量的存储类别变量定义的完整形式是:

存储类别

数据类型

变量名;变量的存储类别:自动的(auto)静态的(static)寄存器的(register)外部的(extern)7.6.2变量的存储类别1.局部变量的存储类别自动变量(auto)

温馨提示

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

评论

0/150

提交评论