230 likes | 434 Views
程序框图. 复习 :. 上节课例 1: 任意给定一个大于 1 的整数 n, 试设计一个算法判定 n 是否为质数. 算法分析: 1. 判断 n 是否等于 2, 如果 n=2, 则 n 为质数 , 若 n>2, 则执行第 2 步. 2. 依次从 2 到 n-1 检验是不是 n 的因数 ( 即是否整除 n). 若存在这样 的数 , 则 n 不是质数 , 若不存在这样的数 , 则 n 为质数. 以上是用自然语言描述一个算法 . 为了使得算法的描述更为直观和 步骤化 , 下面介绍另一种描述算法的方法 : 流程图. 流程图的通俗解释 : 由一些图框和有向箭头构成 , 表示算法按一
E N D
复习: 上节课例1:任意给定一个大于1的整数n,试设计一个算法判定n是否为质数. 算法分析: 1.判断n是否等于2,如果n=2,则 n为质数,若n>2,则执行第2步. 2.依次从2到n-1检验是不是n的因数(即是否整除n).若存在这样 的数,则n不是质数,若不存在这样的数,则n为质数. 以上是用自然语言描述一个算法.为了使得算法的描述更为直观和 步骤化,下面介绍另一种描述算法的方法:流程图. 流程图的通俗解释: 由一些图框和有向箭头构成,表示算法按一 定的顺序执行. 上例算法的流程图(见下页)
开始 输入n Flag=1 否 n>2? 是 d=2 否 否 d整除n? (2) (1) 是 d=d+1 Flag=0 是 d<=n-1且 flag==1? 否 Flag==1? 否 是 N不是质数 n是质数 流程图的图形符号: 观察右边的流程图: (1)有箭头指向的线. (2)不同形状的框图. 8 结束
图形符号 名 称 含义 起止框 表示一个算法的起始与结束 输入,输出框 表示输入输出操作 执行框 赋值、运算 判断框 用来根据给定的条件是否满足决定执行两条路径中的某一路径 流程线 算法中从上一步骤指向下一步骤
练习: • 1.流程图的功能是:…………………..( ). • 表示算法的起始和结束. • 表示算法的输入和输出信息. • 赋值、运算. • 按照算法顺序连接程序图框. 2.对程序框 表示的功能描述正确的一项是:…( ). A.表示算法的起始和结束. B.表示算法输入和输出的信息. C.赋值、计算. D. 按照算法顺序连接程序图框. 答案:D,B
算法三种基本逻辑结构 开始 输入n Flag=1 否 n>2? 是 d=2 d整除n? (2) (1) 是 d=d+1 Flag=0 是 d<=n-1且 flag==1? 否 Flag==1? 否 是 N不是质数 n是质数 顺序结构 否 循环结构 条件结构 结束
算法三种基本逻辑结构(顺序结构、条件结构、循环结构)算法三种基本逻辑结构(顺序结构、条件结构、循环结构) 流程图表示,实例,程序演示: A B 顺序、条件、循环三种基本的逻辑结构: • 顺序结构:最简单的算法结构,框与框之间从上到下进行。 • 任何算法都离不开顺序结构。
实例:三角形ABC的底BC为4, 高AD为2,求三角形ABC的面积S, 试设计该问题的算法和流程图. 解:算法如下: 开始 1.底BC为a=4, 高AD为b=2. a=4,b=2 2.S=1/2ab S=1/2ab 3.输出S. 输出S 流程图: 结束
开 始 1.a=2, b=4,h=5; a=2 b=4 h=5 2.S=(a+b) *h/2 3.输出S. . 输出S. 结 束 练习:利用梯形的面积公式计算上底为2,下底为4,高为5 的梯形面积.试设计该问题的算法和流程图. 解:算法如下: 程序实现: main() {int a,b,h,s; a=2,b=4,h=5; s=(a+b)*h/2 printf(“s=%d”,s); } 输出:15 注:txmz.c S=(a+b)*h/2 流程图:
如图: 否(2) 是(1) P A B (2).条件结构:一个算法的执行过程中会遇到一些条件的 判断,算法的流程根据条件是否成立有不同的流向.
练习: 设计求一个数x的绝对值y= 的算法并画出相应的流程图: 分析:根据绝对值的定义,当x≥0,y=x;当x<0时,y=-x, 所以当给出一个自变量x的值,求它所对应的y值时 必需先判断x的范围,所以要用到条件结构. • 解: • 算法分析: • 输入x. • 如果 x≥0,y=x , 否则y=-x.. • 输出y.
流程图: 程序实现: main() {float x,y; scanf(“%f%f”,&a,&b); if(x>=0) y=x; else y=-x; printf(“%f\n”,y); } 开始 输入 x 是 否 x≥0? y=x y=-x 输出y 结束 输入:5 -10 输出:5 10 注:jdzhi.c
例:联邦快递公司规定甲、乙两地之间物品的托运费用根据下面的方法计算:例:联邦快递公司规定甲、乙两地之间物品的托运费用根据下面的方法计算: 其中f(单位:元)为托运费,ω为托运物品的重量(单位:千克), 试画出计算费用f的程序框图。
自然语言是: 第一步:输入物品重量ω;第二步:如果ω≦50,那么f=0.53 ω, 否则f=50×0.53+(ω-50) ×0.85;第三步:输出托运费f.
(3)循环结构:需要重复执行同一操作的结构称为循环结构(3)循环结构:需要重复执行同一操作的结构称为循环结构 .即从某处开始按照一定的条件反复执行某一处理步骤. 反复执行处理的步骤称为循环体. 注:循环结构一定包含条件结构. 实例:1+2+3+4+5+6+7+…..+100=? 分析:只需要一个累加变量sum和计数变量i.将累加变量 sum初值赋为0,计数变量i从1到100变化. 算法分析: (见下页)
是 否 开始 流程图: 1. sum=0; 2. i=1; 3. sum=sum+i; 4. i=i+1; 5. 如果i小于等于100,返回重新执行第3步,第4步,第5步,否则结束,得到sum值. sum=1+2+3+4+5+6+........+100. Sum=0 i=1 Sum=sum+i i=i+1 i<=100 分析:初值sum=0,i=1 第一次循环sum= Sum=1 Sum=1+2 Sum=1+2+3 ……Sum=1+2+3+…100 0+1=1 ,i=2 输出sum 第二次循环sum= 1+2=3 ,i=3 第三次循sum= 3+3=6 结束 4
练习: 1+3+5+7+……+31=? 分析:只需要一个累加变量sum和计数变量i.将累加 变量sum初值赋为0,计数变量i从1到31变化. 算法分析:(见下页)
算法分析: (1).sum=0; (2).i=1; (3).sum=sum+i;(4).i=i+2; (5).如果i小于等于31,返回重新执行第3步,第4步,第5步,否则结束,得到sum的值,sum=1+3+5+7+……+31. 流程图: 开始 开始 Sum=0 Sum=0 i=1 i=1 Sum=sum+i Sum=sum+i 是 i=i+1 否 i<=31 i<=100 输出sum 输出sum 结束 结束 mian() {int sum,i; sum=0; i=1; for(i<=31) {sum=sum+i; i=i+2; } printf(“%d\n”,sum); } 注:ljia.c 初值sum=0, i=1 i=i+2 0+1=1 ,i=3 第一次循环sum= 1+3=4 ,i=5 第二次循环sum= 第三次循sum=4+5=9 …..sum=1+3+5+…+31 程序实现: 6
三种结构的综合应用: 任意给定一个大于1的整数n,试设计一个算法判定n是否为质数.并用程序实现。
开始 否 (1) n=5 输入n Flag=1 否 n>2 是 d=2 否 d整除n? (1) 是 (2) d=d+1 Flag=0 是 d<=n-1且 flag=1? 否 (2)n=4 Flag=1? 否 是 N不是质数 n是质数 8 结束
main() {int flag,n,d; scanf("%d\n",&n); flag=1; if(n>2) for(d=2;d<=n-1&&flag==1;d++) {if(n%d==0) flag=0;} if(flag==1) {printf("%d",n); printf(" shi ge su shu\n");} else {printf("%d",n); printf(" bu shi yi ge su shu\n");} } 注:sushu .c 程序实现: