c语言程序设计流程控制语句

上传人:tian****1990 文档编号:75106408 上传时间:2019-01-30 格式:PPT 页数:66 大小:360.31KB
返回 下载 相关 举报
c语言程序设计流程控制语句_第1页
第1页 / 共66页
c语言程序设计流程控制语句_第2页
第2页 / 共66页
c语言程序设计流程控制语句_第3页
第3页 / 共66页
c语言程序设计流程控制语句_第4页
第4页 / 共66页
c语言程序设计流程控制语句_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《c语言程序设计流程控制语句》由会员分享,可在线阅读,更多相关《c语言程序设计流程控制语句(66页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计,第四章 流程控制语句,实际工作中,顺序结构是不能满足程序设计要 求的,因为大量的实际问题需要通过流程的控制来 解决的。 例如: 如果明天气温高于35c,我将去游泳,否则在家看 看电视。 或我将做作业直到晚上十点。 从程序结构上看,就是通过循环结构和选择结构来 实现的。,if语句的三种形式,4-1 选择结构语句,4.1.1 if语句 程序设计过程中,常常需要根据某一条件是否满足 来判断做或者不做某件事。这种结构在c中是通过if语句 实现的。,if语句的三种形式(1),形式一: If (表达式) 语句 说明:表达式通常为关系表达式或逻辑表达式,两边的 括号必不可少,当语句不止一句的

2、时候,可以使用一组 括号把他们组成复合语句。,例如: If (xy) printf( “%d”, x);,执行过程: 先计算表达式的值,如果表达式 的值为非零,则执行语句;如果 值为零,则跳过if语句执行其后 续语句。,例4.1 一个猜字游戏程序。程序运行时,要求游戏者从键盘输入一个数,如果猜对了,屏幕显示“*Right*”;否则屏幕不显示任何信息。,举例,#include main() int magic=123; int guess; printf(“Enter your guess:“); scanf(“%d“, ,if语句的三种形式(2),形式二: If (表达式) 语句1 else

3、语句2,例如: If (xy) printf “%d”, x); Else printf(“%d”,y);,执行过程: 先计算表达式的值,如果表达式的值为非零,则执行语 句1后跳过语句2而执行后续语句;如果值为零,则跳过 语句1执行语句2。,注意: 1.c语言每条语句必须以分号结束,因此else之前有 一分号,整个语句结束处有一分号。 例: if(ab) printf(“%d”,a); else printf (“%d”,b); 正确 if(ab) printf(“%d”,a) else printf (“%d”,b); 错误 2.语句1与语句2不能同时执行。,例4.2 将例4.1程序中的if

4、语句改成if-else语句,如果游戏者猜对了,就显示”*Right*”,若猜错了,就显示“*Wrong*”。,举例,#include main() int magic=123; int guess; printf(“Enter your guess:“); scanf(“%d“, ,if 语句的三种形式(3),形式三: if (表达式1) 语句1;,else if (表达式2) 语句2;,else if (表达式3) 语句3;, else if (表达式n) 语句序列n;,else 语句序列n+1;,这种形式可以实现多分支选择的功能,既在多种 条件下的不同分支中选择一个分支来执行。 它的执行过

5、程为:若表达式1的值为真(非零), 则执行语句1;否则,若表达式2的值为真,则执行 语句2;.若上述表达式的值都为0时,执行语句 n+1. 以下为流程图:,例如:,if (x0) y=1; else if (x=0) y=0; else y=-1;,例4.3 例4.2再扩充,即当游戏者猜错时,屏幕除显示“*Wrong*”外,还告诉游戏者是猜大了还是猜小了。,举例,#include main() int magic=123; int guess; printf(“Enter your guess:“); scanf(“%d“,说明:,以上三种格式中的表达式一般为关系表达式或逻辑表达式只要表达式的

6、结果不为0,系统就认为该表达式成立;相反表达式的结果为0,系统认为该表达式不成立。 例如:if(a=b 系统对表达式的值进行判断,若为真,按非零处理,执行指定的语句;若为假,按零处理。 如:if (3) printf(“ok.”) 表达式的值为3,按真处理,是合法的,执行结果输出“ok.” 由此可见.在C语言中它也可以是任意的数值表达式。(包括整型,字符型,实型,指针型)。,在每个表达式之后不应有任何标点符号,而在每个语句之后都要有“;” 不要误认为else 语句和if语句是两个语句,else 是if语句的一部分。只能与 if 配对使用。仅 else 本身不能单独作为一个语句使用 每个语句又都

7、可以由若干C语言的语句组成,如果由两个以上语句构成语句序列,则应用大括号括起来构成一个复合语句。括号之外不再加 “;”. 如:if(a+bc 内是一个完整的复合语句,不需另附分号。,例:输入两个实数,按代数值有小到大次序输出这两 个数。,main() float a,b,t; scanf(“%f,%f”, 运行情况如下: 3.6,-3.2 -3.20,3.60,4.1.2 if 语句的嵌套,if语句的三种形式的语句体中可以是任意的c语言语句,包括if语句。如果if的语句体又是if语句,称为嵌套的if语句。内嵌的if语句既可以嵌套在if子句,也可以在else子句中。,例如: if (表达式1)

8、if (表达式2) 语句序列1; else 语句序列2; else if (表达式3) 语句序列3; else 语句序列4;,例如:求a,b,c三个数中最大值,if (a=b) if (a=c) max=a; else max=c; else if (b=c) max=b; else max=c;,二义性:,if (表达式1) if (表达式2) 语句序列2; else 语句序列3;,应如何理解?,有两种理解方式:,if (表达式1) if (表达式2) 语句序列2; else 语句序列3;,if (表达式1) if (表达式2) 语句序列2; else 语句序列3;,语言规定:else总是与

9、它前面最近的且未曾配对的if配对。,if (表达式1) if (表达式2) 语句序列2; else 语句序列3; ,if (表达式1) if (表达式2) 语句序列2; else 语句序列3;,举例,用嵌套if结构代替例4.3中的 if-else-if结构。,#include main() int magic=123; int guess; printf(“Enter your guess:”); scanf(“%d”, ,4.1.3. 条件运算符 若if语句中,在表达式为真和假时,且都只执行一个赋值语句给同一个变量赋值时,可以用条件运算符来处理。 条件运算符 ? : 条件表达式 exp1?e

10、xp2:exp3 exp1、exp2和exp3都是表达式,其功能是:先计算exp1,若exp10,则计算exp2,将exp2的值作为整个条件表达式的值;若exp1=0,则计算exp3,将exp3的值作为整个条件表达式的值。 如:if(ab) c=a;else c=b; 可以改写为:c=(ab)?a:b 表示:若ab,取a的值,否则取b的值作为该条件表达式的值。,说明: 1.条件运算符要求有三个操作对象。 2.条件运算符优先于赋值运算符,因此上面赋值表达 式的求解过程是先求解条件表达式,再将它的值赋给 c. 条件运算符的优先级别比关系运算符和算术运算符都 低 max=(ab)?a:b 括号可以不

11、要: max=ab?a:b 如果有:ab?a:b+1 相当于:ab?a:(b+1),3.条件运算符的结合方向为“自右向左”,若有: ab?a:cd?c:d 相当 于: ab?a:(cd?c:d) 若:a=1,b=2,c=3,d=4 则条件表达式值为4。 4.条件表达式不能取代一般的if语句,只有if语句中内 嵌的的语句为赋值语句(且两个分支都给同一个变量 赋值)时才能代替if语句。 如: if(ab) printf(“%d”,a); else printf(“%d”,a); 无法用条件表达式代替 但可以用下面语句代替: printf(“%d”,ab?a:b); /将条件表达式的值输出/,5.条

12、件表达式中,表达式1的类型可以与表达式2 和表达式3不同。如: x? a : b x是整形变量,若x=0,则条件表达式的值为b 表达式2和表达式3的类型也可以不同。此时条件 表达式的值的类型为二者中较高的类型。如: xy?1:1.5 如果xy,则表达式的值为1.5。若xy,值应为1, 由于1.5是实型比整型高,因此应转换为1.0,用条件表达式代替例4.3中的if-else。,举例,#include main() int magic=123; int guess; printf(“ Enter your guess: ”); scanf(“ %d ”, ,4.1.4 switch /break语

13、句,多分支switch 结构 switch (表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default : 语句n+1 ,语句n+1,if-else-if结构或嵌套的if语句可以解决多分支的选择问题, 但若判断条件太多,关系就不够清晰,switch可解决。,说明: 1.switch后面括弧内的“表达式”和case常量表达式,可 以是任何类型。 2.当表达式的值与某一个case后面的常量表达式的值相 等时,就执行此case后面的语句,若所有的case中的常 量表达式的值都没有与表达式的值匹配的,就执行 default后面的语句。 3

14、.每一个case的常量表达式的值必须不相等,否则就会 出现矛盾的现象(对表达式的同一个值,有多种执行 方案),【例】 从键盘输入不同的字母,显示不同的国家名称。 #include main() char ch; ch=getchar(); switch(ch) case a: printf(“American”); case b: printf(“Britainn”); case c: printf(“Chinan”); case d: printf(“Denmarkn”); default: printf(“Japann”); ,4.执行完一个case后面的语句后,流程控制转移到下一个 ca

15、se继续执行。 “case常量表达式”只是起语句标号的作 用,并不在该处进行条件判断。,注意,case及default的位置直接影响到程序 的运行结果。,#include main() char ch; ch=getchar(); switch(ch) default: printf(“Japann”); case a: printf(“American”); case b: printf(“Britainn”); case c: printf(“Chinan”); case d: printf(“Denmarkn”); ,程序运行时, 从键盘输入字母“a”,显示: America Brita

16、i China Denmark Japan,如果输入字母“b”,显示:“Japan”。 Britain China Denmark Japan,如果输入a、b、c、d以外的字母,显示: Japan,5.case后面虽然包括一个以上语句,但可以不必用花 括弧括起来,会自动顺序执行本case后所有的语句。 7.多个case可以共用一组执行语句。如: . . . case A: case B: case C: printf(“60n”);break; . . . 值为A,B,或C时都执行同一组语句。,2. break语句 break与switch联用,强迫控制立即退出 switch 防止从一个case下落到另一个case中 防止因case和defau

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

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

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