第一篇:学习C语言后的感悟[定稿]
我学了C,C++,JAVA.还有很多的脚本语言,最后彻底留下的只有c语言,c++的许多机制忘了,JAVA就没有记住几种机制。
面对编程高手(会n种),而且很牛b的那种,我依然以我会c语言自豪,我也因为我会c语言而自信。面对什么什么技术“趋势”的时代,我只精通c语言,发现已经足够了,而且是完全足够了。当我需要学习PHP的时候,我1个星期可以说基本掌握了;当我要学B shell的时候,1个星期也够了;当我要学习JSP的时候....什么?什么是JSP?别说我学过这些垃圾。
我爱用最简单的语言机制构建出你复杂逻辑,你严谨的思维。当你发现这么简单的C语言男够构架出UNIX操作系统和大部分UNIX程序的时候,你就发现你不能轻视C。
有的人说机制少,不安全,不健全......那么安全的语言机制就失去了灵活,失去了轻便。有的人说功能少,C库少,连界面都不能写.......那么当malloc都由自己写的时候,程序才牢牢掌握在自己手中。真正的程序员是没有界面的,程序员在text mode下能快捷,方便地做你想做的一切事情。
下面介绍一下我学习的方法,觉得特别有用。
如果是连高数,计算机原理之类的书或是英语没有入门的人,那就不应该学习编程,不可能牛起来。
如果是C语言刚上手,最好选一本国内语言语法,语句讲得细致的书。
如果上手了,或者学习过其他的语言,那么就一定要看一本最经典的C语言书,比如《C语言程序设计》,这本书我后来又看一遍才知道有多好,眼界十分开阔。
认为都学的差不多了,最最最好的联系方法(切身体会!!),就是自己写程序,写什么呢??两个中你挑一个:md5加密算法的实现 或者是 lzss或lzw压缩算法的实现。这两个程序接近底层又不算十分大,又有很多的数据结构和算法。资料就要自己去找了,网上有讲算法的,你来具体实现,能自己设计算法并能够在unix机器上实现那更好。
搞过这个你就能体会到自己终于入门了,因为你到时候就会发现又很多的内容还等着你去学.....并且你可以拿着你的程序炫耀了,事实证明能把这个程序彻底些出来并且些的很好的(bug少),已经有功底了,你可以把程序发布到sourceforge.net等开源社区上,招人开启你自己的工程。
当然有了功底,剩下的路你自己就应该知道怎么走了,有一条向linux工程师的方向,就是学习linux,如果你c语言足够好,可以直接学习内核,试着编写,编译内核;也可以弄弄上层的东西,shell,awk,iptable之类的.....当然经典的书《unix高级编程》是讲unix下的gcc程序开发的还有网络工程师的路,那就要学协议,有巨他妈经典的3卷的书:《TCP/IP详解》一,二,三。只看一也可以。然后看一看《unix网络编程》,那就足够了.....如果想向软件工程师发展,那更不成问题。你再学什么语言,什么JAVA,C++,JSP....那是哇哇的简单,但是注意,一定要看最经典的书,你才能成为高手!
还有一条我最向往的路,就是成为一个hacker,就是黑客,做这个你必须有一定的经济收入和空余的时间才可以...。宗旨是为全世界的IT页贡献出力量。这个有一个好处,就是任凭你自己的兴趣,喜欢游戏的可以开发游戏,想搞unix的可以开发内核什么的。
这个最后一定要进入一个很好的自由社区,比如apache基金会或是GNU基金会,想在后一代的著名程序比如apache httpd,tomcat,kerneln.n上刻上自己的名字就可以向这方面发展。也可以在sourceforge.net上找找自己喜欢的工程,申请加入..如果搞的好还能有基金会的money外快又能满足自己的兴趣,可惜我现在没钱,否则早干了....那个时候,你已经有找一份很体面的工作的实力了..干什么都可以轻轻松松的..不论走到哪,c语言还是根本,不论IT格局怎么变,有C语言有如心中一块石头,它是不可能变的,就像tcp/ip,不管上层再有什么技术,基本原理和接口20几年就是没有变过!回顾几年的IT学习生涯,就像是浓缩的过程,东西越学越少,最后好像只有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++的学习难度,一在于语言本身太多的“幕”,二在于“paradigm shift”((思考模式的移转)。传统程序语言如C,pascal,basic,fortran„,除了模样看起来稍有不同,基本上都是函数call来call去,大同小异,很容易掌握。你想做的动作,在code中都看得一清二楚。你所看不到的,荦荦大者也不过就是编译程序为你的函式加上用以处理堆栈的一小段码(prologue和epilogue),这一小段码基本上做的是housekeeping工作,你没看到也没有关系(更好),并不影响你对程序逻辑的思考。
C++不一样,C++有太多和程序逻辑息息相关的动作是编译程序为我们加上去的。换句话说C++编译程序为我们“加码”。如果不识清这一节,学习C++有如雾里看花,雾非雾,花非花。
编译程序为我们的C++程序加了什么码呢?很多!对象诞生时ctor会被唤起,物件死亡时dtor会被唤起,这都是加码的结果。ctor中设定vtpr和vtbl,这也是加码的结果。new 单一对象时会产生memory block cookie,new对象数组时会产生一个内部结构记录着object size 和class ctor„,这也都是布幕后的工作。可以说,程序代码中看不到而却必须完成的所有与程序逻辑有关的动作,统统都是C++ 编译程序加码后的结果。
当“继承”发生,整个情况变得稍微复杂起来。“多重继承”又更复杂一些,“虚拟继承”再更复杂一些。
这些布幕后的主题,统可归类为所谓的C++ object model(对象模型)。如果不知道这些底层机制,你就只能够把“make destructors virtual in base classes”(, item14)或“never treat arrays polymorphically”(, item 3)这类规则硬背下来,却不明白它的道理。
用一样东西,却不明白它的道理,林语堂如是说:“不高明”。只知道how,不知道why,侯捷如是说:“不高明”。
C++的第二个学习难度在于“paradigm shift”(思考模式的移转)。别说自己设计classes 了,光使用别人的classes,就都是一种思考模式和行为模式的移转。Mfc(或owl或vcl)programmer必然甚能够领略并体会我的意思。
使用所谓的application framework(一种大型的、凝聚性强的、有着面向对象公共基础建设的class library),你的码和framework之间究竟是怎样的关系呢?framework提供的一大堆可改写的虚拟函式的意义与价值究竟在哪里呢?为什么framework所设计的种种美好性质以及各式各样的算法竟然可以施行于我们自己设计的class types身上呢?framework被设计时,并不知道我们的存在呀!
这正是面向对象中的多型(polymorphism)的威力。
稍早所说的C++对象模型,偏属程序设计的低层面;这里所说的思考模式移转,则是程序设计的高层面。能够把新思维模式的威力发挥得最淋漓尽致的,当推面向对象的polymorphism(多型)和generalization(泛型)。如果你没有使用这两项特性,等于入C++宝山而空手归。
想象C++是一把用来解决程序问题的刀,要它坚轫,要它锋利,就必须经过多次的回火,在高热和骤冷之间锤炼。
初学C++语法(syntax)之后,你应该尽快尝试体验polymorphism(大致而言也就是虚拟函数的运用)。等到对oop的精神有了大局掌控的能力,但对C++的许多小细节不甚清楚,就是回到C++对象模型锤炼的时机。
成长,是在高阶(polymorphism)和低阶(object model)之间反复震荡,才能够震荡到更高的位阶,而不是平平庸庸于中阶(C++ syntax)的一滩死水。
经常有很多初学者把C语言与C++语言混为一谈,确实,C语言的大部分函数都可以在C++中实现,C++也确实需要使用大量C语言的语法、函数。但是,C++与其他传统语言最大的区别应该就是它使用了“类”这么一个构造函数。
类,多么富有艺术性的词!想一想能把真实世界中的一切在它中模拟实现,就让人兴奋不已。掌握了它也就掌握了程序艺术的真谛、也就掌握了打通了现实与虚幻的时空门!
在这里,我们来讨论一下在C++中有关于类的构成及使用。
用C语言和其他类似的传统语言所写的程序必然包括一组数据结构以及用来处理这些数据结构的函数。由于这些语言没有提供数据抽象的功能,因此程序本身并不清楚哪些函数处理了数据结构。此外,这些语言也无法防止非授权访问的某些数据结构的函数对这些数据结构进行操作,因而使的程序变的不必要的复杂,并且容易忽视一写偶然的设计错误。
而C++提供了数据结构的封装与抽象,它为程序员提供了定义新的数据结构的简单而强大的工具。在新的数据类型中,即包括数据内容又包括对数据内容的操作,把它们封装起来以后,数据类型本身能够控制外界对它的数据成员的访问。
引入继承机制以前的C++类中的成员分为两部分,即私有成员和公有成员。在C++类中的私有段成员(包括数据和函数),他们只限于通过成员函数来访问,也就是说只有类本身能够访问它,任何类以外的函数对私有数据的访问都是非法的。公有段成员(包括公有数据和公有函数成员)提供了类的外部接口,它允许类的使用者来访问它,我们可以通过使用类的公有成员来访问这个类。
在类声明中,私有段的标识关键词为private,当私有段成员处于类声明中的第一部分时,此关键词可以省略。公有段的标识关键词为public,此关键词在任何情况下都是不能省略的。
使用私有数据来隐藏由类对象操纵的数据,然后提供一些成员函数来访问这些数据,通常使用和改变这些数据的能力和实现细节是被隐藏起来的。
在定义成员函数时应注意:
1、在所定义的成员函数名之前应坠上类名,在类名和函数名之间加上分隔符“::”。
2、函数的返回类型一定要与函数声明时的类型相匹配。
3、在定义成员函数时,对函数所带的参量,仅仅说明它的类型是很不够的,还需要指出它的参量名。
对于成员函数的定义,并不是必须把它们放在类定义体之外,有时,有些简单的成员函数可以在类定义中定义。这些包含在类定义体内定义的成员函数称为内部函数,或称为内置函数。
类的每项操作都是通过函数成员实现的,使用某些操作则表明了一个函数调用,但这对于小的和常用的操作程序来说,开销是很大的。内置函数就是用来解决这个问题的,它将该函数的代码插入在函数的每个调用处,作为函数体的内部扩展,用来避免函数调用机制所带来的开销。虽然这种做法可以提高执行效率,但如果函数体过长会有不良后果,因此,一般对非常简单的函数,才声明成内置函数。
类在概念上是一种机制,它抽象了一类对象的存储和操作特性。在系统实现中,类是一种共享机制,它提供了本类对象的操作实现。
通常我们把具有同样性质和功能的东西所构成的集合称为类。在C++中,可以把具有相同内部存储结构和相同一组操作的对象看成属于同一类。在指定一个类后,往往把属于这个类的对象称为类的实例。实际上对象和实例表达的是一个意思。
类与对象间的关系,可以用整形int和整形变量i之间的关系来类比。类和整型int均代表的是一般的概念,而对象和整形变量i却是代表具体的东西。创建一个具体对象有两种方法:
(1)在定义类的同时创建对象
我们在给出类定义描述时创建对象,如下:
class date{
int month,day,year;
public:
void set(int,int,int);
void print();
int getyear();
int getmonth();
int getday();
}tt;//同时创建对象tt
在定义类date的同时创建了date类的对象tt,这时创建的是一个全局对象。
(2)在使用时定义对象
在定义类的同时创建的对象是一种全局对象,在它的生存气内任何函数都可以使用它,这在程序执行过程中容易造成一些混乱。使用它的函数有时只在极短的时间对它进行操作,而后就不再理会它,但它仍然存在,只有在整个程序结束时它才会自动消亡。所以在定义类的同时创建对象是有一定的弊端的。为了消除这些弊端,完全可以在需要使用此类对象时,再在使用它的函数中定义对象。
对于使用一个类,实际上是创建一个此类的对象,之后使用它的公有成员函数达到对此类对象作用的目的。
下面看一个使用类的例子:
class point{
int x,y;
public:
void setpoint(int vx,int vy){x=vx;y=vy;}
};
void f1()
{
point p1;//创建point类的对象p1
p1.setpoint(10,10);//给point类对象p1的私有成员赋值 //„„
}
从这里看出,我们在函数f1()中使用了类point,定义了它的一个对象p1,并用p1.setpoint(10,10)调用了类的公有成员函数setpoint,通过函数调用实现了对其私有成员的赋值操作。
对于类成员的访问,我们采用的是“.”操作符,在这里p1.setpoint(10,10)实际上是一种缩写形式,它表达的意义是p1.point::setpoint(10,10),这两种表达形式是等价的。
在定义类对象时,若我们定义的是指向此类对象的指针,则使用此类成员时,不再用“.”操作符,而是使用“->”操作符。
我们再来看各种函数在C++类中的使用
面向对象编程的一个重要思想就是数据的封装,也就是把对象中的数据隐藏起来,只通过成员函数来对对象进行操作。这时,就要对类中的成员指定操作权限。例如:
struct Date{
private:
int d,m,y;
public:
void init(int dd, int mm, int yy);
void add_year(int n);
void add_month(int n);
void add_day(int n);
};
这里,成员变量d、m、y的操作权限为私有,只有类本身的成员函数能够访问它们。而下面的四个成员函数的操作权限为公有,都可以被外界访问。当然,并不是成员变量就一定要是私有的,而成员函数就一定要是公有的,一些内部使用的成员函数也可以是私有的,而成员变量也可以是公有的。
另外,在定义类时,我们一般用class来代替struct。class与struct唯一的区别就是,在不指定操作权限时,struct的默认操作权限为公有,而class的默认操作权限为私有。
在一个类中,可以定义两种特殊的函数。一种被称为构造函数,该函数没有返回类型,名字与类名相同,会在对象创建时自动调用,往往用来完成一些对象初始化的工作,在它的参数列表后可以跟初始化列表;另一种被称为析构函数,该函数也没有返回类型,名字是由类名之前加一个“~”符号构成的,会在对象死亡(也就是超出生命周期)时自动调用,往往用来完成一些扫尾工作。构造函数可以带一些参数,并且可以重载,而析构函数不带任何参数。例如:
class Date {
public:
Date(int dd, int mm, int yy);
Date(char* date);
~Date();
};
Date::Date(int dd, int mm, int yy): d(dd), m(mm), y(yy){
}
Date national_day(1, 10, 2003);
Date christmas(“December 25th, 2003”);
在Date类构造函数的实现中,冒号后面的就是初始化列表,可以用来初始化一些成员变量。当然,你也可以在构造函数的函数体中初始化成员变量,不过一般推荐使用初始化列表来完成这项工作。
我们在前面提到了“封装”,封装实际上就是信息隐藏。在面向对象系统中封装是构成对象的处理,一个封装的对象也常称为一个抽象数据类型,若没有封装就没有面向对象编程。
最后有些时候,我们要在对象的成员函数中引用对象本身,这时就要用到this指针。在成员函数中,this指针是一个指向该对象类型的指针,并总指向当前的对象。另外,当类的成员函数中有局部变量与类的成员变量重名时,直接写变量名代表局部变量。如果要访问成员变量,则需通过this来引用(this->xxx)。
以上就是对C++中类的构成与使用的简单总结,由于篇幅限制,我们还有很多与类的使用有关的思想和方法没有总结,如友元、重载、引用、继承与类的派生等等。实际上,类和对象最大的用处是大大简化了大型软件编写和维护的过程。在将要成为一名编程人员的学生的学习道路上,体会和掌握C++的这种面向对象编程的思想,是非常重要的。
总结
程序设计语言的学习过程与自然语言的学习有着十分相似的地方。
本文开始讲了C语言与C++语言联系。在学习的过程中,我们要充分利用它们之间的相同之处,明确不同之处,这样才能加快学习的速度。这就好像在掌握了母语的基础上去学习一门外语,利用好语言之间的相同之处能够使外语的学习变得简单;而如果不能解决好语言之间的不同之处,就会给外语的学习带来困难。要学好外语需要多加练习,而只有不断地使用一门程序设计语言写程序才能切实提高对程序设计语言的掌握水平。
随后文章进一步深入,总结了C++类的构成及定义与它使用到的一些函数。这就好比外语中一些独特的文化底蕴,我们只有了解这些文化底蕴,才能真正掌握一门外语。程序设计语言也是如此,这部分所总结的内容使我们能够更好地使用C++语言中的类定义方法,特别是我们说到类与对象的关系,这里是我们使用类的关键。
最后,我们简单讨论了一些与类的使用有关的函数和思想。这就像是写作,写作的基础是掌握好一门自然语言,程序设计的基础则是掌握好一门程序设计语言。但是,要写出优秀的文章仅仅靠掌握好一门自然语言是不够的,我们还需要有精巧的构思和华丽的词藻。如何娴熟的运用这些函数、思想去为你的“文章”增色,就需要大家自己的多多练习了。
第三篇:c语言学习
一门新的语言学习(和C没啥关系!真的。);
2.看《Thinking In C++》,不要看《C++变成死相》;
3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;
4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;
5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;
6.会用Visual C++,并不说明你会C++;
7.学class并不难,template、STL、generic programming也不过如此——难的是长期坚持实践和不遗余力的博览群书;
8.如果不是天才的话,想学编程就不要想玩游戏——你以为你做到了,其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住:学C++是为了编游戏的;
9.看Visual C++的书,是学不了C++语言的;
10.浮躁的人容易说:XX语言不行了,应该学YY;——是你自己不行了吧!?
11.浮躁的人容易问:我到底该学什么;——别问,学就对了;
12.浮躁的人容易问:XX有钱途吗;——建议你去抢银行;
13.浮躁的人容易说:我要中文版!我英文不行!——不行?学呀!
14.浮躁的人容易问:XX和YY哪个好;——告诉你吧,都好——只要你学就行;
15.浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;
16.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;
17.C++不仅仅是支持面向对象的程序设计语言;
18.学习编程最好的方法之一就是阅读源代码;
19.在任何时刻都不要认为自己手中的书已经足够了;
20.请阅读《The Standard C++ Bible》(中文版:标准C++宝典),掌握C++标准;
21.看得懂的书,请仔细看;看不懂的书,请硬着头皮看;
22.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;
23.请看《Effective C++》和《More Effective C++》以及《Exceptional C++》;
24.不要停留在集成开发环境的摇篮上,要学会控制集成开发环境,还要学会用命令行方式处理程序;
25.和别人一起讨论有意义的C++知识点,而不是争吵XX行不行或者YY与ZZ哪个好;
26.请看《程序设计实践》,并严格的按照其要求去做;
27.不要因为C和C++中有一些语法和关键字看上去相同,就认为它们的意义和作用完全一样;
28.C++绝不是所谓的C的“扩充”——如果C++一开始就起名叫Z语言,你一定不会把C和Z语言联系得那么紧密;
29.请不要认为学过XX语言再改学C++会有什么问题——你只不过又在学一门全新的语言而已;
30.读完了《Inside The C++ Object Model》以后再来认定自己是不是已经学会了C++;
31.学习编程的秘诀是:编程,编程,再编程;
32.请留意下列书籍:《C++面向对象高效编程(C++ Effective Object-Oriented Software Construction)》《面向对象软件构造(Object-Oriented Software Construction)》《设计模式(Design Patterns)》《The Art of Computer Programming》;
33.记住:面向对象技术不只是C++专有的;
34.请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码;
35.把在书中看到的有意义的例子扩充;
36.请重视C++中的异常处理技术,并将其切实的运用到自己的程序中;
37.经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去;
38.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路;
39.C++语言和C++的集成开发环境要同时学习和掌握;
40.既然决定了学C++,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;
41.就让C++语言的各种平台和开发环境去激烈的竞争吧,我们要以学习C++语言本身为主;
42.当你写C++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写(参见43);
43.别心急,设计C++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的;
44.决不要因为程序“很小”就不遵循某些你不熟练的规则——好习惯是培养出来的,而不是一次记住的;
45.每学到一个C++难点的时候,尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了;
46.记录下在和别人交流时发现的自己忽视或不理解的知识点;
47.请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100.XX;
48.保存好你写过的所有的程序——那是你最好的积累之一;
49.请不要做浮躁的人;
50.请热爱C++!
建议你买本书,书比网上的电子版教程好的多,如计算机届超级权威教授 谭浩强 老先生写的《C语言程序设计(第三版)》,全国发行了700万册,可以说是学C语言的人必看的书,我们大学就用这本书,很适合自学,通俗易懂
建议你学习其它计算机知识时也看他的书,他出的书很多,涵盖面广,每一本都很经典
这里有他的教程word版下载
另外,机械工业出版社的 计算机丛书系列也相当经典,全是翻译国外经典教材,国外计算机发展早,水平比国内高很多,看这些教材事半功倍,推荐(美)Al Kelley Ira Pohl的《C语言教程第4版》
学习程序语言要持之以恒,不浮躁,祝你成功
第四篇:单片机C语言学习
单片机C语言之一___________________________________________________________________ _____________________ 预处理 一》宏定义:
1、不带参数:
#define 标识符 常量表达式
/*#define是宏定义命令,宏名(标识符)好习惯用大写*/ #define NIL 0x80
2、带参数:/*相当于小函数*/ #define 宏名(参数表)字符串
/*不仅要时行字任串替换还要进行参数的替换,在宏定义时,宏名与带参数的括弧之间不应该加空格,否则将空格以后的字符串都作为替代字符串的一部分,这可是很容易出错的*/ 如:#define SQ(a,b)a*b 使用:x=12;y=10;area=SQ(x,y);/*则area=12*10=120*/ 二》文件包含:
#include <文件名>或#include “文件名” /*在C中用双引用形式更保险,在C51中常用物是尖括弧形式*/ 三》条件编译:
/*一般源程序中的所有程序行都参加编译,但有时希望对其中一部分内容只在满足一定条件下才进行编译,也就是对一部分内容指定编译的条件。*/ #if、#elif、#else、#endif、#ifdef、#ifndef /*选择不同的编译范围,产生不同的代码,提供通用性。*/ /*如对8051在6MHZ与12MHZ下有*/ #ifdef cpu==8051 #define FREQ 6 /*程序段*/ #else #define FREQ 12/*程序段*/ #endif /*这样下面的原程序不用做任何修改便可以使用于两种时钟频率的单片机系统*/ 四》其他:
1、#error:捕捉不可预料的编译条件
#if(myv!=0&&myv!=1)/*假定其值必为0或1*/ #error myv must be 1 or 0/*出错时显示*/ #endif
2、#pragma:用于在程序中向编译器传送各种编译控制命令 #pragma 编译命令序列
/*例:想按如下命令编译ex.c c51 ex.c debug cod large可用:*/
#pragma DB CD LA #pragma disable /*禁止中断*/
单片机C语言之二_____________________________________________________________________________________ 一》数据类型:
char int long 1:unsinged 0~255 0~65535 0~4294967295 2:signed-128~127-32768~32767-2147483648~2147483647 指针:* 3字节 位标量: sbit 特殊功能寄存器:sfr 16位特殊功能寄存器:sfr16 占2个内存单元,0~65535 可寻址位:sbit利用他可访问51单片机的内部RAM中的可寻址位或特殊功能寄存器中的可寻址位 sfr P0=0x80;sbit P0_1=P0^1;/*将P0口的口地址定义为80H,将P0.1位定义为P1_1*/ 二》数据存贮类型
表1.C51数据存贮类型
━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━ 数据存贮类型 ┃ 与存贮空间的对应关系
━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━ data ┃ 直接寻址片内数据存贮区,访速度快 bdata ┃ 可位寻址片内数据存贮区,允许位与字节混合访问 idata ┃ 间接寻址片内数据存贮区,可访问片内全部RAM地址空间
pdata ┃ 分页寻址片外数据存贮区(256字节)由MOVX @R0访问 xdata ┃ 片外数据存贮区(64K),由MOVX @DPTR访问 code ┃ 代码存贮区(64K),由MOVC @DPTR访问
━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━ 变量的存贮类型定义: char data var /*字符变量var被定义为data存贮类型,C51编译器将把该变量定位在51单片机片内数据区存贮区中*/ bit bdata flag /*位变量flag被定义为bdata存贮类型,C51编译器将把该变量定位在51单片机片内数据区存贮区(RAM)中的位寻址区:20H--2FH*/
三》typedef:重新定义数据类型
typedef 已有数据类型 新的数据类型 typedef int word;/*将word定义为整型*/ word i,j;/*将i,j定义为整型*/ 四》位运算符:
━━━━┳━━━━━┳━━━━━┳━━━━━━┳━━━━━━┳━━━━━━ ~ ┃ & ┃ | ┃ ^ ┃ << ┃ >> ━━━━╋━━━━━╋━━━━━╋━━━━━━╋━━━━━━╋━━━━━━
按位取反┃ 按位与 ┃ 按位或 ┃ 按位异或 ┃ 左移 ┃ 右移
━━━━┻━━━━━┻━━━━━┻━━━━━━┻━━━━━━┻━━━━━━
对移位:如<< ,a<<2,即为将二进制的a左移两位,若a=0x8f,即10001111,a=a<<2,将导致a=0x3c(00111100),右边补零。五》条件运算符:
逻辑表达式? 表达式1:表达式2 六》指针与地址运算符: *取内容 &取地址
七》强制类型转换:(类型)=表达式(char *)0xb000 八》sizeof 取数据类型、变量以及表达式的字节数的运算符; 九》continue:中断语句:结束本次循环。
单片机C语言之三_____________________________________________________________________________________ 函数:
一》中断服务函数与寄存器组定义:
函数类型 函数名(形式参数表)[interrupt n][using n] n为中断号,0~31:
━━━━┳━━━━━┳━━━━━ 中断编号┃ 中断向量┃ 入口地址 ━━━━╋━━━━━╋━━━━━ 0 ┃ 外中断0 ┃ 0003H ━━━━╋━━━━━╋━━━━━ 1 ┃ 定时器0 ┃ 000BH ━━━━╋━━━━━╋━━━━━ 2 ┃ 外中断1 ┃ 0013H
━━━━╋━━━━━╋━━━━━ 3 ┃ 定时器1 ┃ 001BH ━━━━╋━━━━━╋━━━━━ 4 ┃ 串行口 ┃ 0023H ━━━━┻━━━━━┻━━━━━
后面的n指的是四个工作寄存器组的一个:0~3 对函数目标代码影响如下:
在函数入口处将当前工作寄存器组保护到堆栈中;指定的工作寄存器内容不会改变,函数返回前将被保护的工作寄存器组从堆栈中恢复!例(定时1ms):
#include
1、如果中断函数中用到浮点运算,必须保存浮点寄存器的状态。(在math.h中保存浮点寄存器函数为pfsave, 恢复浮点寄存器的状态函数为fprestore)
2、如果在中断函数中调用了其他函数,则被调函数所使用的工作寄存器组与中断函数的一致!*/
单片机C语言之四_____________________________________________________________________________________
一、局部变量与全局变量(外部变量):
1、全局变量若不在开头定义则加extern
2、全局变量会使代码长,占用内存多
二、存储方式:
自动变量(auto):缺省,函数调用存在,退出消失。
内部变量 静态变量(static):static int a=5;始终存在,退出不消失,但不能访问。寄存器变量(register):速度最快。通常只给编译器一个建议,由编译器根 据实际情况确定。(见下)变量 全局变量(global): 外部变量
静态变量(static): 寄存器变量例: #include
三、函数的参数和局部变量的存储器模式: 三种存储器模式:small,compact,large.一个函数的存储器模式确定了函数的参数和局部变量在内存中的地址空间 small:内部ram compact, large:外部RAM 函数类型 函数名(形式参数表)[存储器模式] 例:
#pragma large /*默认存储器模式为large*/ extern int calc(char I,int b)small;/*指定small模式*/ extern int func(int I,float f)large;/*指定large模式*/ int large_te(int I,int k)/*未指定,按默认的large模式处理*/ { return(mtest(I,k)+2);}
利用存储器混合模式编程,充分利用有限的存储空间,还可加快程序的执行速度!
单片机C语言之五_____________________________________________________________________________________ 数组 1>初始化数组: unsigned char a[5]={0x11,0x22,0x33,0x44,0x55} 或
unsigned char a[ ] ={0x11,0x22,0x33,0x44,0x55,0x66} 3>数组作为函数的参数:不但可以由变量作为函数的参数外,还可以用数组名作为函数的参数。一个数组数组名表示该数组的首地址。用一个数组名作为函数的参数时,在执行函数调用的过程中参数传递方式采用的是地址传递。将实际参数数组首地址传递给被调函数中的形式参数数组,这样一来两个数组就占有同一段内存单元。见下图:
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 起始地址1000 b[0] b[1] b[2] b[3] b[4] b[5] b[6] b[7] b[8] b[9] 用数组名作为函数的参数,应该在主调函数和被调函数中分别进行数组定义而不能只在一方定义数组。而且在两个函数中定义的数组类型必须一致,如果类型不一致将导致编译出错。实参数组和型参数组的长度可以一致可以不一致,编译器对形参数组的长度不做检查,直只是将实参数组的首地址传递给行参数组。如果希望行参数组能得到实参数组的全部元素,则应使两个数组的长度一致。定义型参数组时可以不指定长度,只在数组名后面跟一个方括号[]。这时为了在被调函数中处理数组元素的需要,应另外设置一个参数来传递数组元素的个数。
例:用数组作为函数的参数,计算两个不同长度的数组中所有元素的平均值 #include float pot_1[2]={99.9,88.8};float pot_2[3]={11,22,33.3};average(pot_1,2);average(pot_1,3);} 单片机C语言之六_____________________________________________________________________________________ 软件法去干扰: 工程上我们在采集数据时一般要求精度达到5%%,大于这个值将认为无效。我在实际应用中采用8535对32路数据进行采集(8535带10位AD,带看门狗),发现数据跳动有时达7%%,这是由于各种干扰造成的。主要来自于随机干扰,下面就各种干扰的方法给出简单的去除方法: 1、白噪声:最重要的统计特性为平均值为0,可采取每路数据采集几次求平均的方法; 2、随机干扰:该点明显高于或低于附近正常采样值,故采取中值滤波法,即对被测信号连续采样M次,进行大小排序,取大小居中的1/3个采样值进行算术平均; 3、电源干扰:特点是有固定周期,故可采用定时采样求平均的方法。 由于各种排序与求平均算法用C易于实现,故C常常用于采集系统中软件去干扰。至于排序算法可参考上一篇文章,有一个经典的程序。 在实际中我们采用每路猜9个值,排序,取中间3个,求平均。然后。,每路数据几乎不动! 单片机C语言之七_____________________________________________________________________________________ 指针:可对内存地址直接操作 基于存贮器的指以贮器类为参量,它在编译时才被确定。因此为指针选择存贮器的方法可以省掉,以这些指针的长度可为1个字节(idata *,data *,pdata *)或2个这节(code *,xdata *)。char xdata *address;ADC0809具有8个模拟量输入通道,采用中断方式,在中断函数中读取8个通道的A/D转换值,分别存储在外部RAM的1000H~1007H单元。ADC0809端口地址为00F0H。 程序定义了两个指针变量* ADC和* ADCdata,分别指向ADC0809端口地址(00F0H)和外部RAM单元地址(1000H~1007H) 由*ADC=I送入通道数,启动ADC0809进行A/D转换,转换结束时产生INT1中断。在中断服务函数int1()中通过temp=*ADC和*ADCdata=temp;读取A/D转换结果并存到外部RAM中。#include void main(){ ADC=0x00f0;/*定义端口地址和数据缓冲器地址*/ ADCdata=0x1000;I=8;/* ADC0809有8个模拟输入通道*/ EA=1;EX1=1;IT1=1;/*开中断*/ *ADC=I;/*启动ADC0809*/ WHILE(I);/*等待8个通道A/D转换完*/ } void int1()interrupt 2 { unsigned char tmp;temp=*ADC;/*读取A/D转换结果*/ *ADCdata=temp;/*结果值存到数据缓冲区*/ ADCdata++;/*数据缓冲区地址加1*/ i—;*ADC=I;/*启动下一个模拟输入通道A/D转换*/ } 除了用指针变量来实现对内存地址的直接操作外,c51编译器还提供一组宏,该宏定义文件为:“absacc.h”,利用它可十分方便地实现对任何内存空间的直接操作,改写上面的程序: #include char *s=”abcdef”;int strlen(char *s);printf(“n length of ‘%%s’=%%dn”,s,strlen(s));} int strlen(char *s){ char *p=s;while(*p!=’ ’)p++;return(p-s);} 结果为:length of ‘abcdef’=6 注:不允许指针之间进行加,乘,除,移位,或屏蔽运算,也不允许用float类型数据与指针做加,减运算! 抽象型指针: ANSI新标准增加了一种“void * ”的指针类型,这是一种抽象型指针,即可以定义一个指针变量,但不指定该指针是指向哪种类型的数据的。在赋值时需进行强制类型转换: Char *p1;Void *p2;P1=(char*)p2;抽象型指针可以用来在每个存储区内访问任意绝对地址或者用来产生绝对调用。 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 论文报告纸 C语言学习感想 一C语言学习经历学习C语言已经大半年了,回想起这段学C语言的日子,经历了先苦后甜的过程。早在上学期就已经听说过C语言的挂科率,高达50%,同学们谈C色变。这种感觉在第一节课的时候终于得到了证实,老师首先讲授了学习C语言的技巧,记得最清楚的就是上课一定要记笔记,上课认真听,上机认真做练习。接着老师给我们大体介绍了C语言的发展历程以及在目前大学教育里的地位的扶摇直上。C语言最初是为开发UNIX操作系统而设计的。C语言是介于汇编语言和高级语言的语言,C语言面向过程,高级语言面向对象,C语言较于高级语言的一个优点就是能够直接对地址进行操作。最后老师对我们讲解了计算机中的进制问题,那叫一个头疼,老师以为我们在上学期大体学过,就匆匆讲了一下,老师的快语速加上我较差的基本功,我彻底的晕了,不过幸好的是我那时并没有放弃,反而全身心的把精力放在了记笔记上。这个小小的措施使得我有机会在课后仔细的复习和研究老师上课的内容,最终弄懂弄通。在第二节课上前面部分老师主要讲了C语言的算法,这部分我在高中时接触过,所以大部分都听懂了,有不理解的照例做了笔记,课后再看几遍也就会了。到了后半部分老师讲了数据类型及基本运算,这部分开始还能听的懂,但随着大量的新概念的输入,脑子开始迷糊了,我有开始充分发挥我的强记能力,几乎把老师说出的每个我听不懂的字都记录下来,所以现在看我那一章的书密密麻麻的全是字。但这种方法确实帮了我不少忙。但自那节课后,我意识到了这种听课方式的弊端,这样囫囵吞枣的记笔记,就浪费了大把大把的上课时间,我开始尝试慢慢的强迫自己接受老师的讲课内容,开始确实接受不进去,甚至还想打瞌睡,但这种强迫式的学习开始慢慢的发挥最用,我开始能够接受大量的新定义和逻辑算法,这令我无比兴奋,我喜欢这这种听课很顺的感觉。接下来的课,由于前面的基础打的好,所以听起课来没什么困难,至少直到指针这一节是 这样的。为了更好的学习C语言,我还买了谭浩强的《C语言试题汇编》,做了大量的训练,渐渐的喜欢上了C语言,看着在电脑上运行自己编写的小程序,无比兴奋(编的小程序仅仅处于自己的爱好)。现在在短学期学习C语言的结构体,指针和链表,我很遗憾的是真的如老师所言,我们在短学期根本没心思好好学,不过为了应付下学期的二级考试,我还是准备在暑假好好再学一下。二 C语言学习技巧(笔者自己的看法,不必锱铢必较)1.一定要记笔记 2.课后一定要复习,可以向老师拷PPT 3.买一本C语言练习册,自己有空就做做,大学里有的就是时间 4.多多尝试自己编写一些小程序,最好是自己感兴趣的 5.上机好好做题三 学习C语言的重要性(大家都是这样说的)1C语言是Combined Language(组合语言)的中英混合简称。是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范 围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。 2作为新世纪的大学生,应当站在时代发展的前列,掌握现代科学知识,调整自己的知识结构和能力结构,以适应社会发展的要求。新世纪需要具有丰富的现代科学知识,能够独立解决面临的任务,充满活力,有创新意识的新型人才。尤其是掌握计算机的基本技能和语言。 共3页第1页 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 论文报告纸四 C语言的特点1.C是中级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。2.C是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。3.C语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外C语言也具有强大的图形功能,支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。4.C语言适用范围大。适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。五 C语言的优点 简洁紧凑、灵活方便C语言一共只有32个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。运算符丰富C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。数据结构丰富 C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 论文报告纸第五篇:C语言学习感想