《C语言 第2章 算法.ppt》由会员分享,可在线阅读,更多相关《C语言 第2章 算法.ppt(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第 2 2 章章 程序的灵魂算法程序的灵魂算法一个程序应包括以下两个方面的内容:一个程序应包括以下两个方面的内容:(1)对数据的描述)对数据的描述 在程序中要指定数据的类型和数在程序中要指定数据的类型和数据的组织形式,即数据结构。据的组织形式,即数据结构。(2)对操作的描述)对操作的描述 即操作步骤即操作步骤 算法。算法。数据是操作的对象,操作的目的是对数据进行加工处数据是操作的对象,操作的目的是对数据进行加工处理,以得到预期的结果。理,以得到预期的结果。算法算法+数据结构数据结构=程序程序1.算法的性质算法的性质 算法就是进行操作的方法和操作步骤。程序就是用某种程序设计语言描述的解题算法。
2、算法的性质为:解题算法是一有穷动作序列;此动作序列只有一个初始动作;序列中每一动作仅有一个后继动作;序列终止表示问题得到解答或问题没有解答。程序程序=算法算法+数据结构数据结构+程序设计方法程序设计方法+语言工具和环境语言工具和环境2 简单算法举例简单算法举例例2.1 求12 3 4 5。S1:1p,2i S2:p i p S3:i+1i S4:若i5,算法结束;否则转S2。例2.2 打印50个学生中成绩大于80的学生。S1:1i S2:若gi80,则打印ni和gi;否则不打印 S3:i+1i S4:若i50,返回S2;否则算法结束。用循环算法实用循环算法实现时,注意结现时,注意结束条件。束条
3、件。流程图表示见教材P20图2.6、2.7N-S图表示见教材P26图2.29流程图表示见教材P20图2.8、2.9N-S图表示见教材P27图2.30、图2.31算法表示如下:S1:2000yearS2:若year不能被4整除,则输出year不是闰年,转S6S3:year能被4整除,不能被100整除,则输出year是闰年,转S6S4:year能被100整除,又能被400整除,则输出year是闰年;否则输出不是闰年。然后转S6S5:输出year不是闰年S6:year+1yearS7:若year2500,转S2;否则算法停止。例2.3 判20002500间的闰年。多次判断,逐步缩小范围多次判断,逐步
4、缩小范围year不能被4整除,Nyear能被4整除,但不能被100整除,Yyear能被100整除,又能被400整除,Y其它,N流程图表示见教材P22图2.10N-S图表示见教材P27图2.32n注意:注意:有的问题对判断的先后次序无关;n但有的问题不能任意颠倒判断的先后顺序。例2.4 求S1:sign=1S2:sum=1S3:deno=2S4:sign=(-1)signS5:term=sign(1/deno)S6:sum=sum+termS7:deno=deno+1S8:若deno100返回S4;否则算法结束。流程图表示见教材P23图2.11N-S图表示见教材P27图2.33例2.5 判断一个
5、大于等于3的正整数是否为素数。素数:只能被1和其本身整除的数。S1:输入n的值S2:i=2(i作为除数)S3:n被i除,得余数rS4:若r=0,不是素数,算法结束;否则执行S5S5:i+1iS6:若in-1,返回S3;否则是素数,结束。实际上只需判断n能否被2 之间的整数整除即可。所以S6可改为:S6:若i ,返回S3;否则是素数,结束。流程图表示见教材P23图2.12N-S图表示见教材P28图2.353.算法的组成要素算法的组成要素 操作。如算术运算、逻辑运算、关系运算、函数运算等。控制结构。用于控制组成算法的各操作的执行顺序。结构化程序设计中,顺序、选择和循环顺序、选择和循环3种基本结构能
6、组成任何结构的算法。AB结构化流程图AB4.用流程图表示算法用流程图表示算法1)顺序结构)顺序结构常用传统流程图符号见教材P19图2.32)选择结构(又称选取结构、分支结构)选择结构(又称选取结构、分支结构)PAB真假AB真 P 假结构化流程图只能执行A或B之一,两条路径汇合在一起然后出口。3)循环结构(又称重复结构)循环结构(又称重复结构)分为当型循环结构和直到型循环结构。PA真假A当P为真A直到P为真PA假真当型(while型)循环结构 直到(until型)型循环结构KA1A2AiAnK=k1K=k2K=kiK=kn由选择结构派生的多分支选择结构用以上用以上3种基本结构设计的程序,能处理任
7、何复杂的问题。种基本结构设计的程序,能处理任何复杂的问题。5.伪代码与逐步细化的程序设计方法伪代码与逐步细化的程序设计方法 伪代码(伪代码(pseudo code):):介于自然语言与计算机语言之间的文字符号算法描述工具。一般步骤为:1)自顶向下,将问题描述为几个子问题或子功能,不要试图一下子就触及问题解法的细节。2)在子问题一级描述算法。用逐步细化法设计本程序的过程:1)用汉语来描述算法;2)用语句(关键字)和汉语的混合来细化算法;3)编写主函数;4)重复1)3)步编写3个数中求最大数的函数。用用C语句描述算法语句描述算法语句是高级语言源程序的基本组成单位。它按功能分为:操作运算语句:用语描
8、述要执行的操作运算。流程控制语句:控制操作运算的执行顺序。伪代码没有固定,严格的语法规则。用计算机语言表示算法必须严格遵循所用语言的语法规则。写出了C程序,仍然只是描述了算法,并没有实现算法。只有运行程序才是实现算法。例例.3个数中取大数个数中取大数逐步细化法设计程序逐步细化法设计程序 汉语描述“做什么”S1:输入3个数a,b,c S2:从a,b,c中找出最大数赋给max S3:输出max混合语言细化算法,考虑“做什么”的实现途径 S1:调用scanf()函数 S2:设计一个函数max3(a,b,c)S3:调用printf()函数 写主函数的条件已经成熟 main()float a,b,c,m
9、ax;float max3(float x,float y,loat z);printf(“Input 3 numbers a b c:”);scanf(“%f%f%f”,&a,&b,&c);max=max3(a,b,c);printf(“The max is:%fn”,max);仍按逐步细化的方法设计max3()的算法。设三个参数为x,y,z。S2.1:从x,y中取出大数送m S2.2:从m,z中取出大数送m S2.3:返回m给主调函数进一步细化得:S2.1:if(xy)m=x;else m=y;S2.2:if(mz)m=m;else m=z;S2.3:return(m);很容易用C语言写出
10、函数max3()。float max3(float x,float y,float z)float m;if(xy)m=x;else m=y;if(mz)m=m;else m=z;return(m);例2.20:用C语言表示求5!的算法 main()int i,t;t=1;i=2;while(i=5)t=t*i;i=i+1;printf(%d,t);运行结果:120例2.21:用C语言表示求下列级数的算法 main()int sign=1;float deno=2.0,sum=1.0,term;while(deno=100)sign=-sign;term=sign/deno;sum=sum+term;deno=deno+1;printf(%fn,sum);运行结果:0.688172结构化程序设计方法结构化程序设计方法1.自顶向下自顶向下2.逐步细化逐步细化3.模块化设计模块化设计4.结构化编码结构化编码