❶ C语言源程序文件的后缀是什么,经过编译后生成文件的后缀是什么经过连接后生成文件的后缀是什么
C语言源文件后缀名是.c,编译生成的文件后缀名是.obj,连接后可执行文件的后缀名是.exe。
源文件的后缀仅仅是为了表明该文件中保存的是某种语言的代码(例如.c文件中保存的是C语言代码),这样程序员更加容易区分,编译器也更加容易识别,它并不会导致该文件的内部格式发生改变。
(1)源程序文档化符号名包括什么扩展阅读
C语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且c语言的处理和表现能力都非常的强大。
依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。
C语言是普适性最强的一种计算机程序编辑语言,它不仅可以发挥出高级编程语言的功用,还具有汇编语言的优点。
❷ C语言编程
(一)“项目驱动”式教学
目前最纤衫着名、最有影响、应用最广泛的windows、linux和UNIX三个操作系统都是用C语言编写的。0S是计算机系统(由软硬件两个子系统构成)的核心和灵魂,它是软件中最庞大最复杂的系统软件。既然如此庞大复杂的0S都可以用c语言编写,从狭义而言,还有什么系统软件和应用软件不能用c语言编写呢?由此可以肯定的说,c语言是一门十分优秀而又重要的语言。
c语言程序设计是过程性程序设计语言,它的发展贯穿了计算机发展的历程,它蕴含了程序设计的基本思想,囊括了程序设计的基本概念,所以它是理工科高等院校的一门基础课程。
从市面上有关c语言的书籍和高等院校采用的教材来看,它们有一个共性,那就是:脱离了实际应用(全是小打小闹的小例子),纯粹的过程性程序设计,没有软件工程思想的体现,没有一定程序设计风格,仅仅是为了让大家明白什么是c语言而已。
高等院校开设c语言程序设计的目的是让学生对程序设计有个入门,有个直观的理解,同时为其他后续课程作铺垫。但是如果教学仅仅以此为目的,那么教学本身就效果而言是个大大的失败。
大家知道,在商业上讲究唯利是图,“利”是商业追求的目标,离开了“利”经商,则商无动力,其结果是必败无疑。在c语言程序设计教学当中,教师应该把“唯用是图”作为教学的首要目标。如果抛开了实际应用进行程序设计教学,就是纸上谈兵,就是“说明书”式的教学。印度的程序设计课程采用“事件驱动式”教学,我认为在中国的c语言程序设计教学中应该采用“项目驱动式”教学。“项目驱动式”教学就是以项目为目的,以c语言理论教学为过程,最终能用c语言设计项目,实现项目的要求。“项目驱动式”教学的关键在于培养学生“如何做什么”和“可以干什么”。一个项目就是一个工程,在“项目驱动式”教学中,首先应该让学生简单了解什么是软件工程思想,其次在c语言理论教学过程中,让学生懂得面向对象的程序设计的风格,最后引导他们来设计项目。
(二)“项目驱动”式教学应注意的问题
1.c语言程序设计教学要帮助学生树立面向工程的观点
在计算机行业中,软件是通过人们的智力活动、把知识与技术转化成信息的一种产品。软件的设计已经用工程的观念来进行管理。软件设计工作被当作一项系统工程来对待。软件的的生存周期一般可分为以下阶段:问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试、运行与维护。我们不难看出软件工程的复杂程度是很大的。理工科高等院校把c语言作为一门基础课程,也是为了给社会培养信息技术人才。众所周知,养成一个好的习惯是非常重要的,所以c语言程序设计作为大多数工科院校学生接触的第一门程序设计语言(有的院校讲pascal),就应该让学生树立正确的观点。那么当前的程序设计教学也必须以切合将来软件工程开发的实际需要为第一目标,使学生在学习程序设计的初级阶段就树立正确的软件工程观点。这样做不仅可以为学生将来从事计算机应用设计打下良好的基础,而且有利于培养学生分析问题的完备性,以及统筹全局,协调关系的基本素质。
2.理论教学应从单一的“结构化程序设计”向“结构化与面向对象并举”转变
“结构化程序设计”方法是程序设计的基础,必须让学生掌握得坚实可靠。结构化程序设计的过程是培养学生思维能力的过程,在教学中经常发现有些学生的思维混乱。这些都是缺乏思维训练的结果。结构化程序设计的训练不仅可以让学生养成良好的程序设计习惯,而且可以有效地培养学生思维的条理性和逻辑性。所以在授课过程中要注意讲解结构化程序设计的思想时应突出两点:(1)程序的质量首先取决于它的结构。(2)程序设计的基本方法是自顶向下地逐步求精和模块化。
在c程序教学过程中,越到后面的章节,学生越会产生设计毁穗腔程序逐渐变难的感觉,这是不符合逻辑的一种怪现象。按照常理,C语言学的越多,说明你的程序设计知识越多,设计起程序来应该更加得心应手,那么出现这种现象的原因何在呢?当然该问题的出现的原因是多方面的,但是其中最重要的一点就是长期以来程序设计的观念不是以如何处理好对象为出发点,而是以如何使用好语言为基本点。受这种思想的影响,我们的程序设计教学大多数不是以如何解决好问题为重点,而是以讲解语法规则和语句格式为重点,是“说明书”式的教学。这样做造成的结果就是见到一个程序后学生首先想到是该用哪条语句,而不是思考怎样合理的解析。族拍要切实解决这个问题,首先应该改变程序设计的观念。“面向对象程序设计”思想是目前最为流行、极为实用的一种程序设计方法,但是让学生直接接触“面向对象程序设计”,肯定不能对程序设计打下牢固的基础。“结构化与面向对象并举”是现代计算机程序设计的发展趋势,应该认真探索研究,让学生有一个较为轻松的学习过程。程序设计的实质就是编写处理对象的过程,所以将c与c++有机的融为一体的教材应该是首选教材,在教学过程中,我们应该从社会发展的角度进行探索研究,将目前最为流行又极为实用“面向对象程序设计”思想融合到c语言教学中。
3.c语言教学应培养学生良好的程序设计风格
具有良好的设计风格应该是程序员所具备的基本素质,在实际的项目中程序员往往都有自己的一些编程风格。目前95%以上的程序设计书籍不注重程序设计风格问题,这导致了很多学生没有良好的程序设计风格,在他们刚刚毕业踏入社会时,如果周围的同事没有良好的编程风格,那么很难通过环境来使自己提高这方面的素质,即使有提高也不容易比较全面的提高。因此在学生接触的第一门程序设计语言教学中,就应该培养学生良好的程序设计风格,使他们一进工作环境就具备这个素质。
Pascal设计者N.Writh教授十分重视程序设计风格的养成,他坚信“教给学生们以表达他们思维的语言会深深地影响他们思维和创造发明的习惯,而正是这些语言本身的混乱直接影响着学生们的程序设计的风格”,他这里所指的“这些运用”是当时那些主要用于程序设计教学的计算机语言。对学生来讲,一开始就强调程序设计风格很有必要,良好的程序设计风格不仅有助于提高程序的可靠性、可理解性、可测试性、可维护性和可重用性,而且也能够促进技术的交流,改善软件的质量。所以培养良好的程序设计风格对于初学者来说非常重要。
程序设计风格,实际上是指的是编码风格。在教学过程中应从源程序文档化,数据说明的原则,输入/输出方法这三个方面培养学生的编码风格,进而从编码原则探讨提高程序的可读性、改善程序质量的方法。
(1)源程序文档化。编码的目的是产生程序,但是为了提高程序的可维护性。源代码是需要实现文档化的。源程序文档化包括选择标识符(变量和标号)的名字、安排注释以及标准的书写格式等。
①选择标识符的命名规则。标识符包括模块名、变量名、常量名、标号名、子程序名等。这些名字应能反映它所代表的实际东西,应有一定实际意义,使其能顾名思义。另外在模块名、变量名、常量名、标号名、子程序名中使用下划线是一种风格。使用这一技术的一种广为人知的命名规则就是匈牙利命名法(变量类型由一个或两个字符表示,并且这些字符将作为变量名的前缀)。当然使用匈牙利命名法与否都没有错误,重要的是要保持一致性——在整个程序中使用相同的命名规则。这就是说,如果你在一个小组环境中编程,你和其他小组成员应该制定一种命名规则。并自始至终使用这种规则。如果有人使用了别的命名规则,那么集成的程序读起来将是很费劲的。此外,你还要与程序中用到的第三方库(如果有的话)所使用的风格保持一致。如果可能的话,你应该尽量使用与第三方库相同的命名规则,这将加强你的程序的可读性和一致性。
②注释。程序中的注释是程序设计者与程序阅读者之间通信的重要手段。注释能够帮助读者理解程序,并为后续测试维护提供明确的指导信息。因此,注释是十分重要的,大多数程序设计语言提供了使用自然语言来写注释的环境,为程序阅读者带来很大的方便。注释分为功能性注释和序言性注释。
a.功能性注释。功能性注释在源程序中,用以描述其后的语句或程序段是在做什么工作,也就是解释下面要“做什么”,而不是解释下面怎么做。对于书写功能性注释,要注意以下几点:第一描述一段程序,而不是每一个语句。第二利用缩进和空行,使程序与注释容易区别。第三注释要准确无误。
b.序言性注释。序言性注释通常位于每个程序模块的开头部分,它给出程序的整体说明,对于理解程序具有引导作用。有些软件开发部门对序言性注释做了明确而严格的规定,要求程序编制者逐项列出。有关内容包括:程序标题;有关该模块功能和目的的说明;主要算法;接口说明:包括调用形式,参数描述,子程序清单;有关数据描述;模块位置(在哪一个源文件中,或隶属于哪一个软件包);开发简历:模块设计者、复审考、复审日期。
③用标准的书写格式。源程序清单的书写建议采用以下几点:
a.每行只写一条语句;
b.用分层缩进的写法显示嵌套结构层次,这样可使程序的逻辑结构更加清晰,层次更加分明。
c.书写表达式时适当使用空格或圆括号作隔离符。
d.在注释段周围加上边框;
e.注释段与程序段、以及不同的程序段之间插入字行;
(2)数据说明采用的原则。在编写程序时,要注意数据说明的风格。
数据说明的次序如果规范,将有利于测试,排错和维护。首先说明的先后次序要固定,例如,按常量说明、简单变量类型说明、数组说明用数据块说明、所有的文件说明的顺序说明。当然在类型说明中还可进一步要求,例如按如下顺序排列:整型量说明、实型量说明、字符量说明、逻辑说明。
其次当用一个语句说明多个变量名时,应当对这些变量按字母的顺序排列。
最后对于复杂数据结构,应利用注释说明实现这个数据结构的特点。
(3)输入/输出方法。输入/输出的方式和格式应当尽量避免因设计不当给用户带来的麻烦。这就要求,源程序的输入/输出风格必须满足能否为用户接受这一原则。所以在设计程序时,应考虑以下原则:输入数据时,要使输入的步骤和操作尽可能简单,应允许使用自由格式输入;应允许缺省值;对输入的数据要进行检验,以保证每个数据的有效性。
(三)结束语
在教学过程中,我们让学生设计一个程序模拟体育彩票的销售与对奖的过程,取得了良好的效果。他不仅启发和诱导了学生独立思考、积极思维的主动性,而且充分调动了学生学习的自觉性和积极性,使学生融会贯通地掌握了所学知识,提高了分析问题和解决实际问题的能力。
搞好c程序设计的教学工作涉及的因素很多,如果以项目来驱动教学,首先让学生树立面向工程的思想,其次把教学从单一的“结构化程序设计”向“结构化与面向对象并举”转变,最后特别要培养学生养成良好的编码风格,从而使他们学会能够“干什么”,那么我们认为教学目的就达到了。
❸ C语言源程序文件、目标文件和可执行文件的扩展名是什么
C语言源程序文件扩展名:.c
目标文件扩展名:.obj
可执行文件扩展名:.exe
源程序:程序可以用高级语言或汇编语言编写,用高级语言或汇编语言编写的程序称为源程序。C语言源程序的扩展名为“.c”。源程序不能直接在计算机上执行,需要用“编译程序”将源程序编译为二进制形式的代码。
目标程序:源程序经过“编译程序”编译所得到的二进制代码称为目标程序。目标程序
的扩展名为“.obj”。
目标代码尽管已经是机器指令,但是还不能运行,因为目标程序还没有解决函数调用问题,需要将各个目标程序与库函数连接,才能形成完整的可执行程序。
可执行程序:目标程序与库函数连接,形成的完整的可在操作系统下独立执行的程序
称为可执行程序。可执行程序的扩展名为“.exe“。
(3)源程序文档化符号名包括什么扩展阅读:
C语言创建程序的步骤:
编辑:就是创建和修改C程序的源代码-我们编写的程序称为源代码。
编译:就是将源代码转换为机器语言。编译器的输出结果成为目标代码,存放它们的文件称为目标文件。扩展名为.o或者.obj。(该部分编译是指汇编器编译汇编语言或者编译器编译高级语言)
链接:链接器将源代码由编译器产生的各种模块组合起来,再从C语言提供的程序库中添加必要的代码模块,将它们组成一个可执行的文件。在windows下扩展名为.exe,Unix下无扩展名。
执行:运行程序。
IT专家网——C语言编程程序编译全过程剖析
❹ 源程序的文档化不包括()。
【答启伏案】:B
源程序的文档化主要包括3点:(1)符号名应具有一定实际的含义,便于理解程序功能:猛旁蚂(2)正确的程序注释;(3)良好的视觉组织。利用空格、空行、缩进等技巧使程序层次枝埋清晰。
❺ 求计算机二级公共基础知识
1.3.1 基本数据结构与算法
1.算法的基本概念及特征
算法的概念是考试的重点,是指解题方案的准确而完整的描述,它由两种基本要素组成:一是对数据对象的运算和操作,二是算法的控制结构。
算法具有可行性、确定性、有穷性、拥有足够的情报等特征。其中,确定性和有穷性是考试的重点。
算法的确定性,是指算法中的每一步骤都必须有明确定义,不允许有模棱两可的解释,也不允许有多义性。
算法的有穷性,是指算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止。
2.算法复杂度的概念和意义
一个算法质量肢肢乱的好坏可从算法的时间复杂度和空间复杂度两个方面来衡量。算法的复杂度也是每次考试的重点,要注意明确有关概念。
算法的时间复杂度是指算法所需要的计算工作量;算法的空间复杂度是指执行这个算法所需要的内存 空间。
3.数据结构的定义
数据结构主要研究和讨论以下三个方面的问题:
① 数据集合中各元素之间所固有的逻辑关系,即数据的逻辑结构。
② 在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构。
③ 对各种数据结构进行的运算。
要注意数据的逻辑结构与存储结构的区别与联系。
4.线性结构与非线性结构
根据数据结构中各元素之间前后件关系的复杂程度,一般数据结构分为两大类型:线性结构与非线性结构。要注意这两种结构的特征、它们之间的区别以及常见的有关结构。
(1)线性结构(或称线性表)有以下主要特征:
① 有且只有一个根结点,它无前件。
② 有且只有一个终结点,它无后件。
③ 除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。线性表中结点的个数称为线性表的长度,当结点个数为0时,该线性表为空表。
常见的线性结构有:线性表、栈、队列等。
(2)如果一个数据结构不是线性结构,则称之为非线性结构,常见的非线性结构有:树、二叉树、图等。
5.线性表的顺序存储结构(顺序表)及其插入与删除运算
线性表既可以采用顺序存储结构,又可以采用链式存储结构进行存储。要注意掌握二者在存储数据方面的方式与特点。
(1)线性表的顺序存储结构的特点
① 线性表中所有元素所占的存储空间是连续的。
② 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
由此可见,在线性表的顺序存储结构中,其前后件两个元素在存储空间中是紧邻的,且前件元素一定存储在后件元素的前面。
(2)线性表在顺序存储结构下的插入与删除运算
线性表在顺序存储结构下,若在第i(1in,n为线性表中元素的个数)个位置上插入一个饥李新元素,则首先从最后一个(即第n个)元素开始,直到第i个元素之间共有n–i+1个元素依次向后移动一个位置,移动结束后,第i个位置就被空出,然后将新元素插入到第i个位置。插入结束后,线性表的长度增1。
显然,在最好的情况下,插入位置在线性表的末尾进行,即在第n个元素之后插入运算,此时,不需要移动表中的元素。而在最坏的情况下,插入位置在第1个元素上,此时需要移动表中所有的元素。在平均情况下,要在线性表中插入一个新元素,需要移动表中一半的元素。
同理,线性表在顺序存储结构下的删除运算,也需要移动表中的元素,只不过是向前移动,在最好的情况下,删除运算在线性表的末尾进行,即删除第n个元素,此时,不需要移动表中的元素。而在最坏的情况下,删除位置在第1个元素上,此时需要移动表中所有的元素。在平均情况下,要在线性表中删除一个元素,需要移动表中一半的元素。
线性表的顺序存储结构的特点,以及在顺序存储结构下插入与删除运算的效率是考试的重点。
6.栈与队列
要深刻领会二者的概念,以及对二者进行插入、删除运算的特点,这是考试的重点。
栈实际上也是线性表,只不过是一种特殊的线性表。在这种特殊的线性表中历档,其插入与删除运算都只在线性表的一端进行。即在这种线性表的结构中,一端是封闭的,不允许进行插入与删除元素;另一端是开口的,允许插入与删除元素。允许插入与删除运算的一端称为栈顶,而不允许插入与删除运算的一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。即栈是按照“先进后出”(First In Last Out,FILO)或“后进先出”(Last In First Out,LIFO)的原则组织数据的,因此,栈也被称为“先进后出”表或“后进先出”表。由此可以看出,栈具有记忆作用。对栈常可以进行进栈、出栈、读取栈顶元素的运算。
队列是指允许在一端进行插入运算、而在另一端进行删除运算的线性表。允许插入运算的一端称为队尾,通常用一个称为队尾指针的指针指向队尾元素,即队尾指针总是指向最后被插入的元素。允许删除运算的一端称为队头,通常也用一个队头指针指向队头的元素。显然,在队列这种数据结构中,最先插入的元素将最先能够被删除,反之,最后插入的元素将最后才能被删除。因此,队列又称为“先进先出”(First In First Out,FIFO)或“后进后出”(Last In Last Out,LILO)的线性表。对队列可以进行入队、退队运算。
7.循环队列
重点注意循环队列的概念、存储方式。
循环队列是队列顺序存储结构的一种,它将m个物理上连续的存储单元,在逻辑上形成一个环状,供队列循环使用。
具体来说,在循环队列中,用队尾指针rear指向队列中的队尾元素,用队头指针front指向队头元素的前一个位置,因此,从队头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。
8.线性表的链式存储结构(线性链表)
(1)线性表的链式存储结构及其有关运算
在线性表的链式存储结构中,一个元素用一个结点来存储,每个结点含有两个域,一个数据域用于存放数据元素值,一个指针域,用于存放指针,该指针用于指向该结点的前一个或后一个结点(即前件或后件)。
在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序(即存储空间位置)与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。要特别注意,线性表的链式存储结构与顺序存储结构方式的不同。
线性表的链式存储结构又称为线性链表。
对线性链表的运算主要包括:查找指定元素、插入、删除运算等。不像顺序存储结构那样,对线性链表的插入与删除运算不需要移动数据元素,而只需改变有关结点的指针即可。
(2)循环链表
在对线性链表进行运算的过程中,虽然其插入与删除运算比较方便,但还存在一个问题,即对于空表和对第一个结点的处理必须单独考虑,使空表与非空表的运算不统一。为了克服线性链表的这个缺点,可以采用另一种链接方式,即循环链表的结构,使整个链成为一个环状结构。在此,需要注意线性链表与循环链表在存储方式上的不同。
循环链表的结构与线性链表相比,具有以下两个特点:
① 在循环链表中增加了一个表头结点,其数据域为任意或者根据需要来设置,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点。
② 循环链表中最后一个结点的指针域不是空,而是指向表头结点。即在循环链表中,所有结点的指针构成了一个环状链。
9.树与二叉树
树是一种非线性结构,在这种结构中,所有数据元素之间的关系具有明显的层次特性。而二叉树也是一种非线性结构,它与树结构相似,并且树结构的所有术语都可以用到二叉树这种数据结构上。
二叉树具有以下两个特点:
① 非空二叉树只有一个根结点。
② 每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。
因此,二叉树中每一个结点的度最大为2,即所有子树(左子树或右子树)也均为二叉树。
对于二叉树,其概念与性质是考试的重点。要特别注意二叉树的有关性质。
10.满二叉树与完全二叉树
满二叉树与完全二叉树是两种特殊形态的二叉树,对这两种二叉树的概念上的理解是考试的重点。
(1)满二叉树
满二叉树是指这样的一种二叉树:除最后一层外,每一层上的所有结点都有两个子结点,也就是说,在满二叉树中,每一层上的结点数都达到最大值,即在满二叉树的第k层有2k–1个结点,且深度为m的满二叉树有2m–1个结点。
(2)完全二叉树
完全二叉树是这样的二叉树,除最后一层外,每一层上的结点数均达到最大值。
11.二叉树的遍历
二叉树的遍历是指不重复地访问二叉树中的所有结点。二叉树的遍历可以分为三种:前序遍历、中序遍历、后序遍历。这三种遍历方式是每次考试的重点,要求对于某一棵二叉树应能写出对应的遍历序列。
12.顺序查找及其特点
需要重点掌握顺序查找的概念及查找的效率。
顺序查找又称顺序搜索。它从线性表的第一个元素开始,依次将线性表中的元素与被查元素进行比较,若相等则表示找到(即查找成功);若线性表中所有的元素都与被查元素进行了比较但都不相等,则表示线性表中没有要找的元素(即查找失败)。
很明显,在进行顺序查找过程中,在最好的情况下,如果线性表中的第一个元素就是被查元素,则只需做一次比较就查找成功,查找效率最高;但如果被查的元素是线性表中的最后一个元素,或者被查元素根本不在线性表中,则为了查找这个元素需要与线性表中所有的元素进行比较,这是顺序查找的最坏情况。在平均情况下,利用顺序查找法在线性表中查找一个元素,大约与线性表中一半的元素进行比较。
13.二分法查找及其特点
重点掌握二分法查找的适用对象、查找的方法与查找效率。
二分法查找只适用于顺序存储的有序表。此处的有序表是指线性表中的元素按值非递减排列(即从小到大,但允许相信元素值相等)。
设有序线性表的长度为n,被查元素为x,则二分查找的方法如下所述。
将x与线性表的中间项进行比较:
若中间项的值等于x,则说明查到,查找结束;
若x小于中间项的值,则在线性表的前半部分(即中间项以前的部分)以相同的方法进行查找;
若x大于中间项的值,则在线性表的后半部分(即中间项以后的部分)以相同的方法进行查找。
这个过程一直进行到查找成功或子表长度为0(说明线性没有这个元素)为止。
显然,当有序线性表为顺序存储时才能采用二分查找,并且,二分查找的效率要比顺序查找高得多。对于长度为n的有序线性表,在最坏情况下,二分查找只需要比较log2n次。
14.排序技术
排序是指将一个无序序列整理成按值非递减顺序排列的有序序列。常见的排序方法主要有交换类排序、插入类排序和选择类排序。各种排序方法的特点以及在最坏情况下的排序效率是考试的重点。
(1)交换类排序法
交换类排序法是指借助数据元素之间的互相交换进行排序的一种方法。冒泡排序法与快速排序法都属于交换类排序方法。
冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n–1)/2。但这个工作量不是必需的,一般情况下要小于这个工作量。
快速排序法也是一种交换类的排序方法,但由于它比冒泡排序法的速度快,因此称之为快速排序法。其关键是对线性表进行分割,以及对各分割出的子表再进行分割。
(2)插入类排序法
插入类排序法主要有简单插入排序法和希尔排序法。
简单插入排序法,是指将无序序列中的各元素依次插入到已经有序的线性表中。在这种排序方法中,每一次比较后最多移掉一个逆序,因此,这种排序方法的效率与冒泡排序法相同。在最坏情况下,简单插入排序需要n(n–1)/2次比较。
希尔排序法对简单插入排序做了较大的改进。它是将整个无序序列分割成若干小的子序列分别进行插入排序。希尔排序的效率与所选取的增量序列有关。在最坏情况下,希尔排序所需要的比较次数为O(n1.5)。
(3)选择类排序
选择类排序主要有简单选择类排序法和堆排序法。
简单选择排序法的基本思想是:扫描整个线性表,从中选出最小的元素,将它交换到表的最前面(这是它应有的位置);然后对剩下的子表采用同样的方法,直到子表空为止。对于长度为n的线性表,在最坏情况下需要比较n(n–1)/2次。
堆排序法也属于选择类排序法。具有n个元素的序列(h1, h2, …, hn),当且仅当满足条件:
或
(i=1, 2, …, n/2)时称之为堆。可见,堆顶元素(即第一个元素)必为最大项。
堆排序的方法对于规模较小的线性表并不适合,但对于较大规模的线性表来说是很有效的。在最坏情况下,堆排序需要比较的次数为O(nlog2n)。
1.3.2 程序设计基础
1.程序设计方法与风格
除了好的程序设计方法和技术外,程序设计风格也是很重要的内容。程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。要形成良好的程序设计风格,主要应注重和考虑下述一些因素。
(1)源程序文档化
符号名的命名:符号名的命名应具有一定的实际含义,以便于对程序功能的理解。
程序注释:注释一般分为序言性注释和功能性注释。序言性注释通常位于每个程序的开头部分,它给出程序的整体说明;而功能性注释的位置一般嵌在源程序体中,主要描述其后的语句或程序做什么。
视觉组织:可以在程序中利用空格、空行、缩进等技巧使程序层次清晰。
(2)数据说明的方法
主要包括数据说明的次序规范化、说明语句中变量安排有序化和使用注释来说明复杂数据结构等。
(3)语句的结构
语句构造应该简单直接,不应该为提高效率而把语句复杂化。
(4)输入和输出
输入和输出方式和格式应尽可能方便用户的使用。
2.结构化程序设计
结构化程序设计的主要原则、设计要素应是重点掌握的内容。
由于软件危机的出现,人们开始研究程序设计方法,其中最受关注的是结构化程序设计方法。结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化、限制使用goto语句。
在结构化程序设计的具体实施中,要注意把握如下要素。
(1)使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑。
(2)使用的控制结构只准许有一个入口和一个出口。
(3)程序语句组成容易识别的块,每块只有一个入口和一个出口。
(4)复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现。
(5)语言中所没有的控制结构,应该采用前后一致的方法来模拟。
(6)严格控制goto语句的使用。
3.面向对象的程序设计及其重要概念
面向对象的程序设计方法及其有关概念是重点掌握的内容,也是考试的重点。
面向对象的程序方法主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的系统能够映射问题域。它具有与人类习惯的思维方法一致、稳定性好、可重用性好、易于开发大型软件产品、可维护性好等优点。
在面向对象的程序方法中,有如下重要的概念。
(1)对象
用来表示客观世界中的任何实体,即应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象。它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表示其静态特征的属性和它可执行的一组操作组成。
属性即对象所包含的信息,它在设计对象时确定,一般只能通过执行对象的操作来改变。
操作描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。
(2)类和实例
将属性、操作相似的对象归为类,即是具有共同属性、共同方法的对象的集合。因此,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。
(3)消息
面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种相互合作需要一个机制协助进行,这样的机制称为“消息”。消息是一个实例与另一个实例之间传递的信息,它请示对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。一个消息由接收消息的对象的名称、消息标识符(即消息名)、零个或多个参数组成。
(4)继承
继承是面向对象的方法的一个主要特征。继承是使用已有的类定义作为基础建立新类的定义技术。已有的类可当做基类来引用,则新类相应地可当做派生类来引用。一个类的上层可以有父类,下层可以有子类。一个类直接继承其父类的描述(数据和操作)或特性,子类自动地共享基类中定义的数据和方法。
(5)多态性
对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可导致完全不同的行动,该现象称为多态性。
❻ c语言源程序的扩展名是什么
c语言源程序的扩展名是:“.c”。由C语言构成的指令序列称为C源程序,源程序文件的后缀为“.c”。注:在绝大多数的操作系统里,C源代码文件的后缀的大小写无所谓,如“index.C”和“index.c”指的是同一个文件;但老练的程序员通常使用小写。
对于计算机语言来说,其源代码文件的命名会有一个特定的后缀。如C++的源代码文件的后缀是“.cpp”;Python的源代码文件的后缀是“.py”;而C的源代码文件的后缀则是“.C”。
源程序的结构特点
1、一个C语言源程序可以由一个或多个源文件组成。
2、每个源文件可由一个或多个函数组成。
3、一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。
4、源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。
5、每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。
6、标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。
❼ c语言源程序名的后缀 C语言中的源程序的扩展名是什么
1、源程序:在各个平台上,C语言的源程序扩展名都是相同的,即c。 比如test.c等。
2、C语陪握言源代码文件一般扩展名为.c,目标文件扩展名一般为.obj,生成的可空信执行文件扩芦亏庆展名一般为.exe。不同平台的C源代码扩展名都为.c,但目标文件扩展名不同。