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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常量表达式1
表达式
常量表达式n
其它
常量表达式2
语句1
语句2

语句n
语句n+1
说明: 1.switch后面括弧内的“表达式”和case常量表达式,可 以是任何类型。 2.当表达式的值与某一个case后面的常量表达式的值相 等时,就执行此case后面的语句,若所有的case中的常 量表达式的值都没有与表达式的值匹配的,就执行 default后面的语句。 3.每一个case的常量表达式的值必须不相等,否则就会 出现矛盾的现象(对表达式的同一个值,有多种执行 方案)
5.条件表达式中,表达式1的类型可以与表达式2 和表达式3不同。如: x? ‘a’ : ‘b’ x是整形变量,若x=0,则条件表达式的值为‘b’ 表达式2和表达式3的类型也可以不同。此时条件 表达式的值的类型为二者中较高的类型。如: x>y?1:1.5 如果x≤y,则表达式的值为1.5。若x>y,值应为1, 由于1.5是实型比整型高,因此应转换为1.0
2.语句1与语句2不能同时执行。
举例
例4.2 将例4.1程序中的if语句改成 if-else语句,如果游戏者猜对了,就 显示”**Right**”,若猜错了,就显 示“**Wrong**”。
#include <stdio.h>
main() { int magic=123;
int guess;
printf("Enter your guess:");
4.1.1 if语句
程序设计过程中,常常需要根据某一条件是否满足 来判断做或者不做某件事。这种结构在c中是通过if语句 实现的。
if语句的三种形式
if语句的三种形式(1)
形式一:
If (表达式) 语句
说明:表达式通常为关系表达式或逻辑表达式,两边的 括号必不可少,当语句不止一句的时候,可以使用一组 括号把他们组成复合语句。
else 语句序列2;
内 嵌
else
if (表达式3) 语句序列3; else 语句序列4;
内 嵌
if (a>=b) if (a>=c) max=a; else max=c; else if (b>=c) max=b; else max=c;
if
if
二义性: if (表达式1) if (表达式2) 语句序列2; else 语句序列3; 有两种理解方式:
形式二: If (表达式) 语句1 else 语句2 例如: If (x>y) printf “%d”, x); Else printf(“%d”,y);
执行过程:
先计算表达式的值,如果表达式的值为非零,则执行语 句1后跳过语句2而执行后续语句;如果值为零,则跳过 语句1执行语句2。
真(非0)
表达式成立吗?
应如何理解?
if (表达式1) if (表达式1) if (表达式2) 语句序列2; if (表达式2) 语句序列2; else else 语句序列3; 语句序列3; C语言规定:else总是与它前面最近的且未曾配对的if配对。 if (表达式1) if (表达式1) { if (表达式2) 语句序列2; { if (表达式2) 语句序列2;} else 语句序列3; else } 语句序列3;
假(0)
语句序列1
语句序列2
注意:
1.c语言每条语句必须以分号结束,因此else之前有 一分号,整个语句结束处有一分号。 例: if(a>b) printf(“%d”,a); else printf (“%d”,b); 正确 if(a>b) printf(“%d”,a) else printf (“%d”,b); 错误
if语句的一部分。只能与 if 配对使用。仅 else 本身不能 单独作为一个语句使用
每个语句又都可以由若干C语言的语句组成,如果
例:输入两个实数,按代数值有小到大次序输出这两 个数。
main() { float a,b,t; scanf(“%f,%f”,&a,&b); if(a>b) {t=a;a=b;b=t;} printf(“%5.2f, %5.2f”,a,b); } 运行情况如下: 3.6,-3.2<回车> -3.20,3.60
#include <stdio.h> main() {int magic=123; int guess; printf("Enter your guess:"); scanf("%d",&guess); if (guess==magic) printf("**Right**\n"); else if(guess>magic) printf("**Wrong**\nToo high**\n") else printf("**Wrong**\nToo low**\n");}
说明:
以上三种格式中的表达式一般为关系表达式或逻辑表达式只要
表达式的结果不为0,系统就认为该表达式成立;相反表达式 的结果为0,系统认为该表达式不成立。 printf(“a=b,x=y”); 例如:if(a==b&&x==y)
系统对表达式的值进行判断,若为真,按非零处理,执行指定的 语句;若为假,按零处理。
#include <stdio.h> main()
{ int magic=123;
int guess; printf(“Enter your guess:"); scanf(“%d",&guess);
if (guess==magic)
printf(“**Right**\n");
}
if语句的三种形式(2)
说明:
1.条件运算符要求有三个操作对象。 2.条件运算符优先于赋值运算符,因此上面赋值表达 式的求解过程是先求解条件表达式,再将它的值赋给 c. 条件运算符的优先级别比关系运算符和算术运算符都 低 max=(a>b)?a:b 括号可以不要: max=a>b?a:b 如果有:a>b?a:b+1 相当于:a>b?a:(b+1)
举例
•用条件表达式代替例4.3中的if-else。
#include <stdio.h> main() { int magic=123; int guess; printf(“ Enter your guess: ”); scanf(“ %d ”,&guess); if (guess==magic) printf(“ **Right**\n ”); else { printf(“ **Wrong** ”); guess>magic?printf(“ Too high\n ”) :printf(“Too low\n”);} }
这种形式可以实现多分支选择的功能,既在多种 条件下的不同分支中选择一个分支来执行。 它的执行过程为:若表达式1的值为真(非零), 则执行语句1;否则,若表达式2的值为真,则执行 语句2;…….若上述表达式的值都为0时,执行语句 n+1. 以下为流程图:
表达式1 成立吗?
假(0) 假(0)
表达式3 成立吗?
由两个以上语句构成语句序列,则应用大括号括起来 构成一个复合语句。括号之外不再加 “;”. 如:if(a+b>c&&b+c>a&&c+a>b) {s=0.5*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“area==%6.2f”,area);} else printf(“it is wrong”); {}内是一个完整的复合语句,不需另附分号。
C语言程序设计
第四章 流程控制语句
实际工作中,顺序结构是不能满足程序设计要 求的,因为大量的实际问题需要通过流程的控制来 解决的。 例如: 如果明天气温高于35c,,我将去游泳,否则在家看 看电视。 或我将做作业直到晚上十点。 从程序结构上看,就是通过循环结构和选择结构来 实现的。
§4-1 选择结构语句
3.条件运算符的结合方向为“自右向左”,若有: a>b?a:c>d?c:d 相当 于: a>b?a:(c>d?c:d) 若:a=1,b=2,c=3,d=4 则条件表达式值为4。 4.条件表达式不能取代一般的if语句,只有if语句中内 嵌的的语句为赋值语句(且两个分支都给同一个变量 赋值)时才能代替if语句。 如: if(a>b) printf(“%d”,a); else printf(“%d”,a); 无法用条件表达式代替 但可以用下面语句代替: printf(“%d”,a>b?a:b); /将条件表达式的值输出/
4.1.3. 条件运算符
若if语句中,在表达式为真和假时,且都只执行一个赋 值语句给同一个变量赋值时,可以用条件运算符来处 理。 条件运算符 ? : 条件表达式 exp1?exp2:exp3 exp1、exp2和exp3都是表达式,其功能是:先计算 exp1,若exp1≠0,则计算exp2,将exp2的值作为整个 条件表达式的值;若exp1=0,则计算exp3,将exp3的 值作为整个条件表达式的值。 如:if(a>b) c=a;else c=b; 可以改写为:c=(a>b)?a:b 表示:若a>b,取a的值,否则取b的值作为该条件表达式 的值。
4.1.2 if 语句的嵌套
if语句的三种形式的语句体中可以是任意的c语言语句, 包括if语句。如果if的语句体又是if语句,称为嵌套的if 语句。内嵌的if语句既可以嵌套在if子句,也可以在else 子句中。
例如: if (表达式1) if (表达式2) 例如:求a,b,c三个数中最大值
语句序列1;
例如: If (x>y) printf( “%d”, x);
流程图 执行过程:
先计算表达式的值,如果表达式 的值为真 语句 否 否
举例
例4.1 一个猜字游戏程序。程序运行时, 要求游戏者从键盘输入一个数,如果猜 对了,屏幕显示“**Right**”;否则屏 幕不显示任何信息。
如:if (3) printf(“ok.”) 表达式的值为3,按真处理,是合法的,执行结果输出“ok.” 由此可见.在C语言中它也可以是任意的数值表达式。(包括整型, 字符型,实型,指针型)。
在每个表达式之后不应有任何标点符号,而在每个 语句之后都要有“;” 不要误认为else 语句和if语句是两个语句,else 是
§4.1.4 switch /break语句
if-else-if结构或嵌套的if语句可以解决多分支的选择问题, 但若判断条件太多,关系就不够清晰,switch可解决。
多分支switch 结构
switch (表达式) { case 常量表达式1:语句1 case 常量表达式2:语句2 …… case 常量表达式n:语句n default : 语句n+1 }
scanf("%d",&guess);
if (guess==magic) printf("**Right**\n"); else printf("**Wrong**\n");
}
if 语句的三种形式(3)
形式三: if (表达式1) 语句1;
else if (表达式2) 语句2; else if (表达式3) 语句3; …….. else if (表达式n) 语句序列n; else 语句序列n+1;
表达式2 成立吗?
例如: if (x>0) y=1; else if (x==0) y=0; else y=-1;
真(非0)
真(非0)
假(0) …

表达 式 n成 立吗?
假(0)
真(非0)
语句序列1 语句序列2 语句序列3 真(非0)
语句序 列n+1
语句序列n
举例
例4.3 例4.2再扩充,即当游戏者猜错时,屏 幕除显示“**Wrong**”外,还告诉游戏者是猜 大了还是猜小了。
举例
用嵌套if结构代替例4.3中的 if-else-if结构。
#include <stdio.h> main() { int magic=123; int guess; printf(“Enter your guess:”); scanf(“%d”,&guess); if (guess==magic) printf(“**Right**\n”); else { printf(“**Wrong**”); if (guess>magic) printf(“Too high**\n”); else printf(“Too low**\n”);} }
相关文档
最新文档