《计算思维与C语言概述》-第四章_第1页
《计算思维与C语言概述》-第四章_第2页
《计算思维与C语言概述》-第四章_第3页
《计算思维与C语言概述》-第四章_第4页
《计算思维与C语言概述》-第四章_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

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

文档简介

4.1三种循环语句

计算机运算的最大特点是不断重复执行相似的运算来获得最终的计算结果。循环结构(loopstructure)是对一组语句重复执行若干次的语法结构。

其特点是:在给定条件成立时,反复执行一组语句,直到条件不成立为止。给定的条件称为循环条件,反复执行的一组语句称为循环体。循环结构可以处理的数据量大大增加,为了处理大批量的同类数据,程序设计语言提供了一种称为数组的组合数据类型。循环语句允许程序在循环条件成立时,反复执行循环体,循环语句的流程图如图4-1所示。C语言提供了while语句、dowhile语句、

for语句等三种语句描述循环结构。

本节以一个简单示例为基点,阐述应用这三种循环语句的程序设计过程。下一页返回4.1三种循环语句

【例4-1】求自然数1~n的累加和。【分析】求1~n的累加和的一个基本方法是反复进行n次加法运算。尽管对于每次加法运算,参与运算的数据不同,但执行的都是相同的操作。因此,可以使用循环结构来解决这个问题,其中要重复执行的操作是加法运算,循环体执行一次,便将累加和加上一个整数。在此,定义变量sum用于存储累加和,其初值为0,利用sum+=i来完成求和(i依次取1,2,···,n)。

i被称为循环变量。算法的伪代码如下:(1)输入一个自然数n;(2)将i的初值置为1,

sum的初值为0;(2.1)执行sum+=i,

i增1;(2.2)当i>n时,

转向(3);

否则,

重复执行(21);(3)输出sum的值,

即1~n的累加和。上一页下一页返回4.1三种循环语句

4.1.1

while语句while语句是最基本的循环语句。语法格式:while(表达式)语句其中,小括号中的表达式用于描述循环条件,小括号后面的语句为循环体。表达式两边必须要加有小括号。当循环体内需要包含一条以上的语句时,应用大括号括起来,构成复合语句(复合语句是一个程序块,在语法上可以被看成一条语句)。while语句的执行过程如下:(1)计算表达式的值,

如果其值不为0(即真值),

就转向(2);

否则,

转向(3)。(2)执行循环体,

然后转向(1)。(3)循环过程停止,

程序转移到while语句后面的语句。上一页下一页返回4.1三种循环语句

例4-1应用while语句的程序代码如下:上一页下一页返回4.1三种循环语句

上一页下一页返回4.1三种循环语句

4.1.2

dowhile语句dowhile语句和while语句非常相似,

它们在本质上是相同的,

仅有的区别是dowhile语句是在执行完循环体之后再判断循环条件是否成立。

dowhile语句的语法格式如下:do语句while(表达式);和while语句一样,表达式用于描述循环条件,语句可以是一条语句或一个复合语句。注意:小括号后面的分号是必需的。上一页下一页返回4.1三种循环语句

dowhile语句的执行过程如下:(1)执行循环体。(2)计算表达式的值,

如果表达式的值不为0(即值为真),

则转向(1)。(3)循环过程终止,

程序转移到dowhile语句后面的语句。例4-1应用dowhile语句的程序代码如下:上一页下一页返回4.1三种循环语句

上一页下一页返回4.1三种循环语句

4.1.3

for语句for语句是一种形式灵活、功能强大的循环语句,它适合应用在使用循环变量控制循环次数的循环结构中,同时也可以应用在其他类型的循环结构中。for语句的语法格式如下:for(表达式1;表达式2;表达式3)语句其中,表达式1和表达式2后面的分号是必需的,这里的分号是分隔符,表达式3后面没有分号。for语句的执行过程如下:(1)计算表达式1的值。(2)计算表达式2的值,如果该值不为0(即值为真),则转向(3);否则,终止循环过程,程序转移到for语句后面的语句。(3)执行循环体,计算表达式3的值,然后转向(2)。上一页下一页返回4.1三种循环语句

例4-1应用for语句的程序代码如下:上一页下一页返回4.1三种循环语句

for语句的使用非常灵活,通常for语句使用三个表达式控制循环,但C语言允许省略任意或全部表达式。上一页下一页返回4.1三种循环语句

(1)如果省略表达式1,

那么需要在for语句之前完成变量的初始化。

例如:(2)如果省略表达式3,

那么需要在循环体中包含使循环条件最终变为假的操作。例如:上一页下一页返回4.1三种循环语句

(3)如果同时省略表达式1和表达式3,

此时的for语句和while语句完全相同。

例如:上一页下一页返回4.1三种循环语句

(4)如果省略表达式2,

那么表达式2的值默认为真,

此时循环条件始终成立,

于是需要通过其他方式使for语句终止,如使用break语句。在for语句的表达式1或表达式3中,通常使用逗号表达式对多个变量进行初始化或同时使多个变量自增/自减。例如:上一页下一页返回4.1三种循环语句

【练习】(1)键盘输入整数n,

输出n!的值。提示:求1~n的累加积的基本方法是进行n次乘法运算。定义变量total用于存积,其初值为1,利用total∗=i来完成求积运算(i依次取1,2,,n)。(2)求1+2!+3!++20!的和。(3)判断数字为几位数:输入数字,

判断该数字是几位数,

并按照从低位到高位的顺序输出每一位的数值。如果输入的数字为负数,则将其转换为正数。上一页下一页返回4.1三种循环语句

4.1.4

使用break语句退出循环

使用break语句可以使程序控制从switch语句中转移出来。break语句还可以用在while、dowhile、

for语句中,

使程序控制从循环中转移出来,

从而使循环立即终止。【例4-2】判断正整数n是否为素数。【分析】素数是只能被1和自身整除的数。为了判断n是否为素数,可以利用一个循环,让n依次除以2到n-1之间的所有整数。一旦发现n可以被某个整数整除,就立即跳出循环,而不需要继续进行后续检查。循环结束后,可以通过if语句来判断循环是提前结束还是正常结束。如果提前结束,则n不是素数;否则,n是素数。上一页下一页返回4.1三种循环语句

定义循环变量为i,则伪代码如下:(1)将i的初值置为2。(2)如果i<n,

则重复执行:(21)如果n%i==0,

则判断n不是素数,

跳出循环;(22)否则,

i++;(3)如果i<n(提前结束),

则输出n不是素数的结果;

否则,

输出n是素数的结果。上一页下一页返回4.1三种循环语句

程序的代码如下:上一页下一页返回4.1三种循环语句

【练习】(1)输出任意两个自然数之间的素数。(2)求一个整数的所有因数。上一页下一页返回4.1三种循环语句

4.1.5

使用continue语句跳过循环体语句continue语句也可以出现在while、

dowhile、

for语句的循环体中,

用于控制循环的执行过程。但continue语句和break语句的作用有所不同,break语句使程序控制跳出循环(转移到循环语句后面的语句),而continue语句则是跳过循环体内的若干语句,提前结束一次循环体的执行,但不会终止循环。另外,continue语句只能用于循环。【例4-3】找出所有小于100,能被3整除且个位数是6的整数。【分析】通过j=i∗10+6(i依次取0、1、、9)来构造所有小于100且个位为6的整数,然后分别判断这些整数能否被3整除。上一页下一页返回4.1三种循环语句

算法的伪代码如下:(1)i=0;

j=i∗10+6;(2)如果i<10,

就重复执行:(2.1)如果j%3!=0,

则不输出j的值,

跳过;(22)否则,

输出j的值;程序的代码如下:上一页下一页返回4.1三种循环语句

【练习】输出互不相同、无重复数字且百位为非零的三位数。提示:可填在百位的数字为1~9,十位、个位的数字都是0~9。先组成所有的排列,再删除不满足条件的排列。上一页下一页返回4.1三种循环语句

使用continue语句的代码清单如下:上一页下一页返回4.1三种循环语句

思考:若程序不使用continue语句实现,该怎样修改?上一页返回4.2批量数据处理———数组

4.2.1

一维数组本节以一个简单示例为基点,阐述使用数组的必要性,

以及循环语句访问一维数组的过程。【例4-4】超市每天都要统计收银员的收款情况。编写一个程序,通过键盘输入每位收银员当天的收款额,然后输出其中的最大值。【分析】假设超市有4位收银员,于是可以定义4个变量来表示收银员的收款额。然而,如果超市有100位收银员,难道需要定义100个变量来表示其收款额吗?那变量就太多了。

语言中提供了数组来存储一组类型相同并且数量一定的数据。

每个数据称为数组的一个元素。在本例中,如果超市最多不会超过100位收银员,

则可以定义含有100个元素的数组。下一页返回4.2批量数据处理———数组

1一维数组的定义数组必须先声明再使用,声明数组的类型、名称和数组长度。在C语言中,

一维数组的定义形式如下:类型名数组名[常量表达式];例如,

在例4-4中,

可用“floatmoney[100]”

定义一个名字叫money的数组,

这个数组含有100个元素,且每一个元素的类型都是float型。上一页下一页返回4.2批量数据处理———数组

2一维数组的元素引用定义数组后,就可以通过数组名和下标来逐个引用其中的元素。语法格式:数组名[下标表达式]其中,[]称为下标运算符,下标表达式的值应为整数,其范围从0到数组长度减1。例如,

上面定义的数组money,

它的第1个元素是money[0],

第2个元素是money[1]、

第3个元素是money[2]、

第100个元素是money[99]。对于任意表达式,

只要其值符合下标值的要求,

就可用于引用数组元素,

如money[5‖i]、money[i∗3]都是合法的引用形式。上一页下一页返回4.2批量数据处理———数组

3一维数组的初始化一维数组的初始化是指在定义数组的时候指定数组元素的初始值。例如,定义了这样的一个字符数组hi:charhi[5]={'h','e','l','l','o’};通过一对大括号里面的初值列表分别给数组中的每一个元素指定初值。char是数组元素的类型,hi为数组名,5为数组的长度,此数组被初始化存储了5个字符。

数据元素由数组名和下标组成,

有hi[0]、hi[1]、hi[2]、hi[3]、hi[4]共5个元素,

引用hi[5]会出错,

因为超出了数组的长度。数组hi的内存存储如图4-2所示。可以看到,数组hi中一共有5个元素,每一个元素的类型都是char,它们是首尾相邻存放在存储空间中的。上一页下一页返回4.2批量数据处理———数组

数组的初始化也可以只给一部分元素指定初值。例如:intx[10]={0,1,2,3,4};这会使数组的前5个元素分别得到初值0、1、2、3、4,而后面的5个元素的初值被系统自动设置为0。如果写成floatmoney[100]={0};则使数组的每一个元素都得到初值0。注意:如果没有对数组进行初始化,则数组中各元素的值是不确定的。如果在初值列表中给每一个元素都指定了初值,那么数组定义中的常量表达式可以省略。例如:inta[]={2,4,6,7,8};等价于inta[5]={2,4,6,7,8};上一页下一页返回4.2批量数据处理———数组

例4-3使用一维数组的程序代码如下:上一页下一页返回4.2批量数据处理———数组

上一页下一页返回4.2批量数据处理———数组

【练习】查找整型数组中的最小值与次小值。从键盘上输入n个整型数据,存入数组,然后输出其最小值与次小值。上一页下一页返回4.2批量数据处理———数组

4.2.2

字符串与字符数组字符串是一种重要的数据类型,有零个或多个字符组成的有限串。但是,C语言中并没有显示的字符串类型,它有两种风格的字符串:字符串常量、

字符数组。

字符串常量是用一对双引号括起来的字符序列,如"helloworld"就是一个字符串。C语言中的字符串实际上是按照字符数组来处理的。例如,字符串常量"helloworld"的存储空间是12字节,在存储空间中将依次存放字符串中的每个字符,

以及一个额外的字符———空字符。

空字符称为“字符串结束标记”,用来表示一个字符串的结束,

空字符可以用字符转义序列'\

0'来表示,

如图4-3所示。定义字符数组时,可以用字符串为其赋初值。例如:charstring[]="helloworld";string数组一共由12个元素组成———可见的11个元素以及字符串结束标记'\0'。上一页下一页返回4.2批量数据处理———数组

【例4-5】从键盘输入一个字符串,计算字符串长度。【分析】当从键盘输入一个字符串时,

C语言将字符串常量存入一个字符数组,

因此遍历数组直至字符'\0',则可统计字符串的长度。字符串的输入与输出一般通过两类库函数实现:(1)通过库函数scanf和printf的格式说明符%s提供字符串的输入与输出功能。(2)通过puts函数和gets函数直接输入和输出字符串。上一页下一页返回4.2批量数据处理———数组

例4-5使用第一类库函数实现输入和输出的程序代码如下:上一页下一页返回4.2批量数据处理———数组

运行结果:上一页下一页返回4.2批量数据处理———数组

例4-5使用puts函数和gets函数实现输入输出的程序如下:上一页下一页返回4.2批量数据处理———数组

运行结果:思考:应用两类库函数计算同一个字符串,字符串的长度不同,为什么?上一页下一页返回4.2批量数据处理———数组

注意:gets(s)函数与scanf("%s",&s)相似,

但不完全相同。

在使用scanf("%s",&s)函数输入字符串时,如果输入了空格、制表符Tab、回车等字符时,系统会认为字符串结束,空格后的字符将作为下一个输入项处理,但gets函数将接收输入的整个字符串,直到遇到换行为止。C语言标准库<stringh>中定义了大量操作字符串的函数,常用函数有:(1)strcpy(s1,s2):复制字符串s2到字符串s1。(2)strcat(s1,s2):连接字符串s2到字符串s1的末尾。(3)strlen(s1):返回字符串s1的长度。(4)strcmp(s1,s2):如果s1=s2,

则返回值等于0;

如果s1<s2,

则返回值小于0;

如果s1>s2,则返回值大于0。上一页下一页返回4.2批量数据处理———数组

例4-5调用字符串操作函数实现字符串操作的程序代码如下:上一页下一页返回4.2批量数据处理———数组

运行结果:【练习】(1)从键盘输入两个字符串,

将这两个字符相连,

并输出。提示:若两个字符串为s1、s2,则函数strcat(s1,s2)连接字符串s2到字符串s1的末尾,函数值为两个字符串连接后的结果,调用函数后s1为两个字符串连接的结果。(2)从键盘输入一个字符串和一个字符,

查找字符在字符串中的起始位置(索引值从0开始)。(3)从键盘输入一个字符串,

删除字符串中的除字母外的字符。上一页下一页返回4.2批量数据处理———数组

4.2.3

二维数组如果将一排桌子、一行树等事物对应一维数组,那么在C语言中,在现实中常常见到的由若干行、若干列组成的方队就对应二维数组,魔方就对应三维数组,另外还有很多事物可能会对应四维、五维等更多维的数组。在C语言中,把一维以上的数组统称为多维数组。本节以一个简单示例为基点,阐述使用二维数组的必要性,以及循环语句访问二维数组的过程。很多二维数组的概念可以推广到其他多维数组。【例4-6】从键盘输入两个矩阵,计算这两个矩阵之和并输出。【分析】将两个矩阵分别存入两个二维数组,并将这两个二维数组的对应元素相加,存入第三个二维数组。上一页下一页返回4.2批量数据处理———数组

1二维数组的定义定义二维数组的一般形式如下:类型名数组名[常量表达式1][常量表达式2]其中,常量表达式1给出了数组第一维的长度(即数组的行数),常量表达式2给出了数组第二维的长度(即数组的列数)。定义多维数组的一般形式如下:类型名数组名[常量表达式1][常量表达式2][常量表达式n]例如,

“doublea[3][4]”

定义了一个3行4列的由double型元素组成的二维数组a,

数组a中包含12个元素,

这12个元素按逻辑顺序排列成3行4列;

“intx[5][6][7]”

定义了一个由int型的元素组成的三维数组,该数组的三维长度分别为5、6和7。上一页下一页返回4.2批量数据处理———数组

2二维数组元素的引用引用二维数组元素的一般形式如下:数组名[下标表达式1][下标表达式2]其中,下标表达式1、下标表达式2分别给出了要访问元素的行号、列号,如a[2][0]、a[5-x][8+y]等。二维数组每一维下标的范围与一维数组一样,都是从0开始的。例如,对于二维数组a[3][4],它的下标表达式1的取值范围为0~2,下标表达式2的取值范围为0~3,12个元素分别是:上一页下一页返回4.2批量数据处理———数组

3二维数组的初始化二维数组可以在定义时进行初始化。例如:inta[3][4]={{0,0,0,0},{1,1,1,1},{2,2,2,2}};通过将初值列表中的初值用大括号分成几个部分,可以按行对二维数组进行初始化。初始化后数组a各元素的值为二维数组也可以按如下方式进行初始化:inta[3][4]={0,0,0,0,1,1,1,1,2,2,2,2}; 上一页下一页返回4.2批量数据处理———数组

二维数组还可以只对部分元素赋初值。例如:inta[3][4]={{1},{2},{3}};

这样,除了每行首列元素的值分别被赋为1、2、3之外,其余元素的初值都为0,如下:上一页下一页返回4.2批量数据处理———数组

如果在初值列表中给每一个元素都指定了初值,那么二维数组定义里面的常量表达式1(即第一维的长度)可以省略,但常量表达式2(即第二维的长度)必须指定。例如:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

等价于inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 在例4-6中,

可将两个二维数组定义为固定长度的二维数组(如定义数组A[100][100]、B[100][100]),

矩阵的行数和列数不一定为100,

但必须小于或等于100,

否则矩阵元素不能存入数组。上一页下一页返回4.2批量数据处理———数组

例4-6应用二维数组的程序代码如下:上一页下一页返回4.2批量数据处理———数组

上一页下一页返回4.2批量数据处理———数组

上一页下一页返回4.2批量数据处理———数组

【练习】(1)从键盘输入一个矩阵,

将其行和列的元素互换并输出。(2)从键盘输入一个正整数n(n∈[1,10]),

表示进行乘法运算的两个整型方阵的阶。然后,

输入两个整型方阵A和B,

计算A∗B后,

将结果输出到屏幕。上一页返回4.3实训与实训指导

实训1

数制转换编写一个程序,

实现将十进制整数N(N>0)转换成d(2≤d≤16)进制数。

要求:从键盘接收一个正整数N和进制d,输出N的d进制表示。1实训分析十进制数N和其他d进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于以下原理:

N=(N/d)∗d+N%d其中,“/”是整除运算,“%”是求余运算。下一页返回4.3实训与实训指导

例如,(2018)10=(3742)8=(7E2)16。

其运算过程如下:上一页下一页返回4.3实训与实训指导

数制转换是重复将N/d整除取余,从低位到高位产生d进制的各个数位,然后从高位到低位进行输出。因此,

将余数从低到高存入数组,然后倒序输出。因此,

可将循环变量设为整数N,循环变量变化的步长为N/d,即循环变量N=N/d,循环条件是N不等于零。在十进制数转化为二进制、八进制数时,由于此时的基本数码均没有超过10,所以都可以用数值表示。但是,当十进制数转化为十六进制数时,由于十六进制数的基本数码有A、B、C、D、E、F,因此不能用数字存储,只能用字符存储。综合考虑二进制、八进制和十六进制的基本数码,可以把共有的基本数码存在一个字符数组num中。语句如下:charnum[]="0123456789ABCDEF";上一页下一页返回4.3实训与实训指导

从中可发现,某数码对应的下标处刚好是该数码对应的字符。例如,下标10处存储了基本数码A,

下标15处存储了基本数码F。算法的伪代码如下:(1)初始化基本数字字符数组num,

声明存放余数的整型数组mod;

(2)while(N不等于零)执行下列情形:(2.1)将N%d存入数组mod;(2.2)更新N的值,

即N=N/d;(3)倒序取出余数数组mod的元素值,

并输出基本数码字符数组相应下标处的字符。上一页下一页返回4.3实训与实训指导

程序的代码如下:上一页下一页返回4.3实训与实训指导

上一页下一页返回4.3实训与实训指导

2实训练习(1)判断一个数是否为回文数。

设n是任意自然数。

若将n的各位数字反向排列所得自然数n1与n相等,则称n为一个回文数。例如,若n=1234321,则称n为回文数。提示:此题与实训1相似,n对10重复求余可以获得n的各位数,将各位的数字倒置计算,可得到反向自然数n1,若n1=n,则n为回文数。(2)求水仙花数。

在三位整数中,

有一些这样的数,

它们的个位数的三次方加上十位数的三次方再加上百位数的三次方等于该数本身,这样的数称为水仙花数。例如,153=13+53+33。现在要求编写程序,找出所有水仙花数。提示:首先,确定其循环变量为三位整数n,取值范围为100~999;然后,判断n是否为水仙花数。若n的个位数为a、十位数为b、百位数为c,且a3+b3+c3=n成立,则n为水仙花数。上一页下一页返回4.3实训与实训指导

实训2

输出乘法表按照如下所示样式,输出乘法表。上一页下一页返回4.3实训与实训指导

1实训分析乘法表由形如i∗j=k(k表示乘积)的等式组成,共分成9行,第1行有1个等式,第2行有2个等式,,第9行有9个等式。确定循环变量为i和j,其中i表示等式中的第一个乘数,也表示了乘法表的行号,其取值范围是1~9;j表示等式中的第2个乘数,也表示了乘法表中的列号,其取值范围是1~i。算法的伪代码如下:(1)循环输出每一行的等式(1≤i≤9);(1.1)按格式循环输出每一列的等式i∗j=k(1≤j≤i,

k表示乘积)。上一页下一页返回4.3实训与实训指导

程序的代码如下:上一页下一页返回4.3实训与实训指导

2实训练习计算s=m+mm+mmm+···+mm···m,

其中m是一个在1到9之间的数字,

最后一项由n个m构成,m、n均由键盘输入。例如,m=3,n=5,则s=3+33+333+3333+33333。提示:这是典型的多项式求和问题,我们需要依次计算出每一项的值,然后将它们相加。如果多项式中各项的值按规律变化,后一项的值可以利用前一项的值得到,那么可以简化整个计算过程。上一页下一页返回4.3实训与实训指导

实训3

兑换硬币编写程序实现下述功能:将1元钱兑换成1分、2分、5分的硬币,且每种面值的硬币都不得少于一枚,列出所有兑换方法。1实训分析此类问题通常采用枚举法来解决,

即列出所有可能的解,

然后逐一验证,

从而找出正确的解,这种方法也称为暴力搜索法。在此,

假设兑换方案中的5分硬币数为i枚,

2分硬币数为j枚,那么可以得到1分硬币数为100-5∗i-2∗j枚。为了列出所有可能的解(同时还要考虑程序执行的效率),循环变量为i、j,i的取值范围是1~19,j的取值范围是1~49。

任意给定一组i、

j的值,

即可计算出1分硬币数,

然后利用100-5∗i-2∗j>0来判断是否为正确的解。上一页下一页返回4.3实训与实训指导

算法的伪代码如下:(1)初始化计数器count为零;(2)遍历i的取值1≤i<20(21)遍历j的取值1≤j<50,

计算k=100-5∗i-2∗j,

若k>0,

则输出i、

j、k的值,count++;程序的代码如下:上一页下一页返回4.3实训与实训指导

上一页下一页返回4.3实训与实训指导

2实训练习输入三位数N,

求两位数AB(个位数字为B,

十位数字为A,

且有0<A<B<9),

使下述等式成立: AB∗BA=N其中,BA是把AB中个、十位数字交换所得的两位数。接收控制台输入的三位整数N,求解A、B,并输出。如果没有解,则输出“NoAnswer”。提示:首先确定循环变量A、B,A的取值范围为0~7,B满足A<B<9,则B的取值范围为(A+1)~8。若AB∗BA=N,则输出。若遍历后没有找到符合要求的A、B,则输出“NoAnswer”。上一页下一页返回4.3实

温馨提示

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

评论

0/150

提交评论