函数与模块化程序设计基础.ppt

上传人:xt****7 文档编号:5330039 上传时间:2020-01-26 格式:PPT 页数:61 大小:457.81KB
返回 下载 相关 举报
函数与模块化程序设计基础.ppt_第1页
第1页 / 共61页
函数与模块化程序设计基础.ppt_第2页
第2页 / 共61页
函数与模块化程序设计基础.ppt_第3页
第3页 / 共61页
点击查看更多>>
资源描述
第6章函数与模块化程序设计基础 6 1概述 6 2函数的定义 6 3函数的调用 6 4变量的作用域与存储特性 6 1概述 6 1概述 一 模块与函数 1 结构化程序设计 C语言是结构化的程序设计语言 一种设计程序的技术 通常采用自顶向下逐步求精的设计方法和单入口单出口控制结构 2 自顶向下 的模块化程序设计方法 将一个大问题按层次分解成多个方便解决小问题的模块的设计思想 3 功能模块 求解较小问题的算法和程序称作 功能模块 各功能模块可以先单独设计 然后将求解所有子问题的模块组合成求解原问题的程序 由功能模块组成程序的结构图 6 1概述 4 函数 完成相对独立功能的程序 例6 1 输入年月日 计算出该日为该年的第几天 分析 1 判断年份是否为闰年 年份有闰年与平年之分 两者的区别在于闰年的二月为29天 平年的二月为28天 因此 给定一个年份 首先应确定其是否是闰年 2 求月份对应的天数 月份不同 其对应的天数不同 1 3 5 7 8 10 12月每月为31天 4 6 9 11月每月为30天 2月根据所在年份是否为闰年来确定 3 求总天数 分为经历完整的月份天数与经历不完整的月份天数 4 输出数据 年月日及相应的天数 6 1概述 程序实现 1 判断闰年 intleap intyear intlp lp year 4 0 returnlp 6 1概述 2 求某月的天数 函数month days调用函数leap判断year是否为闰年 intmonth days intyear intmonth intds d switch month case1 case3 case5 case7 case8 case10 case12 d 31 break case2 d leap year 29 28 break 若为闰年 d赋值29 否则赋值28 default d 30 returnd 6 1概述 3 求天数和 函数days调用函数month days 求各月份对应的天数 intdays intyear intmonth intday inti ds 0 for i 1 i month i ds ds month days year i ds ds day returnds 6 1概述 4 主函数 voidmain intyear month day t day printf Inputyear month day n scanf d d d year month day 函数scanf作为输入模块是系统定义的 主函数main可以直接调用它 t day days year month day 求天数和 printf d d dis dthdayoftheyear n year month day t day 函数printf作为输出模块也是系统定义 主函数main可以直接调用 注意 在完整的程序中 前三个函数应放在main 函数之前 6 1概述 二 模块设计原则 1 模块相对独立性 1 模块实现相对独立的特定子功能 模块的功能单一 函数处理的任务明确 函数的定义相互独立 一个函数不从属于另一个函数 但可以相互调用 2 模块之间的关系简单 模块之间没有过多的相互作用 只通过数据传递发生联系 并且函数传递的数据个数越少越好 例如 C语言禁止使用goto语句作用到另一个函数 以保证函数的独立性 3 模块内数据的局部化 模块内使用的数据具有独立性 一个模块不允许使用其它模块的数据 且一个模块的数据也不能影响其他模块中的数据 例如 C语言的局部变量就可以满足模块内数据局部化的要求 6 1概述 2 模块大小适中 3 模块分解层次清楚 模块化程序设计要求对问题进行逐层分解 逐步细化 形成模块的层次结构 分解问题时要注意对问题进行抽象 将问题中的相似方面集中和概括起来 暂时忽略它们之间的差异 采取自上而下 逐步求精的方法实现 6 1概述 6 2函数的定义 从函数使用的角度来看 C语言的函数可以分为两类 标准库函数和用户自定义函数 一 标准库函数与头文件 1 TurboC系统提供了400多个标准库函数 参见附录 按功能可以分为 1 类型转换函数 2 字符判别与转换函数 3 字符串处理函数 4 标准I O函数 5 文件管理函数 6 数学运算函数等 它们的执行效率高 用户需要时 可在程序中直接进行调用 6 2函数的定义 C语言库函数所用到的常量 外部变量 函数类型和参数说明 都在相应的头文件 扩展名为 h 中声明 这些文件通常存放在系统目录tc include 如 2 头文件 1 stdio h文件 标准输入输出函数所用的常量 结构 宏定义 函数的类型 参数的个数与类型的描述 2 math h文件 与数学函数有关的常量 结构及相应的函数类型和参数描述 3 string h文件 与字符串操作函数有关的常量 结构以及相应的函数类型和参数描述 4 stdlib h文件 与存储分配 转换 随机数产生等有关的常量 结构以及相应函数的类型和参数描述 5 ctype h文件 字符函数有关的常量 宏定义以及相应函数的类型和参数描述 6 2函数的定义 二 用户自定义函数 1 函数分类 从函数的形式看 无参函数 有参函数 函数定义时无参数说明 调用无参函数一般用来执行指定的一组操作 主调函数不传送数据给被调函数 函数定义时定义了一个或一个以上的参数 调用时将要处理的数据传送给被调函数 空函数 定义时既无参数也无执行语句 被调用时 不执行任何操作就立即返回 6 2函数的定义 定义形式二 函数值类型名函数名 形式参数类型及参数说明 数据说明部分语句 定义形式一 函数值类型名函数名 形式参数列表 形式参数说明 数据说明部分语句 2 函数定义形式 ANSI风格 建议使用 如 intmax a b inta b 如 intmax inta intb 6 2函数的定义 3 函数由函数说明与函数体两部分构成 1 函数说明 函数说明包括函数值类型 函数名 参数类型及参数说明 函数说明又称为函数首部 函数值类型指定所定义函数返回值的类型 可以是简单类型 void类型或构造类型等 当函数值类型为void时 表示函数无返回值 相当于其它语言的过程 当函数值类型为int时 可省略其类型的说明 建议不使用缺省形式类型说明 函数名是函数的标识符 遵循C语言标识符的命名规则 区分大小写 形式参数简称形参 处在函数名后的一对圆括号中 要特别注意的是 无论函数是否有形式参数 函数名后的圆括号不可省 并且圆括号之后不能接 形式参数属于所在函数的局部变量 其存储类型只能是auto型或register型 缺省为auto型 6 2函数的定义 函数体结束在 括号处 2 函数体 函数说明之后的花括号 部分为函数体 函数体内数据说明部分在前 执行语句部分在后 函数体中说明的变量是该函数调用时有效的局部变量 执行语句是实际生成命令代码的部分 函数的功能由函数体内的各个语句的执行来实现 例6 2 定义符号函数sign sign x 函数返回值类型未说明 默认为int 建议给出函数类型说明 intx 形式参数说明 inty 函数体局部变量 y x 0 1 x 0 0 1 returny 返回函数值 6 2函数的定义 3 return语句的表示形式如下 return表达式 或return 表达式 符号函数的另一种定义形式 intsign intx 形式参数类型说明与参数列表与函数名一起说明 returny x 0 1 x 0 0 1 返回一个复杂的表达式的值 当函数类型为float型并且return语句缺省时 调用出错 当函数类型为int型并且return语句的表达式缺省或return语句缺省时 返回不确定的值 在TC2中返回值为0 6 2函数的定义 例6 3 写出以下程序的运行结果 max 函数类型缺省 为int型 return语句缺省 min 函数类型缺省 return语句缺省表达式 return main printf d d n max min 程序运行结果为 256 256 返回值不确定 TC2开发环境中返回值为0 若函数max与函数min的类型为float 则返回值为 Floatingpointerror Domain Abnormalprogramtermination 6 2函数的定义 在具有多个函数的C程序中 主函数出现的位置并不重要 为阅读方便 可将主函数main放在最前面 为了避免过多的函数声明语句 习惯上将主函数放在所有函数之后 不论主函数放在什么位置 一旦启动该程序 总是从主函数开始执行 并且最终在主函数结束整个程序的执行 3 函数main 一个C语言程序至少包含一个函数 并且必须有且只能有一个名为main的函数 称之为主函数 在包含多个函数的程序中 不仅可以由主函数调用其它函数 还可以由被调函数调用其它函数 但任何函数都不能调用主函数 通常主函数的类型定义为void 在TC2中可省略函数main的类型说明 6 2函数的定义 6 3函数的调用 在C语言的一般函数体中 可以包含对其它函数的调用 称为函数的嵌套调用 甚至包含对自身的调用 称为函数的递归调用 一个函数一旦被定义 就可在程序的其它函数中使用它 这个过程称为函数调用 一 函数的一般调用与声明 函数名 实际参数列表 1 函数调用形式 函数调用的一般形式 6 3函数的调用 实际参数也称为实在参数 简称为实参 实际参数之间以 分隔 函数调用时 实参与形参应保持个数 次序及类型的一致性 以确保实参与形参之间数据的正确传递 实际参数一般为表达式 可以是常量 变量 调用时必须有确定的值或确定的地址 形式参数必须为变量 当实际参数的个数 次序 类型与对应形式参数的个数 次序 类型不一致时 系统并不提示错误 后果却难以预测 注意 6 3函数的调用 C语言中函数调用的三种形式 函数语句调用 函数表达式调用 函数参数调用 在函数调用后加 构成一个语句 调用函数的目的可能是执行一个动作或完成特定的功能 大多数函数的调用形式 被调用函数执行的结果为调用函数提供一个值 除非一个函数的类型说明为void型 调用函数通过表达式接收值 被调函数作为某个函数的一个参数 6 3函数的调用 例6 4 函数语句调用与函数表达式调用 includevoidmain printf nk1 d printf n k2 程序运行结果为 k2k1 3 6 3函数的调用 voidmain 主函数中采用函数参数调用形式调用函数max2 intx y z m scanf d d d x y z printf max d n max2 max2 x y z 内层函数max2的值作为外层函数max2的实参 整个函数max2的值又作函数printf的的实参 例6 5 函数参数调用形式调用函数max2 intmax2 inta intb 求两个数中较大者 inty y a b a b returny 6 3函数的调用 2 函数声明 调用用户自定义函数时 一般调用函数和被调用函数应在同一个文件中 在调用函数中对被调用函数返回值的类型 函数名称 函数形式参数的类型进行说明 这种说明称为函数声明 函数声明的一般形式如下 类型名函数名 类型1形参1 类型2形参2 类型n形参n 或 类型名函数名 类型1 类型2 类型n 或 类型名函数名 函数声明是以语句形式出现的 因此其后有语句结束标记 若函数定义放在主调函数之前 遵循先定义后调用原则 函数声明可以省略 6 3函数的调用 例6 6 编程求两个整数的阶乘之和 longfac n 定义函数fac 其功能是求n intn inti longr 1 注意r的初始化值为1 for i 1 i n i r r i returnr includevoidmain intm1 m2 longresult longfac int 在主函数中声明后面定义的函数fac scanf d d m1 m2 result fac m1 fac m2 printf d d ld n m1 m2 result 6 3函数的调用 二 形参与实参 形式参数 简称形参 定义函数使用的参数 实际参数 简称实参 调用函数使用的参数 C语言中 采用函数之间的参数传递方式或用全局变量共享数据方式 使一个函数能对不同的数据进行相同功能的处理 C语言函数的参数传递均采用单向值传递方式 或称复制方式 单向值传递方式是指在函数调用时 将实参之值传递给对应的形式参数 使形参具有与实参相同的值 当实际参数是变量的地址值 指针常量或指针变量时 实际参数传递给形式参数的是地址值 也同样是单向值传递方式 6 3函数的调用 例6 7 求方程ax2 bx c 0 a 0 的实数根 分析 1 一元二次方程的实根的条件是 2 定义函数dict来判断数方程是否有实根 有实根则返回函数值1 否则返回函数值0 然后在主函数中求方程的实根 include includevoidmain floata b c x1 x2 d dt intdict float float float 声明函数dict及形式参数类型 printf Inputa b c scanf f f f 可以用一个函数实现 6 3函数的调用 if d x1 b sqrt dt 2 a x2 b sqrt dt 2 a printf 实根x1 f x2 f n x1 x2 elseprintf 无实数根 n intdict a b c 定义函数dict及形参说明 floata b c floatd d b b 4 a c 可以用一个函数实现 if d 0 return 1 elsereturn 0 6 3函数的调用 通过函数调用 将实参的值传递给形参 函数调用时 系统对参数的处理步骤为 1 计算各实参的值 将实参值压入形参栈中 然后执行函数体 2 当函数执行完返回时 形参从栈顶弹出 取走 6 3函数的调用 有关实参与形参的几点说明 1 在函数定义中指定的形参 未调用时 它们不占用存储单元 只有调用该函数时 形参才被分配空间 函数调用结束后 形参所占的存储单元被释放 2 实参为表达式 函数调用时 先计算表达式的值 然后将值传递给形参 常量 变量 函数值都可看成是表达式的特殊形式 3 定义函数时 形参的排列没有次序要求 但对形参列表中每个参数要进行说明 调用函数时 实参类型 个数及排列次序应与形参一一对应 若类型不一致 必须在参数前加上强制转换符 否则会发生 类型不匹配 的错误 4 实参与形参的数据传递为单向传递 只可由实参向形参传递 不能由形参传回实参 实参与形参处在不同的函数中 作用的区域不同 即使实参与形参同名 也是不同的变量 6 3函数的调用 三 函数的嵌套调用 所谓函数的嵌套调用是指一个函数调用另一函数的过程中又出现对其它的函数调用 这种嵌套调用的层次原则上不限制 函数1函数2函数3 调用函数2调用函数3 6 3函数的调用 例6 8 采用函数多重嵌套调用求方程ax2 bx c 0 a 0 的实数根 include includevoidmain floata b c x1 x2 intdict float float float floatdt float float float floatroot float float float int printf Inputa b c scanf f f f a b c 函数声明 if dict a b c x1 root a b c 1 调用函数root x2 root a b c 0 printf 实根x1 f x2 f n x1 x2 elseprintf 无实根 n 6 3函数的调用 intdict floata floatb floatc intf if dt a b c 0 f 1 elsef 0 returnf floatroot floata floatb floatc intflag floatd x d dict a b c 调用函数dict if d x flag b sqrt dt a b c 2 a b sqrt dt a b c 2 a returnx floatdt floata floatb floatc returnb b 4 a c 6 3函数的调用 四 函数的递归调用 在C语言的函数调用过程中 若函数直接或间接调用函数自身 则这种调用称为函数的 递归调用 1 直接递归与间接递归 直接递归 函数体内直接调用函数自身 间接递归 函数调用其它函数 而其它函数又调用该函数自身 1 直接递归 voidfun fun 2 间接递归 voidfun1 fun2 voidfun2 fun2 6 3函数的调用 无论是直接还是间接递归 两者都是无终止的调用自身 要避免这种情况的发生 使用递归解决的问题应满足两个基本条件 1 问题的转化 有些问题不能直接求解或难以求解 但它可以转化为一个新问题 这个新问题相对较原问题简单或更接近解决方法 这个新问题的解决与原问题一样 可以转化为下一个新问题 2 转化的终止条件 原问题到新问题的转化是有条件的 次数是有限的 不能无限次数地转化下去 这个终止条件也称为边界条件 相当于递推关系中的初始条件 6 3函数的调用 例6 9 编程求mn m n都为整数且n 0 分析 1 mn可以通过累乘方法实现 2 mn又可写成递归公式 即mn问题可以理解为 直接计算mn没有相应的运算符 但可以将mn转化为m mn 1的形式 即将mn转化为一个乘法问题 但乘法中的mn 1与mn是同一类问题 需要继续进行转化 直到问题趋于边界条件m0 1 6 3函数的调用 includevoidmain intm n longpower int int 函数声明 scanf d d m n printf power d d ld n m n power m n longpower intm intn 求mn的递归函数的定义 longp if n 0 p 1 elsep m power m n 1 注意 不可写成power m n m power m n 1 returnp 6 3函数的调用 6 3函数的调用 例6 10 编程求裴波那契 Fibonacci 数列 1 1 2 3 5 8 第10项的值 分析 1 对于裴波那契数列而言 有两个初始条件 分别为 fib 1 1 fib 2 1 2 其递推关系为从第三项开始 每项是前两项之和 因此 可以写出它的递归公式 6 3函数的调用 includevoidmain intn longm longfib int 函数声明 scanf d n 求第n项 m fib n printf fib d ld n n m longfib intn 定义函数fib及形参说明 if n 1 return 1 elseif n 2 return 1 递归终止条件 elsereturnfib n 1 fib n 2 6 3函数的调用 例6 11 汉诺 Hanoi 塔游戏 汉诺塔 TowerofHanoi 游戏据说来源于布拉玛神庙 游戏的装置如图6 6所示 图上以3个金片例 底座上有三根金的针 第一根针上放着从大到小64个金片 游戏的目标是把所有金片从第一根针移到第三根针上 第二根针作为中间过渡 每次只能移动一个金片 并且大的金片不能压在小的金片上面 该游戏的结束就标志着 世界末日 的到来 6 3函数的调用 分析 游戏中金片移动是一个很繁琐的过程 通过计算 对于64个金片至少需要移动264 1 1 8 1019次 不妨用A表示被移动金片所在的针 源 C表示目的针 B表示过渡针 对于把n n 1 个金片从第一根针A上移到第三根针C的问题可以分解成如下步骤 1 将n 1个金片从A经过C移动到B 2 将第n个金片移动到C 3 再将n 1个金片从B经过A移动到C 这样就把移动n个金片的问题转化为移动n 1个金片的问题 即移动n个金片的问题可用移动n 1个金片的问题递归描述 以此类推 可转化为移动一个金片的问题 显然 一个金片就可以直接移动 6 3函数的调用 i 0 i为移动的次数 说明为全局变量 voidhanoi intn intA intB intC if n 0 return 0个金片不处理 if n 1 step A C n 1时 直接将金片从A移动到C else hanoi n 1 A C B 先将n 1个金片从A经过C移动到B step A C 将第n个金片从A移动到C hanoi n 1 B A C 再将n 1个金片从B经过A移动到C voidstep inttake intput i 第i次移动 printf d d d n i take put includevoidmain intn printf Inputn scanf d n hanoi n 1 2 3 n个金片从第一根针经过第二根针移动到第三根针 6 3函数的调用 程序运行结果 Inputn 3 1 1 33 2 1 22 3 3 23 4 1 31 5 2 13 6 2 32 7 1 33说明 结果中第1列表示第i次移动 第2列表示从第m根针移动到第n根针 第3列表示第i个金片 i 1 2 3 最小的金片编号为3 递归在算法上简单而自然 递归过程结构清晰 源程序代码紧凑 因而递归调用在完成诸如阶乘运算 级数运算以及对递归的数据结构进行处理等方面特别有效 6 3函数的调用 2 递归与递推 递推方法 程序描述繁杂 可读性差 主要采用循环技术 逐步执行 当前值的求得总建立在前面求解的基础上 递归方法 描述与原始问题 递归公式 比较接近 书写简洁 易读易写 易于分析算法的复杂性和证明算法的正确性 在问题转化时 需要花时间和存储空间将有关的 现场信息 保存起来 当达到中止条件时 系统又需要花时间将有关的 现场信息 恢复以便处理未曾处理完的函数调用 占用存储空间少 执行速度快 6 3函数的调用 6 4变量的作用域及存储特性 变量的数据类型 变量应占用的内存空间大小 变量在存储空间分配时所限定的边界条件 变量的性质 变量的数据类型 变量存储类型 变量的作用域 变量的生存期 共同决定 6 4作用域及存储特性 一 变量的作用域 例6 12 voidf1 intt 2 a t b t voidmain inta b printf Entera b scanf d d 编译程序会提示出错 Undefinedsymbol a 和Undefinedsymbol b 为什么 6 4作用域及存储特性 1 变量按作用域 分为全局变量和局部变量2 区别 6 4作用域及存储特性 例6 13 includeinta b a b为全局变量 voidf1 intt1 t2 t1 a 2 t2 b 3 b 100 printf t1 d t2 d n t1 t2 voidmain a 2 b 4 f1 printf a d b d a b 程序输出结果为 t1 4 t2 12a 2 b 100 6 4作用域及存储特性 例6 14 includeinta 2 b 4 a b为全局变量 voidf1 intt1 t2 t1 a 2 t2 b 3 b 100 printf t1 d t2 d n t1 t2 voidmain intb 4 f1 printf a d b d a b 程序输出结果为 t1 4 t2 12a 2 b 4 结论 全局变量与局部变量同名时 局部变量的作用域屏蔽全局变量 6 4作用域及存储特性 二 变量的存储特性 变量的存储特性 变量的生存期 变量的存储类型 变量的存在时间 即变量的存在性 变量存放的存储媒介 如存储器 外存储器和CPU的通用寄存器 6 4作用域及存储特性 变量 按存在时间 静态存储变量 动态存储变量 生存期为程序执行的整个过程 在该过程中占有固定的存储空间 也称永久存储 只生存在某一段时间内 函数的形参 函数体或分程序中定义的变量 只有当程序进入该函数或分程序时才分配存储空间 函数 分程序执行完后 变量的存储空间又被释放 变量属性 数据类型 存储特性 6 4作用域及存储特性 C语言变量的存储特性可分四类 自动型 auto 静态型 static 外部型 extern 和寄存器型 register 完整的变量定义 存储特性 数据类型 变量名 1 自动型变量 auto 类型标识符变量列表 常常可以缺省auto 函数内定义的局部变量 函数的形式参数和函数体内分程序的局部变量 随函数的调用而存在 随函数的返回而消失 它们在一次调用结束到下一次调用开始之间不再占有存储空间 作用域局限于所定义的函数 其生存期就是函数的生存期 在一个函数中引用另一个函数的自动型变量的值是错误的 6 4作用域及存储特性 2 静态型变量 静态型变量是指在编译时分配存储空间的变量 static类型标识符变量列表 局部静态变量 全局静态变量 函数内部定义的静态变量 作用域与自动型变量相同 当所在的函数执行结束后 静态变量所占内存单元并不释放 其值仍然保留 函数外部定义的静态变量 在程序中凡未指明存储类型的全局变量均为全局静态型变量 作用域仅限所在的源程序文件 6 4作用域及存储特性 例6 15 intf inta intb 0 staticintc 3 b c printf 5d 5d 5d a b c return a b c voidmain inta 2 k for k 0 k 3 k printf 5d n f a 6 4作用域及存储特性 3 外部型变量 外部型变量 是相对于在函数 内部 说明的变量而言的 它们在函数外部定义 外部型变量又称为全局变量 在编译时分配存储单元 若变量的定义与引用分别处于不同的源文件中 即将变量的作用域延伸到其它的源文件 则需要在引用该变量的源文件中对它进行声明 源文件或源文件中的函数才能引用它 若变量的定义与引用处于同一源文件 即全局变量 在该源文件的不同函数中可以通过变量名对这种变量进行直接引用 作用域在整个源文件 外部型变量的声明形式 extern类型标识符变量名 在引用外部型变量的文件中不会为其分配内存空间 外部型变量生存期为整个程序的运行期 6 4作用域及存储特性 voidmain 在函数main中引用变量a不必声明 externinta 声明变量a为外部型变量 voidfac intn a a n 在函数fac外已声明a为外部变量 函数fac可以引用a inta 1 在s c文件定义了全局变量a voidfun 在函数fun中引用变量a不必声明 源文件s c 源文件d c 例6 16 6 4作用域及存储特性 4 寄存器型变量 变量 按使用的存储媒介 内存变量 寄存器变量 使用CPU中的寄存器来存取变量的值 前面所介绍的变量都为内存变量 由编译程序在内存中分配存储单元 变量的存取在内存储器中完成 寄存器处在CPU的内部 可避免CPU频繁访问存储器 从而提高程序的执行速度 数据内存运算器运算器结果控制器数据 6 4作用域及存储特性 寄存器型变量 不能定义为全局变量 只限于整型 字符型和指针型局部变量 不可以定义为静态局部变量 只能为动态变量 一般只允许同时定义两个寄存器变量 register类型名变量名 寄存器型变量的定义形式 registerinta registercharb 6 4作用域及存储特性 课堂练习 阅读程序 写出运行结果 voidmain inti 1 staticinta 10 registerintb 5 printf i d a d b d n i a b other printf i d a d b d n i a b other inti staticinta i 6 a 100 printf i d a d n i a 6 4作用域及存储特性
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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