C语言4分支结构课件.ppt

上传人:本田雅阁 文档编号:3479381 上传时间:2019-09-01 格式:PPT 页数:32 大小:403.02KB
返回 下载 相关 举报
C语言4分支结构课件.ppt_第1页
第1页 / 共32页
C语言4分支结构课件.ppt_第2页
第2页 / 共32页
C语言4分支结构课件.ppt_第3页
第3页 / 共32页
C语言4分支结构课件.ppt_第4页
第4页 / 共32页
C语言4分支结构课件.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《C语言4分支结构课件.ppt》由会员分享,可在线阅读,更多相关《C语言4分支结构课件.ppt(32页珍藏版)》请在三一文库上搜索。

1、1,第 4 章 选择型程序设计,2,4.1 程序的灵魂算法,算法(algorithm):计算机求解某一问题而采用的具体方法、步骤。 两大类计算机算法:数值运算算法、 非数值运算算法 (求数值解、成熟)(事务管理、广泛) 算法特征: 1有穷性 2确定性 3输入 4输出 5有效性,著名计算机科学家沃思(Nikiklaus Wirth) 公式: 数据结构 算法 程序,算法的概念,3,(1)带序号的自然语言描述 (易懂但不直观,不严格),(3)N-S图(盒图):完全去掉了带箭头的流程线,算法的所有处理步骤 都写在一个大矩形框里(描述简单,符合结构化的思想),(4)伪代码:用介于自然语言和计算机语言之间

2、的文字及符号来描述算法 (方便、易懂、便于向计算机语言过渡),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,否则,停止。 即算法结束。,算法的自然语言

3、描述,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;

4、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,伪代码:用介于自然语言和计算机语言之间的文字及符号来

5、描述算法 (方便、易懂、便于向计算机语言过渡),基本结构: 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语句的一部分,必

6、须与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,运

7、行: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语句嵌套时,el

8、se子句与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

9、 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

10、(“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:“);

11、 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 characte

12、r 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时, 程序

13、的运行结果是什么?,答: (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

14、后可包含多个可执行语句,且不必加 多个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!”);

15、 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; def

16、ault : 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)。 /*功能:求一元二次方程的解。*/ #

17、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

18、 说明:由于实数在计算机中存储时,经常会有一些微小误差,所以本案例判断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(“gra

19、de=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,31,课堂练习,根据给出的年份和月份判断天数,并输出。 例如:2003年9月多少天?,32,#include void main() int y, m, d; printf(“please input a year and a month:“); scanf(“%d,%d ”, ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1