c语言第3章_简单程序09

上传人:xzh****18 文档编号:51662030 上传时间:2018-08-15 格式:PPT 页数:86 大小:1.25MB
返回 下载 相关 举报
c语言第3章_简单程序09_第1页
第1页 / 共86页
c语言第3章_简单程序09_第2页
第2页 / 共86页
c语言第3章_简单程序09_第3页
第3页 / 共86页
c语言第3章_简单程序09_第4页
第4页 / 共86页
c语言第3章_简单程序09_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《c语言第3章_简单程序09》由会员分享,可在线阅读,更多相关《c语言第3章_简单程序09(86页珍藏版)》请在金锄头文库上搜索。

1、第三章l 本章要点n n算法的概念及表示方法算法的概念及表示方法n n结构化程序设计方法结构化程序设计方法n nC C语句语句n n顺序结构的程序设计语句及方法顺序结构的程序设计语句及方法主要内容3.1 算法概述 3.2 程序的三种基本结构 3.3 C语句综述 3.4 赋值表达式和赋值语句 3.5 数据输入输出的概念 3.6 字符数据的输入输出 3.7 简单的格式输入与输出 3.8 顺序结构程序设计举例一个程序应包括两个方面的内容: 对数据的描述:数据结构(data structure) 对操作的描述:算法(algorithm)著名计算机科学家沃思提出一个公式: 数据结构 + 算法 = 程序

2、数据结构算法程序设计方法语言工具完整的程序设计应该是:3.1 算法概述广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。 方法1:1+2,+3,+4,一直加到100 加99次 方法2:100+(1+99)+(2+98)+(49 +51)+50 = 100 + 49100 +50 加51次对同一个问题,可有不同的解题方法和步 骤 例: 求3.1.1 算法的概念3.1.1 算法的概念为了有效地进行解题,不仅需要保 证算法正确,还要考虑算法的质量,选 择合适的算法。希望方法简单,运算步 骤少。计算机算法可分为两大类别: 数值运算算法:求数值解,例如求方程 的根、求函数的定积分等。 非数值运

3、算:包括的面十分广泛,最常 见的是用于事务管理领域,例如图书检 索、人事管理、行车调度管理等。电梯调度铁路调度3.1.2 怎样表示算法算法的四种表示方法:用自然语言表示算法 用流程图表示算法 用N-S流程图表示算法 用伪代码表示算法 只有把算法描述出 来,技术人员之间以及 和专家、用户之间才能 讨论和交流,才能论证 算法的正确性、安全 性、有效性 类似于建筑图纸(1)用自然语言表示算法自然语言就是人们日常使用的语言,可以 是汉语或英语或其它语言。用自然语言表示通俗易懂,但文字冗长, 容易出现“歧义性”。自然语言表示的含义 往往不严格,要根据上下文才能判断其正确 含义,描述包含分支和循环的算法时

4、也不很 方便。因此,除了那些很简单的问题外,一般不 用自然语言描述算法。 (2)用流程图表示算法 美国国家标准化协会ANSI(American National Standard Institute)规定了 一些常用的流程图符号:起止框判断框处理框输入/输出框注释框流向线连接点连接点:用于 将各个子图连 在一起,构成 整体(用于分 页显示等)例 将求5!的算法用流程图表示如果需要将最后结 果打印出来,可在 菱形框的下面加一 个输出框。 用自然语言 如何表示 5!呢?100!呢?例:判断一个数是否偶数,其算法用流程图表示 :例:输出1到10的算法,用流程图表示 n+1说明: 流程图是表示算法的较

5、好的工 具。一个流程图包括以下几部 分 : (1)表示相应操作的框; (2)带箭头的流程线; (3)框内外必要的文字说明。 (3) 用N-S流程图表示算法1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以 包含其它的从属于它的框,或者说,由一些基本 的框组成一个大的框。这种流程图又称N-S结构 化流程图。N-S流程图用以下的流程图符号:(1)顺序结构 (2)选择结构(3)循环结构例:判断一个数是否偶数,其算法改 用N-S流程图表示:输入mm能被2整除?是 否 输出m 输出m 是

6、偶数 不是偶数例:输出1到10的算法,改用N-S流程图表示:n=1n的值10输出n的值n=n+1n+1N-S图表示算法的优点 比文字描述直观、形象、易于理解;比传统流程图紧凑易画。 它废除了流程线,整个算法结构是由各个基本结构按顺序组成的,N-S流程图中的上下顺序就是执行时的顺序。 用N-S图表示的算法都是结构化的算法,因为它不可能出现流程无规律的跳转,而只能自上而下地顺序执行。例:输出1到10的算法,改用N-S流程图表示:n=1n的值10输出n的值n=n+1n+1(4) 用伪代码表示算法 概念:伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。 特点:它如同一篇文章一样 ,自上而

7、下地写下来。它不用图形符号,因此书写方便 、格式紧凑,也比较好懂,也便于向计算机程序过渡。 用处:适用于设计过程中需要反复修改的流程描述。if x is positive thenprint xelseprint -x 也可以用汉字伪代码表示 :若 x为正打印 x否则打印 -x 也可以中英文混用,如: if x 为正print xelseprint -x例: “打印x的绝 对值”的算法可以 用伪代码表示为:3.2 程序的三种基本结构 传统流程图的弊端传统流程图用流程线指出各框的执 行顺序,对流程线的使用没有严格限制 。因此,使用者可以毫不受限制地使流 程随意地转向,使流程图变得毫无规律 ,阅读

8、者要花很大精力去追踪流程,使 人难以理解算法的逻辑。如图:传统流程图的流程可以是:这种如同乱麻一样的算法称为BS型算法,意 为一碗面条(A Bowl of Spaghetti),乱无头 绪。缺点:难以阅读、修改,使算法的可靠性和可维护性难以保证。解决办法:必须限制箭头的滥用,即不允许无规律地使流程随意转向,只能顺序地进行下去。 (goto语句就是这样) 三种基本结构Bohra和Jacopini提出了以下三种 基本结构:顺序结构、选择结构、循环结构用这三种基本结构作为表示一个良 好算法的基本单元。由三种基本结构顺 序组成的算法结构,可以解决任何复杂 的问题。C语言就是按照这三种基本结构来设计的(

9、除了goto)三种基本结构的图示:顺序结构选择结构循环结构的图示: 当型(While型)循环结构 直到型(Until型)循环 这三种结构都有一个特点, 就是必须从a点入、b点出, 不允许从d点直接跳到c点。dc这就乱了, 非结构化了这样才可以选择结构if elseif例如: 取得a与b之间的大者。#include void main() int a,b,c; scanf(“%d%d“, if(ab) c=a; else c=b; printf(“max=%dn“,c); #include void main() int a,b; scanf(“%d%d“, if(ab) b=a; printf

10、(“max=%dn“,b); 三种基本结构的共同特点: (1)只有一个入口; (2)只有一个出口; (注意:一个菱形判断框有两个出口,而一个选择结构只有一个出口。不要将二者相混淆。) (3)结构内的每一部分都有机会被执行到; (4)结构内不存在“死循环”(无终止的循环)。 c不论A或B,都一样, 出去都到c处了图中没有一 条从入口到出 口的路径通过A 框。不正确的流程表示:流程内的死循环小结: 由三种基本结构顺序组成的算法结构,可以解决任何复杂的问题。 由基本结构所构成的算法属于“结构化”的算法,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。结构化程序设计方法 结构化

11、程序,就是用高级语言实现结构化算法。用三种基本结构组成的程序必然是结构化的程序,这种程序便于编写、便于阅读、便于修改和维护。 结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。 结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。所以,我们要学习 顺序、选择和循环! 因为结构化算法就 依靠这些来解决问题3.3 C语句综述C程序源程序文件1源程序文件2源程序文件n预处理命令函数n函数1数据声明函数首部函数体数据声明执行语句C C程序的结构:程序的结构: 一个c程序可以有若干个源程序文件组成 一个源文件可以有若干

12、个函数和预处理命 令以及全局变量声明部分组成 一个函数有函数首部和函数体组成 函数体由数据声明和执行语句组成 执行语句分为5类控制语句 函数调用语句 表达式语句 空语句 复合语句(1) 控制语句(种)。完成一定的控制功能。 if ( )else (条件语句,用来实现选择结构) switch (多分支选择语句) for() (循环语句,用来实现循环结构) while() (循环语句,用来实现循环结构) do while()(循环语句,用来实现循环结构) continue (结束本次循环语句) break (中止执行switch或循环语句) return (从函数返回语句) goto (转向语句,

13、对结构化可能有危害,基本不用)(2)函数调用语句由一个函数调用加一个分号构成一个 语句Printf(“This is a C statement.”);(3)表达式语句由一个表达式加一个分号构成一个语 句a = 3 ;分号赋值表达式表达式语句(4)空语句只有一个分号的语句(什么也不做) 可能用来作为循环语句中的循环体(5)复合语句 用一对括起来的语句z=x+y; t=z/100; printf(“%f”,t);在使用 if() else 的时候,希望在其中包含多条语句,则需要使用复合语句的概念。例如:如果a void main() int a,b,c; scanf(“%d%d“, if(ab,

14、就让c等于a的平方根,并输出c;否则,就让d等于a和b的平均值,并输出d。3.4 赋值表达式和赋值语句3.4.1 赋值表达式(2)、复合的赋值运算符 x=x+n x+=n 赋值运算符两侧 出现相同的变量赋值符号“”就是赋值运算符,它的作用是将 一个数据赋给一个变量。 例如: a=100 表示将100赋给变量a(1)赋值运算符x=x+n x=x-n x=x*n x=x/n x=x%nx + = n x - = n x * = n x / = n x% = n算术运算与赋 值运算相结合X与n均为整数例:(3)赋值表达式由赋值运算符将一个变量和一个子表达式连接 起来的式子称为“赋值表达式”,子表达式

15、的 值就是“赋值表达式”的值变量 赋值运算符 表达式例如: a=5b=(a=5)c=10+(d=8) a=(b=10)/(c=2) (b等于10,c等于2, a等于5,表达式值为5) 3.4.2 赋值过程中的类型转换(1) 实型数据赋给整型变量,先对实数取整后再赋予整型变量. 例如:为整型变量,执行“i=3.86”后的值为 (2) 将一个double型数据赋给float变量时,截取其前面7位有效数字存放 到float变量中。注意数值范围不能溢出。 例如: double d=123.456789e200;d=d*d;printf(“%e“,d); d无法容纳如此大的数,出现溢出,可能导致数据错误! 溢出有很多种(数组越界等)。C语言对错误检查比较宽泛,对此类 问题大都不做直接限制。运行时会出现问题:有的溢出立刻出错, 有的则可能暂时看不到错误,但有潜在问题,不同编译器也可能有 差别。 溢出本身就是错的,程序员一定要主动避免各类溢出,即使看不到错 误。 “大数问题”也是经典问题之一。精度可以近似, 大小就没办法了赋值和其他的算术运算不一样:算术运算时,例如 a+b ,如果两操作数类型不统一,则按照低就高的原则来转化赋值时,例如 a=b

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号