ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:108.69KB ,
资源ID:3814399      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3814399.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第一章 C语言程序设计概述汇总.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第一章 C语言程序设计概述汇总.docx

1、第一章 C语言程序设计概述汇总第一章 C语言程序设计概述1.1 程序和程序设计语言计算机是在程序的控制下工作的。要让计算机能够正常的运行,需要预先编写好计算机工作步骤的指令序列,即系统程序;要利用计算机来解决一个具体的实际问题,同样需要编写程序,即应用程序。这些都要进行程序设计工作。1.1.1 程序与程序设计所谓程序,就是一系列遵循一定规则和思想并能正确完成指定工作的代码(也称为指令的序列)。通常一个计算机程序主要描述两部分的内容,其一是描述问题的每个对象及他们之间的关系,即数据结构的内容;其二是描述对这些对象进行处理的动作、动作的先后顺序,即求解的算法。因此,程序也可以用经典的公式来表示:程

2、序数据结构算法所谓程序设计,就是根据计算机要完成的任务,提出相应的需求,在此基础上设计数据结构和算法,然后用某种程序设计语言编写相应的程序代码。一个设计合理的数据结构往往可以简化算法,而且一个好的程序有可靠性、易读性、可维护性等良好特性。1.1.2 程序设计语言程序设计语言是人与计算机交流的工具,是用来书写计算机程序的工具。程序设计的语言有几百种,最常用的不过十多种。按照程序设计语言发展的过程,可以分为三类。1. 机器语言机器语言是由0和1这样的二进制代码按一定规则组成的、能被机器直接理解和执行的指令集合。机器语言中的每一条语句实际上是一条二进制形式的指令代码(即机器指令),机器指令一般由操作

3、码和操作数两个部分组成,操作码表示该指令所要完成的功能,操作数指出完成这个功能所需要的数据或数据在内存中的地址。例如,某种计算机上计算A=15+10的机器语言程序如下:10110000 00001111 把15放入累加器A中00101100 00001010 10与累加器A中的值相加,结果仍放入A中11110100 结束,停机用机器语言编写的程序,计算机可以直接识别和执行,因而执行效率高。但由于不同的机器,其指令系统不同,因此机器语言程序通用性差。另外,机器语言的指令不直观,难认、难记、难理解、难修改、易出错。因此,很少有人用机器语言直接编程。2. 汇编语言为了便于理解和记忆,人们采用能够帮助

4、记忆的指令助记符来代替机器语言指令代码中的操作码,用地址符号或十进制数来代替操作数。指令助记符一般采用描述该指令功能的英文单词的缩写,如用ADD表示加法操作、SUB表示减法操作、JMP表示程序跳转等等。这种指令助记符的语言就是汇编语言,又称为符号语言。例如,上述计算A=15+10的汇编语言程序如下:MOV A,15 把15放入累加器A中ADD A,10 10与累加器A中的值相加,结果仍放入A中HLT 结束,停机计算机不能直接执行用汇编语言编写的程序,必须由一种专门的翻译程序(即汇编程序)将汇编语言源程序翻译成机器语言程序,计算机才能执行。3. 高级语言机器语言和汇编语言都是面向机器的语言,一般

5、称为低级语言。它们对机器的依赖性很大,用它们开发出的程序通用性差,而且要求程序的开发者必须熟悉和了解计算机硬件的每一个细节,因此,它们面对的用户一般是计算机专业人员。随着计算机技术的发展及计算机应用领域的不断扩大,计算机用户的队伍也在不断壮大,而且这个队伍中绝大部分人不是计算机专业人员。为此,从20世纪50年代中期开始,逐步发展了面向问题的程序设计语言,称为高级语言。高级语言与具体的计算机硬件无关,其表达方式接近于被描述的问题,接近于自然语言和数学语言,易为人们接受和掌握。用高级语言编写程序要比用低级语言容易得多,大大简化了程序的编制和调试过程,使编程效率得到大幅度的提高。例如,上述计算A=1

6、5+10的BASIC语言程序如下:A=15+10 15与10相加的结果放入A中 PRINT A 输出AEND 程序结束用高级语言编写的程序易学、易读、易修改,通用性好。但是,计算机同样不能直接执行高级语言程序,必须经过语言处理程序的翻译后才能被机器接受。下面列出几种最常用的高级语言及其最适用的领域: Basic 教学和微小型应用程序的开发 Fortran 科学及工程计算程序的开发 Pascal 专业教学和应用程序的开发 C 中、小型系统程序的开发 C+ 面向对象程序的开发 Java Internet上应用的重要编程语言Visual Basic 面向对象程序的开发 Cobol 商业、交通和银行等

7、行业应用程序的开发 Lisp 人工智能程序的开发 Prolog 人工智能程序的开发1.1.3 语言处理程序计算机可以直接识别和执行的只能是机器语言程序。用汇编语言和高级语言编写的程序,都必须经过一个翻译过程才能转换为计算机所能识别的机器语言程序,实现这个翻译过程的工具是语言处理程序,即翻译程序。翻译程序除了要完成语言间的转换外,还要进行语法、语义等方面的检查。针对不同的程序设计语言编写出的程序,有各自的翻译程序,互相不通用。翻译程序可分为汇编程序和高级语言翻译程序;高级语言翻译程序有两种工作方式:解释方式和编译方式,对应的是解释程序和编译程序。1. 汇编程序汇编程序是一种由专业的软件开发商提供

8、的系统软件,它能将用汇编语言编写的源程序翻译成某种类型的计算机的机器语言程序,即目标程序,这一翻译过程称为汇编。图1.1是汇编程序的功能示意图。 汇编程序通常是将一条汇编语言指令翻译成一条机器语言指令。在翻译的过程中,还要对每一条指令进行语法检查,若有错误,就中断汇编过程,并以某种方式输出错误的类型及有关信息,以便用户进行修改。若没有错误,就自动生成相应的目标程序,再经过一定处理之后,便可以运行了。运行的是可执行的目标代码,与源程序及汇编程序无关。若源程序作了某些修改,则必须再重新进行汇编。2. 解释程序解释程序的工作过程是将高级语言源程序一句一句地读入,每读入一个语句都要对它进行分析和解释,

9、若有错误就即时中断其解释过程,并通知用户进行修改,若没有错误就按照解释结果执行所要求的操作。其工作过程如图1.2所示。BASIC、LISP等语言采用解释方式。解释方式灵活、方便,交互性好,解释执行程序的过程中也不会产生目标程序。但因为是边解释边执行,所以程序的执行速度很慢,如果源程序中出现循环结构,解释程序也要重复多次地解释循环体中的每一条语句,造成很大浪费,而且解释方式在运行源程序时离不开翻译程序。3. 编译程序 编译程序的功能是将用高级语言编写的源程序翻译成机器语言程序,即目标程序,这一翻译过程称为编译。但目标程序还不能立即装入机器执行,因为还没有连接成一个整体,在目标程序中还可能要调用一

10、些其他语言编写的程序和标准程序库中的标准子程序,所有这些程序通过连接程序将目标程序和有关的程序库组合成一个完整的可执行程序。产生的可执行程序可以脱离编译程序和源程序独立存在并反复使用。故编译方式执行速度快,但每次修改源程序后,都必须重新编译。其工作过程如图1.3所示。 与汇编程序不同的是,编译程序往往需要将一条高级语言的语句转换成若干条机器语言指令,而且翻译的过程也要复杂得多。一般高级语言(C/C+、PASCAL、FORTRAN、COBOL等)都是采用编译方式。1.1.4 设计程序的基本原则要设计出一个好的程序,必须了解利用计算机解决实际问题的过程,掌握程序设计的基本技术,熟练地掌握一种程序设

11、计语言。计算机解决问题的基本过程如图1.4所示。 图1.4 计算机解决问题的基本过程如何才能编写出高质量的程序呢?下面是设计程序时应遵循的基本原则:(1) 正确性。正确性是指程序本身必须具备且只能具备程序设计规格说明书中所列举的全部功能。它是判断程序质量的首要标准。(2) 可靠性。可靠性是指程序在多次反复使用过程中不失败的概率。(3) 简明性。简明性的目标是要求程序简明易读。(4) 有效性。程序在计算机上运行需要使用一定数量的计算机资源,如CPU的时间、存储器的存储空间。有效性就是要在一定的软、硬件条件下,反映出程序的综合效率。(5) 可维护性。程序的维护可分为校正性维护、适应性维护和完善性维

12、护。一个软件的可维护性直接关系到程序的可用性,因此应特别予以关注。(6) 可移植性。程序主要与其所完成的任务有关,但也与它的运行环境有着一定的联系。软件的开发应尽可能远离机器的特征,以提高它的可移植程度。为了有效地进行程序设计,不仅要掌握一门高级语言,还应该学会对各类问题拟定出有效的解题步骤即算法设计。有了正确的算法,才能够编制程序。算法的好坏,决定了程序的优劣,因此,程序设计的核心任务之一就是设计算法。1.2 算法所谓算法,就是问题的求解方法。例如,期末考试前的复习计划,就是“复习算法”;到医院看病,先挂号,后诊断、检查,再取药等,是“看病算法”。在计算机中,把解题过程的准确而完整地描述称为

13、解题算法。一个算法由一些操作组成,而这些操作又是按一定的控制结构所规定的次序执行的,也就是算法由操作与控制结构两个要素组成。一个算法应该具有如下特点:(1)有穷性:一个算法应该包含有限的操作步骤,而不能是无限的;并且能在有限的时间内完成。(2)确定性:每一个步骤都是确定的,而不能是含糊的、模棱两可的。(3)有效性:每一个步骤都能得到有效地执行,并得到确定的结果。(4)有零个或多个输入:所谓输入是指执行算法时需要从外界取得必要的信息。(5)有一个或多个输出:算法的目的就是为了求解,“解”就是输出。上述所讲的算法特性,约束人们去正确地书写算法,使之能够正确无误地执行,达到求解问题的预期效果。同时,

14、算法还应该具有直观、清晰、易懂的表示形式,以利于维护、修改和交流。1简单算法举例例1.1 给出求x1+x2+x3+x4+x5 的值的算法。算法分析如下: (1)手工计算的算法。采用手工计算的步骤为: 将x1与x2相加,得到两个数之和; 将上一步的和与x3相加,得到三个数之和; 将上一步的和与x4相加,得到四个数之和; 将上一步的和与x5相加,得到五个数之和。这种算法虽然是正确的,但太繁琐。如果要求x1+x2+x100,则要写99个步骤,显然是不可取的。 (2)适合计算机处理的算法。该算法能更加简洁地表达上述解题过程,并具有通用性。先定义几个变量:设置变量s表示多项式之和,其初值为零;设置变量a

15、表示多项式中的一项,它的值可以为x1,x2,x5;用i记录被加了几次,其初值为1。解题步骤为: s 0; i 1; a xi; (使a等于多项式中的第i项) s s+a; (求和,并将结果保留在s中) i i+1; (计数增值) 若i 5,则重复,各步;否则,计算结束; 输出s。2算法的表示算法的表示,有多种不同的方法。如自然语言、传统流程图、结构化流程图、伪代码、PAD图等。(1)自然语言。自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言。这样的算法通俗易懂,但文字冗长,容易出现“歧义性”,在表示包含分支和循环的算法时,不太方便和直观。因此,除了很简单的问题以外,一般不用自然语言表

16、示。(2)传统流程图。流程图(Flowchart)是用一些框图、线条及文字说明来描述算法。美国国家标准化协会ANSI规定了一些常用的流程图符号。如表1.1所示。用三种基本结构作为表示一个良好算法的基本单元,由它们可以嵌套、组合,形成复杂的程序流程图。图1.5表示了三种基本结构的传统流程图。其中,(a)表示顺序结构,(b)表示选择结构,(c)表示当型循环结构,(d)表示直到型循环结构。 顺序结构。图1.5 (a)中,两个框是顺序执行的。即先执行“处理1”框所指定的操作,接着执行“处理2” 框所指定的操作。 选择结构,又称分支结构。图1.5 (b)中,当条件满足时执行“处理1”框,否则执行“处理2

17、”框。 循环结构,又称重复结构。图1.5(c)中,首先判断条件是否满足,若条件满足,则执行“处理”框指定的操作,之后返回再判断条件,由此构成循环,直至条件不满足为止;图1.5 (d)中,先执行“处理”框指定的操作,之后判断条件是否满足,若条件不满足,就返回执行“处理”框指定的操作,直到条件满足为止。 (a) 顺序结构 (b) 选择结构 (c) 当型循环结构 (d) 直到型循环结构图1.5 三种基本结构的传统流程图表1.1传统流程图常用的符号 图 形 名 称 说 明 流向线 表示算法流程方向;箭头方向为入口,相背方向为出口 开始、结束框 开始框仅有流向线从其流出,而结束框仅有流向线流入 处理框

18、也称矩形框,表示确定的处理、步骤 输入输出框 表示原始数据的输入和处理结果的输出 判断框 允许有一个入口,两个或两个以上的可选择的出口 连接点 用来将画在不同地点的流程线连接起来 功能调用框 表示执行模块或子程序 注释框 用于书写注释信息流程图形象、直观,便于交流,广泛使用。例1.2 输入一个整数,将它倒过来输出。例如,输入12345,输出为54321。试给出其算法。流程图见图1.6。例1.3 从键盘输入100个数,求出这100个数的累加和,并找出它们的最大值和最小值。试用传统流程图表示解决这个问题的算法。流程图见图1.7。输入一个整数给x (3)N-S流程图。随着结构化程序设计的兴起,简化了

19、控制流向,出现了N-S图。N-S图是美国学者I.Nassi和B.Shneiderman提出的一种新的流程图形式。N-S图中去掉了传统流程图中带箭头的流向线,全部算法以一个大的矩形框表示,该框内还可以包含一些从属于它的小矩形框,适于结构化程序设计。图1.8表示了结构化程序设计的三种基本结构的N-S流程图表示。其中,(a)表示顺序结构,(b) 表示选择结构,(c) 表示当型循环结构,(d) 表示直到型循环结构。处理1处理2处理1处理2成立不成立条件P处理当P成立时处理直到P成立时为止(a) 顺序结构(b) 选择结构(c) 当型循环(d) 直到型循环图1.8 三种基本结构的N-S流程图例1.4 从键

20、盘输入一个整数,判别该数是否为素数。素数,也称为质数,是指只能被1及其自身整除且大于1的正整数,如2、3、5、7等都是素数。用N-S流程图表示解决这个问题的算法。N-S流程图见图1.9。从键盘输入一个数给nw=0; i=2r= n% i (求n除以i的余数)直到i=n或w=1时为止r=0?不是是w=1i=i+1w=0?是不是输出n不是素数输出n是素数图1.9 判断素数的N-S流程图(4)伪代码。伪代码是一种介于自然语言和计算机语言之间的文字和符号来表示的算法,每一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便、格式紧凑,也比较好懂,便于向计算机语言算法(即程序)过渡。例1.5 将例

21、1.2 的算法用伪代码表示。 输入一个整数给x; while(x 0) d=x%10;输出d;x=将x/10得到的整数; (5)计算机语言。计算机是无法识别流程图和伪代码的,只有用计算机语言编写的程序才能被计算机执行(当然还要经过翻译等处理)。因此,在用流程图或伪代码表示出一个算法后,还要将它转换称计算机语言程序。用计算机语言表示算法必须严格遵循所用语言的语法规则,这是和伪代码不同的。例1.6 将例1.2的算法用C语言表示。#include main ( ) int x,d; x=12345; while (x!=0)d=x%10;printf (“%d”, d);x=x/10;在这里,读者只

22、需大体看懂它即可,在以后的各章中会详细介绍C语言有关的使用规则。应当强调说明的是,写出了C程序,仍然只是表示了算法,并未实现算法,只有运行程序才是实现算法。应该说,用计算机语言表示的算法是计算机能够执行的算法。1.3 结构化程序设计方法程序设计是一门技术,需要相应的理论、技术、方法和工具来支持。就程序设计方法和技术而言,主要经过了结构化程序设计和面向对象的程序设计阶段。结构化程序设计强调程序设计风格和程序结构的规范化,提倡结构清晰。良好的程序设计风格可以使程序结构清晰合理,使程序代码便于维护。著名的“清晰第一,效率第二”的论点已成为当今主导的程序设计风格。结构化程序设计方法的基本思路是,把一个

23、复杂的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。结构化设计方法的主要原则可以概括为自顶向下,逐步细化,模块化,限制使用GOTO语句。(1)自顶向下。程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。先从最上层总体目标开始设计,逐步使问题具体化。(2)逐步求精。对复杂问题,应设计一些目标做过渡,逐步细化。(3)模块化。一个复杂的问题,肯定是由若干稍简单的问题组成。模块化是把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,每个小目标成为一个模块。(4)限制使用GOTO语句。用三种基本结构组成的程序必然是结构化程序,这种程序便于编写、阅

24、读、修改和维护。这就减少了程序出错的机会,提高了程序的可靠性,保证了程序的质量。例1.7 求35000之间的所有素数(质数)。分析:我们采用自上向下、逐步细化的方法来处理这个问题。即先把这个问题分解为二个相对较小的问题: 判别某数是否为素数; 利用循环判别35000之间的所有的数是否为素数,若是就把它输出。把这两个小问题分别用两个程序模块来实现,并由此给出解决这个问题的程序流程图。图1.10(a)是判别35000之间的所有的数是否为素数,若是就把它输出的流程图。但其内容还是笼统的、抽象的,因为还没有解决怎样才能实现“判别某数是否为素数”的功能,需要进一步“细化”。在这里我们给出一种算法:用整数

25、i除以从2、3、4一直到i-1的每一个正整数,如果都除不尽,则i是素数,否则,只要其中有一个被除数能除尽,则i就不是素数。其实现算法如图1.12(b)所示,该程序模块运行结束后,若变量flag的值为1,则i是素数,否则i不是素数。 (a) (b)图1.10 输出35000之间所有的质数到此为止,已全部细化完毕。每一部分都可以分别直接用高级语言的语句来表示。由此可以看出:“自顶向下、逐步细化”是结构化程序设计方法的核心。应当学会利用这种方法把一个总的任务(即抽象化的要求)逐步具体化。可以说,逐步细化的过程是使求解问题“由抽象到具体”的过程。1.4 C语言程序的基本结构 C语言是目前国际上流行的一

26、种结构化的程序设计语言,它不仅是开发系统软件的很好工具,而且也是开发应用软件的很好的程序设计语言。因此,它深受广大程序设计者的欢迎。1. C程序的特点C语言之所以能被推广并广泛应用,概括地说主要有如下特点:(1)中级语言C语言通常被成为中级语言,这并不意味着C语言的功能不如高级语言,而是因为它把高级语言的先进思想与汇编语言的控制和灵活性有机地结合了起来。作为中级语言,C语言允许对位、字节和地址这些计算机功能中的基本成分进行操作。(2)结构化语言C语言是便于进行模块化程序设计的语言,它是由一系列函数所组成,这种结构便于把一个大型程序划分为若干相对独立的模块,模块间通过函数调用来实现相互连接;C语

27、言直接支持顺序、选择和循环三种典型的基本结构(见第三章至第五章),使程序设计人员便于使用“自顶向下、逐步求精”的结构化程序设计技术。(3)可移植性C语言程序具有较高的可移植性。所谓可移植性,指的是可以把为某种计算机编写的软件运行在另一种机器或操作系统上。C语言不包含依赖硬件的输入输出机制,其输入输出是由独立于C语言的库函数来实现的,这样就使C语言程序本身不依赖于硬件系统,也便于在不同的机器系统间移植。2. 几个简单的C程序通过介绍几个简单的C程序,使读者对C程序有一个大概的了解。这些例子虽然简单,但反映了一般C程序的特点以及基本组成。例1.8 编写一个C程序,其功能是显示字符串“how are

28、 you”。#include main( ) printf( “how are you n”); 这是一个简单而完整的C语言程序。如果将这个程序利用编辑程序输入进计算机,并经过编译和连接后,运行结果是在显示器屏幕的当前光标位置处显示如下字符串:How are you其中main函数是“主函数”,每一个C程序都必须有一个main函数。函数体由花括号 括起来。本例中主函数内只有一个输出语句,printf( )是由系统提供的标准库函数,它完成输出功能。双引号内的字符串原样输出。“n”是换行符,即在输出how are you后回车换行。语句最后有一个分号“;”。在使用标准函数库中的输入输出函数时,编译

29、系统要求程序提供有关的信息,程序第1行“#include ”的作用就是用来提供这些信息的,在此读者不必深究,这在后面章节中有详细的介绍。例1.9 求两数之和。#include main( ) /*求两数之和*/ int a,b,sum; /*这是定义变量*/ a=88; b=99; sum=a+b; printf (“sum is %dn”, sum); 本程序的作用是求两个整数a和b之和sum。/* */表示注释部分,为了便于理解,这里采用汉字来注释,当然也可以用英语或汉语拼音来注释。注释可以加在程序的任何位置,它只是用来给人看的,在程序编译和运行时不起作用。第4行是变量定义部分,定义a和b

30、 为整型(int)变量。第5、6行是两个赋值语句,将整数值88和99分别赋值给变量a和b。第7行是将a+b的结果赋值给变量sum,第8行中“%d”是输出函数的“格式说明”,表示要在这个位置输出一个“十进制整数”。printf函数中括弧内最右端的sum是要输出的变量,现在它的值为187(即88+99之值),因此程序运行的结果是:sum is 187 例1.10 编程实现求两个数的最大数。#include main( ) /*主函数*/ int max (int x, int y ); /*对被调用函数max的声明*/int a,b,c; /*定义变量*/ scanf (“%d,%d”,&a,&b); /*输入变量a和b的值*/ c=max ( a,b); /*调用max函数,将得到的值赋给c*/ printf (“max=%d”,c); /*输出c的值*/ int max (int x, int y ) /*定义max函数,函数值为整型,x,y为形式参数*/ int z; /*max函数中用到的变量z ,也要加以定义*/ if ( x y ) z=x; else z=y; return ( z ); /*将z的值返回,通过max带回调用函数处*/ 本程序包括两个函数:主

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1