版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
全套可编辑PPT课件全套可编辑PPT课件1.1程序设计语言的发展计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。人与计算机之间的信息交流也需要一种语言,这就是计算机语言。从计算机诞生至今,计算机语言的发展总体分三个阶段。1.机器语言2.汇编语言3.高级语言1.2
C语言的发展和特点C语言的很多概念来源于Martin
Richards开发的BCPL语言。BCPL对C语言的影响间接地来自B语言。1972年,美国贝尔实验室的DennisRitchie在B语言基础上为UNIX操作系统设计了C语言,并用C语言重写了UNIX操作系统,推出了UNIXV5。以UNIXV7中的C语言编译程序为基础,1978年BrainW.Kernighan和DennisRitchie合著出版了《TheCProgrammingLanguage》,这本书中介绍的C语言就是第一个C语言标准。1983年,美国国家标准协会(ANSI)成立了一个委员会以制定一个现代的、全面的C语言定义,于1988年完成的ANSI标准,即ANSIC。1990年,国际标准化组织(InternationalStandardOrganization,ISO)又对C语言标准进行了修订,在基本保留原来C语言特征的基础上,针对应用的需要,增加了一些新功能,ISO官方给予的名称为:ISO/IEC9899,所以ISO/IEC9899:1990也通常被简称为“C90”。1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC9899:1999,简称“C99”。在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899:2011,简称为“C11”。1.2.1
C语言的发展1.2
C语言的发展和特点C++是BjarneStroustrup于20世纪80年代在贝尔实验室开发的一门语言,用他自己的话来说:C++主要是为了我的朋友和我不必再使用汇编语言、C语言或其他现代高级语言来编程而设计的。它的主要特点是可以更方便地编写程序,让每个程序员更加快乐。C++语言是在C语言的基础上添加了对面向对象编程和泛型编程的支持。C++继承了C语言的高效、简洁、快速和可移植性。C++面向对象的特性带来了全新的编程方法。1.2
C语言的发展和特点C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且C语言的处理和表现能力都非常强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。1.2.2
C语言的特点具有结构化的控制语句简洁的语言丰富的运算符丰富的数据类型代码具有较好的可移植性可对物理地址进行直接操作可生成高质量、高效率的程序1.3
C程序基本结构在开始学习C语言编程之前,应该了解一下C源程序的基本结构,下面是一个简单的C语言程序。【例1-1】输出“Hello,world”。#include<stdio.h>intmain(){printf("Hello,world\n");//输出一个字符串
return0;}1.3
C程序基本结构一个简单的C程序的基本格式有以下几点规定:(1)C程序是无格式的纯文本文件,可以用任何文本编辑器(例如,记事本、写字板)来编写C程序。(2)C程序(源代码)保存为文件时,建议使用默认扩展名.c(也可以保存为.cpp文件,因为C是C++的子集,绝大部分编译器同时支持C和C++)。文件名最好有一定提示作用,能使人联想到程序内容或功能。(3)每个C程序都由一个或多个函数组成,函数则是具有特定功能的程序模块。对于一个应用程序来讲,还必须有一个main()函数,且只能有一个main()函数。该函数标志着执行应用程序时的起始点。其中,关键字int表示main()函数类型为int(整数)类型。在执行主函数后会得到一个值(函数值),其值为整型。程序第5行的“return0;”的作用就是当main()函数执行结束前将整数0作为函数值返回到调用函数处。1.3
C程序基本结构(4)函数中可以有多条语句。本例的main()函数中,有两条语句:printf("Hello,world\n");该语句用来在屏幕上输出“Hello,world”字符串。\n是换行符,即在输出“Hello,world”后,显示终端上的光标位置移动到下一行的开头。return0;是返回语句,将函数值返回到调用函数处。在使用函数库中的输入输出函数时,编译系统要求程序提供有关此函数的信息,程序中第一行“#include<stdio.h>”的作用就是用来提供这些信息的。stdio.h是系统提供的一个标准输入输出函数头文件,用#include指令把这些信息调入使用。(5)C程序中的每条语句都要以分号“;”结束。(6)为了增加程序的可读性,程序可以加入一些注释行,例如,用“//”开头的为单行注释。1.3
C程序基本结构以/*开始,以*/结束的为块注释,该注释可以包含多行内容,也可以单独占一行。多行注释如:/*----------------------------HelloWorld.c------------------------------*/(7)在C程序中,字母的大小写是有区分意义的,因此main、Main、MAIN都是不同的名称。作为程序的入口只能是main()函数。(8)C程序书写格式比较自由,一行内可以写多条语句,一个语句可以分写在多行上,但为了程序的可读性,建议每行只写一条语句。1.4程序设计基本过程用C语言编写程序,到最后得到结果,具体的步骤取决于计算机环境和使用的C编译器,但大体需要经过4个过程,即编写源程序、编译源代码、将目标代码与其他代码链接起来和运行。其过程如图所示。1.4.1
C程序的编写过程C程序运行过程1.4程序设计基本过程1.编写源程序编写源程序代码可以采用任何文本编辑器,如记事本。但用记事本书写程序效率较低,一般借助集成开发工具(IDE)编写程序代码。程序编写完成后,将代码文件保存为源程序文件(扩展名为.c文件)。2.编译源代码计算机不能直接理解任何除机器代码以外的语言,所以必须把编写好的程序翻译成机器语言,计算机才能执行程序。将其他语言翻译成机器语言的工具被称为编译器。编译器翻译的方式有两种:编译和解释。编译型语言:程序在执行之前需要一个专门的编译过程,把程序编译成机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性较差,如C、C++等。解释型语言:程序不需要在运行前编译,在运行程序时才翻译,专门的解释器负责在每个语句执行时解释程序代码。这样解释型语言每执行一次就要翻译一次,效率比较低,如JAVA、Python等。1.4程序设计基本过程3.将目标代码与其他代码链接起来链接是指将目标代码同使用的函数的目标代码(如C程序通用库)以及一些标准的启动代码组合起来,生成程序运行阶段版本。包含该产品的文件被称为可执行代码。编译源代码将目标代码与其他代码链接起来可以通过编译命令一次完成。4.运行程序编译通过后,可以运行程序,得到程序的运行结果。通过程序的运行结果是否正确可以初步判定程序是否正确。如果运行的结果不正确,则可能是程序的逻辑或算法上有错误;还有一些程序运行的结果可能在某些数据上输出结果是正确的,在其他数据上是错误的,这些都需要进一步排查程序的问题并进行改正。1.4程序设计基本过程1.分析问题对于接收的任务要进行认真分析,研究所给定的条件,分析最后应达到的目标,找出解决问题的规律,选择解题的方法,完成实际问题。2.设计算法设计算法即设计出解题的方法和具体步骤。3.编写程序将算法用程序设计语言实现,对源程序进行编辑、编译和链接(如果是解释型语言,则直接由解释器解释,无须编译和链接),得到可执行程序。4.运行程序并分析结果运行可执行程序,得到运行结果。能得到运行结果并不意味着程序正确,要对结果进行分析,看它是否合理。不合理要对程序进行调试,即通过上机发现和排除程序中的故障。1.4.2程序设计过程1.4程序设计基本过程5.编写程序文档许多程序是提供给别人使用的,如同正式的产品应当提供产品说明书一样,正式提供给用户使用的程序,必须向用户提供程序说明书。内容应包括:程序名称、程序功能、运行环境、程序的装入和启动、需要输入的数据,以及使用注意事项等。1.5算法的流程描述算法(Algorithm)是指解题方案的准确且完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入在有限时间内获得所要求的输出。一个算法应该具有以下五个重要的特征。有穷性1.确切性2输入项3输出项4可行性51.5算法的流程描述自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言。用自然语言表示算法通俗易懂,但容易出现歧义。当算法中的操作步骤都是顺序执行时比较直观、容易理解。缺点是如果算法中包含了判断结构和循环结构,并且操作步骤较多时,就显得不那么直观清晰了。1.5.1自然语言【例1-2】求1+2+3+……+10的和。分析:在本例中,我们常用的计算方法就是采用累加的方式进行计算,即先计算两个数相加的结果,然后再用此结果加第三个数,依此类推。下面用自然语言进行描述:设两个变量sum和i,sum记录求和结果,i代表加数。下面的S1,S2,……代表步骤1,步骤2,……S1:赋初值sum=0S2:赋初值i=11.5算法的流程描述S3:求sum+i的值,然后把结果存入sum,即sum+i->sumS4:使i的值增加1,即i+1->iS5:如果i的值不超过10,返回S3,继续执行S4和S5;否则,算法结束。最后得到的sum值即所求结果。类似这样描述算法的过程即自然语言。1.5算法的流程描述【例1-3】判定一个年份是否为闰年。分析:判断一个年份是否为闰年的条件:①年份能被4整除,但不能被100整除的是闰年,即非整百年数除以4,无余数为闰年,有余数不是闰年;②年份能被400整除是闰年,即整百年数除以400,无余数为闰年,有余数不是闰年。设y为要判定的年份,用自然语言进行算法描述如下:S1:输入年份yS2:若y不能被4整除,输出y“不是闰年”,算法结束S3:若y能被4整除,但不能被100整除,输出y“是闰年”,算法结束S4:若y能被400整除,输出y“是闰年”,算法结束S5:输出y“不是闰年”,算法结束除了一些比较简单的问题采用自然语言描述1.5算法的流程描述流程图(FlowChart),是指用规定的图形符号来描述算法。用图形表示算法,直观形象,易于理解。常用的流程图符号见表1-1。1.5.2流程图1.5算法的流程描述1.顺序结构顺序结构是基本、常见的结构。在这种结构中,各操作块按它们出现的先后顺序逐个执行,如图1-2所示。在执行A框中的操作后,接着执行B框中的操作。注:一个操作块可以是一个操作、一组操作或一个基本结构等。图1-2顺序结构1.5算法的流程描述2.选择结构在算法中,常要根据某个给定的条件P是否成立来决定执行几个操作块中的哪一个操作,具有这种性质的结构称为选择结构。选择结构又分为双分支结构和单分支结构。双分支结构在条件P成立时执行A操作,条件P不成立时执行B操作,如图1-3(a)所示。单分支结构在条件P成立时,执行A操作,条件P不成立时不执行任何操作,如图1-3(b)所示。图1-3选择结构1.5算法的流程描述3.循环结构循环结构:程序中经常要在某处反复执行一连串操作,这种情况应采用循环结构,需要反复执行的操作块称为循环体。按照是否进行循环的条件,可将循环结构分为当型循环结构和直到型循环结构两类。当型循环结构:当给定条件P成立时,反复执行循环体(A框);当给定条件P不成立时,终止执行。若刚开始时条件P就不成立,则循环体一次也不执行。如图1-4(a)所示。图1-4循环结构直到型循环结构:反复执行循环体(A框),一直执行到给定条件P成立时,终止执行。无论条件P是否成立,都至少执行一次循环体。如图1-4(b)所示。一个问题如果可以用当型循环来解决,一般也可以用直到型循环来解决,即这两种循环可以互相转换。1.5算法的流程描述图1-5求和算法流程三种基本结构有以下共同特点:(1)只有一个入口。(2)只有一个出口。请注意:一个菱形判断框有两个出口,而一个选择结构只有一个出口,不要将菱形框的出口和选择结构的出口混淆。(3)结构内的每部分都有机会被执行到。(4)结构内不存在“死循环”(无终止的循环)。下面将例1-2的算法描述改用流程图表示【例1-4】用流程图描述求1+2+3+……+10的和。按照流程图的规定,连续求和要用到循环结构,此处选用当型循环结构,算法流程如图1-5所示。1.5算法的流程描述图1-6判断闰年的算法流程【例1-5】用流程图描述判定一个年份是否为闰年。判断一个年份是否为闰年的条件:①非整百年数除以4,无余数为闰年,有余数不是闰年;②整百年数除以400,无余数为闰年,有余数不是闰年。算法流程如图1-6所示。1.5算法的流程描述灵活的流程图在程序设计中有它自己的优点,但也隐藏着许多导致错误的因素。因为它允许用流程线使流程任意转移,这对程序设计是一个隐患,它使程序流程看起来较乱,使程序难以理解和维护。针对这一弊端,1973年美国学者I.Nassi和B.Shneiderman提出了一种无流程线的流程图,称为N-S图。它的基本表示方法是用一个矩形框,把整个程序算法像堆积木一样组合起来。其基本结构如图1-7所示。1.5.3
N-S流程图图1-7N-S流程图1.5算法的流程描述(1)顺序结构,由若干个前后衔接的矩形框组成,如图1-7(a)所示,先执行A,然后执行B。(2)选择结构,如图1-7(b)所示,当条件成立时执行A分支,条件不成立时执行B分支。(3)循环结构,包含当型循环(图1-7(c))和直到型循环(图1-7(d))两种结构。当型循环结构先判断条件,当条件成立时反复执行A操作(循环体),直到条件不成立时结束循环。直到型循环结构先执行A操作(循环体),然后判断条件是否成立,如果不成立则返回继续执行A操作,当条件成立后,结束循环。图1-7中的A和B可以是一个简单的操作,也可以是三种基本结构之一。1.5算法的流程描述【例1-6】用N-S流程图表示例1-4。用N-S流程图描述求和算法如图1-8所示。图1-8用N-S流程图描述求和算法1.5算法的流程描述【例1-7】用N-S流程图表示例1-5。用N-S流程图描述判断闰年算法如图1-9所示。流程图中用到3个选择结构。图1-9用N-S流程图描述判断闰年算法1.5算法的流程描述伪代码是用介于自然语言和计算机语言之间的一种文字和符号来描述算法,不涉及图形,书写方便,格式紧凑,修改方便,容易看懂。用伪代码书写算法无固定的、严格的语法规则,可以用英文、中文或中英文混用。【例1-8】用伪代码描述求1+2+3+……+10的和。1.5.4伪代码sum=0i=1while(i≤10){sum=sum+ii=i+1}输出sum1.6结构化程序设计方法结构化程序设计(Structured
Programming)是一种软件开发方法,旨在提高程序的可读性和可维护性。它的核心思想是使用少数几种定义清晰的控制结构来构造程序,避免使用复杂、难以理解的程序结构。1.自顶向下在软件系统设计时,应先考虑总体,搭建起系统架构,后考虑细节,先考虑全局目标,后考虑局部目标。一开始不要过多追求细节,先从最上层总目标开始设计,逐步使问题具体化。2.逐步细化对复杂问题,应设计一些子目标作为过渡,逐步细化。逐步细化和自顶向下常常结合使用,把逐步细化看作自顶向下设计的具体体现。1.6结构化程序设计方法3.模块化一个复杂问题,是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为多个子目标,再进一步分解为具体的小目标,每一个小目标称为一个模块。每个模块相对独立、功能单一,每个模块负责完成一项特定的任务。结构化程序设计有顺序结构、选择结构和循环结构三种基本控制结构,通过组合和嵌套实现任何单入口单出口的程序。4.结构化程序设计的步骤开发一个软件系统,无论这个系统规模有多大,我们通常需要按照下述步骤进行分析与实现。(1)分析问题对要解决的问题,首先必须分析清楚,明确问题的要求,列出所有已知量,找出题目的求解范围、解的精度等。通过分析,主要获取问题所涉及的数据,包括已有数据、中间结果及最终要得到的数据。1.6结构化程序设计方法(2)建立模型对实际问题进行分析,找出数据间的内在规律,在已有数据和最终要得到的数据之间建立模型,利用计算机来解决。(3)设计算法建立模型后,还不能开始编写程序,必须先根据数据的结构设计解决算法的问题(解题步骤)。选择算法一般要注意:•算法的逻辑结构尽可能简单;•算法所要求的存储量应尽可能少,即算法的空间复杂度尽可能小;•避免不必要的循环和递归,减少算法的执行时间,即算法的时间复杂度尽可能小;•在满足题目要求条件下,使所需的计算量最小。1.6结构化程序设计方法(4)编写程序采用某种计算机语言,将前面所涉及的数据和算法进行详细描述,把整个程序看作一个整体,先全局后局部,自顶向下,逐层分解处理,如果某些子问题的算法相同而仅参数不同,可以用子程序来表示。(5)调试运行将整个程序编译、调试后,运行程序得出结论。(6)程序测试根据运行结果分析程序,通过数据验证程序的正确性。(7)撰写程序文档主要是对程序中的变量、函数或过程做必要的说明,解释编程思路,讨论运行结果等。1.7集成开发环境1.启动VisualStudio本节以VisualStudio2010为例,后续版本使用方法一致。当VisualStudio2010成功安装后,在Windows桌面依次选择“开始”→“所有程序”→“MicrosoftVisualStudio2010”,可以启动VisualStudio2010。VisualStudio2010的集成开发环境如图1-10所示。1.7.1
VisualStudio图1-10VisualStudio2010的集成开发环境1.7集成开发环境2.创建工程(1)依次单击“文件”→“新建”→“项目”,如图1-11所示。图1-11“新建”菜单1.7集成开发环境(2)“新建项目”对话框如图1-12所示,在左侧“已安装的模板”选择“VisualC++”→“Win32”,右侧选择“Win32控制台应用程序”,在下面“名称”栏后文本框输入项目名称,“位置”栏文本框选择项目的保存位置,或单击“浏览(B)”按钮进行选择,然后选中“为解决方案创建目录”,最后单击“确定”按钮。图1-12“新建项目”对话框1.7集成开发环境(3)出现如图1-13所示“Win32应用程序向导”,单击“下一步”按钮。图1-13Win32应用程序向导(1)1.7集成开发环境(4)如图1-14所示,其中“应用程序类型”选择“控制台应用程序”,“附加选项”选择“空项目”。最后单击“完成”按钮完成项目的创建工作。图1-14Win32应用程序向导(2)1.7集成开发环境3.编辑C源程序(1)在集成开发环境窗口右边“解决方案资源管理器”中右击“源文件”,依次选择“添加”→“新建项”,如图1-15所示,或单击“项目”菜单下子菜单“添加新项”。图1-15新建项1.7集成开发环境图1-16“添加新项”对话框(2)打开“添加新项”对话框,如图1-16所示,左侧“已安装的模板”中选择“VisualC++”下面的“代码”,右侧选择“C++文件(.cpp)”,下面名称栏文本框中输入文件名称,“位置”选择保存路径(建议用缺省,和项目在同一目录下),最后单击“添加”按钮。(3)在代码编辑区输入如图1-17所示代码。再单击“文件”菜单下的“保存”子菜单,保存好源代码。图1-17编辑C源代码1.7集成开发环境4.编辑和运行(1)在“生成”菜单中单击“生产解决方案”或按快捷键“F7”,如图1-18所示。(2)编译成功后,单击“调试”菜单中的“开始执行(不调试)”,或按快捷键“Ctrl+F5”执行程序,如图1-19所示。(3)运行结果如图1-20所示。图1-18“生成”菜单图1-19“调试”菜单图1-20运行结果1.7集成开发环境Dev-C++是一个Windows下的C和C++程序的集成开发环境。它使用MingW32/GCC编译器,遵循C/C++标准。开发环境包括多页面窗口、工程编辑器及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度的语法显示,以减少编辑错误,还具有完善的调试功能。Dev-C++还为很多程序设计竞赛提供比赛环境。1.启动Dev-C++当Dev-C++成功安装后,通过选择Windows桌面的“开始”→“所有程序”→“Blood-shedDev-C++”→“Dev-C++”,可以启动Dev-C++。Dev-C++的集成开发环境如图1-21所示。1.7.2
Dev-C++1.7集成开发环境图1-21Dev-C++的集成开发环境1.7集成开发环境2.创建项目在Dev-C++环境中,开发应用程序的第一步是创建一个项目。(1)依次单击“文件”→“新建”→“项目”,弹出“新项目”对话框,选择“ConsoleApplication”,在“名称”栏文本框输入项目的名称,选择“C项目”或“C++项目”选项,此处选择“C项目”,如图1-22所示。图1-22“新项目”对话框1.7集成开发环境(2)单击“确定”按钮,将弹出保存对话框,选择项目保存的位置,选择保存位置后,系统创建项目,并自动创建一个main.c源程序文件,如图1-23所示。图1-23main.c源程序文件(1)1.7集成开发环境3.编辑C源程序在如图1-23所示编辑区main函数中输入如下代码:intmain(intargc,char*argv[]){printf("Helloworld");//新加入代码
return0;}在编辑区输入完代码后,再单击“文件”菜单下的“保存”子菜单,保存代码。1.7集成开发环境4.编译和运行(1)单击工具栏中的“编译”图标,或“运行”菜单下的“编译”子菜单或按快捷键“Ctrl+F9”编译程序,如果编译成功,显示结果如图1-24所示。(2)运行程序,单击工具栏中的“运行”图标或“运行”菜单下的“运行”子菜单,运行程序。图1-24编译结果信息(1)1.7集成开发环境(3)运行结果如图1-25所示。图1-25运行结果(1)1.7集成开发环境Code::Blocks简写成CodeBlocks,是一款开源的C++集成设计环境。CodeBlocks支持跨平台,不仅支持Linux和Windows,也支持Mac系统。多编译器支持,对于C++语言,CodeBlocks支持包括BorlandC++、VC++、InterC++等超过20个不同厂家或版本编译器。另外CodeBlocks也支持多种编程语言的编译,包括“D”语言。通常情况下,我们采用开源g++编译器作为C++默认的编译器。在Linux下,g++由操作系统自带。Windows环境下,需要mingw32库支持。不过,Code::Blocks在安装包中已经自带了mingw32的库文件。1.7.3
CodeBlocks1.7集成开发环境1.启动CodeBlocks当CodeBlocks成功安装后,通过选择Windows桌面的“开始”→“所有程序”→“CodeBlocks”,启动CodeBlocks。它的集成开发环境如图1-26所示。图1-26
CodeBlocks的集成开发环境1.7集成开发环境2.创建工程和源文件在CodeBlocks环境中,开发应用程序的第一步是创建一个工程。(1)依次单击“File”→“New”→“Project”,如图1-27所示。选择“Console
application”,如图1-28所示,单击“Go”按钮,再次出现“Consoleapplication”对话框,直接单击“Next”按钮。图1-27“New”菜单图1-28“Newfromtemplate”对话框1.7集成开发环境(2)在“Consoleapplication”中选择编程语言,可以选择C或者C++,C++编译器一般都可以编译C程序,这里选择“C”,再单击“Next”按钮,如图1-29所示。(3)在出现的对话框中,“Projecttitle”文本框输入工程的名称,“Foldertocreateprojectin:”选择工程的存放位置,之后会自动生成工程文件名*.cbp(cbp是Code::BlocksProject),再单击“Next”按钮,如图1-30所示。图1-29选择语言图1-30工程名称和位置设置对话框1.7集成开发环境(4)编译器一般选择“GNUGCCCompiler”,其他采用默认即可,再单击“Finish”按钮,如图1-31所示。图1-31选择编译器1.7集成开发环境(5)系统创建好工程,并自动创建一个“main.c”的源程序文件,如图1-32所示。打开main.c文件后,我们就可以到这里输入源代码文件了,输入完源代码后,保存文件。这里也可以不创建工程,而直接创建一个C源文件,依次单击“File”→“New”→“File”,即可创建一个空的源程序文件,可以在里面输入源程序。图1-32main.c源程序文件(2)1.7集成开发环境3.编译和运行(1)单击工具栏中的“Build”选项,或“Build”菜单下的“Build”子菜单或按快捷键“Ctrl+F9”编译程序,如图1-33所示,如果编译成功,编译结果如图1-34所示,编译出错则会出现错误提示信息。图1-33“Build”菜单图1-34编译结果(2)1.7集成开发环境(2)运行程序,单击工具栏中的“Run”按钮或“Build”菜单下的“Run”子菜单或按快捷键“Ctrl+F10”运行程序。(3)运行结果如图1-35所示。有关程序的调试请查看附录B和附录C图1-35运行结果(2)1.8程序设计竞赛国际大学生程序设计竞赛(International
CollegiateProgrammingContest,ICPC)是世界上规模较大、水平较高的国际大学生程序设计竞赛之一,其宗旨是使大学生通过计算机充分展示分析和解决问题的能力。全球总决赛第一名将获得奖杯。另外,成绩靠前的参赛队伍也将获得金、银和铜牌。而成绩在中等以下的队伍会得到确认但不会进行排名。1.8.1
ICPC国际大学生程序设计竞赛1.8程序设计竞赛1.参赛队组成ICPC以团队的形式代表各学校参赛,参赛队可以是来自任何国家和地区的高校,每个赛区的优胜队伍将获得参加国际大学生程序设计竞赛全球总决赛资格。2.竞赛过程(1)竞赛中至少命题8道,比赛时间为5小时。(2)参赛队员可以携带诸如手册、程序清单等参考资料。(3)试题的解答提交裁判称为运行,每一次运行会被判为正确或者错误,判定结果会及时通知参赛队伍。1.8.2竞赛规则1.8程序设计竞赛(4)正确解答中等数量及中等数量以上试题的队伍会根据解题数目进行排名。在决定获奖和参加全球总决赛的队伍时,如果多支队伍解题数量相同,则根据总用时加上惩罚时间进行排名。总用时和惩罚时间由每道解答正确的赛题的用时加上罚时而成。每道题用时将从竞赛开始到该题解答被判定为正确为止,其间每一次错误的运行将被加罚20分钟时间,未正确解答的试题不计时。(5)亚洲区域赛语言包括C++、C和Java。(6)每支队伍使用一台计算机,所有队伍使用计算机的规格配置完全相同。1.8程序设计竞赛中国大学生程序设计竞赛(ChinaCollegiateProgrammingContest,CCPC)是工业和信息化部教育与考试中心主办的“强国杯”技术技能大赛项目,由中国大学生程序设计竞赛组委会组织承办,旨在激发高校学生学习计算机领域专业知识与技能的兴趣,鼓励学生灵活运用计算机知识和技能解决实际问题,有效提升算法设计、逻辑推理、数学建模、编程实现和计算机系统能力,培养团队合作意识、挑战精神和创新能力,培育和选拔出一大批素质优良、结构合理的高素质信息技术人才队伍,服务“两个强国”建设。CCPC的比赛规则与ICPC一致。1.8.3
CCPC中国大学生程序设计竞赛1.8程序设计竞赛团体程序设计天梯赛属于中国高校计算机大赛之一,分为3个组别:珠峰争鼎(本科组)、华山论剑(本科组)、沧海竞舟(专科组)。本科生限参加“华山论剑”组或“珠峰争鼎”组;专科生可参加任一组。每支参赛队由最多10名队员组成。每名参赛队员必须是参赛队所属高等学校的在册本科生或专科生。一支队伍中只要有一名本科生,即不可报名“沧海竞舟”组。每所高校报名参赛的队数不限,但只有成绩最好的3支队伍参加计分与评奖。同一所高校的参赛队若同时报名参加不同组别,则按最高组别确定高校排名,并且只计算最高组别的前3支参赛队的得分。原则上,获得两届竞赛冠军(高校、团队、个人)的队员,将被谢绝参赛。但如果高校获奖的组别升级,则在高组别参赛的次数可重新计算。每个参赛队必须有至少1名教练,教练必须是参赛队所属高等学校的正式教师。一位教练可以作为多支参赛队的代表,负责竞赛活动中的指导和联系等工作。教练必须保证所有队员符合本规程的规定。每所学校教练的人数原则上不应超过参赛队员人数的1/5。1.8.4团体程序设计天梯赛1.8程序设计竞赛Online
Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交多种程序(如C、C++、JAVA)源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。现在国内外很多高校都建有自己的OJ,大家可以在网络上搜索,免费注册并进行练习。1.评测系统反馈ICPC国际大学生程序设计竞赛中,自动评测系统所给的反馈信息极少,主要包括:•Accepted(AC):正确。祝贺您!您的程序是正确的,并且运行时间和内存开销均不超过相应的限制。•PresentationError(PE):格式错。您的程序输出了正确的结果,但是输出格式并非严格满足题目说明。请检查空格、换行、左右对齐等。•WrongAnswer(WA):答案错。您的程序对一组或者多组评测系统内部的非公开测试数据给出了错误的结果,因此还需要更进一步的调试。1.8.5自动评测系统1.8程序设计竞赛•RuntimeError(RE):运行错。您的程序在运行结束之前存在段错误(SegmentationFault)、访问冲突(ACCESSVIOLATION)、数组下标超出范围(ARRAYBOUNDSEXCEEDED)、浮点异常(FLOATPOINTEXCEPTION)或其他类似错误、除零错误(DIVISIONBYZERO)、栈溢出(STACKOVERFLOW)等。请仔细检查程序中类似的错误。•TimeLimitExceeded(TLE):超时。您的程序在某一组或多组数据上运行的时间过长,该程序可能存在效率问题。•MemoryLimitExceeded(MLE):超内存。您的程序试图使用超过评测系统规定大小的内存。•OutputLimitExceeded(OLE):超输出。您的程序输出了过多的信息,这通常意味着您的程序陷入了一个带输出的无限循环中。•CompileError(CE):编译错。编译器无法成功地编译您的程序,错误信息将返回给用户,编译过程中产生的警告信息不会导致此错误。•SystemError:系统错。例如您的程序需要超过了硬件限制的内存。1.8程序设计竞赛2.在线评测系统-ACM网站(1)国内①湖南师范大学ACM网站含有涉及数据结构、算法、计算几何、湖南省大学生程序设计比赛题目等超过1600道题目。②杭州电子科技大学功能比较齐全,国内比较权威的ACM网站。有超过5000道题目,亚洲区域赛国内赛站的网络预赛和现场赛的题目均可在本网站找到。此外,还可以在网站上组织比赛(DIYcontest)。③北京大学题目是全英文的,题目的数量、质量都很高,是国内知名的在线评测系统。1.8程序设计竞赛(2)国外①俄罗斯乌拉尔大学(URAL),题目为全英文,题目的数量、质量都很高。②西班牙瓦拉杜利德大学(UVA)OJ,历年区域赛和全球总决赛的题目均可以在此OJ上找到。③美国USACO在线评测系统具有递进的层次结构,由易到难,形成鲜明知识结构的特点。定期有各种比赛可以参与,不仅能在网站上看自己提交的代码,而且可以查看别人提交的代码,并且提供题目的测试数据。④俄罗斯CodeforcesCodeforces是一个提供在线评测系统的网站。1.9习题1.熟悉C语言的集成开发环境的使用。2.掌握C应用程序的编辑、编译、链接和运行过程。3.将本章中的例题程序在集成开发环境中进行测试。4.熟悉OJ的使用,在OJ上注册自己的账号。5.分别用自然语言、流程图、N-S流程图和伪代码描述下面问题的算法。(1)求N的阶乘。(2)判断一个数是否为素数。6.什么是结构化程序设计方法?它的主要内容包括哪些?
2.1顺序结构程序设计概述在C语言中,程序的基本结构包括顺序结构、选择结构和循环结构。已经证明:任何可解问题的解决过程都是由这三种结构通过有限次组合而成的。其中,顺序结构是最基本的结构,它按照代码的顺序从上到下依次执行。在顺序结构中,程序的执行流程是线性的,从头到尾依次执行每个语句。顺序结构通常用于简单的程序,例如计算一个数的加法或减法等。【例2-1】下面是一个简单的C语言程序,计算a加b的结果,它演示了顺序结构的基本用法。#include<stdio.h>intmain(){
inta=5;
intb=10;
intsum=a+b;
printf("Thesumof%dand%dis%d\n",a,b,sum);
return0;}2.2数据类型C语言是一门强数据类型语言,类型是C语言中非常重要的概念。C语言中的所有数据都属于且只属于某一种类型。C语言不存在没有类型的数据,也不存在拥有多种类型的数据。C语言将类型划分为基本类型与复合类型,基本类型包括整型、实型和字符型,复合类型包括数组、指针、结构体、共用体、枚举以及空类型。2.2数据类型1.常量在程序运行过程中,其值不能改变的数据对象称为常量(constants)。(1)整型常量:整型常量可以是十进制、八进制或十六进制。例如:123、0123(八进制,前缀为数字0)、0x2F(十六进制,前缀为数字0和字符x,x大写和小写均可)。(2)浮点型常量:浮点型常量由整数部分、小数点、小数部分和指数部分组成。可以用两种形式表示,一是十进制小数形式,例如:123.456。二是指数形式,例如:3.14e+002(代表3.14×102),e或E代表以10为底的指数。(3)字符型常量:字符型常量是用单引号括起来的单个字符。例如:'a'、'1'。值得注意的是,字符常量在内存中是以ASCII码的形式存储的,因此,一个字符常量也是一个整数。例如:字符'0'的ASCII码值为48,字符'1'的ASCII码值为49,字符'A'的ASCII码值为65,字符'a'的ASCII码值为97,同一个字符的大小写字符的ASCII码值相差32。字符常量可以像其他整数一样参与数值运算。2.2.1常量和变量2.2数据类型C语言还有一种特殊形式的字符常量,即转义字符。转义字符以反斜线\开头(注意与除号/的区别),形式仍然需要加单引号,反斜线后面的内容又可分为3种:第1种是规定的11个简单转义字符;第2种是反斜线后接1到3个数字,这1到3个数字代表一个八进制数,对应所表示字符的ASCII码值;第3种则是反斜线后面接一个小写字母x,然后接若干个数字表示一个十六进制数,对应所表示字符的ASCII码值。转义字符见表2-1。2.2数据类型(4)字符串常量:字符串常量也称为字符串字面值,是由双引号括起来的0个或多个字符组成的字符序列。例如:“Hello,World!”,""(空字符串)。字符串常量在内存中由连续的字符组成,以'\0'作为结束标志。(5)符号常量:在C语言中,符号常量是指在代码中使用一个标识符来表示一个固定的值,这个标识符就称为符号常量。符号常量的特点是编译后写在代码区,不可寻址,不可更改,属于指令的一部分。符号常量在使用之前必须先定义,其一般形式为:#define标识符常量。例如:#definePI3.14159常量的值可以是整数、浮点数、字符等类型。一旦定义了符号常量,就可以在程序中多次使用该标识符,预处理器会在编译时将其替换为对应的常量值。2.2数据类型(6)枚举常量:枚举类型是一种用户定义的数据类型,它包含一组常量整型值的列表。例如:enumcolor{RED,GREEN,BLUE};在没有显示说明的情况下,enum类型中第一个枚举名的值为0,第二个为1,依此类推。2.变量变量是一个有名字的、在内存中占据一定存储单元,用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的。在C语言中,变量必须先声明后使用。声明变量时,需要指定变量的名称和数据类型。2.2数据类型(1)标识符标识符是用来表示常量、变量、函数、数组、类型等命名的有效字符序列。构造一个标识符的名字,需要按照一定的规则。C语言标识符的命名规则是:①由字母或下划线“_”开头,后面接字母、数字或者下划线。②用户自定义的标识符不能与关键字同名。例如:school_id,_age,es10为合法的标识符。school-id,man*,2year,class为不合法的标识符。(2)关键字关键字是一种特殊的标识符,又称保留字,是C系统为完成语言功能特别保留下来的一些单词。C语言关键字见表2-2。2.2数据类型(3)变量的定义和初始化C语言使用变量定义语句来定义变量,其格式为:类型名变量名列表;其中,类型名表示数据类型的名字;变量名列表的格式为“变量名1,变量名2,…”,变量名就是前文所述的标识符;注意后面的分号是不可以缺少的。例如:inta;//定义了一个int类型的变量,名字为afloatx,y;//定义了2个float类型的变量,名字分别为x、yDoubled1,d2,d3;//定义了3个double类型的变量,名字分别是d1、d2和d32.2数据类型C语言中,变量最重要的4个属性:名、型、值、址。以第一个例子为例,该变量的名为a,类型是int,其取值的可能范围就是int的取值范围,且通过合法的语句是可以变化其值的,a的址就是指a在内存空间中的保存地址(关于地址将在指针一章详细讲述)。实际上,变量一旦被定义,名、型、址都是不能变的,能变的只有值。变量的值可以通过若干方法去改变,在定义时确定其值则称为初始化。例如:inta=3;Floatx=3.1,y=4.6;doubled1=.1,d2=1.,d3=2.31415925;2.2数据类型整型是C语言基本的数据类型之一,不严格地说,整型就是用来表示整数的。但严格地加以分辨,整数是一个数学概念,而整型是一个计算机概念,二者既有联系又有区别。C语言使用关键字int来表示整型,根据其能不能加正负号以及所占内存大小又可细分为以下几种:unsignedshortint,signedshort,unsignedint,signedint,unsignedlongint,signedlongint,unsignedlonglongint,signedlonglongint。如果只写int,则默认表示signedint。C标准本身并不规定一个int在内存中应该占据多少字节,由于32位CPU占据市场主流非常长的时间,直到今天也仍然没有完全退出。所以事实是一个int占据4个字节。所以int类型总共拥有232
种可能的状态,也就是int一共可以表示232个不同的数值。2.2.2整型2.2数据类型大家都知道数学上的整数是无穷的,那么C语言中int到底包含哪232
个整数呢?这就跟另外2个关键字有关。如果是unsignedint,就说明该类型包含的是无符号整数,其实就是无负号整数,包括0,所以unsignedint的取值范围是[0,232-1]。如果是signedint,那么就有正有负了,C++规定负数占一半,0和正数占另一半,所以取值范围是[-231,231-1]。整型数据常见类型和取值范围见表2-3。2.2数据类型C语言允许整型常量(3种形式的整型常量都可以)后面接2组4个后缀,分别是u、U和l、L。其中,u或U表示该整型常量是无符号整型常量,而l或L表示该整型常量是一个长整型常量,连续两个ll或者LL表示该整型常量是一个长长整型常量(64位整型)。同时U和L也可以不计秩序地进行组合。例如:255U、255L、255LL、255UL、255LU、255ULL、255LLU都是合法的整型常量。虽然这些常量的值都是255,但它们的类型并不完全相同。2.2数据类型【例2-2】从键盘输入两个整数,使用简单计算器求它们的和并输出。分析:在程序设计中,大部分程序都可以看成是由输入、处理、输出三部分组成的,但部分程序也可以缺少其中部分成分。输入即从键盘或文件读取需要的数据;处理是实现要完成的功能,比如计算;输出是将结果展示给用户。对应到简单计算器:输入———两个整数;处理———计算两个整数的和;输出———把计算出来的和展示给用户。输入使用scanf函数,2.5节将详细介绍。代码如下:2.2数据类型#include<stdio.h>intmain(){inta,b,sum;scanf("%d%d",&a,&b);//给变量a,b输入值,%d表示整数
sum=a+b;printf("%d\n",sum);//输出和sumreturn0;}2.2数据类型C中的浮点型分为3类:float、double和longdouble,一般称之为单精度实型、双精度实型和长精度实型。同样,C标准本身并不规定实型在内存中应该占据多少个字节。但目前的事实是:float占据4个字节,double占据8个字节,而longdouble还没有达成一致,有的系统给它分配12个字节,有的则分配16个字节(所以longdouble一般使用较少)。可以看出,C能够表达的实数是有限的。C可以表达的不同单精度实型数一共有232个,双精度实型有264
个。由于C采用了IEEE的浮点数表示法,所以C能够表示的实数是以取值范围和精度来衡量的。浮点数据取值范围见表2-4。2.2.3浮点型2.2数据类型C使用关键字char来定义字符型变量,同时前面可加signed或者unsigned。C使用1个字节来存储字符型变量,所以signedchar的取值范围是[-128,127],unsignedchar的取值范围是[0,255]。计算机内部原则上只能保存二进制的整数,所以当要存储和表示字符数据时就需要进行编码(实际上存储、表示任何类型都需要编码)。基本上所有的C实现都采取ASCII编码。ASCII编码的全称是AmericanStandardCodeforInformationInterchange,简单地说就是用[0,127]这128个数字分别表示对应的128个字符。具体哪个数字对应哪个字符请参考本书附录A。2.2.4字符型2.2数据类型#include<stdio.h>intmain(){charc1='e',c2=75;printf("%d\n",c1);printf("%c\n",c2);printf("%d\n",c1-c2);printf("%c\n",c1+2);return0;}2.2数据类型运行结果:101K26g程序说明:printf("%d\n",c1);以整型输出c1的值,输出结果为101,即字符'e'的ASCII码值。printf("%c\n",c2);以字符型输出c2的值,输出结果为字符'K',即整数75对应字符'K'。printf("%d\n",c1-c2);以整型输出c1-c2的值,即字符的ASCII码值相减,结果为101-75=26。printf("%c\n",c1+2);以字符型输出c1+2的值,c1+2的值为101+2=103,即字符'g'。因此,字符型可以当成整型使用,并进行算术运算。2.2数据类型在C语言中,没有内置的bool类型。但是,从C99标准开始,C语言引入了一个可选的stdbool.h头文件,该文件定义了bool类型。使用stdbool.h头文件,可以在代码中使用bool类型,它是一个整数类型,通常具有两个可能的值:true(1)和false(0),其中非0值表示true,0值表示false。2.2.5布尔型2.2数据类型【例2-4】布尔类型的使用。#include<stdio.h>#include<stdbool.h>intmain(){boola=100;printf("%d\n",a);a='F’;printf("%d\n",a);a=false;printf("%d\n",a);a=0;printf("%d\n",a);return0;}2.2数据类型运行结果:1100从运行结果可以看出,非0值在输出的时候均输出1,表示true。2.3运算符和表达式C语言的运算符是一种特殊字符,它指明用户对操作数进行的某种操作。表达式则是由若干个变量、常量及运算符按一定格式形成组合后生成新的值,同时单独的变量或者常量也视为一个表达式。每一个表达式都有一个计算结果,计算表达式的过程称之为估值。例如:3+4就是一个表达式,其估值结果为7;单独的3也是一个表达式,其估值结果就是3。2.3运算符和表达式算术运算符用于算术运算,C的算术运算符共5个:+、-、*、/、%,分别是加、减、乘、除、取模(取余),都是双目中缀运算符。加、减的优先级显然低于乘、除、取模,这5个运算符的结合性都是左结合。在使用的时候特别要注意乘法和除法的符号与数学中符号的区别。【例2-5】交换变量的值。有两个瓶子a和b,分别盛放醋和油,现要求将它们互换,即把a瓶子中的醋倒入b瓶子,b瓶子中的油倒入a瓶子。模拟交换的过程。分析:设a瓶子中有150毫升醋,b瓶子中有180毫升油,要交换a瓶子里的醋与b瓶子里的油,需要借助一个空瓶子t。(1)把a瓶子中的醋倒入t瓶子;(2)把b瓶子中的油倒入a瓶子;(3)把t瓶子中的醋倒入b瓶子。输出交换a、b瓶子中的物品质量。2.3.1算术运算符2.3运算符和表达式程序代码如下:#include<stdio.h>intmain(){inta,b,t;a=150;b=180;t=a;a=b;b=t;printf("a=%d,b=%d",a,b);return0;}运行结果:a=180,b=1502.3运算符和表达式知识引申:请读者思考,交换两个变量的值的时候,可不可以不借助变量t完成两个变量值的交换。分析:如果两个变量存放的值对应的数据类型是数字类型,则可以进行交换,如a=150,b=180,计算过程如下:(1)若a=a+b,则a=330;(2)b=a-b,则b=150;(3)a=a-b,则a=180。通过三步计算完成了a和b值的交换,程序代码如下:#include<stdio.h>intmain(){inta,b;a=150;b=180;a=a+b;b=a-b;a=a-b;printf("a=%d,b=%d",a,b);return0;}2.3运算符和表达式关系运算符用于对两个操作数进行关系比较,关系运算符的运算结果是一个逻辑值,即true(其值为1)或者false(其值为0)。关系运算符一共有6个:==、!=、<、<=、>、>=,分别是等于、不等于、小于、小于等于、大于、大于等于。其运算含义就是当运算符描述的数学关系成立时结果为true,否则为false。例如:3==3的结果是true,而3<2的结果是false。关系运算符都是双目中缀运算符,==、!=的优先级要低于另外4个,所有关系运算符都是左结合的。2.3.2关系运算符2.3运算符和表达式【例2-6】分析程序中关系表达式的值。#include<stdio.h>intmain(){printf("65==65.0的值为%d\n",65==65.0);printf("9.0+1e-306>9+0的值为%d\n",9.0+1e-306>9+0);printf("68>'A'的值为%d\n",68>'A');return0;}运行结果:65==65.0的值为19.0+1e-306>9+0的值为068>'A'的值为12.3运算符和表达式C语言有3个逻辑运算符:!、&&、||,分别是非(NOT)、与(AND)、或(OR)。其中非运算符是单目前缀运算符、右结合,与和或运算符都是双目中缀运算符、左结合,它们的优先级从高到低依次为非、与、或。逻辑运算的结果可以由真值表确定。逻辑运算的真值表见表2-5~表2-7。2.3.3逻辑运算符2.3运算符和表达式【例2-7】分析程序中逻辑表达式的值。#include<stdio.h>intmain(){inta=10,b=0;printf("a&&b=%d\n",a&&b);printf("a||b=%d\n",a||b);printf("!a=%d\n",!a);printf("!b=%d\n",!b);printf("(a>=5)&&(a<=10)=%d\n",(a>=5)&&(a<=10));return0;}运行结果:a&&b=0a||b=1!a=0!b=1(a>=5)&&(a<=10)=12.3运算符和表达式自增运算符的形式为++,俗称“加加”;自减运算符的形式为--,俗称“减减”。自增运算符一共有两种,但形式上是一样的,都是++。一个是单目前缀运算符,另一个是单目后缀运算符,所以可以通过操作数的位置来判断到底是哪一种自增运算符。自减运算符也有两种,情况与自增运算符类似。自增运算符和自减运算符的操作数都必须是左值,也就是能够出现在赋值符号左边的量,所以++3、(a+b)++等都是语法错误的表达式。前缀自增运算符的含义是将操作数的原值取出加1,并将加1后的值赋给操作数,同时整个前缀自增运算符表达式的估值结果是使用加1后的值。后缀自增运算符的含义则是将操作数的原值取出加1,再将加1后的值赋给操作数,同时整个后缀自增运算符表达式的估值结果是原值,即加1以前的值。所以前缀自增运算符和后缀自增运算符对操作数的操作是一致的,不一致的地方是表达式的估值结果。此外,前缀自增运算符表达式返回的是左值,后缀自增运算符表达式返回的是右值。自减运算符则是对操作数的原值进行减1操作再将新值赋给操作数,自减运算符的前缀运算符与后缀运算符的区别与自增运算符一致。2.3.4自增运算符和自减运算符的使用2.3运算符和表达式【例2-8】分析程序中自增和自减运算的值。#include<stdio.h>intmain(){inta=10,b;b=a++;printf("a=%d,b=%d\n",a,b);b=++a;printf("a=%d,b=%d\n",a,b);b=a--;printf("a=%d,b=%d\n",a,b);b=--a;printf("a=%d,b=%d\n",a,b);return0;}运行结果:a=11,b=10a=12,b=12a=11,b=12a=10,b=102.3运算符和表达式C语言位运算符广义上分为狭义位运算符和移位运算符。移位运算符下一节讲述,本节所指的位运算符就是狭义位运算符,共4个:~、&、^、|,分别是位非、位与、位异或、位或,优先级也是按照这个顺序排列。其中,位非是单目前缀运算符,右结合,其余都是双目中缀运算符,左结合。位与运算符(&):该运算符将两个整数的二进制位进行与操作,只有当两个相应的二进制位都为1时,结果位才为1,否则为0。位或运算符(|):该运算符将两个整数的二进制位进行或操作,只要两个相应的二进制位中有一个为1,结果位就为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论