1. 首页
  2. 课程学习
  3. C++/C
  4. 从问题到程序-程序设计和C语言.pdf

从问题到程序-程序设计和C语言.pdf

上传者: 2018-12-25 20:56:24上传 PDF文件 11.16MB 热度 59次
从问题到程序-程序设计和C语言.pdf 很好的一本书 老师推荐的概念及有关的问题,预处理命令和预处理过程,递归的概念等第6章数组。介绍数组的概念、定义和使用,数组与函数的关系,两维和多维数组等第7章,指针。首先介绍指针的概念和指针变量的使用,C语言中指针与数组的关系,多维数组作为参数的通用函数,而后讨论动态存储管理、类型定义、指向函数的指针等问题第8章,文件和输入输出。讨论文件的概念,与输入蝓出有关的各种问题,标准库的输入输出功能,以及输入翰出的程序设计问题。第9章:结构和其他数据砒制。介绍结构( struch),联合(unon)、枚举{enum)等数据定义机制的意义及在程序中的使用。随后筒单介绍了链接结构的概念。第10章,程序开发技术。讨论程序设计及开发中的一般性问题和技术,包活分块开发问题第1章,标准库。介绍标准库提供各方面功能及其相关知识最后有儿个附录介绍了C语言的些相关泰考愤料。本书以ANS标准C语言为背景,书屮所有实例均按 ANSI C标准写,习题也不涉及任间具体的系统环境。读者可以用任何符合 ANSI C标谁的C系统作为编程环境,如国内使用较多的Turbo c系统,微机上可用的公开的免费的c,DevC+以及其他各种系统。在此特别感谢北京大学理科试验班和数学学院参加C程序设计课程的同学们和参加辅导工作的岍究生们:是他们的思考和问题给了我许多启示,使我更深入地理解了许多向题。我也要感谢我的家人与同事在这些年的工作中给子我的支持。本书曾于199年在北京大学出版社出版。这一新版对全书做了大幅度修改,反映了近年来我对许多问趣的新认识,也使这个新版已经成为了另一本新书。山于机械业出版社华章分社朋友们的大力支持,使得本书得以面世,我在这里向他们表示特别的谢意。虽然本书凝结着我多年的工作心得和深人的思考,但书中仍难免有或大或小的错误。希望读者能把发现的问题告诉我,也希望同行们对本书提出宝贵意见。裂宗燕北京大学数学学院信息科学系,205年修订目录前乍章讨论的垂要概念本书作者简介练习4第3章变量、函数和控制结构………43第1章程序设计和C话言31语句、复合结构!31.]程序和程序语言4q4■4卩■■32变量—一概念、定义和使用…………441.2C语亡简介3.21变量的定义…4513…个简单的C程序3.2.2变量的赋值与取值14棵序开发过程了3323几个问题1.5回题与程序设计733定义函数(初步)本章讨论的重要概念Ia331函数定义练习332函数和程序第2章数据对象与计算21333函数与类型565721基本子符、名宇表示、标识符和关键字…2334自定义输出函数34关系表达式、逻辑表达式、条件22数据与类型表达式5823基本类型与数据表示…tI4l关系表达式和条件表达式231整数类型和整数的表示4342逻辑表达式23.2实数类型和实数的表示35语句与控制结构233半符类型和字符的表示26351条体语句《语句234数据的外部表示、内部表示与转换…27352循环语句(1):wii1e语句…6524运算符、表达式与计算……,33循环语句(2):for语句6824.1算术运算符…+…………336若十常用结构和问题…………7024.2算未表达式"+5361增量和减量运箅符(+、-243表达式的求值●中2362逗号运算符244计算和类型36.3现二元运算符操作的赋值运算符…!72.5数学函数库及其使用37364空语句72251函数、函数调用37365表达式和求值73252数学函数及其使用…38问题解释………………………74r23:数调用中的犬型转换………39个常用程序模式74问题解籽……本章计论的重要概念几个常用程序模式■■『■『1练习……………75篤4章基本程序设计技术79几个常用程序模式284]猸环程序没计79本章讨伦的重要概念l2841.1基本循环方式……………………890练习l2842米系列完全平方数8!第5章C程序结构41.3判断素数(谓词函数)………51数值类型j33414艰难的旅程(浮点误差8351.1实数类型和整数类型………………13341.5求立方根(迭代和逼进…5512字符类型……………334.6求sin函数值通項计算)……………8653整数类型…13442循坏程序的问题8754基本数据类型的选择…………………135421从循环中退出■■■■■■■■■■■I晶52函数和标准库函数…0+1++3042.2循环中的儿种变量………8952.1C语言的库函数34.3循环与遊归52.2字符分类函数…………43阶乘和乘幂(循环,递归52.3随机数生成函数…432 Fibonacci序列(计算与时))953函数定义和程的函数分解…………19433为计算过程计吋531主函数n…404.34 Fibonacci序列的迭代计算(程序532程序的函数分解………4确性与循环不变式}95533对函数的两种观点f42435最大公约数97534恿数原型…………▲.36河內塔(梵塔)问题……54C程序结构与变量14944基本輸入辋出…54.外部定义的变量…l50441格式输入函数canf2542作用域与生存期…IsI44.2字符轴人输出函数…+.095543外部变量和自动变最…15I443翰人函数的返回值及其作用s44变量定义的嵌套534.5控制结构和控制语勺54.5静态局部变量……54whi1c循环结构I4545变量的其他向题………75545.2流程控制语句……………………554,7一个实例7153开关语句55顶处理4.6程序设计实例51文件包含命令……594.6.1一个简单计算器……552宏定义与太替换……46,2定义枚举常量…………119553条件编译命令■卩b↓pI■t16346.3单词计数问题i2.56定义常量47程序测试和排错r……………!2357字位运算符………l6547.1测试12358編程实例…47.2白箱测试r…s…"…2458.-个单的猜数游戏i6&4.73票箱测试25582加密与解密70474排除厅里的错误………………126本章讨论的重要概念r72问题解释27练习72XI第6章数组…15第7章指钅21761数继的概念、定义和使用71地址与指针……27611定义数組变量72指针变量的定义和使用21861.2数组的使用…77721指针操作……………29631.3数组的初始化……722指针作为函数的参数…723与指针有关的一些问题…222614数组的存储实现…了8062数组程序实例…73指针与数组……731指向数组元素的指针22462.1从字符到下标…73.2基于指针运算的数组程序设针227622筛注求素数……·78273.3散组参数与指针…………228623成绩分类83134指针与数组操作的程广实例……229624多项式求值873.5宇符指针与宁符数组………………237625定义数組软问题1574指针数组23363数纽作为函数参数86741指针数组与两维数组63]·个例子…66742命令行参数及共处理…23563,2修改实参数组的元素…87.5多维数组作为泰数的通用函数…23864字符数组与宇符申8976动态存情管理……24064.l宇符数組…………"…I897l为什么需要动态存储管唾……240642宇符串…………89762C语言的动态存储管理机制……24I643程序实划……9763两个程序实例244644标准库字符处理函数93764函数、指针和动态存储………247645输出文本里的最长行77定义类型25065两维和多数组……9771定义数组类型和指针类型…25l651多维数蚶的初始化…772复杂类型描述与解读…252652多维数组的表示和使用+4++49g78指向函数的指针………………25478.1函数指针的定义和使用…2546.53多维数组作为函数的参数78,2函数指针作为函数的参数2556编程实例20783数值积分函数…257661成绩直方图…·20星784若干以函数指针为参数的数組操作66,2…个递用带检查的竖数輪入图数……v5实用函数………+259663“计算”数组变量的大小…几个常用程序模式*260664统计C程序里的关键字208本章讨论的重要慨念260665数组的划分…212练习…26666数组的排序213第8章文件和输入输出……………26间题解释………2}581文件的概念……·263几个常用程序模式………冒■1■』冒■幽■■■■215R11浇和文件指针…263本章讨论的重要概念…………鲁十十十鲁十十■■1.2缓冲式输人输出…………""264絲2582文件的使用…265XII821文件的打开和关闭………………265棼习…■■■822输人输出函数267第10童程序开发技术327823程序实例……………………………26810.1分别编译和C程序的分块开发32784直接输入输出函数■■1■■■■■■■■"■■■1■■■2几010.11分块开发的问题和方法R3标准流输入输出与格式控制l0.12程序实例:学生成绩处理12883.1行式输人和输H!…………………*271013分块重整83,2输人格式控制………∵2721014其地安排称考虑………………36333输出格式控制-……27610.5模块化思想和技术………………3883,4以字符串作为桦式化输入19.1.6单一头文件结构和多个头文件结构…342输出对象……………………………27802功能模块和程序库…34583.5标错误流27810.21复数模块………+3584程序实例……2791022目标文件和库84]求文件数据的平均值………27910.23防止重复包含34984.2…个背单词程序……23103错误报告和处理……1…∴3249843资金月系统………28510.31建立统一的错误报告机制练习28810.3.2定义变参数的错误报告函数……350第9章结构和其他数指机制29i1033运行中错误的检查和处理……35291结构(stmc)……………………………29104程序的配置……………5891结构声明与变量定义…………291041程序的行为参数和启动时的配置…3589.1.2结构变量的初始化和使用291042交互式配置369.13结构、数组与指针…………29710.4.3通过命令行参数369.2结构与函数2y91044采用配置文件予292处理结构的函数■■■pP吧299105程序开发过程92,2程序实例30210.51自二而下的开发93联合( UnIo10.52自下而上开发………………36594枚举(nm…………∴………30810.53实际开发过程3659.5编程实划………∴…310练习367951数据组的排序30第11章标准庫379.52复数的表示和处理…………3]21.1标准库结构3719.6链接结均(自引用结构r"35111标准定义(< stade. h>)…………3729.61链接结构d中且L2错误信息(3729.6.,2自引用结构的定义3l712几个已经介绍过的头文件…………33963程序文现………318l.2.数学函数( cmath h>)…3739.64数据与查找…321122字符处理函数(< typeh>)………749.7‘段1.3字符函数(< string.h)………375问题解释…3231l3.1一些字符串函数375本章讨论的重要慨念323tL.3.2存储操作…………………8XIII.4功能函数()……3791175其他有关图数14.l儿个整数函数l1.76采用va_list畚数的输出压数391t14.2数值转换…1.8定义变长度参数表(< starch>)……392l.4.3执行控制…381.9非局部控制转移()…383111标准库的其他功能……3981.6实现特征(<1 imits.h>和111本地化…398tfloat hx………3851.1,2多字节字符…400上61数类型特征385章讨论的重要概念40016,2浮点数类型特征386练习…4001.7其他与翰入输出关的函数附录AC语运算符表……………4t≤stiQ,n>)……招6附录BC语言速查………………·40311.1符号常量和类型386附录CC9简介…………………40911.72文件操作函数387进一步学习的建议4131.73流緩冲区操作函数……38参考文献46rL74文件定位及定位函数389第1章程序设计和C语言在开始学习程序设计时,初学者首先遇到的问题是:“什么是程序”?“什么是程序设计语言”?本章首先讨论这方面的问题.帮助读者在比较直观的基硏上建立起对程序、程序设计、程序投计语言的基本认识。而后筒单介绍本书中讨论程序设计问题时所用的程序设计语言—C语言,并通过一个简单实例介绍C语言程序的一些基本情况和有关概念。最后介绍在程序设计中必然要遇到的些问题。1.1程序和程序语言程序词也来自生活,通常指完成某项事务的一套既定活动方式或者活动过程。从表述方面看,我们可以把程序看成对一系列动作的执行过程的描述。日常生活中也可以找到许多“程序”实例。例如,一个学生早起床后的行为可能描述为1.起床2.刷牙3.洗险4.吃饭5.早自习这是个直线形的程序,由一系列更简单的活动(基本步骤)纽成。这就是最简单的程序形式。描述这种程序,也就是给出个包含其中各个基木彩骤的序列、如果按顺序实施这些步骤的动作,其整体效果就完成了该项率务或者工作现在考虑另一个复杂些的过程:到图书馆借教学参考书。这…常见过程可以描述为进入图书馆2.查书目3.填写索书草4.交图书馆工作人贤取书5.如杲谅书已经備出,可以有两舯选择5],回到第2步(进一步啬找其他参考书的书目;5.2被弃借书、离开图书馆6.(工作人员找到要侍的书)办理借书手续7.离开书馆这个程序比前个复杂得多。可以看到,这一程序不是个平铺直叙的动作序列,其屮步骤更多,有时还需要根据当时遇到的情况处理,以及可能出现的重复动作。如果仔细探究这个实例,还叮以认识到这一程序可能需要进一步细化。例如读若可能找出许多在上面描述中末处理的情况。譬如说:聋找图书月录时没有找到所需的书籍:填写好索书单后已经到∫卜班时阃;借书时发现自已没有带借书证;工作人员聋到该读者的借书册数已经达到限额,或发现该读者有逾期木还的图书,因此柜绝出借,等等。由这些现实生活中的例子,我们可以初步看到程序的一些直观特征。现实生活中有许许多多这样的程序性的活动,当我们身处其中时,通常需要按部就班地步步完成一系列动作。对这种作(事务、活动)过程的细节动作描述就是一个“程序”在-个程序描述中、总有批预先假定的“基本动作”,这些基本动作是执行稱序者能够理解和直接完成的。例如,在上面有关借书的程序描述中,我们把“查书目”作为一个基本动作如果来图书馆的读者个知道如何查书目(例如学校的新生),那么,在给这种读者的程序描述中就需要把“查书月”动作进一岁细分,描述耷书目的细节过程,例如,通过图书馆的计算机检索系统奎图书月录的过程可以描述为从计算机进入图书馆的书具检索系统输入有关要捡索图书的信息;从检京到的图书中选择这就是程序的进步细化:或者叫做功能分解。如果偕书的人不知道如何启动计箅机检索系统,程序就需要进步分解。这种逐步细化或者分解的过程,也是下面有关计算机程序设计的计论中是最本质的东听。程序通常都有开始与结束。在执行…个程序的过程中,动作者(无论是不是人)需要按照程序的述执行系列的动作。在达到结束位置时工作就完成了。本书中将要深入讨论的计算机程序同样具有这些特征。计算机、程序与程序设计H常生活中程序性活动的情况与计算机里的程序执行很相似。这一情况叮以帮助我们理解计算机的活动方式,当然,在人们日常活中的程序性工作中有更多变数,许多事悄并不要求完全按释序做,可以有许多“灵活性”。而计算机对程序的执行则完全是严格的、一丝不苟的计算机将一步步程序中的指令办事,点“商量”的余地也没有计算机是人类发明的·种自动机器,它能完成的工作就是“计算”。实际上,计算机的最本功能是可以执行一组基本操作:每个操作能完成件很简单的王作,例如做一次整数的加减乘除运箅,把一个数从这里搬到那里、比较两个数的大小等。为使计算机能按人的指挥工作毎种计算机都提供了一套指令,每种指令对应计算机能执行的一个基本动作。所谓的计算机程序,也就是·系列的这种指令。作为看得见、摸得着的物理实体,廿算机的基本原埋非常简单,其最本质特征就是能自动地按程序〔作为计算礼能执行的基本动作序列〕工作。因此,人与计算机打交道的基本方式就是把要求计算机执行的程序提供给它,而后命令它去执行这个程序。此后,计算机就会按照程序的规定,一丝不尚地执行其中的指令,直至程序结束。人们常把计算机执行程序的过程单地说成是程序的执行过程。计算机是…种通用的计算机器,给了它灬个或者·组程序之后,它就变为处理某个专门间
用户评论