C语言算法和基本程序设计.pptx
《C语言算法和基本程序设计.pptx》由会员分享,可在线阅读,更多相关《C语言算法和基本程序设计.pptx(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一个著名的公式一个著名的公式 数据结构数据结构+算法算法=程序程序数据:计算机所能识别、存储和处理的对象。数据的动态性。数据:计算机所能识别、存储和处理的对象。数据的动态性。数据结构:确定数据对象及其存储方式,并定义在这些数据对象上的运算集数据结构:确定数据对象及其存储方式,并定义在这些数据对象上的运算集合。合。算法:为解决一个问题而采取的方法和步骤。算法:为解决一个问题而采取的方法和步骤。第1页/共43页 算法的特性算法的特性1 1 有穷性有穷性 操作步骤是有限的,不是无限的操作步骤是有限的,不是无限的。2 2 确定性确定性 每个步骤是确定的,无歧义性。每个步骤是确定的,无歧义性。3 3 有
2、零个或多个输入有零个或多个输入4 4 有一个或多个输出有一个或多个输出5 5 有效性有效性 每一步骤能有效执行,并得到确定结果每一步骤能有效执行,并得到确定结果。第2页/共43页3.1.2 算法的评价标准1.正确性对任何合法的输入,算法都会得出正确的结果。2.可读性可读性指算法被理解的难易程度。3.健壮性(鲁棒性)健壮性即对非法输入的抵抗能力。4.高效率与低存储量需求通常,效率指的是算法执行时间;存储量指的是算法执行过程中所需的最大存储空间,两者都与问题的规模有关。二者往往是一对矛盾,常常可以用空间换时间,也可以用时间换空间。第3页/共43页 怎样表示一个算法怎样表示一个算法用自然语言表示算法
3、用自然语言表示算法用流程图表示算法用流程图表示算法用用N-S流程图表示算法流程图表示算法用伪代码表示算法用伪代码表示算法用计算机语言表示算法用计算机语言表示算法 歧义性,描述分支、循环算法不方便歧义性,描述分支、循环算法不方便第4页/共43页第5页/共43页起止框起止框输入输出框输入输出框处理框处理框判断框判断框流程线流程线连接点连接点第6页/共43页【例3.1】求三个整数的和。求三个整数和的算法流程图如图所示。开始x+y+z=sum输 出 sum的值结束输入x,y,z图3.2 求三个整数和的算法第7页/共43页【例3.2】求最大公约数。m,n为正整数开始结束输入m,n求m/n的余数rr=0?
4、n=m,r=n输出n是否第8页/共43页最大公因数的算法求最大公因数的最普遍的算法是欧几里得算法,它最初是公元前由欧几里得提出来的,有时也称它为辗转相除法表述如下:设给定m,n(mn),令r0=m,r1=n,有 则得rk=gcd(rk-1,rk)=gcd(rk-2,rk-1)=gcd(r2,r3)=gcd(r1,r2)=gcd(r0,r1)=gcd(m,n)b|a 表示b整除a或者a整除以b 则 a是b的倍数,b是a的约数rk-2=qk-1 qk rk +rk=(qk-1 qk+1)rk第9页/共43页S1:求12=2S2:求23=6S3:求64=24 天啊!共需999个步骤,太可怕了。案例
5、求12341000S1:1 p (p:被乘被乘数数)S2:2 i (i:乘数乘数)S3:pi pS4:i+1 iS5:若若i1000,返回返回S3;否则,结束。;否则,结束。只需只需5个步骤,简单。个步骤,简单。第10页/共43页3.2 结构化程序设计的方法 结构化程序设计思想采用了模块分解与功能抽象和自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子程序,便于开发和维护,减少程序的出错概率和提高软件的开发效率。采用结构化程序设计方法应遵循以下原则。1.自顶向下即在程序设计时,先考虑总体,做出全局设计,然后再考虑细节进行局部设计,逐步实现精细化。这种
6、方法称为“自顶向下,逐步细化”的方法。2.模块化就是将一个大任务分成若干个较小的部分,每一部分承担一定的功能,称为“功能模块”。每个模块可以分别编程和调试,然后组成一个完整的程序。模块的划分应遵循一些基本原则,如模块内部联系要紧密,关联程度要高;模块间的接口要尽可能简单,以减少模块间的数据传递。3.限制使用GOTO语句第11页/共43页 结构化的程序设计方法基本思路:把一个复杂问题的求解过程把一个复杂问题的求解过程分阶段进行分阶段进行,每个阶段处理的问题每个阶段处理的问题都控制在人们容易理解和处理的范都控制在人们容易理解和处理的范围内围内.采用的方法:1 1 自顶而下自顶而下2 2 逐步细化逐
7、步细化3 3 模块化设计模块化设计4 4 结构化编码结构化编码第12页/共43页三种基本结构1 1 顺序结构顺序结构 2 2 选择结构选择结构3 3 循环结构循环结构3.3 程序的基本结构程序的基本结构第13页/共43页三种基本结构的特点1 1 只有一个入口只有一个入口2 2 只有一个出口只有一个出口pA3 3 结构内的每一部分都有机会被执行到结构内的每一部分都有机会被执行到AB4 4 结构内没有死循环结构内没有死循环第14页/共43页顺序结构的流程图符号ABabAB传统流程图传统流程图N-S流程图流程图第15页/共43页选择结构的流程图符号Ap成立不成立BAp成立不成立传统流程图传统流程图第
8、16页/共43页选择结构的流程图符号(续)成立不成立ApBN-S流程图流程图第17页/共43页循环结构的流程图符号Ap1成立不成立ab不成立Ap2成立ab传统流程图传统流程图While型型Until型型第18页/共43页循环结构的流程图符号(续)直到直到p1成立成立A当当p1成立成立AWhile型型Until型型N-S流程图流程图第19页/共43页一个有用的结论已经证明:已经证明:三种基本结构的三种基本结构的顺序组成顺序组成可以表示可以表示任何复杂的算法结构。任何复杂的算法结构。由基本结构构成的算法,属于由基本结构构成的算法,属于“结构化结构化”算法。算法。第20页/共43页有关结构化算法的总
9、结一个结构化的算法是由一些基本结构顺序组成的;基本结构之间不存在向前一个结构化的算法是由一些基本结构顺序组成的;基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构的范围之内(如循环中的或向后的跳转,流程的转移只存在于一个基本结构的范围之内(如循环中的流程跳转);流程跳转);一个非结构化算法可以用一个等价的结一个非结构化算法可以用一个等价的结构化算法代替,其功能不变。构化算法代替,其功能不变。如果一个算法不能分解为若干个节本结如果一个算法不能分解为若干个节本结构,则它必然不是一个结构化算法。构,则它必然不是一个结构化算法。第21页/共43页3.4 顺序结构程序设计1.表达式语句表
10、达式语句是在各种表达式后加一个分号(;)形成一个表达式语句。2.空语句空语句直接由分号(;)组成,常用于控制语句中必须出现语句之处。它不做任何操作,只在逻辑上起到有一个语句的作用。例如:;空语句也是一个语句,不产生任何动作。空语句常用于构成标号语句,标识程序中相关位置;循环语句中空循环体;模块化程序中未实现的模块及暂不链入的模块。第22页/共43页3.函数调用语句由函数调用加上分号组成。4.复合语句是由一对花括号 括起的若干个语句,语法上可以看成是一个语句。复合语句中最后一个语句的分号不能省略。例如下面是一个复合语句:z=x;x=y;y=z;凡是单一语句可以存在的位置,均可以使用复合语句。复合
11、语句用在语法上是单一语句,而相应操作需多条语句描述的情况。第23页/共43页5.控制语句 控制语句有条件判断语句(if、switch),循环语句(for、while、do-while),转移语句(goto、continue、break、return)。控制语句根据控制条件决定程序的执行流程,控制语句不是顺序执行的。顺序结构是C语言的基本结构,除非指示转移,否则计算机自动以语句编写的顺序一句一句地执行C语句。第24页/共43页5C语言无I/O语句,I/O操作由函数实现5#include 字符输出函数3.5 数据的输入与输出 格式格式:putchar(c):putchar(c)参数参数:c:c为字
12、符常量、变量或表达式为字符常量、变量或表达式功能:把字符功能:把字符c c输出到显示器上输出到显示器上返值:正常,为显示的代码值;出错,为返值:正常,为显示的代码值;出错,为EOF(-1EOF(-1)第25页/共43页【例3.3】字符数据的输出。#include main()char a,b;a=r;b=e;putchar(a);putchar(b);putchar(d);putchar(n);运行后,在屏幕上显示:red 第26页/共43页 数据输入数据输入字符输入函数 格式格式:getchar():getchar()功能:从键盘读一字符功能:从键盘读一字符返值:正常,返回读取的代码值;出错
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 算法 基本 程序设计
限制150内