关闭

关闭

关闭

封号提示

内容

首页 C语言程序设计.pdf

C语言程序设计.pdf

C语言程序设计.pdf

上传者: 老书不好找 2010-10-23 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《C语言程序设计pdf》,可适用于IT/计算机领域,主题内容包含C语言程序设计序言经过余年的教学实践层次教学已成为高等院校计算机基础教学的基本模式。教育部倡导的“计算机文件基础计算机技术基础计算机应用基础”个层次符等。

C语言程序设计序言经过余年的教学实践层次教学已成为高等院校计算机基础教学的基本模式。教育部倡导的“计算机文件基础计算机技术基础计算机应用基础”个层次为高校实施计算机基础教学提供了一个科学的框架。根据我们的理解三层次教学中的文化基础为“入门”课用于引导学生认识计算机文化在信息社会中的地位作用技术基础为“拓宽”课用于从硬件和软件两个方面扩充学生的知识和技能它们构成三层次教学的“基础与核心”。而应用基础层则是三层次教学的“归宿”其目的在于结合专业的需要“深化”在某一方面(或领域)的计算机应用知识加强学生解决本专业计算机应用的能力。本系列教材就是按照这样的思路编写的。第一批书目包括一、二层次的本计算机公共课教材即:《计算机文化引论》《C语言程序设计》《计算机软件环境与工具》《微机数据库应用》《微型计算机硬件组成》《计算机网络应用基础》以后将陆续编写出版第三层次的教材例如《微机原理与应用》、《图形处理与CAD基础》、《面向对象程序设计》等以满足不同专业的学生深入学习的需要。本系列教材具有下列特点:一、体现了全新的课程体系。考虑到软件技术的发展本系列在《计算机文化引论》课之后用程序设计、数据库和软件环境与工具等本教材代替传统的一本教材程序设计。又鉴于多媒体应用与网络应用在近年来发展迅猛本系列在首批书目中列入了《微型计算机硬件组成》与《计算机网络应用基础》两种教材分别介绍这两个方面的知识。这一课程体系既在总体上满足教育部三层次教学的内容也突出了计算机基础教学重在应用、立足于提高学生素质、帮助学生建立强烈的计算机文化意识提高计算机文化素质的需要。二、按照知识单元安排每本教材的内容自年起编者就在教育部高校工科计算机基础课程教学指导委员会的支持下开展对计算机基础课知识结构的研究。年该项研究被教育部列为面向世纪计算机基础教学项目组立项课题。上述种教材每种覆盖知识单元的一个领域构成一个相对独立的教学模块特别方便不同层次的高校与读者按需选用。三、遴选作者强强联手。参加编写本系列第一批教材的作者都是根据本人的特长由所在学校推荐的、对该方面的教学和科研富有经验的教师。编写大纲统一由系列教材编辑委员会审定对保证教材质量起到良好的作用。本系列的出版得到四川省高校计算机基础教育研究会和机械工业出版社华章公司大力支持。教育部计算机基础课程教学指导委员会委员、电子科技大学古天祥教授和教育部计算机基础课程教学指导委员会委员、四川大学李志蜀教授担任系列教材编辑委员会的顾问对系列的选题与内容都提出宝贵的意见。借此机会编者对他们表示诚挚的感谢。史济民李光琳随着计算机技术的深入发展特别是微机的普及越来越多的人在学习计算机知识以满足社会发展和自身的需要。C语言不仅为计算机专业人员所使用和喜爱近年来许多计算机应用人员也开始喜爱和使用C语言。实践证明它是一种很好的程序设计语言。但C语言对一般初学者来说规则较多使用太灵活不易掌握学习会有一定的困难而且C语言的应用范围越来越大所涉及的知识也在不断地增加。基于此我们重新编写了C语言教程一方面以满足初学者的需要另一方面对C语言所涉及的深入技术做了一定介绍。此书既可作为C语言的教程也可作为工具书以备编程时参考。本教材对C语言的精华部分作了较为细致的介绍。我们还针对目前高等院校和社会上举办的各种计算机的等级考试精心组织了教材的内容。在教材的第、章介绍了算法的基本思想和C语言的基础知识第、章介绍了C语言的基本程序设计技术、C语言函数的特点、函数的相互调用及变量的特性第、章介绍了C语言的各种不同类型的数组及指向变量的指针和指向各种不同类型的数组的指针的使用和程序设计详细地介绍了指针的特点和灵活性第、章介绍了链表技术和文件的操作方法第章介绍了C语言的综合应用图形的制作和音乐的演奏方法第章介绍了C的入门知识以满足不同层次读者的需求。列举的例题都是本书作者的精心设计并全部在TurboC环境下调试通过。本教材的第、章由易涛编写第、、、章由袁平编写第、、章由郝玉洁编写第章由常征编写。由于作者水平有限书中难免会有错误希望读者和专家提出宝贵意见以帮助我们将此教材进一步完善。目录序言前言第章程序设计与算法程序设计语言的发展C语言的特点C语言是中级语言C语言是结构化语言C语言是程序员的语言C语言的程序结构基本程序结构函数库和链接开发一个C程序C语言的关键字算法流程图与算法的结构化描述用NS图描述算法用PAD图描述算法第章数据类型、运算符和表达式C语言的数据类型常量与变量标识符命名常量变量整型数据整型常量整型变量实型数据实型常量实型变量字符型数据字符常量字符串常量转义字符符号常量字符变量运算符算术运算符自增和自减关系和逻辑运算符位操作符操作符逗号操作符关于优先级的小结表达式表达式中的类型转换构成符cast空格与括号C语言中的简写形式第章程序控制语句程序的三种基本结构数据的输入与输出scanf()函数printf()函数getchar()函数与putchar()函数程序应用举例条件控制语句if语句switch语句程序应用举例循环控制语句while语句dowhile语句for语句break与continue语句程序应用举例第章函数函数说明与返回值函数的类型说明返回语句函数的作用域规则局部变量全局变量动态存储变量静态存储变量函数的调用与参数形式参数与实际参数赋值调用与引用调用递归实现问题参数和通用函数效率函数库和文件程序文件的大小分类组织文件函数库C语言的预处理程序与注释C语言的预处理程序#define#error#include条件编译命令#undef#line#pragma预定义的宏名注释程序应用举例第章数组一维数组向函数传递一维数组字符串使用的一维数组二维数组二维数组的一般形式字符串数组多维数组数组的初始化数组初始化变长数组的初始化应用程序举例第章指针指针与指针变量指针变量的定义与引用指针变量的定义指针变量的引用指针运算符与指针表达式指针运算符与指针表达式指针变量作函数的参数指针与数组指针与一维数组指针与二维数组数组指针作函数的参数指针与字符数组指针的地址分配指针数组指向指针的指针main函数的参数第章结构体与共用体结构体类型变量的定义和引用结构体类型变量的定义结构体类型变量的引用结构体类型变量的初始化结构体数组的定义和引用结构体指针的定义和引用指向结构体类型变量的使用指向结构体类型数组的指针的使用链表的建立、插入和删除单链表单链表的插入与删除共用体共用体的定义共用体变量的引用第章输入、输出和文件系统缓冲文件系统文件的打开与关闭文件的读写随机读写文件非缓冲文件系统文件系统应用举例第章实用编程技巧图形应用技巧显示适配器类型的自动测试屏幕图像的存取技巧屏幕显示格式的控制方法使图形软件脱离BGI的方法拷贝屏幕图形的方法随意改变VGA显示器显示颜色的技巧用随机函数实现动画的技巧用putimage函数实现动画的技巧菜单设计技术下拉式菜单的设计选择式菜单的设计实现阴影窗口的技巧音响技巧音乐程序设计自动识谱音乐程序实现后台演奏音乐的技巧第章C入门面向对象的概念面向对象的程序结构C的类C的输入与输出类与对象类的定义与对象的引用构造函数与析构函数函数重载友元对象指针派生类与继承类单继承的派生类多继承的派生类附录A常用字符与ASCII代码对照表附录B习题下载第章程序设计与算法程序设计语言的发展自年世界上第一台电子计算机问世以来计算机科学及其应用的发展十分迅猛计算机被广泛地应用于人类生产、生活的各个领域推动了社会的进步与发展。特别是随着国际互联网(Internet)日益深入千家万户传统的信息收集、传输及交换方式正被革命性地改变我们已经难以摆脱对计算机的依赖计算机已将人类带入了一个新的时代信息时代。新的时代对于我们的基本要求之一是:自觉地、主动地学习和掌握计算机的基本知识和基本技能并把它作为自己应该具备的基本素质。要充分认识到缺乏计算机知识就是信息时代的“文盲”。对于理工科的大学生而言掌握一门高级语言及其基本的编程技能是必需的。大学学习除了掌握本专业系统的基础知识外科学精神的培养、思维方法的锻炼、严谨踏实的科研作风养成以及分析问题、解决问题的能力的训练都是日后工作的基础。学习计算机语言正是一种十分有益的训练方式而语言本身又是与计算机进行交互的有力的工具。一台计算机是由硬件系统和软件系统两大部分构成的硬件是物质基础而软件可以说是计算机的灵魂没有软件计算机是一台“裸机”是什么也不能干的有了软件才能灵动起来成为一台真正的“电脑”。所有的软件都是用计算机语言编写的。计算机程序设计语言的发展经历了从机器语言、汇编语言到高级语言的历程。机器语言电子计算机所使用的是由“”和“”组成的二进制数二进制是计算机的语言的基础。计算机发明之初人们只能降贵纡尊用计算机的语言去命令计算机干这干那一句话就是写出一串串由“”和“”组成的指令序列交由计算机执行这种语言就是机器语言。使用机器语言是十分痛苦的特别是在程序有错需要修改时更是如此。而且由于每台计算机的指令系统往往各不相同所以在一台计算机上执行的程序要想在另一台计算机上执行必须另编程序造成了重复工作。但由于使用的是针对特定型号计算机的语言故而运算效率是所有语言中最高的。机器语言是第一代计算机语言。汇编语言为了减轻使用机器语言编程的痛苦人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串比如用“ADD”代表加法“MOV”代表数据传递等等这样一来人们很容易读懂并理解程序在干什么纠错及维护都变得方便了这种程序设计语言就称为汇编语言即第二代计算机语言。然而计算机是不认识这些符号的这就需要一个专门的程序专门负责将这些符号翻译成二进制数的机器语言这种翻译程序被称为汇编程序。汇编语言同样十分依赖于机器硬件移植性不好但效率仍十分高针对计算机特定硬件而编制的汇编语言程序能准确发挥计算机硬件的功能和特长程序精炼而质量高所以至今仍是一种常用而强有力的软件开发工具。高级语言从最初与计算机交流的痛苦经历中人们意识到应该设计一种这样的语言这种语言接近于数学语言或人的自然语言同时又不依赖于计算机硬件编出的程序能在所有机器上通用。经过努力年第一个完全脱离机器硬件的高级语言FORTRAN问世了多年来共有几百种高级语言出现有重要意义的有几十种影响较大、使用较普遍的有FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL、Pascal、C、PROLOG、Ada、C、VC、VB、Delphi、JAVA等。高级语言的发展也经历了从早期语言到结构化程序设计语言从面向过程到非过程化程序语言的过程。相应地软件的开发也由最初的个体手工作坊式的封闭式生产发展为产业化、流水线式的工业化生产。年代中后期软件越来越多规模越来越大而软件的生产基本上是人自为战缺乏科学规范的系统规划与测试、评估标准其恶果是大批耗费巨资建立起来的软件系统由于含有错误而无法使用甚至带来巨大损失软件给人的感觉是越来越不可靠以致几乎没有不出错的软件。这一切极大地震动了计算机界史称“软件危机”。人们认识到:大型程序的编制不同于写小程序它应该是一项新的技术应该像处理工程一样处理软件研制的全过程。程序的设计应易于保证正确性也便于验证正确性。年提出了结构化程序设计方法年第一个结构化程序设计语言Pascal语言出现标志着结构化程序设计时期的开始。年代初开始在软件设计思想上又产生了一次革命其成果就是面向对象的程序设计。在此之前的高级语言几乎都是面向过程的程序的执行是流水线似的在一个模块被执行完成前人们不能干别的事也无法动态地改变程序的执行方向。这和人们日常处理事物的方式是不一致的对人而言是希望发生一件事就处理一件事也就是说不能面向过程而应是面向具体的应用功能也就是对象(object)。其方法就是软件的集成化如同硬件的集成电路一样生产一些通用的、封装紧密的功能模块称之为软件集成块它与具体应用无关但能相互组合完成具体的应用功能同时又能重复使用。对使用者来说只关心它的接口(输入量、输出量)及能实现的功能至于如何实现的那是它内部的事使用者完全不用关心C、VB、Delphi就是典型代表。高级语言的下一个发展目标是面向应用也就是说:只需要告诉程序你要干什么程序就能自动生成算法自动进行处理这就是非过程化的程序语言。C语言的特点C语言是中级语言C语言通常称为中级计算机语言。中级语言并没有贬义不意味着它功能差、难以使用、或者比BASIC、Pascal那样的高级语言原始也不意味着它与汇编语言相似会给使用者带来类似的麻烦。C语言之所以被称为中级语言是因为它把高级语言的成分同汇编语言的功能结合起来了。表表明了C语言在计算机语言中所处的地位。C语言程序设计下载表C语言在计算机语言中的地位高级Ada、Modula、Pascal、COBOL、FORTRAN、BASIC中级C、FORTH、Macroassembler低级Assembler作为中级语言C允许对位、字节和地址这些计算机功能中的基本成分进行操作。C语言程序非常容易移植。可移植性表示为某种计算机写的软件可以用到另一种机器上去。举例来说如果为苹果机写的一个程序能够方便地改为可以在IBMPC上运行的程序则称为是可移植的。所有的高级语言都支持数据类型的概念。一个数据类型定义了一个变量的取值范围和可在其上操作的一组运算。常见的数据类型是整型、字符型和实数型。虽然C语言有五种基本数据类型但与Pascal或Ada相比它却不是强类型语言。C程序允许几乎所有的类型转换。例如字符型和整型数据能够自由地混合在大多数表达式中进行运算。这在强类型高级语言中是不允许的。C语言的另一个重要特点是它仅有个关键字这些关键字就是构成C语言的命令。和IBMPC的BASIC相比后者包含的关键字达个之多。C语言是结构化语言虽然从严格的学术观点上看C语言是块结构(blockstructured)语言但是它还是常被称为结构化语言。这是因为它在结构上类似于ALGOL、Pascal和Modula(从技术上讲块结构语言允许在过程和函数中定义过程或函数。用这种方法全局和局部的概念可以通过“作用域”规则加以扩展“作用域”管理变量和过程的“可见性”。因为C语言不允许在函数中定义函数所以不能称之为通常意义上的块结构语言)。结构化语言的显著特征是代码和数据的分离。这种语言能够把执行某个特殊任务的指令和数据从程序的其余部分分离出去、隐藏起来。获得隔离的一个方法是调用使用局部(临时)变量的子程序。通过使用局部变量我们能够写出对程序其它部分没有副作用的子程序。这使得编写共享代码段的程序变得十分简单。如果开发了一些分离很好的函数在引用时我们仅需要知道函数做什么不必知道它如何做。切记:过度使用全局变量(可以被全部程序访问的变量)会由于意外的副作用而在程序中引入错误。结构化语言比非结构化语言更易于程序设计用结构化语言编写的程序的清晰性使得它们更易于维护。这已是人们普遍接受的观点了。C语言的主要结构成分是函数C的独立子程序。在C语言中函数是一种构件(程序块)是完成程序功能的基本构件。函数允许一个程序的诸任务被分别定义和编码使程序模块化。可以确信一个好的函数不仅能正确工作且不会对程序的其它部分产生副作用。C语言是程序员的语言也许你会问“所有的计算机语言不都是程序员使用的吗?”回答是断然的“否”。我们考虑典型的非程序员的语言COBOL和BASIC。COBOL的设计使程序员难以改变所编写代码的可靠性甚至不能提高代码的编写速度。然而COBOL设计者的本意却是打算使非程序员能读程序(这是不大可能的事)。注意第章程序设计与算法下载这并不是攻击COBOL的优点而是想指出它没有被设计成为程序员的理想语言。BASIC的主要目的是允许非专业程序员在计算机上编程解决比较简单的问题。与其形成鲜明对照的是C语言由于程序生成、修改和现场测试自始至终均由真正的程序员进行因而它实现了程序员的期望:很少限制、很少强求、块结构、独立的函数以及紧凑的关键字集合。用C语言编程程序员可以获得高效机器代码其效率几乎接近汇编语言代码。C语言被程序员广泛使用的另一个原因是可以用它代替汇编语言。汇编语言使用的汇编指令是能够在计算机上直接执行的二进制机器码的符号表示。汇编语言的每个操作都对应为计算机执行的单一指令。虽然汇编语言给予程序员达到最大灵活性和最高效率的潜力但开发和调试汇编语言程序的困难是难以忍受的。非结构性使得汇编语言程序难于阅读、改进和维护。也许更重要的是汇编语言程序不能在使用不同CPU的机器间移植。最初C语言被用于系统程序设计。一个“系统程序”是一大类程序的一部分这一大类构成了计算机操作系统及实用程序。通常被称为系统程序的有:•操作系统。•翻译程序。•编辑程序。•汇编程序。•编译程序。•数据库管理程序。随着C语言的普及加之其可移植性和高效率许多程序员用它设计各类程序。几乎所有的计算机上都有C语言编译程序这使我们可以很少改动甚至不加改动地将为一种机器写的C语言源程序在另一种机器上编译执行。可移植性节省了时间和财力。C语言不仅在速度和结构上有它的优势而且每个C语言系统都提供了专门的函数库程序员可以根据不同需要对其进行剪裁以适应各种程序的设计。由于它允许(更准确地说是鼓励)分别编译所以C语言可使程序员方便地管理大型项目最大限度地减少重复劳动。C语言的程序结构基本程序结构任何一种程序设计语言都具有特定的语法规则和规定的表达方法。一个程序只有严格按照语言规定的语法和表达方式编写才能保证编写的程序在计算机中能正确地执行同时也便于阅读和理解。为了了解C语言的基本程序结构我们先介绍几个简单的C程序。例#include<stdioh>main()*主函数*{printf("Thisisasampleofcprogramn")*调用标准函数显示引号中的内容*}C语言程序设计下载C‡Ìò‹ä։ƄßÔÚ`ɡˇÔÒˇ”RUNThisisasampleofcprogramÀýmain()*Ö”flý*{voidproc()*”flýÉøˆ*inta=*Ö‚a“Õßý‹‡ı…Öµ“*proc()*µÓˆ”flýproc,Þ•µØ*a=func()*µÓˆ”flýfunc,‰Æ„ß•µØ‚ła*printf("Thisisasampleofcprogramn")}voidproc()*Òå”flýproc,voidÖ‚‚ˆ”flý†•µØ‰Æ„ß*{printf("Hellon")}intfunc()*Òå”flýfunc,intÖ‚‚ˆ”flý•µØÒ‚öÕßý*{return()*•µØÕßý*}–‡ÌòµÖ„ý‡Ì”‡ÌòÓmain()ƒ“…–ä`aœ–íÒ‚öÕßý‹†Ò‡ı…Öµ“Ö‡Ìò”flý'proc()`ɡˇÔHello‹n““ÒåÖ•ß‹œ–íµÒâ…Ö‡Ìò”flý'func()†‰‰Æ„ß‚‡ÓŁa‹–‹aµÖµ“`ɡˇÔThisisasampleofcprogram–‡ÌòÖµ‰Æ„ßÔÚ`ˇÔ`‰ˇ”RUNHelloThisisasampleofcprogram‡ÌòÖ**–íÔ‡Ìòµµˆ‡“'‹††Óº‡ÌòµÔÖÉÒÔÒâÖ•ß‹ç””ÖÒôÓµÀý*亇⁄•‰Ì嵇⁄í‚ß‹…ª‡⁄•‰ÌåÌåý*main(){intx,y,z,v*ÒåÕß–ä`*scanf("d,d,d",x,y,z)*µÓˆ–Œ…”flý‹Ó…üÌäºx,y,zµÖµ*v=volume(x,y,z)*µÓˆvolume”flý‹…ªÌåý*prinf("v=dn",v)}第章程序设计与算法ˇÔØintvolume(a,b,c)*定义volume函数*inta,b,c*对形参a,b,c作类型定义*{intp*定义函数内部使用的变量p*p=a*b*c*计算体积p的值*return(p)*将p值返回调用处*}本程序的功能是对从键盘输入的长方体的长、宽、高三个整型量求其体积的值。程序运行的情况如下:RUN,,v=在本例中main函数在调用volume函数时将实际参数x、y、z的值分别传送给volume函数中的形式参数a、b、c。经过执行volume函数得到一个结果(即volume函数中变量p的值)并把这个值赋给变量v。从上面程序例子可以看出C程序的基本结构。C程序为函数模块结构所有的C程序都是由一个或多个函数构成其中必须只能有一个主函数main()。程序从主函数开始执行当执行到调用函数的语句时程序将控制转移到调用函数中执行执行结束后再返回主函数中继续运行直至程序执行结束。C程序的函数是由编译系统提供的标准函数(如printf、scanf等)和由用户自己定义的函数(如proc、func、volume等)。虽然从技术上讲主函数不是C语言的一个成分但它仍被看做是其中的一部分因此“main”不能用作变量名。函数的基本形式是:函数类型函数名(形式参数)形式参数说明{数据说明部分语句部分}其中:函数头包括函数说明、函数名和圆括号中的形式参数(如intvolume(a,b,c))如果函数调用无参数传递圆括号中形式参数为空(如voidproc()函数)。形式参数说明指定函数调用传递参数的数据类型(如例中语句inta,b,c)。函数体包括函数体内使用的数据说明和执行函数功能的语句花括号{和}表示函数体的开始和结束。函数库和链接从技术上讲纯粹由程序员自己编写的语句构成C语言程序是可能的但这却是罕见的。因为所有的C编译程序都提供能完成各种常用任务的函数函数库(如printf、scanf等)。C编译程序的实现者已经编写了大部分常见的通用函数。当我们调用一个别人编写的函数C语言程序设计下载时编译程序“记忆”它的名字。随后“链接程序”把我们编写的程序同标准函数库中找到的目标码结合起来这个过程称为“链接”。保存在函数库中的函数是可重定位的。这意味着其中机器码指令的内存地址并未绝对地确定,只有偏移量是确定的。当把程序与标准函数库中的函数相链接时内存偏移量被用来产生实际地址。有关重定位的详细内容请查阅其他技术书籍。编写程序时用到的函数许多都可以在标准函数库中找到。它们是可以简单地组合起来的程序构件。编写了一个经常要用的函数之后可将其放入库中备用。开发一个C程序开发一个C程序包括以下四步:)程序设计程序设计亦称程序编辑。程序员用任一编辑软件(编辑器)将编写好的C程序输入计算机并以文本文件的形式保存在计算机的磁盘上。编辑的结果是建立C源程序文件。C程序习惯上使用小写英文字母常量和其他用途的符号可用大写字母。C语言对大、小写字母是有区别的。关键字必须小写。)程序编译编译是指将编辑好的源文件翻译成二进制目标代码的过程。编译过程是使用C语言提供的编译程序(编译器)完成的。不同操作系统下的各种编译器的使用命令不完全相同使用时应注意计算机环境。编译时编译器首先要对源程序中的每一个语句检查语法错误当发现错误时就在屏幕上显示错误的位置和错误类型的信息。此时要再次调用编辑器进行查错修改。然后再进行编译直至排除所有语法和语义错误。正确的源程序文件经过编译后在磁盘上生成目标文件。)链接程序编译后产生的目标文件是可重定位的程序模块不能直接运行。链接就是把目标文件和其他分别进行编译生成的目标程序模块(如果有的话)及系统提供的标准库函数链接在一起生成可以运行的可执行文件的过程。链接过程使用C语言提供的链接程序(链接器)完成生成的可执行文件存在磁盘中。)程序运行生成可执行文件后就可以在操作系统控制下运行。若执行程序后达到预期目的则C程序的开发工作到此完成。否则要进一步检查修改源程序重复编辑编译链接运行的过程直到取得预期结果为止。大部分C语言都提供一个独立的开发集成环境它可将上述四步连贯在一个程序之中。本书所涉及的程序全部在TurboC环境中进行。C语言的关键字表列举了个关键字它们与标准C句法结合形成了程序设计语言C。表关键字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregistershortsignedsizeofstaticreturnstructswitchtypedefunionunsignedvoidvolatilewhile第章程序设计与算法下载C语言的关键字都用小写字母。C语言中区分大写与小写else是关键字“ELSE”则不是。在C程序中关键字不能用于其它目的即不允许将关键字作为变量名或函数名使用。算法什么是程序?程序=数据结构算法。对于面向对象程序设计强调的是数据结构而对于面向过程的程序设计语言如C、Pascal、FORTRAN等语言主要关注的是算法。掌握算法也是为面向对象程序设计打下一个扎实的基础。那么什么是算法呢?人们使用计算机就是要利用计算机处理各种不同的问题而要做到这一点人们就必须事先对各类问题进行分析确定解决问题的具体方法和步骤再编制好一组让计算机执行的指令即程序交给计算机让计算机按人们指定的步骤有效地工作。这些具体的方法和步骤其实就是解决一个问题的算法。根据算法依据某种规则编写计算机执行的命令序列就是编制程序而书写时所应遵守的规则即为某种语言的语法。由此可见程序设计的关键之一是解题的方法与步骤是算法。学习高级语言的重点就是掌握分析问题、解决问题的方法就是锻炼分析、分解最终归纳整理出算法的能力。与之相对应具体语言如C语言的语法是工具是算法的一个具体实现。所以在高级语言的学习中一方面应熟练掌握该语言的语法因为它是算法实现的基础另一方面必须认识到算法的重要性加强思维训练以写出高质量的程序。下面通过例子来介绍如何设计一个算法:例输入三个数然后输出其中最大的数。首先得先有个地方装这三个数我们定义三个变量A、B、C将三个数依次输入到A、B、C中另外再准备一个MAX装最大数。由于计算机一次只能比较两个数我们首先把A与B比大的数放入MAX中再把MAX与C比又把大的数放入MAX中。最后把MAX输出此时MAX中装的就是A、B、C三数中最大的一个数。算法可以表示如下:)输入A、B、C。)A与B中大的一个放入MAX中。)把C与MAX中大的一个放入MAX中。)输出MAXMAX即为最大数。其中的)、)两步仍不明确无法直接转化为程序语句可以继续细化:)把A与B中大的一个放入MAX中若A>B则MAXA否则MAXB。)把C与MAX中大的一个放入MAX中若C>MAX则MAXC。于是算法最后可以写成:)输入ABC。)若A>B则MAXA否则MAXB。)若C>MAX则MAXC。)输出MAXMAX即为最大数。C语言程序设计下载这样的算法已经可以很方便地转化为相应的程序语句了。例猴子吃桃问题:有一堆桃子不知数目猴子第一天吃掉一半觉得不过瘾又多吃了一只第二天照此办理吃掉剩下桃子的一半另加一个天天如此到第十天早上猴子发现只剩一只桃子了问这堆桃子原来有多少个?此题粗看起来有些无从着手的感觉那么怎样开始呢?假设第一天开始时有a只桃子第二天有a只第天有a只第天是a只在a,a,a中只有a=是知道的现要求a而我们可以看出a,a,a之间存在一个简单的关系:a=*(a)a=*(a)a=*(a)也就是:ai=*(ai)i=,,,,,这就是此题的数学模型。再考察上面从aa直至a的计算过程这其实是一个递推过程这种递推的方法在计算机解题中经常用到。另一方面这九步运算从形式上完全一样不同的只是ai的下标而已。由此我们引入循环的处理方法并统一用a表示前一天的桃子数a表示后一天的桃子数将算法改写如下:)a={第天的桃子数a的初值}i=。{计数器初值为})a=*(a)。{计算当天的桃子数})a=a。{将当天的桃子数作为下一次计算的初值})i=i。)若i>=转)。)输出a的值。其中)~)步为循环。这就是一个从具体到抽象的过程具体方法是:)弄清如果由人来做应该采取哪些步骤。)对这些步骤进行归纳整理抽象出数学模型。)对其中的重复步骤通过使用相同变量等方式求得形式的统一然后简练地用循环解决。算法的描述方法有自然语言描述、伪代码、流程图、NS图、PAD图等。流程图与算法的结构化描述流程图流程图是一种传统的算法表示法它利用几何图形的框来代表各种不同性质的操作用流程线来指示算法的执行方向。由于它简单直观所以应用广泛特别是在早期语言阶段只有通过流程图才能简明地表述算法流程图成为程序员们交流的重要手段直到结构化的程序设计语言出现对流程图的依赖才有所降低。下面介绍常见的流程图符号及流程图的例子。第章程序设计与算法下载本章例的算法的流程图如图所示。本章例的算法的流程图如图所示。在流程图中判断框左边的流程线表示判断条件为真时的流程右边的流程线表示条件为假时的流程有时就在其左、右流程线的上方分别标注“真”、“假”或“T”、“F”或“Y”、“N”。图常见的流程图符号图例的算法流程图图例的算法流程图另外还规定流程线是从下往上或从右向左时必须带箭头除此以外都不画箭头流程线的走向总是从上向下或从左向右。算法的结构化描述早期的非结构化语言中都有goto语句它允许程序从一个地方直接跳转到另一个地方去。执行这样做的好处是程序设计十分方便灵活减少了人工复杂度但其缺点也是十分突出的C语言程序设计下载起止框执行框连接点流程线判断框输入、输出框注释框开始结束输入ABCA>BC>MAXMAX<=AMAX<=CMAX<=B输出MAX开始i=a=i>i=ia=*(a)a=a输出a结束TTFF一大堆跳转语句使得程序的流程十分复杂紊乱难以看懂也难以验证程序的正确性如果有错排起错来更是十分困难。这种转来转去的流程图所表达的混乱与复杂正是软件危机中程序人员处境的一个生动写照。而结构化程序设计就是要把这团乱麻理清。经过研究人们发现任何复杂的算法都可以由顺序结构、选择(分支)结构和循环结构这三种基本结构组成因此我们构造一个算法的时候也仅以这三种基本结构作为“建筑单元”遵守三种基本结构的规范基本结构之间可以并列、可以相互包含但不允许交叉不允许从一个结构直接转到另一个结构的内部去。正因为整个算法都是由三种基本结构组成的就像用模块构建的一样所以结构清晰易于正确性验证易于纠错这种方法就是结构化方法。遵循这种方法的程序设计就是结构化程序设计。相应地只要规定好三种基本结构的流程图的画法就可以画出任何算法的流程图。()顺序结构顺序结构是简单的线性结构各框按顺序执行。其流程图的基本形态如图所示语句的执行顺序为:ABC。()选择(分支)结构这种结构是对某个给定条件进行判断条件为真或假时分别执行不同的框的内容。其基本形状有两种如图a)、b)所示。图a)的执行序列为:当条件为真时执行A否则执行B图b)的执行序列为:当条件为真时执行A否则什么也不做。图顺序结构的流程图图选择(分支)结构的流程图()循环结构循环结构有两种基本形态:while型循环和dowhile型循环。awhile型循环如图所示。其执行序列为:当条件为真时反复执行A一旦条件为假跳出循环执行循环紧后的语句。bdowhile型循环如图所示。图while型循环流程图图dowhile型循环流程图图dowhile型循环转换为while型循环第章程序设计与算法下载ABC条件ABa)条件Ab)条件ATF条件AA条件ATTFTTFF执行序列为:首先执行A再判断条件条件为真时一直循环执行A一旦条件为假结束循环执行循环紧后的下一条语句。在图、图中A被称为循环体条件被称为循环控制条件。要注意的是:)在循环体中必然对条件要判断的值进行修改使得经过有限次循环后循环一定能结束如图中的i=i。)当型循环中循环体可能一次都不执行而直到型循环则至少执行一次循环体。)直到型循环可以很方便地转化为当型循环而当型循环不一定能转化为直到型循环。例如图可以转化为图。用NS图描述算法NS图是另一种算法表示法是由美国人INassi和BShneiderman共同提出的其根据是:既然任何算法都是由前面介绍的三种结构组成所以各基本结构之间的流程线就是多余的因此NS图也是算法的一种结构化描述方法。NS图中一个算法就是一个大矩形框框内又包含若干基本的框三种基本结构的NS图描述如下所示:顺序结构如图所示执行顺序先A后B。选择结构对应于图的NS图为图。图a)条件为真时执行A条件为假时执行B。图b)条件为真时执行A为假时什么都不做。图顺序结构的NS图图选择结构的NS图循环结构)while型循环的NS图如图所示条件为真时一直循环执行循环体A直到条件为假时才跳出循环。)dowhile型循环的NS图如图一直循环执行循环体A直到条件为假时才跳出循环。本章例的NS图如图例的NS图如图。应该说NS图比流程图更直观易懂而且相对简练一些。图例的NS图图例的NS图C语言程序设计下载AB当<条件>为真AA当<条件>为真图while型循环的NS图图dowhile型循环的NS图输入A,B,Cmax<=Amax<=Bmax<=C输出MAXA>BC>maxTTFFa=i=当i>=时循环输出aa=*(a)a=ai=iFF条件TTABAa)b)条件用PAD图描述算法PAD(ProblemAnalysisDiagram)是近年来在软件开发中被广泛使用的一种算法的图形表示法与前述的流程图、NS图相比流程图、NS图都是自上而下的顺序描述而PAD图除了自上而下以外还有自左向右的展开所以如果说流程图、NS图是一维的算法描述的话则PAD

用户评论(1)

0/200

精彩专题

上传我的资料

每篇奖励 +2积分

资料评价:

/49
仅支持在线阅读

意见
反馈

立即扫码关注

爱问共享资料微信公众号

返回
顶部