【教学课件】第4章控制结构程序设计.ppt
《【教学课件】第4章控制结构程序设计.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第4章控制结构程序设计.ppt(156页珍藏版)》请在三一办公上搜索。
1、第4章 控制结构程序设计,2023/8/6,2,现实问题总是复杂的,面对各种需要解决的问题,人们必须首先对各类问题进行分析,确定解决问题的方法和步骤即算法,再借助具体编程语言编制好一组让计算机执行的指令(即程序),让计算机按人们指定的步骤有效地工作。,2023/8/6,3,根据算法,依据某种编程语言的语法规则编写计算机执行的命令序列,就是程序设计。著名计算机科学家沃思(Nikiklaus Wirth)提出了一个公式:“数据结构算法程序”,即程序设计包括算法设计和数据存储。除此之外,还有结构化程序设计方法和计算机语言。,2023/8/6,4,问题的提出,闰年问题:一年12个月,共365天,这是我
2、们说得最多的。但事实上,每年不完全是365天。在中国农历中有闰月的说法,而公历也有闰年的说法。一般情况下,2月是28天,而闰年时是29天,何年的2月是29天呢,这就是闰年问题。编程判断一个年份是否为闰年。求根问题:编程求解一元二次方程的根。,2023/8/6,5,本章内容,算法的基础知识 大小写字母转换问题 顺序结构程序的概念 字符数据的输入输出闰年问题 选择结构程序的概念 if语句switch语句 统计多名学生成绩问题 循环结构程序的概念 自增自减运算符与逗号表达式while循环 dowhile循环 for循环 嵌套循环 应用实例,2023/8/6,6,4.1 算法的基础知识,算法是灵魂,是
3、问题求解过程中的精确描述;数据结构是加工对象;语言是工具;编程需要采用合适的方法。算法:是对特定问题求解步骤的一种描述。程序:是用具体的计算机语言来描述算法的代码,可以输入计算机并产生结果。,2023/8/6,7,常用算法,递推化算法(牛顿迭代法、二分法、梯形法、穷举法等);排序算法(选择法、冒泡法);查找算法(顺序查找、折半查找);有序数列的插入、删除操作;存储区的动态分配与释放,单向线性链表的建立、查找、插入、删除操作;初等数论问题求解的有关算法(最大公约数、最小公倍数、素数等);递归算法(求最大公约数、阶乘等);字符串的处理(字符和字符串的插入、删除、字符串的连接、比较等)。,2023/
4、8/6,8,算法的五个特性,有穷性:对任何合法的输入值,算法中每个步骤由计算机执行的次数及时间都是有限的。确定性:算法中每个步骤含义明确,无二义性。在任何条件下,相同的输入,必有相同的输出。可行性:算法中描述的操作都可通过有限次的基本运算来实现。输入:一个算法应具有零个或多个输入。(无输入情况:如求:1*2*3*4*5)。输出:一个算法应具有一个或多个输入。,2023/8/6,9,算法的设计目标,正确性:设计的算法应当满足具有输入、输出和加工处理等明确的无歧义 性的描述的具体问题的需求。验证正确性通常有4个层次:程序不含语法错误;程序对于几组输入数据能够得出满足规格说明要求的结果;程序对于精心
5、选择的典型、苛刻而带有刁难性的几组输入数据 能够得出满足规格说明要求的结果;程序对于一切合法的输入数据能够得出满足规格说明要求的结 果。一般情况至少通过第层的验证。可读性:算法主要是为了阅读与交流,其次才是机器执行。可读性好有助 于人对算法的理解;难懂的程序易于隐藏较多错误,难以调试和 修改。健状性:当输入非法数据时,算法也能适当地做出反应或进行处理,而不 会产生莫名其妙的输出结果。效率与低存储量的需求:主要指算法执行时的最长时间与所需的最大存储 空间。,2023/8/6,10,算法的描述方法,自然语言流程图N-S图PAD图伪代码,2023/8/6,11,用自然语言表示算法,自然语言就是人们日
6、常使用的语言,可以是汉语、英语或其他语言。用自然语言表示通俗易懂,但文字冗长,容易出现“歧义性”。除了简单问题外,一般不用自然语言描述算法。例如:,2023/8/6,12,【例4-1】输入三个数,然后输出其中最大的数。(1)输入A,B,C。(2)若A B,则MAX=A;否则MAX=B。(3)若C MAX,则MAX=C。(4)输出MAX,MAX即为最大数。,2023/8/6,13,例:用自然语言写出求 1-1/2+1/3-1/4+1/99-1/100 的算法。,(1)sign=1/*数值的符号*/(2)sum=1/*累加和*/(3)deno=2/*分母值*/(4)sign=(-1)*sign(5
7、)term=sign*(1/deno)/*某一项的值*/(6)sum=sum+term(7)deno=deno+1(8)若deno100返回第(4)步,否则转第(9)步(9)输出sum,2023/8/6,14,算法的描述流程图,用流程图表示算法,形象直观,比较清楚地显示出各个框之间的逻辑关系,易于理解。但流程图占用篇幅较多,当算法较复杂时,画流程图既费时,又不方便。但必须掌握。美国国家标准化协会ANSI规定了一些常用的流程图符号,并已被世界各国程序工作者采用:,三种基本结构:,为了解决程序设计混乱的问题,1966年提出了三种基本结构:顺序结构、选择结构、循环结构,然后由这些基本结构按一定规律组
8、成一个算法结构,整个算法结构是由上而下将各个基本结构顺序排列起来的。使用这三种基本结构顺序组成的算法结构,可以解决任何复杂的问题,并且是“结构化”的算法。,2023/8/6,15,流程图顺序结构,顺序结构是程序设计中最简单的一种基本结构。如右图所示,形象地描述了一个最简单的顺序结构:图中虚线框内是一个顺序结构。其中A和B两个框是顺序执行的,即在执行完A框所指定的操作后,必然接着执行B框所指定的操作。,2023/8/6,16,流程图选择结构,选择结构(或称选取结构,或称分支结构):,如下图所示,虚线框内是一个选择结构。此结构必包括一个判断框,根据给定的条件p是否成立,而选择执行A框或B框。注意:
9、无论条件p是否成立,只能执行A框或B框之一,不可能既执行A框又执行B框。A或B两个框中可以有一个是空的,即该空框不执行任何操作。,2023/8/6,17,流程图当型循环结构,循环结构(或称重复结构):,循环结构即反复执行某一部分的操作,分为当型(while型)循环结构和直到型(until型)循环结构两类。,当型(while型)循环结构:如右图所示,虚线框内是一个while型结构。它的功能是当给定的条件p成立时,执行A框操作,执行完A后再判断条件p是否成立,如果仍然成立,再执行A框,如此反复执行A框,直到某一次p条件不成立为止,此时不执行A框,而是从b点脱离循环结构。,2023/8/6,18,流
10、程图直到型循环结构,直到型(until型)循环结构,如右图所示,虚线框内是一个until型结构。它的功能是先执行A框,然后判断给定的条件p是否成立,如果条件p成立,再执行A框,然后再对条件p作判断,如果条件p仍然成立,又执行A框,如此反复执行A框,直到某一次p条件不成立为止,此时不执行A框,而是从b点脱离本循环结构。,2023/8/6,19,三种基本结构的共同特点,只有一个入口只有一个出口结构内的每一部分都有机会执行到结构内不存在“死循环”(无终止的循环),2023/8/6,20,流程图其他结构,事实上,基本结构不一定只限于上面三种,只要具有上述基本结构的4个特点的结构都可以作为基本结构。人们
11、可以运用三种基本结构定义自己派生的基本结构,并由这些基本结构组成结构化程序。如下两图所示。C语言就是采用的这种派生基本结构。,根据表达式的值p进行选择,a,b,A,B,N,p1,p2,pn,a,2023/8/6,21,2023/8/6,22,流程图举例,用流程图表示出求,的算法。,2023/8/6,23,算法的描述N-S图,既然用基本结构的顺序组合可以表示任何复杂的算法结构,那么,基本结构之间的流程线就属多余的了。1973年美国两学者I.Nassi和B.Shneiderman提出了一种新的流程图形式,并以他们的名字命名为NS结构化流程图。这种流程图完全去掉了带箭头的流程线,全部算法写在一个矩形
12、框内,在该框内还可以包括其他的从属于它的框,即由一些基本的框组成一个大框。这种NS流程图十分适合结构化程序设计,因而很受欢迎。,三种基本结构对应的NS图符号:,顺序结构 选择结构 当(while)型循环结构 直到(until)型循环结构,2023/8/6,24,2023/8/6,25,例4-4 用NS图表示求素数的算法,素数是指除了1和该数本身之外,不能被其他任何整数整除的数。实际上,若要判断一个正整数m是否为素数,只要将2到 间的每一个整数去除m,若有一个能整除m,则m不是素数,若其间的所有整数都不能整除m,则m为素数。,2023/8/6,26,算法的描述PAD图,PAD(Problem A
13、nalysis Diagram),是近年来在软件开发中被广泛使用的一种算法的图形表示法,与前面介绍的流程图、N-S图相比,流程图、N-S图都是自上而下的顺序描述,而PAD图除了自上而下以外,还有自左向右的展开,所以,如果说流程图、N-S图是一维的算法描述的话,则PAD图就是二维的,它能展现算法的层次结构,更直观易懂。PAD图表示的三种基本结构如下所示:,2023/8/6,27,例:求三个数的最大值的PAD图,2023/8/6,28,算法的描述伪代码,用流程图、N-S图、PAD图等描述算法,直观易懂,但绘制比较麻烦,在设计一个算法时,可能要反复修改,而修改流程图是比较麻烦的,因此,流程图适合表示
14、算法,但在设计算法过程中使用不是很理想。为了设计算法方便,常使用伪代码工具。伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。伪代码不用图形符号,书写方便,格式紧凑,便于向计算机语言算法过渡。因此,实际中常用伪代码描述算法。例:求三个数的最大值的伪代码算法描述如下:定义三个变量i、j、k,用来存放三个数,定义变量max存放最大值;输入三个变量的值;max=ij?i:j;max=maxk?max:k;输出max。,2023/8/6,29,例:用自然语言写出求 1-1/2+1/3-1/4+1/99-1/100 的算法。,(1)sign=1/*数值的符号*/(2)sum=1/*累加和*/
15、(3)deno=2/*分母值*/(4)sign=(-1)*sign(5)term=sign*(1/deno)/*某一项的值*/(6)sum=sum+term(7)deno=deno+1(8)若deno100返回第(4)步,否则转第(9)步(9)输出sum,2023/8/6,30,算法的描述计算机语言,用计算机语言表示算法实际上就是计算机程序。用计算机语言表示算法必须严格遵守所使用的语言的语法规则。例:用C语言表示求三个数的最大值的算法如下:#include void main()int i,j,k,max;/*定义变量*/printf(i,j,k=?n);/*提示信息*/scanf(%4d%4
16、d%4d,/*输出*/,2023/8/6,31,在计算机中,有时不区分大小写字母,而且很多高级语言也不区分大小写字母,但是在程序中,如果需要判断字母是否一致时,则必须使用一种标准,这时就必须将大写字母转换成小写字母,或将小写字母转换成大写字母。,2023/8/6,32,问题的提出,从键盘输入一个小写字母,要求在屏幕上输出对应的大写字母。,2023/8/6,33,问题的分析,首先输入一个字母(可能是大写字母,也可能是小写字母);然后将输入的字母转换成大写字母,从字母的ASCII码可知,大写字母的ASCII码值比小写字母ASCII码值小32,因此,小写字母ASCII码值减32就是大写字母;最后输出
17、大写字母即可。这里涉及到字符数据的输入输出问题。,2023/8/6,34,回顾,#include void main()char a,b;a=x;b=y;a=a-32;/*char与int数据间可进行算术运算*/b=b-32;printf(%c,%cn%d,%dn,a,b,a,b);,2023/8/6,35,如何从键盘输入字符呢?,2023/8/6,36,标准字符输出函数,格式:putchar(c)、putch(c)参数:参数c为字符常量、字符或整型变量、表达式 功能:把字符c输出到标准输出设备(即显示器)上 返回值:正常返回,为显示字符的代码值;若出错,返回为EOF(即-1),说明:此函数只
18、能输出单个字符数据。参数c可以是字符常量、转义字符、字符变量、整型常量、整型变量。从功能角度来看,printf()函数使用%c完全可以代替putchar()函数和putch()函数。putchar()函数和putch()函数的功能完全一样。该函数在stdio.h中声明。,2023/8/6,37,标准字符输入函数,格式:getchar()、getch()、getche()功能:从标准的输入设备(如键盘)读一个字符 返回值:正常,返回读取的字符代码值;若出错,返回为EOF(即-1),说明:getchar()函数、getch()函数、getche()函数,都只能接受一个字符。getchar()函数在
19、输入一个或若干个字符后,必须以回车键结束,否则字符不被输入。但只有第一个字符被接受。并且在屏幕上回显全部输入的字符。getch()和getche()函数在输入一个字符后,立即被函数接受,不用回车键。使用getch()接受字符时,屏幕上不回显原输入的字符。使用getche()接受字符时,要显示原输入的字符。利用回显和不回显的特点,getch()和getche()这两个函数经常用于交互输入的过程中完成暂停等功能。从功能角度来看,scanf()函数使用%c完全可以代替getchar()、getch()和getche()函数。该函数在stdio.h中声明。,2023/8/6,38,例4-5 问题的实现
20、,/*LI4_5.c*/#include void main()char c1,c2;c1=getchar();/*输入小写字母*/printf(%c,%dn,c1,c1);c2=c1-32;/*转变为大写字母*/printf(%c,%dn,c2,c2);/*输出*/,输入字符,不同数据之间的运算,同一数据不同的输出方式,2023/8/6,39,顺序结构程序,通常的计算机程序总是由若干条语句组成,从执行方式上看,从第一条语句到最后一条语句完全按顺序执行,就是简单的顺序结构。前面我们所编写的程序都是顺序结构程序。,2023/8/6,40,举一反三,例4-7:鸡兔同笼问题。已知鸡兔总头数为H,总脚
21、数为F,求鸡兔各有多少只?【分析】设鸡有x只,兔有y只,则有方程成立:x+y=H(1)2x+4y=F(2)解上述(1)(2)式方程组有解:x=(4H-F)/2 y=(F-2H)/2本例只需要输入总脚数F、总头数H即可求出。需要用到scanf()和printf()库函数。,2023/8/6,41,例4-7程序,/*LI4_7.c*/#include void main(void)int H,F,x,y;scanf(%d,%d,/*输出鸡兔只数*/,为什么没有用显示转换数据,或x=(4*H-F)/2.0的形式?,2023/8/6,42,例4-9:求ax2+bx+c=0方程的根,【分析】,只要保证b
22、*b-4*a*c大于等于0,该方程就有实根。,2023/8/6,43,例4-9程序,/*LI4_9.c*/#include#include void main()float a,b,c,disc,p,q,x1,x2;printf(Please enter the coefficients a,b,c:);scanf(%f%f%f,/*输出x1和x2*/,问题:如果discb*b-4*a*c的值小于0呢?,2023/8/6,44,以上都是顺序结构程序。问题:如果discb*b-4*a*c的值小于0呢?如果要判断,那么要用到选择结构程序。,2023/8/6,45,选择结构程序,若在程序执行过程当中
23、,根据用户的输入或中间结果去执行若干不同的任务则为选择结构程序。C提供了一系列的分支语句来实现选择结构程序设计。,2023/8/6,46,分支语句,if语句if-else语句if-else if语句switch语句,2023/8/6,47,if 语句,“if(表达式)语句”形式 语句格式的一般形式为:if(表达式)语句;,注意:if后面的“表达式”一般用于表示一个条件,它可以是关系表达式、逻辑表达式、算术表达式、字符型表达式等。格式中的“语句”,可以只包含一个简单语句,也可以是复合语句。如果是复合语句,必须用一对花括号将语句括起来。如果只有一条语句,则可不用括起来。,例:if(xy)print
24、f(“%d”,x);,2023/8/6,48,例4-9程序,/*LI4_9_1.c*/#include#include void main()float a,b,c,disc,p,q,x1,x2;scanf(%f%f%f,2023/8/6,49,if()else 语句,语句格式的一般形式为:if(表达式)语句1;else 语句2;,注意:if后面的“表达式”一般用于表示一个条件,它可以是关系表达式、逻辑表达式、算术表达式、字符型表达式等。格式中的“语句”,可以只包含一个简单语句,也可以是复合语句。如果是复合语句,必须用一对花括号将语句括起来。如果只有一条语句,则可不用括起来。,例:if(xy)
25、max=x;else max=y;,2023/8/6,50,例4-9程序,/*LI4_9_2.c*/#include#include void main()float a,b,c,disc,p,q,x1,x2;scanf(%f%f%f,2023/8/6,51,if(表达式)语句1;else 语句2;由于语句1或语句2可以是各种形式的语句,当然也可以是分支语句,因此分支语句可以嵌套。,2023/8/6,52,例4-9程序,/*LI4_9_3.c*/#include#include void main()float a,b,c,disc,p,q,x1,x2;scanf(%f%f%f,在语句1嵌套,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 控制 结构 程序设计
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-5658807.html