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)
cc21==cc11++3322;;
e形plrs式ient二f(:"%c",c1);
例:if }(mx>paxyri=)n格cxt2;f式=("c:%1-icf3"(2,ec;x2ps)tr;aetsesmioenn)t1
e}lse
else
非0 statement1
expr
max=执y;行过程: statement2
A
yes
No
leap=0
打印非闰年
打印是闰年
结束
main3.( 程) 序:
{
int year, leap;
scanf("%d", &year);
if (year%4==0)
{
if (year%100==0)
}
}
四、选择结构程序设计
iiff语语句句#m( 的#miianan形条 三icicnnl式l(u件 种(u)d)d一e选 形e:""s择 式sttdd语iioo.句.hh"")
expr 非0
{{ cch格haar式rcc:11,;ci2f(; expression)
statement
cicif1f1(执=(=ccg1g行1e>e>t过t=c例=ch‘h程‘A:aAar’:r’(i&(f&S));t(&;px&ar>tcicnye11t)m<f<(e="n=%‘t‘ZZd’"’),)x);
关系表达式的值:是逻辑值"真"或"假",用1和0表示
例 int a=3,b=2,c=1,d,f;
a>b
//表达式值1
(a>b)==c
//表达式值1
b+c<a
//表达式值0
d=a>b
//d=1
f=a>b>c //f=0
例 c>a+b //c>(a+b) a>b!=c //(a>b)!=c a==b<c //a==(b<c) a=b>c //a=(b>c)
例 x?‘a’:‘b’ //x=0,表达式值为‘b’; x‡0,表达式值为‘a’ x>y?1:1.5 //x>y ,值为1.0; x<y ,值为1.5
[练习] 从键盘上输入一个字符,如果它是大写字 母,则把它转换成小写字母输出;否则,直接 输出。
main() #include "stdio.h"
{ char ch; main() { char c1;
if (x<0) y= –1;
else y=0;
else if (x==0) y=0;
else y= –1;
else y=1;
printf ("x=%d, y=%d\n", x, y);
}
程序3: 将上述if语句改为:
y= –1;
if (x! =0)
if (x>0) y=1;
else
y=0;
程序4: y= 0 ;
expr1、expr2、expr3类型可不同,表达式值取较 高的类型
例 求 a+|b| printf("a+|b|=%d\n",b>0?a+b:a-b);
例 (a==b)?’Y’:’N’ (x%2==1)?1:0 (x>=0)?x:-x (c>=‘a’ && c<=‘z’)?c-’a’+’A’:c
参考程序如下:
/*功能:说明if语句的嵌套格式和用法。*/
流程图
设用变量year表示年号,leap为待置值变量,当 year为闰年:leap1, 否则leap0.
输入year
No
year%4=0
leap0
yes
A
year%100=0 No leap1
yes
leap%400=0 yes
leap1
No leap0
else
pri条ntf(件"%运d"算,c1符-32可); 嵌套
如 x>0 ? 1:(x<0 ? -1:0)
例优先if (级a>:b) 13
结合方e向lspe:rintf("%d",a);
printf("%d",a>b?a:b);
如 a>pbrin?tf("a%:cd">,bd);? c:d a>b ? a:(c>d ? c:d)
写一程序,从键盘上输入1年份year(4位十 进制数),判断其是否闰年。闰年的条件是:能 被4整除、但不能被100整除,或者能被400整除。
算法设计要点:
(1)如果X能被Y整除,则余数为0,即如 果X%Y的值等于0,则表示X能被Y整除!
(2)首先将是否闰年的标志 leap预置为0 (非闰年),这样仅当year为闰年时将leap置为 1即可。这种处理两种状态值的方法,对优化算 法和提高程序可读性非常有效,请读者仔细体会。
printf("Input ac1c=hgaeratcchtaerr(:);"); scanf("%c",&cifh()是; 大写?)
ch=(ch>='A' && cc1h=<c=1'+Z3')2?; (ch+32) : ch;
printf("ch=%cp\nri"n,ctfh(")%; c",c1);
C的基本结构程序设计
选择结构程序设计
主要内容: 关系运算和逻辑运算 条件运算符及表达式 选择结构控制语句(if语句) 多分支开关语句(switch)
一、关系运算符和关系表达式 < <=
>
符号种类:< <= == >= > !=>===
结合方向:自左向右
!=
优先级6(高) 优先级7(低)
优先级别:
=0
=0 statement2
形式三: 格式:
if ( expr1 )
statement1
else if (expr2 ) statement2
例:if
else if (expr3 执(sc行or过e<程=1:00&&score>=90)
)
statement3
printf("优"); …...
else if (score>=80) expprr1intf("良=0");
statemntn
说明: if后面的表达式类型任意
语句可以是复合语句
例如#:考iniiffcii虑((fflx!((uxa3)下d)=)e=面<bps&程tridif&ni(i序fxot(xf!.x(h=的="=>=0O=输y)K0))出");p结ri果ntf:("a=b,x=y"); maifin(‘(a)’) printf("%d",’a’); { int x,y;
[ else
else if (score>=70) 非0printf("中e"x)p;r2
=0
else if (spcroinrtef>("=及非600格) "); expr3
statement n ]
右单支
=0
else
非0
statemnpt1rintfs(t"a不tem及nt2格")s;tatemnt3
合集下载
C语言第四章选择结构ppt课件
基本 if 语句的通常形式是:
表达式 假 真
if ( 表达式 ) if ( x > y ) /* 简单语句 */ 语句组
语句;
z=x ;
或语句
if ( 表达式 ) { 语句; 语句;
}
if ( x > y ) /* 复合语句 */ {
z=x; x=x+1; printf(“%d\n”,z); }
执行过程:
(1)当switch后面“表达式”的值,与某个case后面的 “常量表达式”的值相同时,就执行该case后面的语句;当 执行到break语句时,跳出switch语句。
(2)如果没有任何一个case后面的“常量表达式”的值, 与“表达式”的值匹配,则执行default分支后面的语句。
说明(1):
这就是 if ...... else 语句的功能。
简单的if 语句只能 表达“如果 ,那 么 ”的含义,而 if ...... else 语 句却能表达“如果
If ( x>=0) 语句1;
else 语句2;
那么 否则 ”
的含义。
ห้องสมุดไป่ตู้
真
语句1
表达式
假
语句2
注意:如果使用了复合语句,一定要用大括号把它们括起来。
/* 求 x 的绝对值并赋给 y */
printf(“|%f|=%f”,x,y); }
/* 输出 x 的绝对值 */
二、if ... else 语句
对这一句话“如果x>=0则y=x,如果x<0则y=-x”,可以写 出以下语句:
If ( x>=0) y=x;
if (x<0) y=-x;
能否把两条语句合成一句,更好地体现这种逻辑关系呢?
C语言程序设计第4章选择结构程序设计ppt课件
8
printf("grade is E" );
9 else if (score >=60 && score<70 )
10
printf( "grade is D");
11 else if (score >=70 && score<80 )
12
printf( "grade is C");
13 else if (score>=80 && score<90 )
printf("a,b="); scanf("%d,%d",&a,&b); if (a>b) max=a; else max=b; printf("max=%d\n",max); }
结束
8
3.if-else if-else语句
(1)语句格式:
if (表达式1) 语句1
else if (表达式2) 语句2
不再判断,顺序执 行下面的语句
21
4.2 switch语句
switch (表达式) {case 常量表达式1:语句1 case 常量表达式2:语句2 …… case 常量表达式n:语句n [default:语句n+1] }
注意:
1. <表达式>可以是整型或字 符型表达式; 2. case后面必须是常量表达 式,不能包含变量; 3. 每个常量表达式的值应互 不相同; 4. case语句先后顺序随意; 5.若从上至下没有找到与表 达式的值相匹配的case,含有 default子句时,执行语句n+1。
第4章-选择结构PPT课件
例如“如果你有空,并且天气好,我们就去打篮球”,此 例中,只有同时满足“你有空”和“天气好”两个条件, “去打篮球”这个动作才会发生。
再如,要表示数学中常用的区间取值,要求检查int型变量x 的取值是否在[1,20]区间,初等数学中通过判断表达式 “1=<x<=20”的值来确定,C语言中并不支持这种写法,需 要表示为 “x>=1”且“x<=20”, 这两个表达式同时成立, 才表示x的取值落在了[1,20]区间。
条件判断
现实生活中我们经常要做判断,根据不同的情况去做不同的 事情:举例
1、如果外面阴天,出门就把雨伞带上
2、如果周末天气好,我们就去郊游,否则就去看电影
3、如果明天不下雨,我们就去爬山,如果下小雨,我们 就去体育馆打球,如果下大雨,就呆在屋子里。
4、如果你有空,并且天气好,我们就去打篮球
即当该表达式为结果为真时,表示y是闰年,否则 y不是闰年。相应的判断某一年份是否为非闰年的 表达式即为判断闰年对应的表达式取反:
!(((y % 4 == 0)&&(y % 100 != 0)) || (y % 400 == 0))
注意:当逻辑表达式比较复杂,出现多个条件的 连接时,建议采用“()”来明确层次关系。
X==1.0 || x==3.0 X>=z && x<=y z>x || y<x
0 || 1等于1 1 &&1等于1 0 || 0 等于0
9
高职学院 计算机专业 《程序设计基础》
逻辑运算实例
根据输入的年份数值,判断其是否为闰年。假设int型变量y里 面保存了此年份数据。
分析:根据历法,闰年的年份值是4的倍数但又不是100的倍 数,或者是400的倍数。采用自顶向下的分析方法,分析如下
再如,要表示数学中常用的区间取值,要求检查int型变量x 的取值是否在[1,20]区间,初等数学中通过判断表达式 “1=<x<=20”的值来确定,C语言中并不支持这种写法,需 要表示为 “x>=1”且“x<=20”, 这两个表达式同时成立, 才表示x的取值落在了[1,20]区间。
条件判断
现实生活中我们经常要做判断,根据不同的情况去做不同的 事情:举例
1、如果外面阴天,出门就把雨伞带上
2、如果周末天气好,我们就去郊游,否则就去看电影
3、如果明天不下雨,我们就去爬山,如果下小雨,我们 就去体育馆打球,如果下大雨,就呆在屋子里。
4、如果你有空,并且天气好,我们就去打篮球
即当该表达式为结果为真时,表示y是闰年,否则 y不是闰年。相应的判断某一年份是否为非闰年的 表达式即为判断闰年对应的表达式取反:
!(((y % 4 == 0)&&(y % 100 != 0)) || (y % 400 == 0))
注意:当逻辑表达式比较复杂,出现多个条件的 连接时,建议采用“()”来明确层次关系。
X==1.0 || x==3.0 X>=z && x<=y z>x || y<x
0 || 1等于1 1 &&1等于1 0 || 0 等于0
9
高职学院 计算机专业 《程序设计基础》
逻辑运算实例
根据输入的年份数值,判断其是否为闰年。假设int型变量y里 面保存了此年份数据。
分析:根据历法,闰年的年份值是4的倍数但又不是100的倍 数,或者是400的倍数。采用自顶向下的分析方法,分析如下
C语言第4章 选择结构程序设计PPT教学课件
例如:
(1)若a=4,则!a的值为
(2) 0
(3)(2) 若a=4,b=5,则a&&b的值为
(4) 1
(5)(3) a、b值同前, a||b的值为
(6) 1
(4) 4&&0||2的值为
1 2020/12/10
12
特别注意! (1) 用&&对两个表达式进行计算时,若第一个表达式的值
为“假”,则运算结果与第二个表达式的值无关,结果肯 定为假,所以C语言规定此时第二个表达式将不再计算。
(因为“>”运算符是自左至右的结合方向,先执行 “a>b”得值为1, 再执行关系运算“1>c”,得值0, 赋给f)。
2020/12/10
8
逻辑运算符
逻辑运算符是对两个关系式或逻辑值进行运算的,运算结 果仍是逻辑值。
在C语言中,逻辑值用数值非0和0来表示逻辑真和假的, 所以逻辑运算符也可以对两个数值型数据进行运算,包括 整型、实型、字符型等数据。
3.关系运算符的使用实例
设变量定义如下: char c1=‘a’,c2=‘A’;
(c1,c2可看成整型,其值为97,65)
int n1=65,n2=97; float f1=0.3E1,f2=3.0001;
则: ① c1>c2,n1>n2,f1==f2的值依次是 1.,0,0
② c1>=n1,c2>=n2,c1==n2的值依次是 1,0,1
③ f1>c1,f2<c2,f1==n1-62的值依次是 0,1,1
④ c1>c2>=1<=0==1!=0的值是 0
⑤ c1>c2>=n1<=n2==f1!=f2的值是 1
C语言04选择结构.ppt
10
C Programming Language
10 10
-10 2
,z;执行语句z=x>y?++x:y++;后,x、 y、z的值分别为____、____和 ____ 。
2. 已知int a=4,b=5,c;执行语句c=a=a>b后,a的值为 ____ 。
3. 已知int x=10,y=3 , z;执行语句printf("%d\n" , z = (x%y , x/y));后,输出结果为 ____ 。
种类:< <= = = >= > != 结合方向:自左向右 优先级别:
< <= 优先级6 > (高)
>=
== 优先级7 != (低)
关系表达式的值:是逻辑值“真”或“假”,
用1和0表示
例 int a=3,b=2,c=1,d,f;
a>b
(a>b)==c
b+c<a
3
C Programming Language
已知a=1,b=2,c=3
逻辑运算规则简化:
⑴、两个表达式作&&,只要一个的值为0, 不必计算另一个,该表达式的值为0。 例:int a=0,b=2;a && (b+=b)
⑵、两个表达式作 || ,只要一个的值非0, 不必计算另一个,该表达式的值为1。 例:int a=5,b=2; a || (b+=b) 例:a=1;b=2;c=3;d=4;m=1;n=1; (m=a>b)&&(n=c>d) m=?0 ,n=?1
|| (12)
! :从右向左 && :从左向右 || :从左向右
C语言教程课件第四章 选择结构
又称开关语句。 支,又称开关语句 1、语句形式: 、语句形式: 千万不 switch(表达式 表达式) 表达式 能接(; 能接 ;) { 号数值型 case 常量 语句 ;或 常量1: 语句1; 字符型 case 常量 语句 ; 常量2: 语句2; case 常量 语句 常量表达式的值必须 常量3: 语句3; ; ....... 互不相同, 互不相同,否则执行 时将出现矛盾, case 常量 语句时将出现矛盾,即同 常量n: 语句n; ; 一个开关值, 一个开关值,将对应 default : 语句 语句n+1; ; 多种执行方案。 多种执行方案。 }
程序运行情况如下: 程序运行情况如下: 3↙ ↙ Wednesday Thursday Friday Saturday error
switch”语句中 语句中, 常量表达式” 在“switch 语句中,“case 常量表达式” 只相当于一个语句标号, 只相当于一个语句标号,表达式的值和某标号相 等则转向该标号执行, 等则转向该标号执行,但不能在执行完该标号的 语句后自动跳出整个switch 语句, 语句后自动跳出整个switch 语句,因此会继续执 行所有后面语句的情况。 行所有后面语句的情况。 为此,C语言提供了一种break语句 为此,C语言提供了一种break语句,其功 ,C语言提供了一种break语句, 能是可以跳出它所在的switch语句。 switch语句 能是可以跳出它所在的switch语句。
语句执行流程: 语句执行流程:
假(0) 表达式1 表达式1 真(非0) 非 语句1 语句 表达式2 表达式2 真(非0) 非 语句2 语句 语句n 语句 语句n+1 语句 假(0) 假(0)
表达式2 表达式2
4.3.2 if语句的嵌套 语句的嵌套
C语言程序课件ppt第4章选择结构程序设计谭浩强C程序设计第四版
C★
A★
●B
4.2.1 用if语句处理选择结构举例
C★ A ●★ ● B
4.2.1 用if语句处理选择结构举例
C★ A ● ●★ B
#include <stdio.h> int main() { float a,b,t;
scanf("%f,%f",&a,&b);
if(a>b) 如果a>b
{ t=a;
a=b; 将a和b的值互换
b=t; } printf("%5.2f,%5.2f\n",a,b); return 0; }
#include <stdio.h>
int main()
{ float a,b,t;
scanf("%f,%f",&a,&b);
if(a>b)
{ t=a; a=b;
选择结构,用if语句实现的
a && b 真 假 假 假
a || b 真 真 真 假
4.4.1 逻辑运算符及其优先次序
➢逻辑运算符的优先次序
! → && → ||
(!为三者中最高)
➢与其他运算符的优先次序
! 算术运算符 关系运算符
&& 和 || 赋值运算符
(高) (低)
4.4.2 逻辑表达式
➢ 逻辑表达式的值应该是逻辑量“真”或“假” ➢ 编译系统在表示逻辑运算结果时
4.3.1关系运算符及其优先次序
c>a+b a>b==c a==b<c a=b>c
等效于 c>(a+b) 等效于 (a>b)==c 等效于 a==(b<c) 等效于 a=(b>c)
《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章 选择结构程序设计
转换成小写字母,否则直接输出*/
printf("ch=%c\n",ch);
}
4.3 switch语句
C语言还提供了另一种用于多分支选择的switch语句,这种 语句把一个表达式的值和一个整数或字符常量表中的元素逐一比 较,发生匹配时,与匹配常数关联的语句被执行。 switch语句的一般形式:
switch(表达式) {case 常量表达式1:语句1;[break;] case 常量表达式2:语句2;[break;] ...... case 常量表达式n:语句n;[break;] [default:语句n+1;[break; ]] }
2\n");
else { if (score<90) printf("Grant grade:
else printf(“Grant grade:
1\n”);}
}
【例4.8】 if语句的嵌套应用。
#include<stdio.h>
main()
{
int a,b;
printf("input a,b=");
if语句中又包含一个或多个if语句称为if语句的嵌套。 一般形式为: if()
if() 语句1; else 语句2 ; else if() 语句3; else 语句4;
【例4.7】 使用嵌套的if语句实现相同的功能,首先根据成绩
的取值范围处理分为两种情况:有或者没有助学金,如果有则
进一步判别等级是一等、二等或三等助学金。
4.1 引例
1.问题描述——学生助学金评定 助学金是高等院校资助贫困学生的一项重要举措,一般助学金 的评定要参考学生的学习成绩。假定助学金的评选规则为:综 合平均成绩在90分及以上的同学可获一等助学金;在 80分 (包括80分)至90分之间的同学可获二等助学金;在60分(包 括60分)至80的同学可获三等助学金;60分以下的同学不能获 助学金。 2.引例分析 首先用最简单的方式处理评定结果:根据某位同学的成绩判断 他能否获取助学金,输出不获得助学金的提示信息,算法的流 程图如图4-1所示。
C语言程序设计第4章选择结构程序设计简明教程PPT课件
例:a<c-d
‘a’+5>c -i-5*j==k+1 a==b<c
C语言中没有专用是“真”和“假”。
C语言程序设计 第4章 选择结构程序设计 5
【例4.1】关系表达式的应用 #include <stdio.h> int main() { char c='m'; int i=2,j=1,k=6; float x=3e+5,y=1.85; printf("%d,%d\n",'a'+7<c,-i-2*j<=k+1); printf("%d,%d\n",1<j<5,x-5.25<=x+y); printf("%d,%d\n",i+j==-2*j+k,k==j==i+9); return 0; }
逐渐缩小判 断的范围
第4章 选择结构程序设计
13
补充1:流程图表示算法(ISO)
流程图是用一些图框来表示各种操作 用图形表示算法,直观形象,易于理解
起止框
输入输出框
判断框
处理框
流程线
连接点
注释框
补充2:流程图表示算法(NS)
N-S流程图用以下的流程图符号:
p Y A N B 当p1成立 A 循环结构 (当型)
思考:求5>2&&8<5-!0 的值
C语言程序设计 第4章 选择结构程序设计 10
逻辑运算符的短路特性:
在C语言中,&&和||逻辑运算符具有短路特性: (1)在一个或多个&&连接的逻辑表达式中,只要有一 个操作数为0(逻辑假),则停止后面的&&运算,因为 此时可以判断逻辑表达式结果为假。 (2)由一个或多个||连接的逻辑表达式中,只要遇到第 一个操作数不为0(逻辑真),则停止后面的||运算,因为 此时可以判断逻辑表达式结果为真。
