程序设计与程序结构.ppt_第1页
程序设计与程序结构.ppt_第2页
程序设计与程序结构.ppt_第3页
程序设计与程序结构.ppt_第4页
程序设计与程序结构.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、教学大纲,第2章 程序设计与程序结构,2.1 程序设计与算法 2.2 流程图 2.3 程序结构 2.4 流程图与程序例子 2.5 本章小结 2.6 习题,2.1 程序设计与算法,2.1.1 程序设计的概念 1、对数据的描述和对操作的描述 一个程序应包括以下两方面内容: (1)对数据的描述。 在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure)。 (2)对操作的描述。 即操作步骤, 也就是算法(algorithm)。数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。作为程序设计人员,必须认真考虑和设计数据结构和操作步骤(即算法)。,因此,著名计算

2、机科学家沃思(Nikiklaus Wirth)提出一个公式: 数据结构 + 算法 = 程序 实际上,一个程序除了以上两个主要要素之外,还应 当采用结构化程序设计方法进行程序设计,并且用某一种 计算机语言表示。因此,可以这样表示: 程序 = 算法 + 数据结构 + 程序设计方法 + 语言工具和环境,2.程序设计过程,分析题意,清楚要求,设计算法,选择合适的程序结构,确定变量及其数据类型,画流程图,编写代码,调试,运行,2.1.2 算法,实例1:从北京去天津开会,从事各种工作和活动,都必须事先想好进行的步骤,然后按部就班地进行,才能避免产生错乱。广义地说,为解决一个问题而采取的方法和步骤,就称为“

3、算法”。,买火车票,乘坐地铁到北京站,登上火车,到天津后坐电车到会场,实例2:考大学,填写报名表,交报名费,拿到准考证,按时参加考试,到校报到注册,得到录取通知书,对同一个问题,可以有不同的解题方法和步骤。方法有优劣之分。有的方法只需进行很少的步骤,而有些方法则需要较多的步骤。一般说,希望采用简单的且运算步骤少的方法。因此 ,为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法。,简单算法的举例,例1 求12345。 可以用最原始的方法进行。 步骤1: 先求12,得到结果2。 步骤2: 将步骤1得到的乘积2再乘以3,得到结果6。 步骤3: 将6再乘以4,得24。 步骤4

4、: 将24再乘以5,得120。这就是最后的结果。,当求1000!时,求解过程过于麻烦,是不是一种通用的表示方法呢?,设计思想: 可以设两个变量,一个变量代表被乘数,一个变量代表乘数。不另设变量存放乘积结果,而直接将每一步骤的乘积放在被乘数变量中。今设p为被乘数,i为乘数。用循环算法来求结果。 可以将算法改写如下: S1: 使p=1 S2: 使i=2 S3: 使pi,乘积仍放在变量p中,可表示为pi=p S4: 使i的值加1,即i+1 = i S5: 如果i不大于5,返回重新执行步骤S3以及其后的步骤 S4和S5;否则,算法结束。最后得到p的值就是5!的值。,例2 有5个学生,要求将他们之中成绩

5、在80分以上者打印出来。用n表示学生学号,n1代表第一个学生学号,ni代表第i个学生学号。用g代表学生成绩,gi代表第i个学生成绩。 算法设计: S1:1=i S2:如果gi80,则打印ni和gi,否则不打印 S3:i+1=i S4:如果i5,返回S2,继续执行;否则,算法结束。 本例中,变量i作为下标,用它来控制序号(第几个学生,第几个成绩)。当i超过5时,表示已对5个学生的成绩处理完毕,算法结束。,例3 判定20002500年中的每一年是否闰年,将结果输出。 闰年的条件是: 能被4整除,但不能被100整除的年份都是闰年,如1996年,2004年是闰年;能被100整除,又能被400整除的年份

6、是闰年。如1600年、2000年是闰年。不符合这两个条件的年份不是闰年。 算法设计: 设y 为被检测的年份。可采取以下步骤: S1:2000=y S2: y不能被4整除,则输出y “不是闰年”。然后转到S6,S3:若y能被4整除,不能被100整除,则输出y “是闰年”。然后转到S6 S4:若y能被100整除,又能被400整除,输出y“是闰年”;否则输出“不是闰年”。 然后转到S6 S5:输出y “不是闰年” S6:y+1=y S7:当y2500时,转S2继续执行,如y2500,算法停止。,2.1.3 算法的特性,一个算法应该具有以下特点: 1.有穷性 一个算法应包含有限的操作步骤,而不能是无限

7、的。 事实上,“有穷性”往往指“在合理的范围之内”。究竟什么算“合理限度”,并无严格标准,由人们的常识和需要而定。 2.确定性 算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。,3.有零个或多个输入 所谓输入是指在执行算法时需要从外界取得必要的信息。一个算法也可以没有输入。 4. 有一个或多个输出 算法的目的是为了求解,“解” 就是输出。没有输出的算法是没有意义的。 5. 有效性 算法中的每一个步骤都应当能有效地执行,并得到确定的结果。,2.2 流程图,算法的表示方式,常用的有自然语言、传统流程图、结构化流程图、伪代码、PAD图等。 流程图是用几何图形、箭头和文字说明来表示算法

8、的框图。流用图形表示算法,直观形象,易于理解。美国国家标准化协会ANSI(American National Standard Institute)规定了一些常用的流程图符号(见图示)。,常用的流程图符号,三种基本结构的流程图,在长期的程序设计实践过程中,人们提出了结构化流程图,即一个流程图都可以由3种基本的结构(顺序、选择、循环)组成,这3种基本结构可以相互嵌套,从而组成复杂的算法。根据结构化流程图写出的程序就是结构化程序。,(1) 顺序结构,如图所示,按语句的书写顺序执行。,(2)选择结构,或称选取结构,或称分支结构,如图所示,请注意,无论 p 条件是否成立,只能执行A框或B框之一,不可能

9、既执行A框又执行B框。,无论走哪一条路径,在执行完A或B之后,都经过b点,然后脱离本选择结构。A或B两个框中可以有一个是空的 ,即不执行任何操作,如下图所示。,(3)循环结构,它又称重复结构。 有两类循环结构: 当型(While型)循环结构 见图 (a)。它的功能是当给定的条件p1成立时,执行A框操作,执行完A后,再判断条件p1是否成立,如果仍然成立,再执行A框,如此反复执行A框,直到某一次p1条件不成立为止,此时不执行A框,而从b点脱离循环结构。, 直到型(Until型)循环 见图(b)。它的功能是先执行A框,然后判断给定的p2条件是否成立,如果p2条件不成立,则再执行A,然后再对p2条件作

10、判断,如果p2条件仍然不成立,又执行A如此反复执行A,直到给定的p2条件成立为止,此时不再执行A,从b点脱离本循环结构。,说明:,以上三种基本结构,有以下共同特点: (1) 只有一个入口。 (2) 只有一个出口。请注意,一个菱形判断框有两个出 口,而一个选择结构只有一个出口。不要将菱形框的出口和选择结构的出口混淆。 (3) 结构内的每一部分都有机会被执行到。对每一个框来说,都应有一条从入口到出口的路径通过它。如下图a,没有一条从入口到出口的路径通过A框。 (4) 结构内不存在“死循环”(无终止的循环)。如下图b,就是一个死循环。,(a),(b),2.3 流程图及程序例子,例1 求5!即t=12

11、345。 流程图如右图所示。 /*c语言程序代码*/ #include main( ) int i,t; t=1; i=2; do t=t*i; i=i+1; while(i=5); printf(%d,t); ,例2 打印出5个学生中成绩高于80分者的学号和成绩。 /*源程序代码*/ #include main() float a5; int i=1,j=1; printf(录入学生成绩:n); while(i=80) printf(成绩大于80分的学生学号:%d,成绩:%fn,i,ai); i+; ,流程图,例3 判定20002500年中的每一年是否闰年,将结果输出。 闰年的条件是: 能被

12、4整除,但不能被100整除的年份都是闰年,如1996年,2004年是闰年;能被100整除,又能被400整除的年份是闰年。如1600年、2000年是闰年。不符合这两个条件的年份不是闰年。 流程图如下:,/*c程序代码*/ #include void main() int year,flag; year=2000; printf(输出闰年); while(year=2009) if(year%4!=0) flag=0; else if(year%100!=0) flag=1; else if(year%400!=0) flag=0; else flag=1; if(flag=0) printf(%

13、d年不是闰年n,year); else printf(%d是闰年n,year); year=year+1; ,2.4 程序结构,c语言程序是由函数组成的,即函数是c语言程序的基本单位。一个完整的c语言程序由一个main()函数(又称主函数)和若干个其他函数组合而成,或仅由一个main()函数构成。如果一个程序中有多个源文件,则main()只能在一个源文件中存在。,2.4.1 c语言程序的总体结构,例1、由main()函数构成的C语言结构 #include main ( ) printf (This is a c program.n); 输出结果: This is a c program. 其中

14、 main 表示“主函数”。每一个C程序都必须有一个 main 函数。函数体由大括弧括起来。本例中主函数内只有一个输出语句,printf是C语言中的输出函数。双引号(双括号)内的字符串原样输出。“n”是换行符,即在输出“This is a c program.”后回车换行。语句最后有一分号。,例2、求两个整数的和。 #include main ( )/*求两数之和*/ int a,b,sum; /*这是定义变量*/ a=123; b=456; /* 以下3行为C语句 */ sum=a+b; printf (sum is %d/n, sum); 本程序的作用是求两个整数a和b之和sum。/*/表

15、示注释部分,为便于理解,我们用汉字表示注释,当然也可以用英语或汉字拼音作注释。注释只是给人看的,对编译和运行不起作用。注释可以加在程序中任何位置。,第2行是声明部分, 定义变量a和b,指定 a和b为整型(int)变量。第3行是两个赋值语句,使a和b的值分别为123和456。第4行使sum的值为a+b,第5行中“%d”是输入输出的“格式字符串”,用来指定输入输出时的数据类型和格式,“%d”表示“以十进制整数形式输出”。在执行输出时,此位置上代以一个十进制整数值。printf函数中括弧内最右端sum是要输出的变量,现在它的值为579(即123+456之值)。因此输出一行信息为sum is 579,

16、c 语言程序结构的特点,通过以上两个程序,可以归纳一下c 语言程序结构的特点: 可以用/*/对C程序中的任何部分作注释。一个好的、有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。在编译过程中将被忽略。 有一行命令: #include “stdio.h” 其中的 “stdio.h”是c语言提供的一个头文件,在其中定义了多个函数。当后面的程序要调用一些已经定义过的库函数,如printf()、scanf()时,就要先用include命令对包含被调用函数的头文件(如:stdio.h)进行预定义说明。,一个c程序总是从main函数开始执行的,而不论main函数在整个程序中的位置如何(main

17、函数可以放在程序最前头,也可以放在程序最后,或在一些函数之前,在另一些函数之后)。 c程序书写格式自由,一行内可以写几个语句, 一个语句 可以分写在多行上,中间用分号隔开。 每个语句和数据定义的最后必须有一个分号。分号是c 语句的必要组成部分。例如: c=a+b;,2.4.2 函数的一般结构,任何函数,包括主函数main(),都是由函数头和函数体两部分组成,其一般结构如下: 函数类型 函数名(函数参数表)/*函数头部分*/ /*函数体部分*/ 说明语句部分; 执行语句部分; ,1、函数头 即函数的第一行。包括函数类型(可缺省)、函数名、函数参数(形参)名、参数类型。 2、函数体 函数体,即函数

18、首部下面的大括弧内的部分。如果一个函数内有多个大括弧,则最外层的一对 为函数体的范围。,(1)说明语句 说明语句由变量定义、自定义类型说明、外部变量说明等组成。如果不需要,也可以缺省变量定义语句。 (2)可执行语句 可执行语句一般由若干条语句构成,所有可执行语句必须在说明语句部分之后,否则程序无法执行。 例如:#include “stdio.h” main() int x,y; x=3;y=6; int max; max=xy?x:y; printf(“max=%dn”,max); ,说明:,下面总结一下c语言源程序的结构特点: 一个c语言源程序可以由一个或多个源文件组成。 每个源文件可以由一

19、个或多个函数组成。 一个源程序不论由多少个文件组成,都有一个且只能有一个main()函数,即主函数。 源程序中可以有预处理命令,预处理命令通常应放在源文件或源程序的最前面。 每一个说明、每一个语句必须以分号结尾,但预处理命令、函数头和花括号“”之后不能加分号。 标识符与关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。,本章小结,本章主要介绍了以下内容: 程序包括对数据的描述和对操作的描述,即: 程序=数据结构+算法 程序设计过程: 分析题意 设计算法 选择程序结构 确定变量 画流程图 编写代码 调试 运行 算法的特点: 有穷性; 确定性; 有效性; 有0个或多个输入;有一个或多个输出,从逻辑上讲,结构程序由顺序、选择、循环3种基本结构组成。 一个程序有且只有一个main()函数。程序总是从main()函数开始执行,当main()执行完毕时,程序执行完毕。 函数是c语言程序的基本单位,任何函数都

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论