版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章选择结构程序设计
掌握关系、逻辑运算符与表达式掌握if语句和switch语句的格式及执行过程能设计选择结构程序主要任务:1主要内容
关系运算符和关系表达式
逻辑运算符和逻辑表达式if语句switch语句2引例计算函数值:输入x的值判断x的值根据x的值,计算y的值输出y的值步骤②③不能用顺序结构程序实现,需引入选择结构程序3内容提要关系表达式逻辑表达式选择结构控制语句if语句if语句的三种形式if语句的嵌套条件表达式switch语句4一、关系运算符和关系表达式关系运算:对两个量进行“比较运算”关系运算符:<、<=、>、>=、==、!=优先级别:高低算术运算符、关系运算符、赋值运算符高低如:c>a+b
相当于c>(a+b)a==b<c相当于a==(b<c)a=b>c相当于a=(b>c)注意:区分“=”与“==”5一、关系运算符和关系表达式关系表达式:用关系运算符将两个表达式连接起来的有意义的式子如:x!=0‘a’==‘A’a*a+b*b<c*c说明:数值量比较:数字的大小字符量比较:ASCII码的大小关系表达式的值:真(1)、假(0)结合规则:左结合6二、逻辑运算符和逻辑表达式逻辑运算符:
!(非)、&&(与)、||(或)优先级别:高低!算术运算符关系运算符&&||赋值运算符高低a>b&&b>c(a>b)&&(b>c)a!=b&&c!=0(a!=b)&&(c!=0)!a||a>b(!a)||(a>b)
5>3&&2||!8<4-2((5>3)&&2)||((!8)<(4-2))如:7!aa&&-54||0二、逻辑运算符和逻辑表达式逻辑量:当一个量(基本类型的常量或变量)用作判断时,C编译系统认为:非0——真、0——假逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来的有意义的式子(单个逻辑量、关系表达式是逻辑表达式的特例)逻辑表达式的值:真(1)、假(0)如:若a=4,则:0118举例判断某年year是否闰年?(闰年:能被4整除,但不能被100整除;或能被400整除)year%4==0&&year%100!=0||year%400==0练习:写出C语言的表达式
|x|>2
x≤1+a
并且y≤b
的定义域Abs(x)>2
或
x>2||x<-2x<=1+a&&y<=b(x>=2||x<=1)&&x!=09举例写出表达式的值
a=2,b=0,c=-2.5a*b||c
!b&&c0||a1&&!a/c10三、if语句的三种形式——条件执行条件执行if(P)A
P为条件逻辑表达式,A为语句if(a>0)printf(“Aispositive.”\n);if(x>y){z=y;y=x;x=z;}N-S结构图
P
TFA11
P
TFA
BN-S结构图三、if语句的三种形式——分支选择分支选择if(P)AelseBif(a>0)printf(“Aispositive.”\n);elseprintf(“Aisn’tpositive.”\n);if(ch>='a'&&ch<='z'){ch=ch-32;
printf("%c\n",ch);}elseprintf("%c\n",ch);注意:
A或B既可以是单语句,也可以是复合语句
else部分不能独立存在,即else前一定有一个分号,它必定是if语句的一部分12三、if语句的三种形式在C语言中,表达式P的值为非0时,系统均按真值处理
如:if(‘a’)printf(“ok!”);x=-5;if(x)printf(“ok!”);y=0;if(y==0)printf(“ok!”);
if(y)printf(“ok!”);13读程序#include<stdio.h>voidmain(){floatx,y;
printf(“enterx:”);
scanf(“%f”,&x);if(x==0.)y=1;elsey=(x*5+1)/x;
printf(“\nx=%4.1f\ty=%4.1f\n”,x,y);}enterx:
2x=2.0y=5.514举例输入一个整数a,判断它是偶数还是奇数?偶数:a%2==0#include<stdio.h>voidmain(){inta;
printf(“inputanumber:”);
scanf(“%d”,&a);if(a%2==0)printf(“%diseven\n”,a);elseprintf(“%disodd\n”,a);}inputanumber:123123isodd15三、if语句的三种形式——阶梯式阶梯式的if-else语句(elseif形式)if(P1)S1elseif(P2)S2…elseif(Pn)Sn[elseSn+1]依次计算并判断表达式Pi,为非0时执行后面的语句,都为0时,执行语句Sn+1无论执行完那个语句分支,都转到后续语句过程:16三、if语句的三种形式——阶梯式N-S图
P1
TFP2S1TFS2
Pn
TF
SnSn+117举例评价学生的成绩score≥80‘A’80>score≥70‘B’70>score≥60‘C’60>score‘D’
BFscore>=60score>=70score>=80TTFFATCD18程序:#include<stdio.h>voidmain(){intscore;
printf(“inputascore:”);
scanf(“%d”,&score);if(score>=80)printf(“A\n”);
else
if(score>=70)printf(“B\n”);
else
if(score>=60)printf(“C\n”);
else
printf(“D\n”);}19四、if语句的嵌套
P
TFA
Bif(P1)
if(P2)A
elseBelse
if(P3)CelseD
P3
TFC
D
P2
TFA
B
P1
TF
20四、if语句的嵌套注意:else总是与最近的if匹配课本P101程序1程序2程序3程序421四、if语句的嵌套比较:if(x)if(y)printf(“1”);elseprintf(“2”);if(x){if(y)printf(“1”);}elseprintf(“2”);与通过加“{}”,可以改变else的层位,从而改变程序的执行流程。22举例判断某年year是否闰年?思路:年份year为闰年的条件为①能够被4整除,但不能被100整除的年份;②能够被400整除的年份。只要满足任意一个就可以确定它是闰年。例如:1996、2000是闰年;1998、1900不是闰年设定标志变量leap,只要符合其中一个条件的就是闰年,令leap=1;否则令leap=0
23算法:定义变量year、leap
输入年份year
能被4整除且不能被100整除?
TF
能被400整除?
leap=1
TFleap=1leap=0leap=1?TF
是闰年不是闰年year%400==0year%4==0&&year%100!=024程序:include<stdio.h>voidmain(){intyear,leap;
scanf("%d",&year);if(year%4==0&&year%100!=0)leap=1;
else
if(year%400==0)leap=1;
elseleap=0;
if(leap==1)
printf("%disaleapyear\n",year);
else
printf("%disnotaleapyear\n",year);}25五、条件运算符和条件表达式条件运算符:?和:惟一的三目运算符条件表达式:e1
?
e2
:
e3
如:a>b?a:bx==0.?1:sin(x)/x执行过程:计算e1e1的值为非0(真),计算并返回e2的值,否则计算并返回e3的值运算顺序:高于赋值运算,低于算术、关系、逻辑运算条件运算符的结合方向是“右结合”26例1#include<stdio.h>voidmain(){inta,b,max;
printf(“inputa,b:”);
scanf(“%d,%d”,&a,&b);max=a>b?a:b;
printf(“max=%d\n”,max);}printf(“max=%d\n”,max=a>b?a:b);printf(“max=%d\n”,a>b?a:b);或者思考:n个数中找出最大数或最小数?27例2输入一个字符,如果是大写字母,则将其转换为小写字母输出,否则直接输出。输入:用getchar
或scanf
函数ch是否为大写字母:ch>='A'&&ch<='Z'(或ch>=65&&ch<=90)大写字母转换为小写字母:ch=ch+32(或ch+(‘a’-’A’))输出:用putchar
或printf
函数思路:28putchar(ch>='A'&&ch<='Z'?ch+32:ch);putchar('\n')程序:#include"stdio.h"voidmain(){charch;
ch=getchar();if(ch>='A'&&ch<='Z')
ch=ch+32;
printf("%c\n",ch);}可使用条件表达式代替对于二分支,并对同一变量赋值时使用条件表达式较方便29六、switch语句亦称开关语句、多分支选择语句。相比于用嵌套的if语句实现多路分支问题,其程序结构更清晰、易读格式:switch(表达式e){case常量表达式1:语句序列1case常量表达式2:语句序列2……case常量表达式n:语句序列n
[default:语句序列n+1]}计算e的值若与常量表达式i的值一致,则从语句i开始执行,直到遇到break语句或switch语句中的”}”若与任何常量表达式均不一致时,则执行default语句或执行后续语句过程:30六、switch语句N-S结构图注意:常量表达式仅起语句标号作用,不进行条件判断常量表达式的值必须惟一,没有先后次序多个case语句可共用一组执行语句计算表达式常量表达式1语句序列1常量表达式2语句序列2…………常量表达式n语句序列ndefault语句序列n+131说明:switch语句的书写格式:语句体本身必须用花括号括起;case和default后面如果有多条语句,则可以不必使用花括号;case和常量表达式之间必须有空格;default可以写在语句体的任何位置,也可以省略不写break语句可以改变case的语句标号作用,终止后续case语句序列的执行。
switch语句和break语句结合,可以实现程序的选择控制(break语句还可以在循环语句中使用)允许switch嵌套使用,但同一个switch语句中,任意两个case的常量表达式值不能相同。32六、switch语句例2:switch(a){case5:printf("&");case2:printf("#");
default:printf("$");}当a等于5,输出:$当a等于2,输出:#$当a是其他值,输出:$switch(x){case1:printf(“statement1”);break;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论