二级必过法宝之chap4分支语句

上传人:tia****nde 文档编号:70771604 上传时间:2019-01-18 格式:PPT 页数:47 大小:774.31KB
返回 下载 相关 举报
二级必过法宝之chap4分支语句_第1页
第1页 / 共47页
二级必过法宝之chap4分支语句_第2页
第2页 / 共47页
二级必过法宝之chap4分支语句_第3页
第3页 / 共47页
二级必过法宝之chap4分支语句_第4页
第4页 / 共47页
二级必过法宝之chap4分支语句_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《二级必过法宝之chap4分支语句》由会员分享,可在线阅读,更多相关《二级必过法宝之chap4分支语句(47页珍藏版)》请在金锄头文库上搜索。

1、02:51,第1页,第四章 分支语句, 4.1 if 结构, 4.2 Switch语句, 4.3 程序范例,02:51,第2页,问题:判断数字的奇偶性,要求输入1个整数,判断该数是奇数还是偶数。,number % 2 = 0,02:51,第3页, 4.1 if 结构,顺序结构的程序只能以顺序的方式处理数据 ,但实际问题要求计算机能够对问题进行判断,根据判断的结果,选择不同的处理方式,这就要求程序本身具有判断和选择能力,分支结构正是为解决这类问题而设定的。 C语言用于实现分支有if结构和switch结构。, 4.1.1 if语句 if结构是一种常用的分支结构,是最简单的一种单分支结构 。,02:

2、51,第4页,一般形式为:,if() ,:一般为关系表达式或逻辑表达式。 功能:先判断的逻辑值,若该逻辑值为“真”,则执行,否则,什么也不执行。 注意:if语句中的一般情况下都是以复合语句的形式出现,即用一对花括号将语句括起来。 if结构的流程图 :,02:51,第5页,【例4-1】 从键盘任意输入两个实数,然后按其代数值从小到大输出这两个数。,先制定算法的流程图,如图所示,虚线框为if结构。,根据流程图可以很方便地写出解决这个问题的程序,02:51,第6页,/*exam4_1.c 按升序输出两个数*/ #include main() float a,b,t; scanf(“%f,%f“, ,

3、02:51,第7页,【例4-2】:从键盘输入一个整数,求该数的绝对值。 该问题算法 的流程图 :,02:51,第8页,根据流程图写出的程序如下: /*exam4_2.c 求整数的绝对值*/ #include main() int num; scanf(“%d“, ,02:51,第9页, 4.1.2 if_else语句,if_else语句是一种双分支结构,其一般形式为: if() else ,:一般为关系表达式或逻辑表达式。 功能是:先判断的值,若其值为“真”,则执行,否则执行。,if_else结构的流程图 :,02:51,第10页,例-判断数字的奇偶性,#include int main(vo

4、id) int number; printf(“Enter a number: “); scanf(“%d“, ,Enter a number: 329 Tne number is odd.,Enter a number: 1028 Tne number is even.,02:51,第11页,条件的表示,例3-2 写出满足下列条件的C表达式。 ch 是空格或者回车。 ch = | ch = n number是偶数。 number % 2 = 0 year 是闰年,即 year 能被 4 整除但不能被 100 整除,或 year 能被 400 整除。 (year % 4 = 0 & year

5、% 100 != 0) | (year % 400 = 0),02:51,第12页,【例4-3】 设计一个猜数游戏,由计算机产生一个随机数magic,从键盘输入一个数guess,若输入的数guess的大小等于随机数magic,则输出“You are right!”。否则,输出“You are wrong!”。,02:51,第13页,根据流程图可写出程序如下:,/*exam4_3.c 猜数游戏的程序*/ #include #include main() int guess,magic; magic = rand(); scanf(“%d“, ,02:51,第14页,二分支结构和基本的 if 语句

6、,if (表达式) 语句1 else 语句2,if (表达式) 语句1,02:51,第15页, 4.1.3 if语句的嵌套,if语句的嵌套 :是指在if或else的分支下又可以包含另一个if语句或if_else语句,嵌套的形式有规则嵌套和任意嵌套两种。,if语句的规则嵌套形式如下:,if() else if() else if () else if () else ,02:51,第16页,if (表达式1) 语句1 else if(表达式2) 语句2 else if(表达式n-1) 语句n-1 else 语句n,if 语句规则嵌套,n个分支需要n-1次比较,02:51,第17页,【例4-4】

7、从键盘输入+、-、*、/中的任一个,输出对应的英文单词:plus 、minus、mutiply、divide,若输入的不是这四个字符中的任一个,则输出“error”。,算法的流程图如图所示,虚线框所示为if_else的规则嵌套:,02:51,第18页,#include main() char ch; ch=getchar(); if (ch=+) printf(“plusn“); else if (ch=-) printf(“minusn“); else if(ch=*) printf(“multiplyn“); else if (ch=/) printf(“dividen“); else p

8、rintf(“errorn“); ,02:51,第19页,if else任意嵌套,if(表达式1) if(表达式2) 语句1 else 语句2 else if(表达式3) 语句3 else 语句4,02:51,第20页,注意:if与else的匹配关系,else总是与离它最近的上一个if配对。将每一对if_else 结构采用缩进对齐方式,可以增加程序的可读性,良好的程序书写风格有助于对程序的理解。,【例4-5】 计算阶跃函数y的值:,02:51,第21页,算法的流程图如图,两个虚线框均为if_else结构。,02:51,第22页,根据流程图写出的程序如下:,/*exam4_5.c 计算阶跃函数y

9、的值*/ #include main( ) float x,y; printf(“input x:n“); scanf(“%f“, ,对多重if,最容易犯的错误是if与else配对错误, else总是与离它最近的上一个还没有配对的if配对。,02:51,第23页,if (x 0) y = -1; else if (x =0) y = 0; else y = 1;,if (x =0 ) if (x 0) y = 1; else y = 0; else y = -1;,2种嵌套if语句的比较,02:51,第24页, 4.2 Switch结构,当嵌套if分支较多时,程序变得复杂冗长,可读性降低。C语

10、言提供了switch开关语句专门处理多路分支的情形,使程序变得简洁。, 4.2.1 switch语句 switch语句的一般形式为:,switch() case:语句序列1; case:语句序列2; case:语句序列n; default: 语句序列(n+1); ,02:51,第25页,常量表达式: 值必须是整型、字符型或者枚举类型 语句序列: 允许有多条语句 : 可以为任何表达式,功能:,先计算的值,再从上到下地判断与哪一个的值相等,如果的值等于的值,则从语句序列i开始执行,直到语句序列(n+1)为止;若的值不等于任何一个的值,是执行default后面的语句序列(n+1)。,02:51,第2

11、6页,switch语句一般形式的流程图:,?,02:51,第27页,【例4-6】根据下面表所示的天气情况,决定活动的场所。,分别用整数0、1、2和3代表下雨、下雪、晴天和有风无雨天气。采用switch语句的一般形式.,02:51,第28页,例46 switch语句一般形式的流程图,02:51,第29页,根据图所示的流程图写出的程序如下所示:,/*exam4_6.c 根据天气情况决定活动场所*/ #include main( ) int weather; scanf(“%d“, ,02:51,第30页,程序运行结果: 输入:2 输出:fine-at hill wind-to outskirt o

12、ther-at home,发现,如果输入的天气值为0,即天气情况为下雨,则活动场所为所有地方,显然这是与题意不相符合的,程序是错误的。 解决这个问题必须要用到分支语句:break。,02:51,第31页,4.2.2 break语句在switch语句中的作用,如果是一个条件对应着一组独立的操作,那么在switch语句的一般形式中,每一个完成后都要加上一条分支语句:break;,switch条件分支互相独立的形式:,switch () case : ; break; case : ; break; case :; break; case : ; break; default: ; ,02:51,第

13、32页,Switch结构实现了完全地独立分支功能:,先计算的值,再从上到下地判断与哪一个的值相等,如果的值等于i的值,则执行i,执行完后,跳出switch结构,执行switch结构外的下一条语句.,02:51,第33页,【例4-7】将例46改写成具有独立分支的switch结构。,#include main( ) int weather; scanf(“%d“, ,程序运行时,任何一种天气情况都只会对应出现一种运动场所.,02:51,第34页,【例4-8】从键盘输入一个字符,判断其是否为a(可代表abort)或r(可代表retry)或f(可代表fail),并输出相应信息。(输入时不区分大小写)。

14、,采用switch 结构,其算法流程图如图 :,02:51,第35页,/*exam4_8.c 字符输入判断*/ #include main( ) char ch; printf(“Abort,Retry,Fail?n“); ch=getchar();/*字符输入*/ switch (ch) case a: case A:printf (“nAbortn“); break; /*退出switch结构*/ case r: case R:printf (“nRetryn“); break; case f: case F:printf (“nFailn“); break; default: print

15、f (“nerrorn“); ,02:51,第36页, 4.3 程序范例,【例4-9】求解任意的一元二次方程ax2+bx+c=0的根,a、b、c的值由键盘输入。,分析:对系数a、b、c考虑以下情形 1)a=0: 方程无解 2)a0; b2-4ac0,有两个不等的实根; b2-4ac=0,有两个相等的实根; b2-4ac0,有两个共轭复根。,采用嵌套的if结构,考虑算法流程图 ?,02:51,第37页,/*exam4_9.c 求一元二次方程的根*/ #include #include main() float a,b,c,s,x1,x2; double t; /* 变量定义*/ printf(“

16、please input a,b,c:n“); scanf(“%f%f%f”,02:51,第38页,else /* a!=0的情况*/ s=b*b-4*a*c; if(s=0.0) if(s0.0) /* if语句任意嵌套*/ t=sqrt(s); x1=-0.5*(b+t)/a; x2=-0.5*(b-t)/a; printf(“There are two different roots:n%5.2f and%5.2fn“ ,x1,x2); ,02:51,第39页,else /* s=0的情况*/ printf(“There are two equal roots:n%5.2fn“,-0.5*b/a); else /* s0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号