c语言课件4选择结构.ppt
《c语言课件4选择结构.ppt》由会员分享,可在线阅读,更多相关《c语言课件4选择结构.ppt(44页珍藏版)》请在冰点文库上搜索。
共37页第1页,第五章,选择结构,C语言程序设计,1,共37页第2页,4.1C语句概述,2,共37页第3页,4.1C语句概述,一个c程序可以有若干个源程序文件组成一个源文件可以有若干个函数和预处理命令以及全局变量声明部分组成一个函数有函数首部和函数体组成函数体由数据声明和执行语句组成C语句分为,3,共37页第4页,4.1C语句概述,
(一)控制语句完成一定的控制功能1if()else条件语句6break间断语句2for()循环语句7switch()开关语句3while()循环语句8goto转向语句4dowhile();循环语句9return返回语句5continue继续语句,4,共37页第5页,4.1C语句概述,5,共37页第6页,4.1C语句概述,6,共37页第7页,4.1C语句概述,7,共37页第8页,4.1C语句概述,8,共37页第9页,4.2赋值语句,赋值语句是由赋值表达式加上一个分号构成例:
a=100赋值表达式a=100;赋值语句条件中不能含有赋值符号,但是赋值表达式可以包含于条件表达式中例:
if(a=b)t=a;错误if(a=b)0)t=a;正确,9,共37页第10页,本章要点:
正确使用关系表达式和逻辑表达式掌握用if语句和switch语句实现选择结构掌握条件运算符的使用,10,共37页第11页,选择语句是控制程序执行选择结构的语句是程序实现逻辑判断的唯一形式,根据学生分数判断是否及格根据学生分数如何进行分级一元二次方程求解,自然语言:
如果那么否则C语言:
分支语句,如何解决?
为什么要用选择结构?
问题,11,共37页第12页,5.关系运算符和关系表达式,5.1.1关系运算符1.关系运算符关系运算是进行比较大小的运算,并产生运算结果1(真)或0(假)。
语言中的关系运算符有种:
、!
优先次序:
前种同级,高于后种(后种同级)关系运算符的结合性为从左到右;,算术运算符(高)关系运算符赋值运算符(低),如:
32ab,注意!
12,共37页第13页,5.1.2关系表达式定义:
用关系运算符将两个表达式连接起来的式子。
形式:
表达式1关系运算符表达式2如:
(ab)(by、s+fd关系表达式的值为逻辑值“真”或“假”.注意:
语言没有逻辑型数据,关系表达式的真、假是以数值“”代表“真”,以“”代表“假”。
例:
设a=3,b=2,c=1,求下列表达式的值?
cb,值为0(假),(a-b)=1,值为1(真),(b+c)a,值为0(假),a=534,a的值为0,13,共37页第14页,练习,判断奇、偶数设有变量定义intz;分析z%2=0的值?
如果z为偶数,则z%2=0的值为1;否则z为奇数,则z%2=0的值为0;因此,z%2=0是断言“z是偶数”的c语言判断式。
2.判断x与y的某位数字是否相同x%10=y%10判断个位数上数字相同如:
15%10=25%10为真,16%10=18%10为假,14,共37页第15页,5.2.1逻辑运算符C语言提供三种逻辑运算符:
&(逻辑与)、|(逻辑或)、!
(逻辑非)说明:
(1)“&”和“|”是“双目(元)运算符”,它要求有两个操作数。
(2)“!
”是“单目(元)运算符”,只要求有一个运算量。
(3)优先级次序:
!
&|,5.2逻辑运算符和逻辑表达式,a&ba、b均为真,则a&b为1(真)。
a|ba、b之一为真,则a|b为1(真)。
!
a若a为真,则!
a为假。
15,共37页第16页,运算符的优先级,!
(非)(高)算术运算符关系运算符&和|赋值运算符(低),16,共37页第17页,5.2.2逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子.规定:
判断一个逻辑量为“真、假”的方法:
“非”代表“真”,“”代表“假”例:
写出11&x101x10例:
a+bc&c=d例:
(m=ab)&(n=c-d)例:
a|b|c如果a为真,就不再判断b和c了,强调:
在逻辑表达式的求解过程中,只要能确定表达式的值,就不继续向下求解其他的值了.,(a+b)c)&(c=d),17,共37页第18页,逻辑运算真值表,18,共37页第19页,练习:
控制条件的正确表示方法判断变量ch是否为数字字符ch=0&ch=a&ch=A&ch=a&ch=A&ch=Z)判断变量ch是否为空格、回车ch=ch=n判断变量year是否为闰年(year能被4整除但不能被100整除,或year能被400整除)(year%4=0&year%100!
0)|(year%400=0)(year%4!
=0)|(year%100=0&year%400!
=0),19,共37页第20页,根据给定表达式决定要执行的操作。
执行过程:
计算表达式的值,判断表达式值为真时执行语句组,否则跳过语句继续执行后续语句。
单选择,语句格式:
if(表达式)语句组;例:
if(ab)x=a;,1.单选择if语句,表达式可以是关系式或逻辑式,5.3选择语句,5.3.1if语句,20,共37页第21页,2.双选择if语句,语句格式:
if(表达式)语句组1;else语句组2;,双选择,功能:
计算表达式的值,当表达式值为非零时执行语句组1,否则执行语句组2。
21,共37页第22页,有关if语句的说明,表达式后面不加分号语句之后有分号else不是语句,不能单独使用当if后有多个执行语句时,必须用将多个语句括起来,构成一个复合语句,之外不必有分号。
22,共37页第23页,#includestdio.hmain()inta,b,s;scanf(%d%d,例1,运行时输入:
34,输出:
16,23,共37页第24页,指出下列程序的输出结果:
#includestdio.hmain()inta;scanf(%d,程序运行:
输入58输出:
585858输入30输出?
例2,24,共37页第25页,#includestdio.hmain()inta,b,max;printf(Inputaandb:
);scanf(%d%d,求a和b两数中较大的一个。
例3,25,共37页第26页,#includestdio.hmain()inta,b,c=25;a=10c;b=a=a;printf(a=%d,b=%d,a,b);if(c)printf(c=%d,c);,运行结果:
a=0,b=1,c=25,例4,26,共37页第27页,#includestdio.hmain()inta,b,t;printf(Inputaandb:
);scanf(%d%d,按由小到大的顺序输出两个数。
例5,27,共37页第28页,5.3.2if语句的嵌套,格式:
if(表达式)if(表达式1)语句11;else语句12;elseif(表达式2)语句21;else语句22;,在if语句的“语句1”或“语句2”中又包含着if语句,判断表达式的值,若为非0,再判断表达式1的值,非0执行语句11,否则执行语句12若表达式的值为0,再判断表达式2的值,非0执行语句21,否则执行语句22,功能:
28,共37页第29页,if语句的常用格式:
if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式m)语句melse语句n,仅执行表达式为真的elseif后的内嵌语句,若所有的表达式值都为0,则执行最后一个else后的内嵌语句.,29,共37页第30页,下列程序段表示的数学式子?
y=-1;if(x!
=0)if(x0)y=2*sin(x);elsey=0;,程序段表示的数学式1:
0(x0),讨论:
给第二个if行加后表示的数学式?
程序段表示的数学式2:
-1(x0),数学式1程序可表示为:
if(x0)y=0;elseif(x=0)y=-1;elsey=2*sin(x);,思考,强调:
if和else可成对出现,也可不成对出现,每个else都与距其最近的if配对。
30,共37页第31页,从键盘输入一个字符,当该字符是+、*或/时,显示其对应的英文单词:
plus、minus、multiplication或division。
若输入其他字符,则显示“Error!
”。
#includemain()charc;c=getchar();if(c=+)printf(plusn);elseif(c=-)printf(minusn);elseif(c=*)printf(multiplicationn);elseif(c=/)printf(divisionn);elseprintf(Error!
n);,例6,31,共37页第32页,switch语句该语句为开关语句,适合解决多分支的情况。
格式:
switch(表达式)case常量表达式:
语句序列;case常量表达式:
语句序列;case常量表达式n:
语句序列n;default:
语句序列n+1;说明:
执行顺序如下:
5.3.3switch语句问题:
为什么引出switch语句?
可以是一条语句,也可以是多条语句。
多条语句不必用括号括起来。
在执行完某个case后的语句序列后,将自动转移到下一个case继续执行。
起语句标号的作用,不进行条件判断,同一个switch语句中的各个常量表达式的值必须互不相等。
可以是整型、字符型。
32,共37页第33页,a.计算表达式的值;b.找到与表达式的值相同的case常量表达式,执行该case后边的语句序列,之后依次往下执行语句块。
表达式,语句序列1,语句序列2,语句序列n,语句序列n+1,33,共37页第34页,每个语句序列的最后一条语句后增加break语句,执行流程为:
34,共37页第35页,根据考试成绩的等级打印出百分制分数段。
采用多分支情况程序段:
switch(grade)caseA:
printf(85100n);caseB:
printf(7084n);caseC:
printf(6069n);caseD:
printf(60n);default:
printf(error);若grade=A时,输出结果为?
当grade=B时,输出结果为?
例7,35,共37页第36页,流程图为:
36,共37页第37页,说明:
case和default的次序可以交换。
例:
#include“stdio.h”main()intc=3;switch(c)case1:
c+;default:
c+;break;case2:
c+;printf(c=%dn,c);,case3:
c+;,37,共37页第38页,多个case可以执行同一个语句序列。
switch(c=getchar()casey:
caseY:
printf(“Youareright.n”);,inta=10;switch(a)case10:
case9:
a+;case8:
case7:
a+=2;break;,38,共37页第39页,条件运算符:
唯一的三目操作符,要求有三个操作对象。
格式:
表达式?
表达式:
表达式功能:
判断表达式的值,该值为“非0”,则取表达式2的值,为“0”时,取表达式3的值。
如:
max=ab?
a:
b若a=3,b=2,则max=?
说明:
(1)条件运算符优于赋值运算符。
(2)条件运算符的结合方向为“自右向左”。
如:
当a=1,b=2,c=3,d=4时,表达式ab?
a:
cd?
c:
d,值为:
?
如:
若x=1,y=0,a=3,b=-3表达式(yx?
a:
b)&a+b值为:
?
4,0,5.4条件运算符,39,共37页第40页,(3)条件表达式中的表达式的类型可以与表达式和表达式的类型不同。
条件表达式值的类型为二者中较高的类型。
如:
xy?
1.2:
6,当xy成立时条件表达式的值为1.2,否则为实型数据6.0。
c=xy?
1:
s,当xy成立时c=1,否则c=s。
40,共37页第41页,if(y0)x=-y;elsex=y;,(y0)?
x=-y:
x=y;,等价,等价,x=(y0)?
-y:
y;,说明:
ifelse可以完成与条件运算符(?
:
)完全相同的任务,并且可以进行相应的转换。
41,共37页第42页,将输入的大写字母转换为小写字母.#includestdio.hmain()charch;scanf(%c,printf(%c,ch)输入输出a,例8,42,共37页第43页,main()/*输入今天的日期,显示明天的日期。
*/intyear,month,day;scanf(%d%d%d,43,共37页第44页,小结,if语句实现单分支if-else语句实现两个分支switch-break语句实现多分支嵌套if语句可以实现复杂的分支结构(注意else与最近的if结合)注意分支条件的正确设置。
44,