C语言4分支结构课件.ppt_第1页
C语言4分支结构课件.ppt_第2页
C语言4分支结构课件.ppt_第3页
C语言4分支结构课件.ppt_第4页
C语言4分支结构课件.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1,第 4 章 选择型程序设计,2,4.1 程序的灵魂算法,算法(algorithm):计算机求解某一问题而采用的具体方法、步骤。 两大类计算机算法:数值运算算法、 非数值运算算法 (求数值解、成熟)(事务管理、广泛) 算法特征: 1有穷性 2确定性 3输入 4输出 5有效性,著名计算机科学家沃思(Nikiklaus Wirth) 公式: 数据结构 算法 程序,算法的概念,3,(1)带序号的自然语言描述 (易懂但不直观,不严格),(3)N-S图(盒图):完全去掉了带箭头的流程线,算法的所有处理步骤 都写在一个大矩形框里(描述简单,符合结构化的思想),(4)伪代码:用介于自然语言和计算机语言之间的文字及符号来描述算法 (方便、易懂、便于向计算机语言过渡),A,算法的表示,B,4,例41 求12345 分析:122;236;6424;245120 设置p为被乘数,存放结果; i为乘数,存放每个数据;,S1:使p=1; S2:使i=1; S3:pip; S4:i+1=i S5:若i=5,执行S3; 否则算法结束。,语言描述: 首先设置两个变量并对其初始化,其中p为 结果变量,赋初值为1;i为数据变量,赋初值为1; 计算pi,将结果放入p中,p代表前i项连乘积; 然后使i在原来基础上加1;对i进行判断,如果i=5, 则继续进行累乘运算,即返回S3,否则,停止。 即算法结束。,算法的自然语言描述,5,例42 有50个学生,要求将他们之中成绩在80分以上者打印出来。 分析:逐一将每个同学的成绩与80分进行比较,符合条件即打印。设:n表示学生学号,n1表示第一个学生学号;ni表示第i个学生学号;g表示学生成绩,g1表示第一个学生成绩,gi表示第i个学生成绩,使用gi与80进行判断。,S1:1=i; S2:若gi=80,则打印ni和gi,否则不打印; S3:i+1=i; S4:若i=50,执行S2; 否则算法结束。,算法的自然语言描述,6,算法的流程图描述,7,例43 求12345,开始,0=p,1=n,P+n=p,n+1=n,n=5,结束,Y,N,S1:使p=0; S2:使n=1; S3:使p=p+n; p为前面数据相加和; S4:使n的值加1; S5:如果n小于等于5,执行S3; 否则算法结束。,算法的流程图描述,8,例44 有50个学生,要求将他们之中成绩在80分以上者打印出来。,S1:1=i; S2:输入ni,gi; S2:若gi=80,则打印ni和gi,否则不打印; S3:i+1=i; S4:若i=50,执行S2; 否则算法结束。,ni, gi为第i个学生 的学号和成绩,算法的流程图描述,9,N-S图(盒图):完全去掉了带箭头的流程线,算法的所有 处理步骤,都写在一个大矩形框里,A,算法的N-S图描述,B,10,伪代码:用介于自然语言和计算机语言之间的文字及符号来描述算法 (方便、易懂、便于向计算机语言过渡),基本结构: begin 初始化; 执行语句1; 执行语句n; end 可以写文字,也可以写简易代码,算法的伪代码描述,11,4.2 C语言的语句,12,形式二: 格式: 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 语句,13,#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,14,#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,15,(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; 执行过程:,16,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;,17,例: 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,18,如:if(a=b,说明: if后面的表达式类型任意 if . else相匹配,例 考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”, ,Compile Error!,例 考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”, ,19,if语句嵌套: 一般形式:,20,#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,21,例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,22,课堂练习,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,23,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语句,24,说明: 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”); ,25,例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!,26,例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,27,案例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 选择型程序设计举例,28,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)。,29,案例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”, ,目的:考察数值的十位数是多少?,30,case 8: printf(“grade=Bn“); break; case 7: printf(“grade=Cn“); break; case 6: printf(“grade=Dn“); break; case 5: case 4: c

温馨提示

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

评论

0/150

提交评论