资源预览内容
第1页 / 共104页
第2页 / 共104页
第3页 / 共104页
第4页 / 共104页
第5页 / 共104页
第6页 / 共104页
第7页 / 共104页
第8页 / 共104页
第9页 / 共104页
第10页 / 共104页
亲,该文档总共104页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1,第四章 语句与程序控制结构,4.1 语句总述 4.2 顺序结构 4.3 选择结构 4.4 循环结构 4.5 程序举例,2,4.2 顺序结构程序举例 3,4,6 例1:输入三角形的三边长,求三角形的面积。 公式: #include ”math.h” main( ) float a, b, c, area, s; printf(”Enter a, b, c:”); scanf(”%f,%f,%f”, ,3,例2:将一个三位整数的各位数符分离出来,并转 换为数字字符倒序输出。 main( ) int num; char c1, c2, c3; printf(”Enter a data(100999):”); scanf(”%d”, ,4,例3:定期存款一年期利率2.3%,三年期年利率 3.2%,今有本金1万元,按一年期连续存三年和按三年期存入,各得多少利息? (按一年期再存时本息一并存) 设:d为本金,p为利率 一年期利息公式: 第一年本息:d+dp= d(1+p) 第一年本息:d(1+p)+ d(1+p)p= d(1+p)2 三年利息:d(1+p)3d 三年期利息公式:dp3,5,源程序: #include “math.h“ #define P1 2.3/100 #define P3 3.2/100 main( ) float x1, x3, d; scanf(“%f“, ,6,4. 3.1 if 语句 (分支控制语句) 1. if 语句的 三种形式 单路分支:条件成立执行操作,不成立什么也不做; 双路分支:条件成立执行A操作,不成立执行B操作; 嵌套分支:条件成立执行A操作,不成立时还需要进 一步进行分支判断。,4.3 选择结构,7,第一种形式单路分支 if (表达式) 语句 内嵌语句;可是一条语句、复 合语句、空语句。描述了条件 成立时要执行的操作。 可是任何形式的表达式;通常是关系或 逻辑表达式。描述了分支控制条件。,8,执行流程: 首先求解表达式,并对其值进行逻辑判断;非 零视为真,执行内嵌语句,之后执行后续语句。 若分支条件不成立,则直接执行后续语句。 对应算法:,P,T F 内嵌 语句,9,例:输入一个整数,为正则输出 main( ) int x; scanf(”%d”, ,10,第二种形式双路分支 if (表达式) 语句1 else 语句2 其中:内嵌语句1是条件成立时所执行的操作; 内嵌语句2是条件不成立时所执行的操作; 执行流程: 首先求解表达式,并对其值进行逻辑判断;为 真,执行内嵌语句1,之后执行后续语句。 若分支条件不成立,则执行内嵌语句2,之后 执行后续语句。,11,对应算法:,P,T F 内嵌 内嵌 语句1 语句2,可分行书写: if (表达式) 语句1 else 语句2,12,例:根据x求y值 y= main( ) float x, y; scanf(”%f”, ,x x0 x2 + 1 x0,13,条件成立与不成立的输出格式、输出项完全一样,因而上例可化简如下: main( ) float x, y; scanf(”%f”, ,14,例:求任意三角形面积,若三边值不能构成三角形时输出表示错误的信息。 #include math.h” main( ) float a, b, c, s, area; printf(”Enter a, b, c:”); scanf(”%f,%f,%f”, ,15,第三种形式阶梯if (不成立时嵌套分支) if ( e1 ) s1 else if ( e2 ) s2 else if ( e3 ) s3 else if ( em ) sm else sn 其中:ei各层的分支条件;si各层的内嵌语句; 执行流程:首先计算并判断e1的值,为真执行s1, 之后退出分支。e1为假则计算并判断e2的值,为真 执行s2, 之后退出分支。依次类推。,e1,e2,T F T F T F s1 s2 s3 s4,e3,16,例:对学生成绩分档; main( ) int g; printf(”Enter score:”); scanf(”%d”, ,80100分 A档 7079分 B档 6069分 C档 059分 D档,17,注意:分支条件的正确性 main( ) int g; printf(”Enter score:”); scanf(”%d”, 57 65 89 D C C,18,上例:用单路分支实现 main( ) int g; printf(”Enter score:”); scanf(”%d”, 多个并列if语句,执行效率不如阶梯 if。,80100分 A档 7079分 B档 6069分 C档 059分 D档,19,2. if 的嵌套 在一个分支结构中,又完整地包含一个或多个分支结构,则构成了分支结构的嵌套。 例:分支条件不成立时需要进一步分支 算法表示: 算法实现: if (e1) s1 else if (e2) s2 else s3,e1,e2,T F T F s1 s2 s3,20,例:分支条件成立与不成立,均要进一步分支 算法表示: 算法实现:,e1 e2 e3,T F T F T F s1 s2 s3 s4,if (e1) if (e2) s1 else s2 else if (e3) s3 else s4,21,例:分支条件不成立时需要若干层进一步的分支 算法表示: 算法实现:,e1,e2,e3,T F T F T F s1 s2 s3 s4,if (e1) s1 else if (e2) s2 else if (e3) s3 else s4,可见:阶梯if是条件不成立时的嵌套结构,22,例:编程,判定某年是否闰年 闰年条件:整百的年份能被400整除; 或非整百的年份能被4整除。 算法表示:,输入year year%100= =0,year%400= =0,year%4= =0,T F T F leap=1 leap=0 leap=1 leap=0,leap= =1,T F,T F,输出“is” 输出“not”,23,程序清单: main( ) int year, leap; scanf(”%d”, ,24,例:根据 x求y值。,3x - 11 (0 x 10) y= 2x + 5 (10 x 20) x (20 x 30),x0&x30 T F,x10 T F,x20 T F,y=x,y= 3x-11,y= 2x+5,输 出 x 无 效,输出 y,输入x,输出X无效,3x-11y,x0&x30,x10,x20,2x+5y,xy,输出y,F,F,F,T,T,T,25,程序清单: main( ) float x, y; printf(”Enter x:”); scanf(”%f”, ,26,方法2:,3x - 11 ( 0 x 10) y= 2x + 5 (10 x 20) x (20 x 30),x=30 T F,输 出 x 无 效,x10 T F,y= 3x-11,y= 2x+5,y=x,x20 T F,输出 y,输入 x,scanf(“%f“, ,27,if语句嵌套的注意事项: 1) 采用缩进格式,可清晰地表示出嵌套层次关系; 2) C编译系统确定if和else的配对原则是: 从最内层else开始识别,将内层else与上面最近 的未曾配对的if配对; 例: 算法实现: if (e1) if (e1) if (e2) s1 if (e2) s1 else s2 else s2,e1 e2,T F T F s1 s2,28,if语句 示例,【例一】以下程序的作用是什么? main( ) char c; printf(“Input :”); scanf(“%c”, ,/*将小写字母转换为大写字母*/,29,if语句 示例,【例二】以下程序的执行结果是什么? main( ) int x=2,y=-1,z=2; if (xy) if (y0) z=0; else z+=1; printf(“%dn”,z); ,/*结果是2*/,哦,原来是因为else 总是与靠近它的if配套,常见错误: if (x0) ; if (x=2) if (10”); y=x-1;,30,4.3.2 switch多分支选择 语句 (多路开关语句) 1. switch的一般形式 switch (表达式) case 常量1: s1 case 常量2: s2 case 常量n: sn default : sn+1 其中:表达式可是任何形式,但其值应为整型; 内嵌语句si可是一条语句、复合或空语句; 常量i可是整、字符、符号常量、常量表达式。,31,2. switch的执行流程 首先求解表达式,然后测试其值与哪个case后 的常量相等,相等则从该case后的语句开始执行, 直到其后的所有内嵌语句执行完毕,退出多分支结 构。 若表达式的值不与任何常量相等,则执行default 后的语句,执行完毕退出分支。,32,switch执行流程图: switch (表达式) case c1: s1 case c2: s2 case cn: sn default : sn+1 ,求解表达式,c1?,c2?,cn?,sn+1,s1,sn,s2,Y,Y,Y,N,N,N,33,求解表达式,c1?,c2?,cn?,sn+1,s1,sn,s2,3. 使用说明 1) 在switch中可以使用b
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号