程序的控制结构及结构化程序设计方法.ppt
《程序的控制结构及结构化程序设计方法.ppt》由会员分享,可在线阅读,更多相关《程序的控制结构及结构化程序设计方法.ppt(82页珍藏版)》请在三一办公上搜索。
1、3.1 算法与算法的表示方法3.2 顺序结构程序设计3.3 选择结构程序设计 3.4 循环结构程序设计,第三章 程序的控制结构与结构化程序设计方法,3.1 算法与算法的表示方法,本章主要内容:1.了解算法的表示方法及其在程序设计中的重要地位.2.掌握 C 语言的基本控制结构和基本控制语句.3.掌握用 C 语言的基本控制语句进行顺序,选择和 循环结构程序的设计.4.掌握一些常用的算法,如递推法,迭代法,穷举法等.5.了解结构化程序设计的基本思想,算法分类:数值运算算法:解决的是求数值解的问题。非数值运算算法:主要解决关于分析推理、逻辑推理等 问题,如排序、查找等。,3.1.1 算法的概念,数据结
2、构+算法=程序数据结构:对数据的描述和组织形式,算法:对操作或行为的描述,即操作步骤。,算法为解决一个具体问题而采取的确定的有限的操 作步骤。,2、控制结构:操作序列的顺序控制。三种基本控制结构,即:顺序结构、选择结构、循环结构。,3.1.1 算法的概念,算法的组成要素:,1、操作:各种运算。如:算术运算、逻辑运算、关系运算等。,算法的特性:1、有穷性:在有限的时间内,操作步骤能够终止。2、确定性:每一步操作的含义必须明确。3、有效性:每一步都应当能有效地进行并得到确定的结果。4、有0个或多个输入。5、有1个或多个输出。,3.1.1 算法的概念,例1:求12345。,算法一:S1:求12,得2
3、;S2:将S1得的2再乘3,得6;S3:将S2得的6再乘4,得24;S4:将24再乘5,得120,结果。,算法二:S1:p=1S2:i=2S3:p=pi S4:i=i+1S5:若i5,返回S3,否则结束,得出结果 p为5!。,比较两个算法:算法一:繁琐,数目大时步骤太多。算法二:利用循环算法,借助两个变量,可求任意数的阶乘,提高通用性。,3.1.2 简单算法举例,3.1.2 简单算法举例,例2:求1+2+3+4+100,算法:S1:n=1 S2:s=0S3:s=s+nS4:n=n+1 S5:若n 100,返回到S3,否则结束。,1+3+5+7+992+4+6+8+.+100,思考:,S1:n=
4、1 S2:s=0S3:s=s+nS4:n=n+2S5:若n 100,返回到S3,否则结束。,S1:n=2 S2:s=0S3:s=s+nS4:n=n+2S5:若n 100,返回到S3,否则结束。,算法:S1:sign=1S2:n=2 S3:s=1S4:sign=(-1)signS5:s=s+sign nS6:n=n+1 S7:若n 100,返回到S4,否则结束。,例3:求1-2+3-4-100,3.1.2 简单算法举例,二、流程图表示,一、自然语言表示,3.1.3 算法的表示方法,例1中求5!的算法用流程图表示:,算法:S1:p=1S2:i=2S3:p i p S4:i+1 iS5:若i 5,返
5、回S3,否则结束,得出结果 p为5!。,3.1.3 算法的表示方法,优点:既形象直观,又节省篇幅,基本结构及算法的表示均在一个矩形框内,尤其适于表示结构化程序的设计。,三、N-S结构化流程图,取消改进流程图中的流程线,这种算法被迫只能从上到下顺序执行,从而避免了算法流程的任意转向,保证了程序的质量。,所谓结构化程序设计就是由基本结构顺序组成的,基本结构之间无跳转。,3.1.3 算法的表示方法,例1中求5!用N-S图表示:,main()int i,p;p=1;i=2;do p=p*i;i=i+1;while(i5)printf(“%d”,p);,3.1.3 算法的表示方法,伪码是指介于自然语言和
6、计算机语言之间的一种代码,是帮助程序员制定算法的智能化语言,它不能在计算机上运行,但是使用起来比较灵活,无固定格式和规范,只要写出来自己或别人能看懂即可,而且比较容易转换为计算机程序。,3.1.3 算法的表示方法,四、伪代码表示:,3.1.3 算法的表示方法,input n if n0 print“input error!”goto end else fac=1 i=1 loop:fac=fac*i i=i+1 if i=n goto loop print fac end,例:用伪码表示的计算n!的算法,返回,为了使流程图便于理解和阅读,限制无规律的任意转向,结构化程序设计规定了三种基本结构,
7、即:顺序结构、选择结构、循环结构。然后由这些基本结构按一定规律组成一个算法结构,整个算法的结构由上而下地将各个基本结构顺序排列起来的。,三种基本结构:,三种基本结构的特点:(1)只有一个入口(2)只有一个出口(3)结构内的每一部分都有机会被执行(4)结构内不存在“死循环”,3.2 顺序结构程序设计,3.2 顺序结构程序设计,顺序结构是最简单的C语言程序结构,也是C语言程序中 最常用的程序结构,主要由表达式语句组成。,特点:完全按照语句出现的先后顺序执行程序。,一、顺序结构概念:,二、顺序结构流程图表示:,3.2 顺序结构程序设计,三、应用举例:,例3.1:假设银行定期存款的年利率r为2.25%
8、,存款期为n年,存款本金为m元,求n年后可得到的本利之和。,3.2 顺序结构程序设计,3.2 顺序结构程序设计,程序清单:,printf(“Please enter n,m:”);,运行结果:Please enter n,m:1,500Total=511.250000,main(),int m,n;float r=0.0225,total;,scanf(“%d,%d”,total=m*pow(1+r,n);,printf(“Total=%fn”,total);,#include,注:编译预处理命令不是C语句,每条指令单独占一行,同一行不能有其它的编译指令或C语句。,3.2 顺序结构程序设计,C
9、程序结构框架:,以#开始的编译预处理命令行,main(),局部变量说明语句;,执行语句序列;,包含头文件的方式:#include#include“文件名”,3.2 顺序结构程序设计,例3.2:任意从键盘输入一个三位整数,要求正确分离出它的 个位、十位、百位数,分别在屏幕上输出。,算法:,Step 1:输入一个三位整数x;,Step 2:计算最高位b2=x100;,Step 4:计算最低位b0=x%10 或 b0=xb2100b110;,Step 3:计算中间位b1=(xb2100)10 或 b1=(x10)%10;,Step 5:输出分离结果;,程序见eg3_2,3.2 顺序结构程序设计,3.
10、2 顺序结构程序设计,算法:,Step 4:输出x1和x2;,Step 1:输入a,b,c;,Step 3:由于以假设判别式0,所以可直接按求根公式 计算两个实根x1和x2;,程序见eg3_3,返回,选择结构的应用场合,当需要根据不同的判断条件执行不同的操作时。,若输入的三角形三边能构成一个三角形,则计算三角形面积,计算分段函数的值,3.3 选择结构程序设计,选择结构的流程图表示,3.3 选择结构程序设计,选择结构种类单分支的选择结构双分支的选择结构多分支的选择结构 嵌套的if语句或switch语句,3.3 选择结构程序设计,if else 形式 if(表达式)语句1 else 语句2 适合于
11、解决双分支选择问题,条件语句,if 形式 if(表达式)语句A 适合于解决单分支选择问题,3.3 选择结构程序设计,elseif 形式 if(表达式1)语句1 else if(表达式2)语句2 else if(表达式m)语句m else 语句m+1 适合于解决多分支选择问题,3.3 选择结构程序设计,例3.4 从键盘输入你和你朋友的年龄,编程判断谁的年龄最大,并打印他的年龄。,N-S流程图:,程序见eg3_4_1,算法1:用不带else子句的if语句编程。,3.3 选择结构程序设计,算法2:用带有else子句的if语句编程。,N-S流程图:,程序见eg3_4_2,3.3 选择结构程序设计,算法
12、3:用条件表达式实现。,条件表达式:表达式1?表达式2:表达式3,N-S流程图:,程序见eg3_4_3,3.3 选择结构程序设计,例3.5 体型判断。判断某人是否属于肥胖,可根据身高与体重等因素来判断,按照“体指数”对肥胖程度进行划分:体指数t=体重w/(身高h)(其中,w单位为kg,h单位为m)当 t27 时,为肥胖。,2,3.3 选择结构程序设计,算法1:用不带else子句的if语句编程。,N-S流程图:,程序见eg3_5_1,算法2:用在if子句中嵌入if语句的形式编程。,程序见eg3_5_2,3.3 选择结构程序设计,算法3:用在else子句中嵌入if语句的形式编程。,程序见eg3_5
13、_3,N-S流程图:,3.3 选择结构程序设计,使用if-else语句应注意的事项,当需要多条语句时必须用复合语句,即把要执行的多条语句用一对大括号括起来。if子句中内嵌if语句时,else子句总是与它前面最近的且没有配对的if相结合,而与书写的缩进格式无关。为避免错误,有两个办法:1、if子句中内嵌的 if 语句用一对大括号括起来;2、尽量采用在 else 子句中内嵌 if 语句的形式编程。,3.3 选择结构程序设计,例3.6编程计算一元二次方程ax+bx+c=0的根,a,b,c由键盘输入,其中,a!=0。,算法(用自然语言描述),Step1:输入系数 a,b,c;,Step4:若a=0,则
14、输出“不是二次方程”;,Step5:若disc0,则计算并输出两个不相等的实根:x1=p+q,x2=p-q;,Step6:若disc=0,则计算并输出两个相等的实根:x1=x2=p;,Step7:若disc0,则计算并输出两个共轭复根:x1=p+qi,x2=p-qi;,3.3 选择结构程序设计,程序见eg3_6,2,例3.7 编程设计一个简单的猜数游戏:先由计算机“想”一个数请人猜,如果人猜对了则计算机给出提示“right”,否则提示“wrong”,并告诉人所猜的数是大还是小。,算法:Step1:通过调用随机函数任意“想”一个数magic;Step2:输入人猜的数guess;Step3:如果g
15、uessmagic,则给出提示:“Wrong!Too high!”Step4:如果guessmagic,则给出提示:“Wrong!Too low!”Step5:如果guess=magic,则给出提示:“Right!”,并打印这 个数。,3.3 选择结构程序设计,程序见eg3_7,开关语句switch 当对问题需要分析的情况较多时(一般大于三种),常使用开关语句代替条件语句来简化程序的设计。常用于各种分类统计、菜单等程序的设计。,switch语句的一般形式 switch(表达式)case 常量1:语句序列1 case 常量2:语句序列2 case 常量n:语句序列n default:语句序列n+
16、1,3.3 选择结构程序设计,关于使用switch语句时的几点说明 1.switch后括号内的表达式的值一般为整型、字符型或枚举型,而且,每个case后的“常量表达式”的类型应该与switch后括号 内表达式的类型一致。2.若case后面的语句省略不写,则表示它与后续case执行相同的 语句。3.程序执行到switch语句时,先计算表达式的值,然后自上而下 寻找与该值相匹配的case常量,找到后则按顺序执行此case后 的所有语句,包括后续case,而不再进行判断,直到遇break 语句或右花括号为止。因此,只有switch语句和break语句配 合使用才能形成真正意义上的多分支,即执行完某一
17、分支后 一般要用break语句跳出switch结构。,3.3 选择结构程序设计,4.若没有任何一个case常量与表达式的值相匹配,则执行default 后面的语句序列n+1,有时,default及其后的语句序列n+1也可以省略。5.由于每个case后的常量只起到语句标号的作用,所以,case后常量的值必须互不相同,否则会出现互相矛盾的现象。6.每个case后的常量出现的次序发生改变时,不影响程序的运行结果,一般将发生频率较高的情况放在前面。,3.3 选择结构程序设计,例3.8 根据输入的百分制成绩score,转换成相应的五分制成绩grade并打印输出。转换标准为:,3.3 选择结构程序设计,方
18、法一:用嵌套的if语句编写程序,main(),int score;,printf(“please enter score:”);,scanf(“%d”,if(score 100),printf(“input error.”);,else if(score=90),printf(“%dAn”,score);,else if(score=80),printf(“%dBn”,score);,else if(score=70),printf(“%dCn”,score);,else if(score=60),else,printf(“%dDn”,score);,printf(“%dEn”,score);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 控制 结构 程序设计 方法
链接地址:https://www.31ppt.com/p-6596205.html