选择型程序设计j.ppt_第1页
选择型程序设计j.ppt_第2页
选择型程序设计j.ppt_第3页
选择型程序设计j.ppt_第4页
选择型程序设计j.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,第 4 章 选择型程序设计,2,4.1 算法和算法的表示,解决问题确定的方法和有限的步骤 “一个算法,就是一个有穷规则的集合,其中之规则规定了一个解决某一特定类型的问题的运算序列。” 对同一个问题,可有不同的解题方法和步骤 算法决定了程序的质量,例: 求,3,算法的要素,两要素: 基本功能操作 + 控制结构,算术运算: ,逻辑运算:与 或 非,数据比较: 等于 不等于,数据传送:输入 输出 赋值,顺序结构,功能操作,控制结构,分支结构,循环结构,4,算法的基本特征,算法 对处理问题的过程的描述 算法的基本特征 有穷性 确定性 有效性 有零个或多个输入 有一个或多个输出 数据结构 对这个过程中所涉及的数据的描述,5,例:有黑和蓝两个墨水瓶,但却错把黑墨水装在了蓝墨水瓶子里,而蓝墨水错装在了黑墨水瓶子里,要求将其互换。,算法分析: 非数值运算问题 因为两个瓶子的墨水不能直接交换 解决这一问题的关键: 引入第三个墨水瓶。 设第三个墨水瓶为红色,其交换步骤:,算法举例,6, 将黑瓶中的蓝墨水装入红瓶中 将蓝瓶中的黑墨水装入黑瓶中 将红瓶中的蓝墨水装入蓝瓶中 交换结束,7,算法的表示,可用不同的方法表示算法,常用的有: 自然语言 传统流程图 结构化流程图 伪代码 PAD图,8,例4-2:计算函数M(x)的值。函数M(x)为:,算法分析:这是一个数值运算问题。其中M代表要计算的函数值,有两个不同的表达式,根据x的取值决定采用哪一个算式。根据计算机具有逻辑判断的基本功能,用计算机解题的算法如下:,用自然语言描述的算法,9, 将a、b、c和x的值输入到计算机; 判断xa?如果条件成立,执行第步,否则执行第步; 按表达式bx+a2计算出结果存放到M中,然后执行第步; 按表达式a(c-x)+c2计算出结果存放到M中,然后执行第步; 输出M的值; 算法结束。,10,用流程图表示算法,美国国家标准化协会 ANSI(American National Standard Institute) 规定了一些常用的流程图符号,11,用流程图表示算法,输入a,b,a-c,b-a,c-b,开始,输出a,b,结束,例 两数交换,12,结构化程序设计方法,程序设计的基本目标是用算法对问题的原始数据进行处理,从而获得所期望的效果。但这仅仅是程序设计的基本要求。要全面提高程序的质量,提高编程效率,使程序具有良好的可读性、可靠性、可维护性以及良好的结构,编制出好的程序来。,13,程序的三种基本结构,顺序结构,特点: 一个入口,一个出口 顺序执行,S1,S2,a,b,14,程序的三种基本结构,选择结构,功能: 判断条件为真时执行语句,否则跳过,功能: 判断条件为真时执行语句1,否则执行语句2,15,程序的三种基本结构,循环结构,当型循环,直到型循环,16,例: 将求5!的算法用三种基本结构表示,如果需要将最后结果打印出来,可在菱形框的下面加一个输出框。,17,三种基本结构的共同特点,(1)只有一个入口; (2)只有一个出口; (3)结构内的每一部分都有机会被执行到; (4)结构内不存在“死循环”(无终止的循环)。,18,结构化程序设计方法,结构化程序设计方法是公认的面向过程编程应遵循的基本方法和原则。结构化程序设计方法主要包括: 以三种基本的程序控制结构的组合来编制程序,从而使程序具有良好的结构; 程序设计自顶而下; 用结构化程序设计流程图表示算法。,19,4.2 C语言的语句,语句是组成C源程序的基本单位),20,形式二: 格式: if (expression) 语句组1; else 语句组2; 执行过程:,if语句的三种形式 形式一: 格式: if (expression) 语句组1; 执行过程:,例:if (xy) printf(“%d”,x);,例: if (xy) max=x; else max=y;,(1)if语句中的“表达式”必须用“(”和“)”括起来。 (2)else子句是if语句的一部分,必须与if配对使用,不能单独使用。 (3)当if和else下面的语句组,仅由一条语句构成时,也可不使用复合语句形式(即去掉花括号)。,例:if (xy) printf(“最大值为:”); printf(“%dn”,x); else printf(“最大值为:”); printf(“%dn”,y); ,4.3 if 语句,21,#include main() int x,y; printf(“Enter an integer:“); scanf(“%d“, ,例4-7 求一个数的绝对值,运行:Enter an integer:-12 integer:-12-absolute value :12,运行:Enter an integer:12 integer:12-absolute value :12,22,#include main() int a,b; printf(“Enter integer a:“); scanf(“%d“, ,例 2 输入两个整数并判断两数相等否,运行:Enter integer a:12 Enter integer b:12 a=b,运行:Enter integer a:12 Enter integer b:9 a!=b,23,(1)if语句允许嵌套: 所谓if语句的嵌套是指,在“语句组1”或 “语句组2”中又包含有if语句的情况。 (2)if语句嵌套时,else子句与if的 匹配原则:与在它上面、距它最近、且尚未匹配的if配对。书写时注意形成层次; (3)为明确匹配关系,避免匹配错误, 强烈建议:将内嵌的if语句,一律用花括号括起来。,形式三: 格式: if (expr1) 语句组1; else if( expr2) 语句组2; else if( expr3) 语句组3; else 语句组n; 执行过程:,24,else总是和它上面离它最近的未配对的if配对,例:if (salary1000) index=0.4; else if (salary800) index=0.3; else if (salary600) index=0.2; else if (salary400) index=0.1; else index=0;,if else 配对原则,例:if (salary1000) index=0.4; else if (salary800) index=0.3; else if (salary600) index=0.2; else if (salary400) index=0.1; else index=0;,25,例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,实现if else 正确配对方法:加 ,输入a=1, b=1, c=3 结果输出为: a!=b,26,如:if(a=b,说明: if后面的表达式类型任意 if . else相匹配,例 考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”, ,Compile Error!,例 考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”, ,27,if语句嵌套: 一般形式:,28,#include main() char c; printf(“Enter a character:“); c = getchar(); if(c = 0 ,例4-8 判断输入字符种类,运行:Enter a character: The character is a control character,运行:Enter a character:8 The character is a digit,运行: Enter a character: D The character is a capital letter,运行: Enter a character: h The character is a lower letter,运行: Enter a character:F1 The character is other character,29,例4-9 考虑下面程序输出结果: main() int x = 100, a= 10, b = 20; int v1 = 5, v2 = 0; if(a b) if(b != 15) if(!v1) x = 1; else if(v2) x = 10; x = -1; printf(“%d”,x); ,结果:-1,x = -1;,30,例4-10 闰年判断算法 /*功能:说明if语句的嵌套格式和用法。*/ #include void main() int year,leap; printf(“Please input the year:“); scanf(“%d“, ,31,利用逻辑运算能描述复杂条件的特点,可将上述程序优化如下: include void main() int year; printf(“Please input the year:“); scanf(“%d“, ,32,课堂练习,1阅读下列程序,回答问题: #include void main() int a,b,m,n; scanf(“%d, %d”, ,问: (1)当输入为:1,2时, 程序的运行结果是什么? (2)当输入为:1,0时, 程序的运行结果是什么?,答: (1)当输入为:1,2时, m=1 n=2 (2)当输入为:1,0时, m=2 n=3,33,switch( 表达式) case E1: 语句组 1; case E2: 语句组 2; . case En: 语句组 n; default: 语句组 ; ,执行过程:,switch( 表达式) case E1: 语句组 1; break; case E2: 语句组 2; break; . case En: 语句组 n; break; default: 语句组 ; break; ,4.4 switch语句,34,说明: E1,E2,En是常量表达式,且值必须互不相同 case后可包含多个可执行语句,且不必加 多个case可共用一组执行语句 语句标号作用,必须用break跳出 如果无break,找到入口后,将继续执行下去,不再进行判断;,如: case A: case B: case C: printf(“score60n”); break; ,如: case A: printf(“score90n”); printf(“good!n”); case B: case C: printf(“score60n”); ,35,例4-11 switch(score) case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); ,运行结果:score为5时,输出: Very good! Good! Pass! Fail! data error!,例4-11 switch(score) case 5: printf(“Very good!”); break; case 4: printf(“Good!”); break; case 3: printf(“Pass!”); break; case 2: printf(“Fail!”); break; default : printf(“data error!”); ,运行结果:score为5时,输出: Very good!,36,例4-12 void main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=%d,b=%d”,a,b); ,运行结果:a=2,b=1,37,案例4.4.1 求一元二次方程ax2+bx+c=0的解(a0)。 /*功能:求一元二次方程的解。*/ #include “math.h“ main() float a,b,c,disc,x1,x2,p,q; scanf(“%f,%f,%f”, ,浮点数=1e-6,就认为近似=0,4.4 选择型程序设计举例,38,else p=-b/(2*a); /*求出两个共轭复根*/ q=sqrt(fabs(disc)/(2*a); printf(“x1=%7.2f + %7.2f i n“, p, q); /*输出两个共轭复根*/ printf(”x2=%7.2f - %7.2f i n“, p, q); 虚数输出:p+q i p-q i ,其中这个i是个虚数代表符号,要原样输出,例如:2+3i, 2-3i 说明:由于实数在计算机中存储时,经常会有一些微小误差,所以本案例判断disc是否为0的方法是:判断disc的绝对值是否小于一个很小的数(例如10-6)。,39,案例4.4.2 从键盘上输入一个百分制成绩score,按下列原则输出其等级:score90,等级为A;80score90,等级为B;70score80,等级为C;60score70,等级为D;score60,等级为E。 main() int score, grade; printf(“Input a score(0100): ”); scanf(“%d”, ,目的:考察数值的十位数是多少?,40,case 8: printf(“grade=Bn“); break; case 7: printf(“grade=Cn“); break; case 6: printf(“grade=Dn“); break; case 5: case 4: case 3: case 2: case 1: case 0: printf(“grade=En”); break; default: printf(“The score is out of range!n”); 程序运行情况如下: Input a score(0100): 85 grade=B,41,良好的源程序书写风格注释,必要的注释,可有效地提高程序的可读性,从而提高程序的可维护性。 在语言源程序中,注释可分为三种情况: (

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论