资源预览内容
第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
第9页 / 共30页
第10页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C语言程序设计,主编 任正云 中国水利水电出版社,第1章 程序设计基础,1.1 程序设计及程序设计语言,程序是以某种语言为工具编制出来的能被 机器识别并执行的一系列的指令代码。,1.1.1 程序设计语言,1.1.2 C语言的发展过程,1.1.3 C语言的标准,1.1.1 程序设计语言,程序设计语言可以分为低级语言和高级语言两大类。,1低级语言,低级语言又叫面向机器的语言,它是特定的计算机系 统所固有的语言,又可分为机器语言和符号语言(汇编 语言)两类。,机器语言就是计算机能够直接识别并执行的指令集 合。由于计算机只能识别“0”和“1”两种状态,所以机 器语言指令都是二进制指令。例如某种型号的计算机 用10000000表示“进行一次加法”,用10010000表 示“进行一次减法”。,符号语言是从机器语言发展演变而来的,它用一些 “助记符号”来代替那些冗长的二进制指令。例如用ADD 表示加法,SUB表示减法,等等。,2高级语言,高级语言是类似于人类自然语言和数学描述语言的程序设计语言,分为面向过程的程序设计语言和面向对象的程序设计语言,如C语言、Pascal语言、FoxBase、 Visual C+、Visual Basic等。,(1)面向过程的程序设计语言,把精力集中在解题的思路和方法上,使程序设计语言开始与解题方法相结合。其中一种就是把解题过程看作数据被加工的过程。基于这种方法的程序设计语言称为面向过程的程序设计语言,C语言就是一种面向过程的程序设计语言。,面向过程的程序设计语言,main() /*主函数*/ /*程序开始*/ float r; /*定义一个实型变量r,表示圆的半径 */ float s; /*定义面积变量s*/ s=3.14*r*r; /*把计算的面积赋给s*/ printf(“%f “, s); /*输出面积s的值*/ /*程序结束*/,(2)面向对象的程序设计语言,面向对象的程序设计是一种结构模拟方法,它把现实 世界看成是由许多对象(object)所组成,所有的对象都 属于特定的类(class),或者说每个对象都是类的一个实 例。因而面向对象的程序设计的一个关键是定义“类”,并 由“类”生成“对象”。 面向对象的程序比面向过程的程序更清晰易懂,更适 宜编写更大规模的程序,正在成为当代程序设计的主流。 面向对象的程序设计语言有Java、Visual Basic、Visual Basic.NET等,由C派生出的C+语言也属于面向对象的 程序设计语言,它是一种多范型程序设计语言,不仅可 以利用它编写面向对象的程序,还可以用它编写面向过 程的程序。,1.1.2 C语言的发展过程,C语言是目前世界上流行最广泛的高级程序设计 语言。C语言的发展过程可粗略地分为三个阶段: 1970年至1973年为诞生阶段,之后至1988年为发 展阶段,1988年以后为成熟阶段。,1C语言的诞生,2C语言的发展,3C语言的成熟,1.1.3 C语言的标准,C语言的灵活性、丰富性和可移植性很快得到了普遍的认 可,接着适合于各种操作系统(UNIX、MS-DOS、CP/M-80/86 等)和不同机型(字长为8bit32bit)的C语言编译系统相继出 现。1982年,美国国家标准学会(American National Standards Institute,ANSI)语言标准化委员会开始着手进行C 语言的标准化工作,并于1983年公布了第一个C语言标准草案 (83 ANSI C)。1989年,ANSI又发布了一个完整的C语言标 准ANSI X3.159-1989,通常称为“ANSI C”,简称“C89”, 1990年,国际标准化组织ISO/JEC JTC1/SC22/WG14采纳了 C89,做了少量修改后,以国际标准ISO/IEC 9899:1990发布, 通常称其为“C90”,它同C89基本上相同。 1995年,WG14对C89做了两处技术修订和一个扩充,人们 将其称为“C89增补1”或“C95”,同时,WG14 开始着手对C标准 全面修订,并于1999年获得通过,形成了正式的C 语言标准, 命名为ISO/IEC 9899:1999,简称“C99”。,1.2 C语言的特点,(1)语言简洁、紧凑,使用方便、灵活。,(2)运算符丰富,(3)数据结构丰富,具有现代化语言的各种数据结构。,(4)具有结构化的控制语句。用函数作为程序的模块 单位,便于实现程序的模块化。C语言是良好的结构化 语言,符合现代编程风格的要求。,(5)语法限制不太严格,程序设计自由度大。,(6)C语言允许直接访问物理地址,可以直接对硬件进 行操作。,(7)生成目标代码质量高,程序执行效率高。,(8)程序可移植性好(与汇编语言比)。,1.3 C程序结构,【例1.1】C程序输出。 main() printf(“This is a C program.n“); ,This is a C program.,1.3 C程序结构,【例1.2】设计一个程序,计算两数之和并 输出结果。 main() int a,b,sum; a=123;b=456; sum=a+b; printf(“sum=%dn“,sum); ,sum=579,1.3 C程序结构,【例1.3】输入两个整数,计算两者较大的数,并输出。 main() int a,b,c; int max(int x,int y); scanf(“%d,%d“, ,int max(int x,int y) int z; if(xy) z=x; else z=y; return z; ,1.4 源程序的编辑、编译、连接与运行,用高级语言编写的程序称为“源程序”,通常简 称为程序。高级语言程序也必须被转换为机器语 言程序才能被机器理解和执行,完成这种转换任 务的系统软件称为编译程序。相应的转换过程通 常称为编译。,1.5 算法,程序是语句的集合,一个程序应该包含两个方面的内 容:一个是对数据的描述,一个是对操作的描述。数据是 操作的对象,操作的目的是对数据进行加工和处理,以得 到期望的结果。著名的计算机科学家沃思(Niklaus Wirth) 提出: 程序=算法+数据结构 实际上,一个程序除了以上两个要素之外,还应该采取适当的程序设计方法进行程序设计,并且用某种计算机语言来表示。因此: 程序=算法+数据结构+程序设计方法+语言工具和环境 其中算法是灵魂,数据结构是加工的对象,语言是编程的 工具,编程要采用适合的方法,算法主要解决“做什么”和 “怎么做”的问题,程序中的操作语句实际上就是算法的体 现。,1.5.1 算法的组成要素,为解决一个问题而采取的方法和步骤称为“算 法”。对于同一个问题可以有不同的解题方法和步 骤,也就是有不同的算法。算法有优劣,一般而 言,应当选择简单的、运算步骤少的,也就是运 算快、内存开销小的算法(也就是说,设计算法 时,还要考虑时间复杂度和空间复杂度的问题)。,1算法的特性,(1)有穷性:一个算法应当包含有限的步骤,而不是 无限的步骤;同时一个算法应当在执行一定数量的步骤 后结束。,(2)确定性:算法中的每一个步骤都应当是确定的, 而不是含糊的、模棱两可的。也就是说不应当产生歧 义,特别是算法用自然语言描述时应当注意。,(3)有0个或多个输入。,(4)有1个或多个输出。,(5)有效性。算法的每个步骤都应当能有效执行,并 能得到确定的结果。,2算法的组成要素,算法含有两大要素: 一是操作。每个操作的确定不仅取决于问题的需求,还取决于它们来自哪个操作集,它还与使用的工具系统 有关。,算法的另一要素是结构控制。结构控制就是如何控制 组成算法的各个操作的执行顺序。,1966年Bohm和Jacopini证明,由顺序结构、选择结构 和循环结构这三种基本结构可以组成任何结构的算法,可 以解决任何问题。,三种基本结构,(1)顺序结构。即语句的执行顺序与书写的顺序一致。 这是一种理想的结构,仅有这样的结构不可能处理复杂的 问题。,(2)选择结构(分支结构)。最基本的选择结构是当程序执行到某一语句时,要进行一下判断,从两条路径中选择一条合适的路径进行。例如,要在a和b中取一个较大的数,就要做比较判断,决定是将a输出还是将b输出。,(3)循环结构(重复结构)。这种结构是将一条或多条 语句重复执行若干遍。,1.5.2 算法的表示方法,为了表示一个算法,可以用不同的方法。常用 的算法表示方法有自然语言、传统流程图、结构 化流程图、N-S流程图、PAD图、伪代码、计算机 语言等。,1用自然语言表示算法,自然语言就是人们日常使用的语言,可以是汉 语、英语或其他语言。用自然语言表示算法通俗 易懂,但文字冗长,容易出现有歧义的算法。自 然语言表示的含义往往不太严格,要根据上下文 才能准确判断。此外,用自然语言描述分支和循 环的算法,不是很直观。,2用流程图表示算法,流程图表示算法:用一些图框表示各种操作,用箭头表示算法流程。用图形表示算法直观形象,易于理解,流程图图形符号下图所示。,起止框,处理框,输入输出框,判断框,连接点,流程线,注释框,准备框,待处理框,美国标准化协会ANSI规定了一些常用的流程图符号,已为世界各国程序工作者普遍采用。,Y,顺序结构,选择结构,当型循环,直到型循环,循环结构,程序流程图,【例1.4】用流程图描述从3个数中取最大数的算法。,2用N-S流程图表示算法,直到p成立,【例1.4】用流程图描述从3个数中取最大数的算法。,4用伪代码表示算法,伪代码是用介于自然语言和计算机语言之间的文和符号来描述算法的工具。它无固定的、严格的语法规则,通常借助语某种高级语言的控制结构,中间操作可以使用自然语言,也可以使用程序设计语言,或使用自然语言与程序设计语言的混合体。一般专业人员习惯用伪代码进行算法描述。,输入a、b、c; if(a=b) max=a; else max=b; if(max=c) 输出max; else 输出c;,初始化:max=0,i=1; 当(imax) max=n; 输出max;,1.5.3 算法设计举例,算法的设计过程是一个复杂的过程,也是一个智力过 程。为了让设计算法的复杂性能够在人的智力控制的范围 之内,人们提出了自顶向下、逐步细化的方法。 按照这种方法,解题之初不要马上就力图触及问题的 细节,而应当从问题的全局出发,给出高度概括、高度抽 象的算法,通常是把这些问题的求解分成可独立求解的若 干子问题;接着对每一个子问题再进行分解最后对不 可再划分的子问题分别设计算法,而且设计的过程也是从 概括逐步走向细化。一般说来,上层所解决的是“做什么”, 逐步细化的过程解决的是“怎么做”。 在用伪代码描述算法时,随着逐步细化的深入,最终 可以用程序设计语言代替算法中的伪代码。等到全部代码 都使用某种程序设计语言描述的时候,程序设计也就基本 完成。,【例1.5】用自顶向下、逐步细化的方法设计3个数中取最大数算法,(1)首先,分析问题需求 S1:输入三个数a、b、c; S2:从a、b、c中找出最大数赋给max; S3:输出max。,(2)在前一阶段的基础上考虑各个“做什么”的实现途径,把算 法细化如下。 S1:调用scanf()函数输入三个数a、b、c; S2:调用一个求三个数中最大数函数max3(a、b、c),这里 就需要设计max3(float x,float y,float z); S3:调用printf()函数,将最大数输出。,(3)编写主程序 main() float a,b,c,max; float max3(float
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号