C语言程序设计4
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法的设计原则: 算法的设计原则:
•
正确性 可读性 鲁棒性(健壮性 鲁棒性 健壮性) 健壮性 高效率与低存储量需求
正确性:说一个算法是正确的, 正确性:说一个算法是正确的,是指对于一切合法的输 入数据,该算法经过有限时间(算法意义上的有限) 入数据,该算法经过有限时间(算法意义上的有限) 的执行都能产生正确(或者说满足规格说明要求) 的执行都能产生正确(或者说满足规格说明要求)的 结果。 结果。 可读性: 可读性好的算法有助于设计者和他人阅读、 可读性 可读性好的算法有助于设计者和他人阅读、理 修改和重用。 解、修改和重用。晦涩难读的程序易于隐藏较多错误 。 鲁棒性: 当输入数据非法时, 鲁棒性 当输入数据非法时,算法能适当地作出合适的 反应。 反应。 高效率与低存储量需求:通常,效率指的是算法执行时 高效率与低存储量需求:通常,效率指的是算法执行时 指的是算法 存储量指的是算法执行过程中所需的最大存储空 间;存储量指的是算法执行过程中所需的最大存储空 指的是算法执行过程中所需的 两者都与问题的规模有关。 间,两者都与问题的规模有关。
3.复合语句
把多个单一语句用花括号括起来便组成一个复合语句, 把多个单一语句用花括号括起来便组成一个复合语句, 花括号括起来便组成一个复合语句 复合语句在语法上相当于一条语句 一条语句。 一般形式为: 复合语句在语法上相当于一条语句。 一般形式为: { [ 内部数据描述语句 ] 数据操作语句1; 数据操作语句
4.1.2 算法的组成要素(略) 算法的组成要素(
4.1.3 算法的描述
算法的描述方法有多种, 最常用的有自然语言 自然语言、 算法的描述方法有多种 , 最常用的有 自然语言 、 流程 PAD图 伪代码等 图、N-S图、PAD图、伪代码等。
1.自然语言
最简单的方法是使用自然语言,自然语言也就是人们 最简单的方法是使用自然语言, 自然语言 日常进行相互交流的语言,如汉语、英语等。 日常进行相互交流的语言,如汉语、英语等。 其优点是简单且便于人们对算法的阅读,缺点一是不 其优点是简单且便于人们对算法的阅读,缺点一是不 简单且便于人们对算法的阅读 够严谨,二是目前将自然语言描述的算法 自然语言描述的算法直接在计算机上 够严谨,二是目前将自然语言描述的算法直接在计算机上 进行处理,还存在许多困难和问题需要解决,例如语音、 进行处理,还存在许多困难和问题需要解决,例如语音、 语义识别等方面。 语义识别等方面。
4.2 C语言的基本语句 语言的基本语句
在用C语言编写的程序中,无论是数据的描述 数据的描述, 在用 语言编写的程序中,无论是数据的描述,还是 语言编写的程序中 操作的描述,都是以语句的形式表现出来的,也即C语言 语句的形式表现出来的 操作的描述, 都是以语句 的形式表现出来的, 也即 语言 执行部分是由语句组成的 程序的执行部分是由语句组成的, 程序的执行部分是由语句组成的,程序的功能也是靠语句 的执行来实现的。 语言中的语句可分为 语言中的语句可分为5类 的执行来实现的。C语言中的语句可分为 类: 声明语句 表达式语句 复合语句 空语句 流程控制语句 C语句:以“;”作分隔符 编译后产生机器指令 语句: 编译后产生机器指令. 语句 ”作分隔符,编译后产生机器指
语句1 语句2
语句2
顺序结构
选择结构
循环结构
3种基本控制结构的流程图 种基本控制结构的流程图
3.N-S图(了解) . 图 了解)
1973年美国学者 年美国学者I·Nassi和B·Shneiderman提出了一种无 提出了一种无 年美国学者 和 提出了一种 流线的流程图 称为N-S图。N-S图的每一种基本控制结构 的流程图, 流线的流程图,称为 图 图的每一种基本控制结构 矩形框( 所示) 都是一个矩形框 如图4.4所示 都是一个矩形框(如图 所示),整个算法可以像堆积木 一样堆成。它的优点是: 一样堆成 。它的优点是: 它虽然只提供了几种标准的图形 符号,但可以保证算法描述的质量 图形形象直观, 质量; 符号, 但可以保证算法描述的质量; 图形形象直观, 具有 良好的可见性;简单、易学易用。缺点是修改不大方便。 良好的可见性;简单、易学易用。缺点是修改不大方便。
指定数据的类型和组织形式 描述对数据的操作步骤
4.1.1 算法的概念
算法就是解决问题的步骤和方法, 算法就是解决问题的步骤和方法,即为解决某个特定问 就是解决问题的步骤和方法 题而采用的确定 有限的步骤 一个算法应具有五个特性。 确定且 的步骤。 题而采用的确定且有限的步骤。一个算法应具有五个特性。 有穷性:算法应包含有限操作步骤, ( 1 ) 有穷性 : 算法应包含有限操作步骤 , 而且每一步都在合 理的时间内完成。 理的时间内完成。 确定性:算法中每一条指令必须有确定的含义, ( 2 ) 确定性 : 算法中每一条指令必须有确定的含义 , 不能有 二义性,对于相同的输入能得出相同的执行结果。 二义性,对于相同的输入能得出相同的执行结果。 可行性:算法中指定的操作, ( 3 ) 可行性 : 算法中指定的操作 , 都可以通过已经实现的基 本运算执行有限次后实现。 本运算执行有限次后实现。 输入: 有零个或多个输入, 对于要处理的数据, ( 4 ) 输入 : 有零个或多个输入 , 对于要处理的数据 , 大多通 过输入得到,输入的方式可以是键盘、文件等。 过输入得到,输入的方式可以是键盘、文件等。 输出: 有一个或多个输出, 将运行的结果输出, ( 5 ) 输出 : 有一个或多个输出 , 将运行的结果输出 , 输出的 方式可以是显示器、打印机、文件等。 方式可以是显示器、打印机、文件等。
语句1 表达式 语句2 顺序结构 选择结构
语句1 表达式 语句2 循环结构 语句
种基本控制结构的PAD图 图4-5 3种基本控制结构的 种基本控制结构的 图
5.伪代码 .
伪代码是一种近似高级语言但又不受语法约束的一种 伪代码是一种近似高级语言但又不受语法约束的一种 语法约束 语言描述方式。它用一种界于自然语言 程序设计语言之 自然语言和 语言描述方式。它用一种界于自然语言和程序设计语言之 间的文字和符号来描述算法。 间的文字和符号来描述算法。
4.3 顺序结构
顺序结构是结构化程序设计中最简单、 顺序结构是结构化程序设计中最简单、常见的一种程 序结构 。 执行过程:是按照书写的先后次序执行的, 执行过程:是按照书写的先后次序执行的,并且每个 语句都会被执行到。 语句都会被执行到。 例4.1 输入任意 个整数,求它们的平均值。 输入任意3个整数 求它们的平均值。 个整数, 分析: 分析:
5.流程控制语句 5.流程控制语句
控制语句用于控制程序的流程, 控制语句用于控制程序的流程,以实现程序的各种结构方 控制程序的流程 它们由特定的语句定义符组成。 式,它们由特定的语句定义符组成。 C语言有9种控制语句。可分成以下3类: 语言有9种控制语句。可分成以下3 (1)条件判断语句:if语句和switch语句 条件判断语句:if语句和switch语句 语句和switch 语句、 语句和for语句 (2)循环执行语句:do…while语句、while语句和 语句 循环执行语句:do 语句 语句和 语句、 语句、 (3)流程转向语句:break语句、goto语句、continue语句和 )流程转向语句: 语句 语句 语句和 return语句 语句
语句1 语句1 语句2 语句2 语句 语句3 语句3 表达式
(a)顺序结构
(b)选择结构
(c)循环结构
种基本控制结构的N-S图 图4-4 3种基本控制结构的 种基本控制结构的 图
4.PAD图(略) . 图
PAD(Problem Analysis Diagram,问题分析图) 也是 ( ,问题分析图) 一种算法描述的图形工具, 图没有流线, 一种算法描述的图形工具,PAD图没有流线,并且有规则地 图没有流线 安排了二维关系:从上向下表示执行顺序, 安排了二维关系:从上向下表示执行顺序,从左到右表示层 次关系。 所示为用PAD图描述算法的 种基本控制结构。 图描述算法的3种基本控制结构 次关系。图4-5所示为用 所示为用 图描述算法的 种基本控制结构。
例如:输入 个整数 输出最大的一个数。 个整数, 例如:输入n个整数,输出最大的一个数。 声明计数变量i,声明一个 变量用来存放最大值, 声明计数变量 ,声明一个max变量用来存放最大值,声 变量用来存放最大值 明变量num存储每次从键盘上输入的数。 存储每次从键盘上输入的数。 明变量 存储每次从键盘上输入的数 ( 1) 先输入一个数给 ) 先输入一个数给num, 同时因为只有一个数 , 所以 , 同时因为只有一个数, max=num; ; 比较。 ( 2) 输入一个数给 ) 输入一个数给num, 并与 , 并与max比较 。 如果 比较 如果num的值大 的值大 的值, 的值给max,即max=num,每次比较 于max的值,则将 的值 则将num的值给 的值给 , , 都将数值大的数放在max中; 后,都将数值大的数放在 中 (3)计数器 加1; )计数器i加 ; 和步骤3,直到n个数全部输入完成 个数全部输入完成。 (4)重复步骤 和步骤 ,直到 个数全部输入完成。最后 )重复步骤2和步骤 max中的值就是输入的 个整数中最大的一个数。 中的值就是输入的n个整数中最大的一个数 中的值就是输入的 个整数中最大的一个数。
2.流程图 .
流程图兴起于20世纪五六十年代, 流程图兴起于 世纪五六十年代,这种方法的特点是 世纪五六十年代 使用不同的几何框图表示相应的算法操作, 使用不同的几何框图表示相应的算法操作,在框图内用简 不同的几何框图表示相应的算法操作 洁的字符来说明具体的操作内容,用流程线连接各个框图。 洁的字符来说明具体的操作内容,用流程线连接各个框图。
1.声明语句 1.声明语句
合法的标识符, 用来声明合法的标识符 以便能在程序中使用它们。 用来声明合法的标识符,以便能在程序中使用它们。 如:int x; char ch[15]; void fun(int n); 需要注意的是: 函数体或复合语句中 需要注意的是:在函数体或复合语句中,声明语句必 须写在其他语句的前面。 须写在其他语句的前面。
C 语 言 程 序 设 计
第4章 程序流程控制
教学目的
了解算法的有关知识 掌握C 掌握C语言的基本语句 掌握顺序结构 掌握选择结构 掌握循环结构 掌握流程转向语句
1
第 3 章
程 序 流 程 控 制
教学内容 算法 C语言的基本语句 顺序结构 选择结构 循环结构
4.1 算法
著名的瑞士计算机科学家沃思( 著名的瑞士计算机科学家沃思(Nikiklaus Wirth)给程序定义了一个的著名公式: Wirth)给程序定义了一个的著名公式: 数据结构+算法= 数据结构+算法=程序
…
数据操作语句n; 数据操作语句 } 注意: 注意: “}”后不加分号 后不加分号 语法上和单一语句相同 复合语句可嵌套
4.空语句 4.空语句
只有分号组成的语句称为空语句。 只有分号组成的语句称为空语句。空语句是什么也不执行的 组成的语句称为空语句 语句。在程序中,空语句常用来做空循环体。 语句。在程序中,空语句常用来做空循环体。 )!=‘\ ); 例: while(getchar( )!= \n’);
2.表达式语句 2.表达式语句
表达式语句由表达式加分号构成,其一般形式为: 表达式语句由表达式加分号构成,其一般形式为: 表达式 构成 表达式; 表达式; 它可以分为运算符表达式语句和函数调用表达式语句。 它可以分为运算符表达式语句和函数调用表达式语句。 运算符表达式语句 (1) 运算符表达式语句:由运算符语句加上一个分号组成。 运算符表达式语句:由运算符语句加上一个分号组成。 如: k++; x+=10; (2) 函数调用表达式语句:由函数名、实际参数加上分号组 函数调用表达式语句:由函数名、 成,其作用主要是完成特定的任务。其一般形式为: 其作用主要是完成特定的任务。其一般形式为: 函数名( 函数名 实际参数表 ); 如: printf( “ave=%.2f\n”, ave );