《第1章语言与程序概述精选文档.ppt》由会员分享,可在线阅读,更多相关《第1章语言与程序概述精选文档.ppt(38页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第1章章语言与程序概言与程序概述述本讲稿第一页,共三十八页1.1 C1.1 C语言历史语言历史 C语言已经经历了几十年的发展。在学习语言已经经历了几十年的发展。在学习C语言之前,应语言之前,应该要先了解该要先了解C语言是如何诞生的,它的历史是怎么样的。语言是如何诞生的,它的历史是怎么样的。本节将介绍本节将介绍C言语的诞生、言语的诞生、C语言的标准化过程及其重要语言的标准化过程及其重要特点,最后还将展示一个标准的特点,最后还将展示一个标准的“Hello,world!”的程序。的程序。本讲稿第二页,共三十八页1.1.1 C1.1.1 C语言的诞生语言的诞生C语言是由著名的计算机科学家语言是由著名
2、的计算机科学家Dennis Ritchie创造的,其创造的,其历史可以追溯到历史可以追溯到ALGOL 60。ALGOL 60,也称为,也称为A语言,语言,是纯粹的面向描述计算过程的语言。是纯粹的面向描述计算过程的语言。C语言的直接前身语言的直接前身B语言就是从语言就是从BCPL发展而来的。发展而来的。在在19721973年间,年间,Denis Ritchie改进了改进了B语言,为其添语言,为其添加了数据类型的概念,并将原来的解释程序改写为可以在加了数据类型的概念,并将原来的解释程序改写为可以在直接生成机器代码的编译程序,并将其命名为直接生成机器代码的编译程序,并将其命名为C。现在,现在,C语言
3、已成为用途最为广泛的计算机高级语言,不仅语言已成为用途最为广泛的计算机高级语言,不仅可以用于编写系统软件,还可以用于构建各个领域的应用可以用于编写系统软件,还可以用于构建各个领域的应用软件。软件。本讲稿第三页,共三十八页1.1.2 C1.1.2 C语言的标准化语言的标准化C语言发展到现在已经经历了语言发展到现在已经经历了3个标准,分别为个标准,分别为K&R C、C89和和C99。1K&R C2C89或或ANSI C3C99本讲稿第四页,共三十八页1.1.3 C1.1.3 C语言的特点语言的特点C语言之所以得到如此迅速的发展,并成为应用最广泛、最语言之所以得到如此迅速的发展,并成为应用最广泛、最
4、受欢迎的计算机语言之一,主要是因为它语法灵活、使用受欢迎的计算机语言之一,主要是因为它语法灵活、使用方便,并能实现高效而强大的功能。方便,并能实现高效而强大的功能。C语言具有以下特点:语言具有以下特点:1使用方便,功能强大使用方便,功能强大2便于结构化编程便于结构化编程3C语言是中级语言语言是中级语言4执行效率高执行效率高5C程序可移植性好程序可移植性好本讲稿第五页,共三十八页1.1.4 Hello,world!1.1.4 Hello,world!作为结构性语言,作为结构性语言,C程序的结构十分严整。下面来认识一下程序的结构十分严整。下面来认识一下第一个第一个C程序,这是十分著名的程序,这是十
5、分著名的“Hello,world!”程序。程序。这个程序经常被用作介绍各种语言的第一个程序,其功能这个程序经常被用作介绍各种语言的第一个程序,其功能是向屏幕打印一个字符串是向屏幕打印一个字符串“Hello,world!”。本讲稿第六页,共三十八页1.2 1.2 数据结构与算法数据结构与算法一般来说,程序由数据结构和算法两个部分组成。数据结构一般来说,程序由数据结构和算法两个部分组成。数据结构是一个一个的实体,而算法是将它们联系在一起的各种手是一个一个的实体,而算法是将它们联系在一起的各种手段。学习程序首先要了解数据结构和算法的概念,以及它段。学习程序首先要了解数据结构和算法的概念,以及它们之间
6、的关系。由于篇幅有限,本小节将只是简要地介绍们之间的关系。由于篇幅有限,本小节将只是简要地介绍数据结构和算法的一些基本知识,要想深入了解数据结构数据结构和算法的一些基本知识,要想深入了解数据结构和和算法,还需要读者去学习其他专门的材料。算法,还需要读者去学习其他专门的材料。本讲稿第七页,共三十八页1.3 1.3 程序设计程序设计如本章如本章1.1.3小结所述,小结所述,C语言是一门便于结构化编程的语言。语言是一门便于结构化编程的语言。结构化编程,也就是结构化程序设计。那么,什么是结结构化编程,也就是结构化程序设计。那么,什么是结构化程序设计呢?结构化程序设计有什么好处?通过本构化程序设计呢?结
7、构化程序设计有什么好处?通过本小节的学习,读者可以得到这些问题的答案,同时会为小节的学习,读者可以得到这些问题的答案,同时会为学习以结构化程序设计为指导思想的学习以结构化程序设计为指导思想的C语言程序设计打下语言程序设计打下一个良好的铺垫。一个良好的铺垫。本讲稿第八页,共三十八页1.3.1 1.3.1 结构化程序设计结构化程序设计结构化程序设计是荷兰科学家结构化程序设计是荷兰科学家E.W.Dijikstra在在1965年提出年提出的,其主要思想是通过分解复杂问题为若干简单问题的方的,其主要思想是通过分解复杂问题为若干简单问题的方式降低程序的复杂性。它的主要观点是采用自顶向下、逐式降低程序的复杂
8、性。它的主要观点是采用自顶向下、逐步细化的程序设计方法,同时严格使用三种基本控制结构步细化的程序设计方法,同时严格使用三种基本控制结构构造程序。构造程序。三种基本控制结构是指顺序结构、选择结构和循环结构。所三种基本控制结构是指顺序结构、选择结构和循环结构。所有的程序结构都可以分解为这三个基本控制结构。有的程序结构都可以分解为这三个基本控制结构。本讲稿第九页,共三十八页1.3.2 1.3.2 三种基本结构三种基本结构按照操作的执行顺序,程序可以分为三类基本结构:顺序结按照操作的执行顺序,程序可以分为三类基本结构:顺序结构、选择结构和循环结构。构、选择结构和循环结构。1996年,计算机科学家年,计
9、算机科学家Bohm和和Jacopini证明:任何简单或复杂的算法都可以由证明:任何简单或复杂的算法都可以由顺序结构、选择结构和循环结构这三种结构组合而成。所顺序结构、选择结构和循环结构这三种结构组合而成。所以,这三种结构就被称为程序设计的三种基本结构,也是以,这三种结构就被称为程序设计的三种基本结构,也是结构化程序设计建议采用的结构。结构化程序设计建议采用的结构。本讲稿第十页,共三十八页1 1顺序结构顺序结构在顺序结构的程序里,各操作是按照它们出现的先后顺序执行的。如下在顺序结构的程序里,各操作是按照它们出现的先后顺序执行的。如下图所示,操作图所示,操作1和操作和操作2按自上而下地顺序执行。这
10、是最简单的一种基本按自上而下地顺序执行。这是最简单的一种基本结构。这个结构里只有一个入口点结构。这个结构里只有一个入口点A和一个出口点和一个出口点B,其特点是从入口点,其特点是从入口点A开始,按顺序执行所有操作,直至出口点开始,按顺序执行所有操作,直至出口点B处。事实上,所有的程序的总流程处。事实上,所有的程序的总流程总是一个顺序结构。总是一个顺序结构。本讲稿第十一页,共三十八页2 2选择结构选择结构选择结构,也叫分支结构。选择结构的程序里存在一些分支,选择结构,也叫分支结构。选择结构的程序里存在一些分支,程序通过对一些条件的判断选择执行的分支。按照分支数,程序通过对一些条件的判断选择执行的分
11、支。按照分支数,选择结构又可以分为单选择、双选择和多选择三种形式。选择结构又可以分为单选择、双选择和多选择三种形式。本讲稿第十二页,共三十八页 双选择结构是最常见的,如下图所示,结构中有两个分支,双选择结构是最常见的,如下图所示,结构中有两个分支,必须要执行其中一支;如果满足条件则执行操作必须要执行其中一支;如果满足条件则执行操作1,否则,否则执行操作执行操作2。2 2选择结构选择结构本讲稿第十三页,共三十八页2 2选择结构选择结构单选择结构如下图所示,当双选择结构中某个分支为空时,单选择结构如下图所示,当双选择结构中某个分支为空时,就称为单选择结构。就称为单选择结构。本讲稿第十四页,共三十八
12、页 多选择结构如下图所示,有多个分支共存,程序根据多选择结构如下图所示,有多个分支共存,程序根据Type值来选择其中之一执行。值来选择其中之一执行。2 2选择结构选择结构本讲稿第十五页,共三十八页3 3循环结构循环结构在循环结构中,是反复地执行一系列操作,直到某条件为假在循环结构中,是反复地执行一系列操作,直到某条件为假(或为真)时才终止循环。按照判断条件出现的位置,可(或为真)时才终止循环。按照判断条件出现的位置,可以分为以分为while循环结构和循环结构和until循环结构。循环结构。本讲稿第十六页,共三十八页 while循环结构中,先判断条件,如下图所示。如果循环结构中,先判断条件,如下
13、图所示。如果A不大于不大于1,则直接,则直接退出循环体到达流程出口处;如果满足退出循环体到达流程出口处;如果满足A大于大于1,执行操作,执行操作1,并且在操作,并且在操作1结束后返回到循环入口,重新判断条件;如果结束后返回到循环入口,重新判断条件;如果A还是大于还是大于1,再次执行操作,再次执行操作1,再返回结构入口,再返回结构入口,如此反复。,如此反复。3 3循环结构循环结构本讲稿第十七页,共三十八页until型循环结构中,在结构入口处先执行循环体,然后再判型循环结构中,在结构入口处先执行循环体,然后再判断条件,如下图所示。当程序执行完操作断条件,如下图所示。当程序执行完操作1后,判断后,判
14、断A是是否大于否大于1。如果是,则再执行操作。如果是,则再执行操作1;然后再次判断;然后再次判断A是否是否大于大于1;如果结果仍然为是,则再次执行操作;如果结果仍然为是,则再次执行操作13 3循环结构循环结构本讲稿第十八页,共三十八页3 3循环结构循环结构在这两种结构中,操作在这两种结构中,操作1都可能被反复执行,直到都可能被反复执行,直到A的值不的值不大于大于1,才结束程序。同样,循环型结构也只有一个入口,才结束程序。同样,循环型结构也只有一个入口点点A和一个出口点和一个出口点B。合理地使用这三种基本结构,可以组合成复杂的高级结构;合理地使用这三种基本结构,可以组合成复杂的高级结构;而所有的
15、复杂结构都可以分解为这三种基本结构。而所有的复杂结构都可以分解为这三种基本结构。本讲稿第十九页,共三十八页1.3.3 1.3.3 算法描述方法算法描述方法当算法过程比较复杂时,单靠自然语言来描述算法将显得十当算法过程比较复杂时,单靠自然语言来描述算法将显得十分困难,让人难以准确理解。此时,需要借助其他的算法分困难,让人难以准确理解。此时,需要借助其他的算法描述手段,主要有:描述手段,主要有:算法语言,有伪代码、各种程序设计语言、计算机语言等。算法语言,有伪代码、各种程序设计语言、计算机语言等。图形描述,如流程图和图形描述,如流程图和N-S图,图的描述应与算法语言的描图,图的描述应与算法语言的描
16、述对应;述对应;形式语言,用数学的方法,可以避免自然语言的二义性。形式语言,用数学的方法,可以避免自然语言的二义性。本讲稿第二十页,共三十八页1 1伪代码伪代码伪代码是介于程序语言和自然语言之间的算法描述,即要具伪代码是介于程序语言和自然语言之间的算法描述,即要具有自然语言通俗易懂的特点,还要能很容易地被转换为程有自然语言通俗易懂的特点,还要能很容易地被转换为程序语言,这就要求伪代码具有清晰地逻辑结构,并且有准序语言,这就要求伪代码具有清晰地逻辑结构,并且有准确的算法步骤。伪代码的形式有很多种,没有通用的规则,确的算法步骤。伪代码的形式有很多种,没有通用的规则,根据需要可以自行决定伪码的形式。
17、根据需要可以自行决定伪码的形式。在本书使用的伪代码一般为类在本书使用的伪代码一般为类C伪码,书写注重可读性和逻伪码,书写注重可读性和逻辑性。下面是上一小节直接排序算法的伪代码。该段伪代辑性。下面是上一小节直接排序算法的伪代码。该段伪代码已经细化到编程的每一小步,可以很容易使用码已经细化到编程的每一小步,可以很容易使用C语言代语言代替。替。本讲稿第二十一页,共三十八页1 1伪代码伪代码算法开始:算法开始:设设i i值为值为0 0;当当i N i N 1 1 设设j j值为值为i i1 1;设设minmin等于等于i i;当当j N j stuArrayjstuArraymin stuArrayj
18、 设设minmin的值为的值为j j;j j自增自增1 1;交换第交换第i i个元素和第个元素和第minmin个元素;个元素;i i自增自增1 1;算法结束算法结束本讲稿第二十二页,共三十八页1 1伪代码伪代码技巧:在编程时,当设计好一个算法后,要都先将它们使用技巧:在编程时,当设计好一个算法后,要都先将它们使用伪代码描述出来,再使用程序语言来实现。这样有利于更伪代码描述出来,再使用程序语言来实现。这样有利于更有条理更有逻辑地书写程序语言,其作用就像写文章要先有条理更有逻辑地书写程序语言,其作用就像写文章要先列好提纲一样。列好提纲一样。本讲稿第二十三页,共三十八页2.2.程序流程图程序流程图程
19、序流程图是算法的图形描述方式。它使用一些简单的几何程序流程图是算法的图形描述方式。它使用一些简单的几何图形来表示各种不同性质的程序操作,使用流程线将各个图形来表示各种不同性质的程序操作,使用流程线将各个图形连接起来,指示算法的执行过程。由于流程图的符号图形连接起来,指示算法的执行过程。由于流程图的符号统一,且画法简单,结构清晰,逻辑性强,便于理解,因统一,且画法简单,结构清晰,逻辑性强,便于理解,因此成为描述程序流程的主要方法。下图中的图形是流程图此成为描述程序流程的主要方法。下图中的图形是流程图中常用的一些标志。中常用的一些标志。本讲稿第二十四页,共三十八页2.2.程序流程图程序流程图本讲稿
20、第二十五页,共三十八页2.2.程序流程图程序流程图在在1.3.1小节介绍三种基本程序结构时,已经接触了流程图的小节介绍三种基本程序结构时,已经接触了流程图的部分图形。将部分图形。将1.2.2小节中的直接排序算法使用流程图来小节中的直接排序算法使用流程图来表示,如下图所示。表示,如下图所示。本讲稿第二十六页,共三十八页2.2.程序流程图程序流程图本讲稿第二十七页,共三十八页2.2.程序流程图程序流程图由于本书中的程序都较短小,而程序流程图描述小型程序时,由于本书中的程序都较短小,而程序流程图描述小型程序时,能够发挥其简单灵活的优势,因此本书主要使用程序流程能够发挥其简单灵活的优势,因此本书主要使
21、用程序流程图来描述算法流程。图来描述算法流程。本讲稿第二十八页,共三十八页3 3N-SN-S流程图流程图由于程序流程图使用流程线的导向来引导程序流程。当程序由于程序流程图使用流程线的导向来引导程序流程。当程序流程较复杂时,框图中会常常有很多的流程线,导致逻辑流程较复杂时,框图中会常常有很多的流程线,导致逻辑杂乱无章,失去了流程图简洁清晰的优点。后来,当结构杂乱无章,失去了流程图简洁清晰的优点。后来,当结构化程序设计方法日益流行后,两个美国学者化程序设计方法日益流行后,两个美国学者I.Nassi和和B.Shneiderman基于结构化思想提出了一种新的流程图基于结构化思想提出了一种新的流程图形式
22、,被称为形式,被称为N-S流程图,流程图,N和和S是两个发明人名字的首是两个发明人名字的首字母。按照结构化设计的思想,所有的程序都可以分解成字母。按照结构化设计的思想,所有的程序都可以分解成三种基本结构的组合。三种基本结构的组合。N-S流程图为三种基本结构设计了流程图为三种基本结构设计了特殊的结构图,并以它们为基础来描述其余所有的算法。特殊的结构图,并以它们为基础来描述其余所有的算法。本讲稿第二十九页,共三十八页 下图为顺序结构的下图为顺序结构的N-S表示图。先执行操作表示图。先执行操作1,再执行操作,再执行操作2;操作;操作1的方框上方为结构入口,操作的方框上方为结构入口,操作2的方框下方为
23、结的方框下方为结构出口。构出口。3 3N-SN-S流程图流程图本讲稿第三十页,共三十八页3 3N-SN-S流程图流程图下图为双选择结构,省略其中之一即可得单选择结构。下图为双选择结构,省略其中之一即可得单选择结构。本讲稿第三十一页,共三十八页3 3N-SN-S流程图流程图下图中,左图为下图中,左图为while循环结构,右图为循环结构,右图为until循环结构。循环结构。本讲稿第三十二页,共三十八页3 3N-SN-S流程图流程图N-S使用这几种图形的组合便可以得到所有算法的使用这几种图形的组合便可以得到所有算法的N-S流程流程图。所以,在图。所以,在N-S流程图中去掉了程序流程图中眼花缭乱流程图
24、中去掉了程序流程图中眼花缭乱的流程线,并将整个程序流程放在一个大方框内,使程序的流程线,并将整个程序流程放在一个大方框内,使程序流程更清楚。下图是直接排序算法的流程更清楚。下图是直接排序算法的N-S流程图。流程图。本讲稿第三十三页,共三十八页3 3N-SN-S流程图流程图本讲稿第三十四页,共三十八页1.4 1.4 综合练习综合练习1、使用伪码描述使用冒泡排序法将序列从小到大排序的算、使用伪码描述使用冒泡排序法将序列从小到大排序的算法,并画出其程序流程图或法,并画出其程序流程图或N-S流程图。流程图。【提示提示】冒泡排序的基本思想是,对尚未排序的各元素从头冒泡排序的基本思想是,对尚未排序的各元素
25、从头到尾依次比较相邻的两个元素是否逆序(与欲排顺序相反)到尾依次比较相邻的两个元素是否逆序(与欲排顺序相反),若逆序就交换这两元素。经过第一轮比较排序后便可把,若逆序就交换这两元素。经过第一轮比较排序后便可把最大(或最小)的元素排好,然后再用同样的方法把剩下最大(或最小)的元素排好,然后再用同样的方法把剩下的元素逐个进行比较,就得到了要求的顺序。的元素逐个进行比较,就得到了要求的顺序。本讲稿第三十五页,共三十八页1.4 1.4 综合练习综合练习算法的伪码描述如下:算法的伪码描述如下:算法开始:算法开始:设设i i值为值为N N1 1;当当i 0i 0 设设j j值为值为0 0;当当j i j arrayjarrayj arrayj11 交换第交换第j j个元素和第个元素和第j j1 1个元素;个元素;j j自增自增1 1;i i自减自减1 1;算法结束算法结束本讲稿第三十六页,共三十八页1.4 1.4 综合练习综合练习程序流程图如右图所示。程序流程图如右图所示。本讲稿第三十七页,共三十八页1.4 1.4 综合练习综合练习N-S流程图如右图所示。流程图如右图所示。本讲稿第三十八页,共三十八页
限制150内