第四章 选择结构程序设计
第4章_选择结构程序设计
语句1
语句2
语句3
语句4
2013-5-19
图4-9 多分支选择结构
19
例4.5 :体型判断
按“体指数”对肥胖程度进行划分: 体指数t = w / h2 (体重w单位为公斤,身高h单位为米) – 当t < 18时,为低体重; – 当18 ≤ t < 25时,为正常体重; – 当25 < t < 27时,为超重体重; – 当t ≥ 27时,为肥胖。 编程从键盘输入你的身高h和体重w,根据给定公式计算体指 数t,然后判断你的体重属于何种类型。 用3种方法编程: – 算法1:用不带else子句的if语句编程 – 算法2:用在if子句中嵌入if 语句的形式编程 – 算法3:用在else子句中嵌入if 语句的形式编程
}
思考题
语句 if (0 == data2)的必要性 – 1998年11月《科学美国人》杂志,描述了美国导弹巡
洋舰约克敦号上的一起事故,除零错导致军舰推进系统 的关闭
取绝对 值函数 2013-5-19
如果要求程序能进行浮点数的算术运算,语句 if (0 == data2)还能用于比较实型变量data2和 常数0的大小吗? – if (fabs(data2) <= 1e-7) 如果要求输入的算术表达式中的操作数和运算符之 间可以加入任意多个空格符,那么程序如何修改? – scanf("%d%c%d", &data1, &op, &data2); – scanf("%d%1s%d", &data1, &op, &data2);
2013-5-19
13
if-else
第4章 选择结构程序设计《C语言程序设计(第三版)》-电子教案
【注意】
switch后跟的"表达式"允许为任何类型的表达式,其 后跟的"表达式"允许为任何类型的表达式, 后跟的 数据类型和case后面的常量表达式的数据类型一致. 后面的常量表达式的数据类型一致. 数据类型和 后面的常量表达式的数据类型一致 每一个case后的各常量表达式的值不允许重复,否则 后的各常量表达式的值不允许重复, 每一个 后的各常量表达式的值不允许重复 会报错. 会报错. 每一个case后允许有多条语句 可以不用花括号" 后允许有多条语句, 每一个case后允许有多条语句,可以不用花括号"{}" 括起来. 括起来. case和default子句出现的先后顺序可以变动,不会影 子句出现的先后顺序可以变动, 和 子句出现的先后顺序可以变动 响程序的执行结果. 子句也可以省略不用. 响程序的执行结果.default子句也可以省略不用. 子句也可以省略不用 多个case可以共用一组执行语句.例如: 可以共用一组执行语句. 多个 可以共用一组执行语句 例如: … case 'A': case 'B': case 'C':printf("Pass\n");break;
3<5 || ++b
【例4-2】测试短路现象 】
#include <stdio.h> void main() { int a,b; a=b=0; a || ++b; printf("%d,%d\n",a,b); a=b=1; a || ++b; printf("%d,%d\n",a,b); a=b=0; a && ++b; printf("%d,%d\n",a,b); a=b=1; a && ++b; printf("%d,%d\n",a,b); }
C语言 第4章 选择结构程序设计
#include <stdio.h> int main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a>b) 如果 a>b,将a和b对换 , 和 对换 是 、 中的小者 { t=a; a=b; b=t; } a是a、b中的小者 if(a>c) { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } printf("%5.2f,%5.2f,%5.2f\n",a,b,c); return 0; }
if (disc<0) 8<0为假 为假 printf(“has not real roots\n”); else 的值变为-1 的值变为 { p=-b/(2.0*a); p的值变为 的值变为0.71 的值变为 q=sqrt(disc)/(2.0*a); q的值变为 x1=p+q; x1的值变为 的值变为-0.29 的值变为 x2=p-q; x2的值变为 的值变为-1.71 的值变为 printf(“real roots:\nx1=%7.2f\n x2=%7.2f\n”,x1,x2); } return 0; }
if (disc<0) printf(“has not real roots\n”); else { p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:\nx1=%7.2f\n x2=%7.2f\n”,x1,x2); } return 0; 复合语句 }
C语言有两种选择语句: 语言有两种选择语句: 语言有两种选择语句 (1)if语句,实现两个分支的选择结构 语句, 语句 (2)switch语句,实现多分支的选择结构 语句, 语句
《C语言程序设计(第五版)》第4章选择结构程序的设计 PPT课件
►(b*b-4*a*c)>=0
b*b-4*a*c>=0
►z= (x>y+3)
z= x>y+3
►(a>b)= = c
a>b= =c
►a=(b!=c)
a=b!=c
当然为提高程序的可读性、可维护性你不妨多使用 括号,因为C语言中的有些优先级很容易让你不小心犯 错。
C语言程序设计
第4章 选择结构程序设计
第10页
“>”的结果为“假”,即条件不成立。
C语言程序设计
第4章 选择结构程序设计
第5页
4.1 关系运算及关系表达式
4.1.1 关系运算符及其优先次序
运算符
含义
> 大于
优先级
结合性
>= 大于或等于 这些关系运算符等优
< 小于
先级,但比下面的优 先级高
左结合性
<= 小于或等于
== 等于 != 不等于
这些关系运算符等优 先级,但比上面的优 先级低
C语言程序设计
第4章 选择结构程序设计
第4页
4.1 关系运算及关系表达式
所谓“关系运算”实际上就是“比较运算”, 即将两个数据进行比较,判定两个数据是否符合 给定的关系。例如,
► “x>y+3”中的“>”表示一个大于关系运算。 ➢如果a的值是5,b的值是1,则大于关系运算
“>”的结果为“真”,即条件成立; ➢如果a的值是2,b的值是1,则大于关系运算
因为按照自左至右的结合方向,先执行关系运算
“a>b”得值为1(“真”),再执行关系运算“1>c”, 得值为0(“假”),因此y为0。
C语言程序设计
C程序设计(第五版)-第4章选择结构程序设计课后习题答案
C程序设计(第五版)-第4章选择结构程序设计课后习题答案1. 什么是算术运算?什么是关系运算?什么是逻辑运算?【答案解析】算熟运算:算术运算即“四则运算”,是加法、减法、乘法、除法、乘⽅、开⽅等⼏种运算的统称。
其中加减为⼀级运算,乘除为⼆级运算,乘⽅、开⽅为三级运算。
在⼀道算式中,如果有多级运算存在,则应先进⾏⾼级运算,再进⾏低⼀级的运算。
C语⾔中的算熟运算符包括:+、-、*、/、++、--、%等种类。
如果只存在同级运算;则从左⾄右的顺序进⾏;如果算式中有括号,则应先算括号⾥边,再按上述规则进⾏计算。
⽰例:$ (1 + 1)^{2} * 4+5 * 3$解析:1. 先进⾏括号内运算1+1,然后进⾏乘⽅运算得到结果4.2. 接下来与4相乘,得到结果163. 因为乘法优先级⼤于加法,因此先进⾏5*3,得到结果154. 最终相加得到结果31结果:31关系运算:关系的基本运算有两类:⼀类是传统的集合运算(并、差、交等),另⼀类是专门的关系运算(选择、投影、连接、除法、外连接等),⽽在C语⾔中,关系运算通常被认为是⽐较运算,将两个数值进⾏⽐较,判断⽐较结果是否符合给定的条件。
常见的关系运算符包括:<、<=、>、>=、==、!=等种类。
其中,前4种关系运算符(<、<=、>、>= )的优先级别相同,后2种(==、!=)也相同。
⽽前4种⾼于后2种。
例如, >优先于==。
⽽>与<优先级相同。
并且,关系运算符的优先级低于算术运算符,关系运算符的优先级⾼于赋值运算符(=)。
逻辑运算:在逻辑代数中,有与、或、⾮三种基本逻辑运算。
表⽰逻辑运算的⽅法有多种,如语句描述、逻辑代数式、真值表、卡诺图等。
⽽在C语⾔中,逻辑运算通常⽤于使⽤逻辑运算符将关系表达式或其它逻辑量连接起来组成逻辑表达式⽤来测试真假值。
常见的逻辑运算符包括:&&、||、!等种类&&:与是双⽬运算符,要求有两个运算对象,表⽰两个运算对象都成⽴,则结果为真,否则结果为假。
C语言程序设计实例教程(第2版)丁爱萍第4章 选择结构程序设计_百度文库
本文由xjsir2010贡献 ppt文档可能在WAP端浏览体验不佳。
建议您优先选择TXT,或下载源文件到本机查看。
第4章 选择结构程序设计 章 第4章 选择结构程序设计 章 4.1 关系运算符及其表达式 4.2 逻辑运算符及其表达式 4.3 条件运算符 4.4 单条件选择if语句 单条件选择 语句 4.5 开关分支 开关分支switch语句 语句 习题4 第4章 选择结构程序设计 章 4.1 关系运算符及其表达式 关系表达式是由关系运算符连接表达式构成的。
1. 关系运算符 1) 关系运算符 关系运算符都是双目运算符,共有如下6种: >,<,>=,<=,==,!= 分别是大于、小于、大于或等于、小于或等于、 等于和不等于。
第4章 选择结构程序设计 章 2) 运算符的优先级和结合性 前4种关系运算符的优先级别相同,后2种也相同,前4 种高于后2种。
关系运算符具有自左至右的结合性。
关系运算符、算术运算符和赋值运算符之间的优先级次序 为:算术运算符优先级最高,关系运算符次之,赋值运算 符最低。
2. 关系表达式 1) 关系表达式 由关系运算符组成的表达式称为关系表达式。
关系运算符两边的运算对象可以是C语言中任意合法 的表达式。
例如,x>y,(x=5)<=y,x==y等。
第4章 选择结构程序设计 章 2) 关系表达式的值 关系表达式的值是整数0(代表结果为逻辑假)或 1(代表结果为逻辑真),在C语言中不存在专门的“逻 辑值”,此处请读者务必清楚。
例如,关系表达式 (x=3)>(y=4)的值为0。
关系表达式常用在条件语句和循环语句中。
3) 举例 一般情况下,关系表达式用在选择结构或循环结 构的关系判断中,并不需要输出关系表达式的值,这 里我们为了了解关系表达式的内部运行机制,在例4-1 中可以看到关系表达式的值只能是0或1。
第4章 选择结构程序设计 章 【例4-1】关系表达式示例。
#include "stdio.h" main( ) { char x='m' , y='n' ; int n ; n=x<y ; printf("%d\n" , n) ; n=x==y-1 ; printf("%d\n" , n) ; n=('y'!='Y')+(5<3)+(y-x==1) ; printf("%d\n" , n) ; } 第4章 选择结构程序设计 章 运行结果: 1 1 2 通过上面的程序可以看出:关系运算的结果为 “真”时,值等于1;结果为“假”时,值等于0。
Ch04_选择结构程序设计
典型示例
求最大值 成绩等级 求方程解
作业/上机
作业(做在书上)
TP62 习题4:一、二、三 TP65 习题4:2,3,5,6
上机
4.1 关系表达式与逻辑表达式
关系运算符及优先级
4.1 关系表达式与逻辑表达式
关系表达式
用关系运算符将两个操作数(常量、变量或表达式)连 接起来,进行关系运算的式子,称为关系表达式。 例如,假设n1=5,n2=8,n3=10,则:
1)关系表达式n1==n2的值为0。 2)关系表达式n1<=n3的值为1。 3)关系表达式n1+n2>n3的值为1。 4)关系表达式n1== n2>n3的值等为0。
举例
if(a>b) max=a; else max=b;
<==>
max = (a > b) ? a : b
4.4 switch表达式
switch格式
switch (<表达式>) if (<表达式> == <数值1>) { <语句或语句组1>; case <数值1>: else if (<表达式> == <数值2>) [<语句或语句组1>;] <语句或语句组2>; <==> case <数值2>: …… [<语句或语句组2>;] else …… <语句或语句组>; [default: <语句或语句组>;] }
例:设a=4,b=5: !a的值为0 a || b的值为1 4 && 0 || 2的值为1
第4章选择结构程序设计
8 t
4.3 if语句 #include <stdio.h> int main() { int a,b,c,t; scanf(“%d,%d,%d”,&a,&b,&c); if(a>b) {t=a;a=b;b=t;} if(a>c) {t=a;a=c;c=t;} if(b>c) {t=b;b=c;c=t;} printf(“%d,%d,%d \n”,a,b,c); return 0; }
a≥b且a≥c 最大值为a
b≥a且b≥c 最大值为b c≥a且c≥b 最大值为c
a>=b&&a>=c 最大值为a
b>=a&&b>=c 最大值为b c>=a&&c>=b 最大值为c
4.3 if语句 #include <stdio.h> int main() { int a,b,c,max; scanf(“%d,%d,%d”,&a,&b,&c); if(a>=b&&a>=c) max=a; if(b>=a&&b>=c) max=b; if(c>=a&&c>=b) max=c; printf(“max=%d\n”,max); return 0; }
表达式1 真 假 表达式2 真 假 表达式3 真 语句1 语句2 语句3 语句4 假
多个分支的选择
4.3 if语句 例:输入学生成绩,根据成绩分等级,90分以上为 ‘A‟,80~89分为‘B‟, 70~79分为‘C‟, 60~ 69分为‘D‟, 60分以下为‘E‟。 scanf(“%f”,&score); if(score>=90) printf(“A”); else if(score>=80) printf(“B”); else if(score>=70) printf(“C”); else if(score>=60) printf(“D”); else printf(“E”);
第4章 选择结构程序设计
章节:
C语言程序设计→第4章 选择结构程序设计
练一练
问题:编一程序,从键盘输入一个正整数,判 断它的奇偶性。如果输入的是奇数,输出“奇 数”,如果输入的是偶数,则输出“偶数”。
章节: C语言程序设计→第4章 选择结构程序设计
本章的学习难点
1. 单分支与双分支选择结构程序设计; 2. 多分支选择结构程序设计 ; 3. 条件语句的嵌套。
章节: C语言程序设计→第4章 选择结构程序设计
本章目录
1. 选择结构和条件判断 2. 用if语句实现选择结构 3. 关系运算符和关系表达式 4. 逻辑运算符和逻辑表达式 5. 条件运算符和条件表达式 6. 选择结构的嵌套 7. 用switch语句实现多分支选择结构 8. 选择结构程序综合举例
章节: C语言程序设计→第4章 选择结构程序设计
4.1.2逻辑运算符与逻辑表达式
逻辑运算符
&&
逻辑与(并且)
||
逻辑或(或者)
!
逻辑非
章节:
C语言程序设计→第4章 选择结构程序设计
逻辑运算符
章节: C语言程序设计→第4章 选择结构程序设计
逻辑运算真值表
章节: C语言程序设计→第4章 选择结构程序设计
反数。所以,如果iX<0,则iY= -iX,否则不需要 做什么;
5.输出iX和iY。
章节:
C语言程序设计→第4章 选择结构程序设计
流程图
章节:
C语言程序设计→第4章 选择结构程序设计
c语言 第四章 选择结构课件
if (expr1) if (expr2) statement1 else statement2
内嵌if
if (expr1) if (expr2) statement1
else statement3
内嵌if
if (expr1) statement1
else if(expr3) statement3 else statement4
if ~ else 配对原则:缺省{ }时,else 总是和它上面离它最近的未配对的if配对
if(……) if(……) if(……) else…... else…...
else…...
例: if (a==b) if(b==c) printf("a==b==c");
else printf("a!=b");
if(x>y) printf("X>Y\n");
else printf("X<Y\n");
else printf("X==Y\n");
}
运行:Enter integer x,y:12,23 X<Y Enter integer x,y:12,6 X>Y Enter integer x,y:12,12 X==Y
内嵌if
if (expr1)
if (expr2) else
statement1 statement2
内嵌if
else
if(expr3) else
statement3 statement4
内嵌if
例 输入两数并判断其大小关系
main() { int x,y;
printf("Enter integer x,y:"); scanf("%d,%d",&x,&y); if(x!=y)
C语言课件 选择结构程序设计
述
4-3 switch语句和break语句
4.3.1 break语句(辅助控制语句)
break语句的格式:break; break语句不能单独使用,只能与switch和循环语句
结合使用。 功能:在循环语句和switch语句中,终止并跳出循环
体或开关体。
4.3.2 switch语句(开关语句)
格式: switch(表达式) { case E1: 语句组1;break;
C
语 言
关系运算注意:
程
序
例 应避免对实数作相等或不等的判断,而只能
设
使用“<”和“>”,原因在于舍入误差可能造
计
成
两个逻辑上应该相等的数不相等。
如 1.0/3.0*3.0==1.0
可改写为:fabs(1.0/3.0*3.0-1.0)<1e-6
例 注意区分“=”与“==”
第 二 章 数 据 描 述
1表示“真”,
描
述
C
语 言
优先级与结合方向:
程
序
设 计
!
高
&& 低
||
! :从右向左
第
二
&& :从左向右
章
数
据
|| :从左向右
描
述
高
!(非) 算术运算符 关系运算符 &&和|| 赋值运算符=
低
C
语
言
程
逻辑表达式的值:
序
设
计
例 a=4;b=5;
!a
值为0
a&&b
值为1
a||b
值为1
!a||b
值为1
C语言第四章选择结构ppt课件
/* 求 x 的绝对值并赋给 y */
/* 输入 x 的值 */
/* 输出 x 的绝对值 */
/* 编译预处理:包含头文件 */
二、if ... else 语句
对这一句话“如果x>=0则y=x,如果x<0则y=-x”,可以写出以下语句:
表达式1 ? 表达式2 :表达式3
表达式1为真,结果为表达式2的值 表达式为假,结果为表达式3的结果; 运算符 “ ?:”的优先级只在逗号和赋值运算 符之前;表达式2和表达式3只可能执行一个;这是C语言中的唯一一个三目运算符;条件运算符的结合方向为“自右自左”。
例:已知a=5,b=6,c=7,d=8,n=2 ; 执行以下语句后表达式的值为多少? n的值为多少? (a < b ) ? ( c + d ) : ( + + n )
if ( 表达式1 ) if ( 表达式2 ) 语句1; else 语句2;else if ( 表达式3 ) 语句3; else 语句4;
实现if ~ else 正确配对方法:加{ }
五、条件运算符
能否把两条语句合成一句,更好地体现这种逻辑关系呢?这就是 if ...... else 语句的功能。
简单的if 语句只能表达“如果 ,那么 ”的含义,而if ...... else 语句却能表达“如果 那么 否则 ”的含义。
If ( x>=0) y=x;if (x<0) y=-x;
a>b?a:c>d?c:d
a>b?a:(c>d?c:d)
表达式值为15,n=2
六、 switch 语句
switch 语句是多分支的选择语句又称开关语句。
第四章 选择(分支)结构程序设计
用一个逻辑表达式来表示一个复杂的条件。
例如:判断某一年是否闰年。 闰年:能被4整除,但不能被100整除;或能被 400整除。
(year%4==0&&year%100!=0)||year%400==0
表达式为“真”,闰年条件成立,是闰年,否则 非 闰年。
复合语句的形式:
{ 语句1; 语句2; 语句3; ……
}
4.3 if语句
4.3.1 if语句三种形式
复合语句在选择结构,循环结构中经常用到。 我们在逻辑上把复合语句看成是一条语句。
4.3 if语句
4.3.1 if语句三种形式
例:要求用户输入一个实数,然后求出这个实数 的绝对值。
4.3 if语句
逻辑运算的真值表:
a b a&&b
a||b
真真 真
真
真假 假
真
假真 假
真
假假 假
假
a
!a
真
假
假
真
4.2 逻辑运算符和逻辑表达式
4.2.1 逻辑运算符及其优先顺序
例:逻辑运算举例 a&&b 若a、b为真,则a&&b为真。 a||b 若a、b之一为真,则a||b为真。 !a 若a为真,则!a为假,反之若a为假,
4.3.1 if语句三种形式
▪ 在C语言中,表达式P的值是非0时,系统均按真 值处理。
例(1) if (‘a’) printf(“ok!”); (2) x=-5; if(x) printf(“ok!”); (3) y=0; if(y==0) printf(“ok!”); if(y) printf(“ok!”);
第4章 选择结构程序设计
3.多分支选择语句
单分支和双分支if语句一般都用于两个分支的选择 结构。对于多个分支选择,可采用多分支if语句来实现。
-1 (x<0) 例:计算分段函数 y= 0 (x=0) 1 (x>0)
多分支if语句
语句形式:
if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3; „ else if (表达式n) 语句n; else 语句n+1;
真
假
真
假
s=s0+200
s=s0+180
s=s0+150
s=s0+120
输出s 结束 图4.11 例4.4流程图
程序如下: #include "stdio.h" main() {float s0,s; int year; printf("Input s0,year:"); scanf("%f,%d",&s0,&year); if(year>=20) {if(s0>=2000) s=s0+200; else s=s0+180; } else {if(s0>=1500) s=s0+150; else s=s0+120; } printf("s=%f\n",s); }
输出 结束 图4.2 例4.1流程图
2.双分支if语句
if (表达式) 语句1; else 语句2;
执行过程:
首先先判断表达式的值 若为非0则执行语句1 若为0则执行语句2 if语句的双分支形式,在语法上视为一条语句。
图4.3 双分支if语句流程图
第4章 选择结构程序设计
#include <stdio.h> 4.2用if语句实现选择结构程序设计 int main() { float a,b,c,t; scanf("%f,%f,%f",&a,&b,&c); if(a<b) { t=a; a=b; b=t; } if(a<c) { t=a; a=c; c=t; } if(b<c) 如果 b<c,将b和c对换 b是三者中的次大者 { t=b; b=c; c=t; } printf("%5.2f,%5.2f,%5.2f\n",a,b,c); return 0; }
用条件运算符改写if语句
• 有一种if语句,当被判别的表达式的值为 “真”或“假” 时,都执行一个赋值语 句且向同一个变量赋值 • 如:if (a>b)
max=a; else max=b;
max = (a > b) ? a : b;
条件表达式
4.2用if语句实现选择结构程序设计
4.2.2if语句的一般形式
4.1条件判断
4.1.1条件判断的含义
在现实生活中,需要进行判断和选择的情况是很 多的
• 处理这些问题,关键在于进行条件判断 • 由于程序处理问题的需要,在大多数程序中都会 包含选择结构,需要在进行下一个操作之前先进 行条件判断
4.1条件判断
4.1.1条件判断的含义
• C语言有两种选择语句:
(1)if语句,实现两个分支的选择结构
4.2用if语句实现选择结构程序设计
4.2.1用if语句实现选择结构举例
例4.3 输入3个成绩a,b,c,要求按由高 到低的顺序输出。
4.2用if语句实现选择结构程序设计
第4章 C语言选择结构程序设计
《 C语言程序设计》
流程图
真 (非0) 表达式
假(0)
语句1
语句2
《 C语言程序设计》
例4.1
【例4.1】试用if…else语句编写程序,判断学生成绩 是否合格。
判断方法: ①如果成绩大于等于60,输出及格 ②否则输出成绩不及格
《 C语言程序设计》
4.2 if语句 if语句
C语言中if条件语句有三种结构形式,分别是: if结构(单分支结构) if if-else if-else结构(双分支结构) if-else-if结构 (多分支结构) if-else-if
《 C语言程序设计》
例4.5 设计一个应用程序,判断某一年是否为闰年
判断方法: ①如果该年能被4整除而不能被100整除,则为闰年; ②或者能被400整除也是闰年。 如: 1996年、2000年是闰年 1996年 2000年是闰年
1998年 1900年不是闰年 1998年、1900年不是闰年
逻辑表达式为: year%4==0 && year%100!=0 || year%400==0
4.4 条件运算符和条件表达式
条件运算符: 1、条件运算符:?:是C语言中惟一的一个三 目运算符。 一般形式为: 2、一般形式为: 表达式1 ? 表达式2 : 表达式3 3、操作过程:如果表达式1成立,则表达式2的 操作过程: 值就是此条件表达式的值;否则,表达式3 的值是此条件表达式的值。
《 C语言程序设计》
《 C语言程序设计》
4.2.2 if-else结构 if-else结构
1、格式: if(条件表达式 语句1 条件表达式) if(条件表达式) 语句1; 真 (非0) else 语句2; 语句 ; 语句1 2、执行过程:
C语言程序设计教程:选择结构程序设计
4.2 switch语句
(5) case后面的语句块可以是一条语句或多条语句,也可 是空语句,但不需要用大括号括起来。
(6) 当case后面常量表达式与switch后面的表达式均不匹 配时,则执行default后面的语句块,default可以放在程序的 任何位置,不一定要位于最后。
(7) 多个case可以共用一个语句块。 例如: switch(n)
注意:当多分支中有多个表达式同时满足时,只执行第一个与之匹配的语句块。 因此要注意对多分支中条件表达式的书写次序,防止某些值被过滤掉。
15
4.1.1 if语句的三种形式
思考:若将例4.4中程序改为以下两种写法,结果分别会如何?
程序段一如下: #include <stdio.h> main() {
float score; printf("请输入学生期末考试成绩(0-100):\n "); scanf("%f", &score); if(score>=90)
4.1.1 if语句的三种形式
程序段二如下: #include <stdio.h> main() {
float score; printf("请输入学生期末考试成绩(0-100):\n "); scanf("%f", &score); if(score>=60)
printf("及格!\n "); else if(score>=70)
9
4.1.1 if语句的三种形式
2. 双分支选择结构
双分支结构语法的一般格式为:
if(表达式)
{
语句块1;
}
第4章 选择结构程序设计
exam4-2
10
4.3 if语句
4.3.3 多分支if语句
表达式1 格式 N Y if (表达式1) 语句1 表达式2 语句1; Y e l se i f ( 表达式2 ) 语句2; 语句2 Y e l s e i f (表达式3) 语句3; 语句n …… else 语句 n+1;
计算机科学系 张丽虹
12
4.3 if语句
例:编写一个收款程序,计算购买某物品的总金额。该 物品的单价为5元/公斤,购买5公斤以上打9折,购买 10公斤以上打8折,购买20公斤以上打7折,购买50公 斤以上打6折,购买100公斤以上打5折。
exam4_3.c
例:编写一个程序,根据用户输入的三角形三条边长判 定是何种三角形 ,对于有效三角形,求其面积。
功能:
计算表达式的值,与常量表达式的值比较,等于第i个值时,顺序执 行语句序列i、i+1、 …、 n+1,直到遇到break语句或右花括号}。 若与所有常量表达式值都不相等,执行语句序列n+1。
计算机科学系 张丽虹
16
4.4 switch语句
例: 从键盘上输入一个百分制成绩score,输出其等级。
#include <stdio.h> main( ) { int x; scanf ("%d",&x); if (x%2 != 0) { printf("%d is an odd \n",x) ; if (x%5==0) printf("%d is the times of 5 \n",x) ; } else printf("%d is an even \n",x) ; }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.3 switch多分支开关语句
• switch语句执行时有这样一个特点,当表达式的值和某一个常量表达 式值匹配成功,程序就从匹配成功的地方开始往下顺序执行,直到 switch语句的结束,为了保证只执行匹配成功的那个分支,通常,在 该分支末尾加上一个break语句,break在此处的作用是跳出开关分支。 这样的话,最后一个分支就不用加break语句了,但是程序从扩展性 上考虑,有可能要增加分支,所以一个较好的编程风格是所有分支结 束都加上一个break语句,这是一个好的习惯。 • switch语句中每一个分支后面的语句,可以是空语句,一条语句,也 可以是多条语句,即语句序列,如果是语句序列,不用将该语句序列 用大括号括起来,语句仍然能按顺序执行。分支中的语句还可以是其 他程序结构组成的语句,如果if…else…结构,还可以再嵌套switch语 句,也可以是后面将讲到的循环结构等。 • switch语句中有一个默认的分支,就是default分支,当case分支均匹 配不成功时,就执行该分支,default分支不一定需要位于最后,可以 放在任何一个地方,放到最后一个分支仅仅是一种习惯和一种良好的 编程风格。
软件学院
4.4 goto及语句标号
实践训练
【实训项目一】 输入三角形的三条边,然后求出三角形的周 长并输出。
软件学院
4.5 综合实训
【综合实训】 一元二次方程求解。 从键盘输入a、b、c的值,求出一元二次方程 ax2+bx+c=0的实数解。
软件学院
Qustion and Answer?
软件学院
软件学院
4.3 switch多分支开关语句
相关知识 switch的中文意思是开关,在C语言中,switch语句 专用于实现多分支选择结构程序, 其一般形式为: switch(表达式) { case常量表达式1: 语句序列1; case常量表达式2: 语句序列2; …… case常量表达式n: 语句序列n; default: 语句序列n+1; }
第四章 选择结构程序设计
4.1 4.2 4.3 4.4 4.5 if语句 if语句的嵌套 switch多分支开关语句 goto及语句标号 综合实训
软件学院
选择结构是一种常用的程序结构。在自然界和 社会生活中,选择是最为常见的,经常会出现两 种或多种选择需要选择其一的情况,并且在任何 情况下都有“无论分支多少,必择其一;纵使分 支众多,仅择其一”的固定特征。选择结构在执 行的时候,需要先进行选择条件的判断,根据所 判定的条件决定执行哪个分支,选择判定条件的 结果往往是一个逻辑值(如if选择结构),为真 (非0)或为假(0),根据此结果执行为真的分 支或为假的分支;有的时候判断条件是一个整型 值或字符型的值,在执行时可与数值相等的分支 进行匹配,如果匹配成功,就去执行相应的分支 (如switch分支结构)。
软件学院
相关知识
4.1 if语句
if语句属于分支结构,它的作用是根据所判断的条件是否满 足来决定执行哪个语句块。 if语句的一般结构为: if(表达式) { 语句块1; } else { 语句块2; }
软件学院
4.1 if语句
If语句的执行流程
软件学院
4.1 if语句
if语句需要注意的问题
C语言中表达式结果的真假与非0和0相对应,即 如果表达式的求解结果为非0就认为是真,如果是0就认为是 假。 在if语句的一般结构中,语句块1和语句块2可以是一条或 多条合法的C语言语句。如果是一条语句,则包含语句块的 一对花括号可以省略,如果是多条语句则必须用花括号括起 来。在程序的编写中推荐的做法是:无论语句块是一条或多 条语句,都使用花括号,这样既增强程序的可读性又能够减 小出错的机率。 在if语句的基本应用中,有时候会出现else分支中的语句 块2为空的情况。此时可以省略else及else后面的语句而只有 if语句,也就是说只有条件为真的分支。
软件学院
4.2 if语句的嵌套
If语句嵌套的基本格式 If(表达式1) If(表达式2) 语句块1; else 语句块2; else If(表达式2) 语句块3; else 语句块4;
软件学院
实践训练
4.2 if语句的嵌套
【实训项目一】 根据考试成绩输出相应的成绩等级。100~90 输出“优秀”,89~80输出“良好”, 79~ 70输 出“中等”, 69~60输出“及格”, 59~0 输出 “不及格”,否则输出“不是合法分数”。 【实训项目二】 用户任意输入一个年份,判断是不是闰年。
软件学院
4.4 goto及语句标号
相关知识 goto语句可以转向同一函数内任意指定的位置,称 为无条件转向语句,它的一般形式为: goto 语句标号; 语句标号用标识符表示,它的命名规则与变量的 命名相同。 例如: goto loop; 当执行goto语句时,程序将跳转到loop所在的位 置执行,它将改变程序顺序执行的方式,因此结 构化程序设计方法主张限制使用goto语句,滥用 goto语句将使程序流程无规律,可读性差。
数学中往往有分段函数的求解运算,也可以通过分支结构程序设计来解决,如 下面的分段函数求解问题: #include "stdio.h" main() { int x,y; printf("请输入x的值:\n"); scanf("%d",&x); if(x<0){ y = x*x; }else{ /*x>0或x=0两种情况 */ if(x==0){ y=-1; }else{ /* x>0 */ y = - x*x; } } printf("y=%d\n",y); } 软件学院
软件学院
4.3 switch多分支开关语句
程序名:ex4_3_1.c #include "stdio.h" #include "stdlib.h" main() { int score; printf("请输入学生的成绩(0-100):\n"); scanf("%d",&score); if(score<0||score>100) { printf("成绩输入有问题,正在退出!"); exit(0); } switch(score/10) { case 10: case 9: printf("优秀!"); break; case 8: printf("良好!"); break; case 7: printf("中等!"); break; case 6: printf("及格!"); break; case 5: case 4: case 3: case 2: case 1: case 0: printf("不及格!"); break; default: printf("数据有误!");break; } }
软件学院
4.3 switch多分支开关语句
• switch语句的执行过程是:先计算表达式的值, 并依次与其后的常量表达式i(i=1,2,… ,n) 的值相比较,当switch后面括号中表达式的值与 某个常量表达式的值相等时,即从该常量表达式 处开始执行(执行程序入口),然后不再进行判 断,继续执行后面所有case后的语句,直到 switch语句结束。如果表达式的值与所有case后 的常量表达式均不相同,则从default处开始执行。 • 在switch语句中,switch后面的表达式值要求必须 是整型、字符型,常量表达式值的类型必须与表 达式类型一致,而且常量表达式中不能出现变量, 其值也只能是整型常数、字符型常数。
软件学院
4.4 goto及语句标号
知识导例
从键盘接收一个大于0小于11的整数,如果输入的值不在这个范围内则要求用户重新输入,否则输出这 个数值。 解决该问题的程序源代码如下。 程序名:ex4_4_1.c #include "stdio.h" main() { int a; printf("请输入a的值:"); start: scanf("%d",&a); if(!(a>0 && a<=10)) { printf("你输入的值不符合要求,请重新输入:"); goto start; } printf("你输入的值是%d\n",a); }
软件学院
4.1 if语句
知识导例
在数学计算中,经常会求一个数x的绝对 值。该问题的求解方法很简单,即如果这 个数x为正数,那么它的绝对值就是它本身; 如果x为负数,那么x的绝对值就是-x,即如 下公式所示: x (x>=0) y= -x (x<0)
软件学院
4.1 if语句
#include "stdio.h" main() { int x,y; printf("请输入x的值:"); scanf("%d",&x); /*根据x的值求出y的值。*/ if(x>=0){ y=x; } else{y= -x;} printf("x的绝对值y=%d\n",y); }
软件学院
4.3 switch多分支开关语句
实践训练
【实训项目一】 要求输入0-6之间的任意一个数字,输出一个对应星期几的英文单 词。 【实训项目二】 1.实训内容 快递公司进行货物托运时,按货物重量不同 而设计不同的收费方式,某家快递公司按照如公 式所示进行收费。 其中n表示货物的重量,单位是千克,y为 计算出来的运费。编写程序根据货物的重量计算出 需要支付的运费。
软件学院
4.3 switch多分支开关语句
知识导例
• 在记录成绩时,有时会用到五等级制记录 成绩,根据百分制成绩分别将成绩登记为 “优秀(100分-90分)”、“良好(89分80分)”、“中等(79分-70分)”、“及 格(69分-60分)”、“不及格(59分-0 分)”,请将百分制成绩记录为五等级制成 绩。