C语言课件:第5章 选择语句

上传人:夏** 文档编号:570257075 上传时间:2024-08-03 格式:PPT 页数:46 大小:652.50KB
返回 下载 相关 举报
C语言课件:第5章 选择语句_第1页
第1页 / 共46页
C语言课件:第5章 选择语句_第2页
第2页 / 共46页
C语言课件:第5章 选择语句_第3页
第3页 / 共46页
C语言课件:第5章 选择语句_第4页
第4页 / 共46页
C语言课件:第5章 选择语句_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《C语言课件:第5章 选择语句》由会员分享,可在线阅读,更多相关《C语言课件:第5章 选择语句(46页珍藏版)》请在金锄头文库上搜索。

1、第5章: 选择语句1第5章选择语句选择语句第5章: 选择语句l 本章要点n n逻辑表达式逻辑表达式n nifif语句语句n nswitchswitch语句语句第5章: 选择语句语句现在我们见过了return语句和表达式语句。C语言的语句:选择语句:选择语句:if和switch语句。循环语句:循环语句:while,do和for语句。跳转语句:跳转语句:break,continue和goto语句,return语句也算此类。复合语句:复合语句:把几条语句组合成一条语句。空语句:空语句:不执行任何操作。第5章: 选择语句5.1 逻辑表达式包括If语句在内的一些C语句必须测试表达式的值为“真(true)

2、”或“假(false)”。例如if语句要检测表达式ij,真值表明i小于j。在许多编程语言里面类似ij的表达式具有“布尔”类型或“逻辑”类型,值为真或假。而C语言的运算产生整数:0(假)或1(真)第5章: 选择语句5.1.1 关系运算符C的关系运算符如下:大于=大于等于关系运算符应用于表达式中的结果:0(假)或1(真)。关系运算符可用于比较整数和浮点数,也允许比较关系运算符可用于比较整数和浮点数,也允许比较混合类型操作数。混合类型操作数。第5章: 选择语句关系运算符关系运算符的优先级低于算术运算符。关系运算符的优先级低于算术运算符。i+jk-1意味着:(i+j)(k-1)关系运算符是左结合左结合

3、。表达式ijk是合法的,等价于:(ij)k,ij的结果(1或0)再与k比较大小。如果想检测j的值是否在i和k之间,得用逻辑表达式,单纯的关系运算是不行的,如下:ij&jk第5章: 选择语句5.1.2 判等运算符C的判等运算符如下的判等运算符如下:=等于!=不等于判等运算符和关系运算符一样是左结合左结合,结果也是0(假)或1(真)。判等运算符的优先级低于关系运算符。表达式ij=jk相当于(ij)=(jy&x+=y-;结果:b=0,x=3,y=5第5章: 选择语句短路计算例子1:intb,x=3,y=5;b=xy&x+=y-;结果:b=0,x=3,y=5例子2:intb,x=9,y=5;b=xy|

4、x+=y-;结果:b=1,x=9,y=5若程序中出现两个例子的语句,对程序有什么影响?不要出现不要出现类似写法类似写法!若x=5,y=3则结果变成:b=0,x=6,y=2第5章: 选择语句优先级优先级名称名称符号符号结合性结合性1(后缀后缀)自增、自减自增、自减+ -左结合左结合2(前缀前缀)自增、自减自增、自减+ -右结合右结合一元正号、负号一元正号、负号+ -右结合右结合一元逻辑运算符非一元逻辑运算符非!右结合右结合3乘法类乘法类* / %左结合左结合4加法类加法类+ -左结合左结合5关系运算符关系运算符 = =左结合左结合6判等运算符判等运算符= !=左结合左结合7二元逻辑运算符与二元逻

5、辑运算符与&左结合左结合二元逻辑运算符或二元逻辑运算符或 |左结合左结合8赋值赋值= *= /= %= += -=右结合右结合第5章: 选择语句例:判断闰年例:判断闰年 闰年的条件是:(1)能被4整除,但不能被100整除的年份都是闰年,如1996,2004年是闰年;(2)能被100整除,又能被400整除的年份是闰年。如1600,2000年是闰年。不符合这两个条件的年份不是闰年。问:如何利用逻辑表达式描述“某年是闰年”这个条件? 答: year%4=0 & year%100!=0 | year%400=0year%4=0 & year%100!=0 | year%400=0如果优先级结合性记不住

6、,可以用括号:第5章: 选择语句5.2 if语句if语句最简单的格式:if(表达式)语句语句语句假假(0)表达式表达式真真(非非0)v计算计算 (表达式表达式)的值的值vif语句的表达式能判定变量是否落在某个数值范围语句的表达式能判定变量是否落在某个数值范围内,内,如判定如判定 0 i n 是否成立:是否成立:if (0 = i & i n) v相反情况判定:相反情况判定:if (i = n) 第5章: 选择语句5.2.1 复合语句为了让if语句处理多条语句,就需要引入复合语句复合语句(compoundstatement):多条语句例子:if(line_num=MAX_LINES)line_n

7、um=0;page_num+;复合语句也出现在循环和其他需要多条语句,但C语言语法却要求是一条语句的地方一条语句的地方。第5章: 选择语句5.2.2 else子句if(表达式)语句1else语句2 语句语句1 语句语句2非非00表达式表达式v例子:例子:if (i j) max = i;else max = j;第5章: 选择语句if语句的嵌套/找出i、j和k中的最大值if(ij)if(ik)max=i;elsemax=k;elseif(jk)max=j;elsemax=k;/增加花括号,增强可读性if(ij)if(ik)max=i;elsemax=k;elseif(jk)max=j;else

8、max=k;第5章: 选择语句5.2.3 级联式if语句if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式m)语句melse语句n第5章: 选择语句级联式if语句if(n0)printf(nislessthan0n);elseif(n=0)printf(nisequalto0n);elseprintf(nisgreaterthan0n);第5章: 选择语句例子:计算股票经纪人的佣金股票经纪人的佣金计算表:交易额范围佣金费用低于$2,500$30+1.7%$2,500$6,250$56+0.66%$6,250$20,000$76+0.34%$2

9、0,000$50,000$100+0.22%$50,000$500,000$155+0.11%超过$500,000$255+0.09%最低收费39美元。第5章: 选择语句broker.c要求用户输入交易额,然后显示佣金数额:Entervalueoftrade:30000Commission:$166.00/* Calculates a brokers commission */#include int main(void) float commission, value; printf(Enter value of trade: ); scanf(%f, &value);第5章: 选择语句if

10、(value2500.00f)commission=30.00f+.017f*value;elseif(value6250.00f)commission=56.00f+.0066f*value;elseif(value20000.00f)commission=76.00f+.0034f*value;elseif(value50000.00f)commission=100.00f+.0022f*value;elseif(value500000.00f)commission=155.00f+.0011f*value;elsecommission=255.00f+.0009f*value;if(co

11、mmissionj?i:j;/*kisnow2*/k=(i=0?i:0)+j;/*kisnow3*/条件运算符的优先级,只比赋值运算符高,条件运算符的优先级,只比赋值运算符高,比其他的都低。比其他的都低。第5章: 选择语句例子例:if(ab)max=a;elsemax=b;替换为:max=(ab)?a:b;可以应用于return语句:returnij?i:j;可以应用于printf语句:printf(%dn,ij?i:j);第5章: 选择语句5.2.6 C89中的布尔值C89没有定义布尔值类型。可以定义一个int变量,赋值为0或1:intflag;flag=0;flag=1;第5章: 选择语句

12、5.2.6 C89中的布尔值为了程序更便于理解,可以定义宏:#defineTRUE1#defineFALSE0使用上述的宏:flag=FALSE;flag=TRUE;第5章: 选择语句例子判定flag为真if(flag=TRUE)或:if(flag)判定flag为假if(flag=FALSE)或:if(!flag)第5章: 选择语句定义类型的宏定义一个int型的宏:#defineBOOLint#defineTRUE1#defineFALSE0声明布尔型时就用BOOL代替intBOOLflag=TRUE;第5章: 选择语句5.2.7 C99中的布尔值*C99中提供了_Bool类型:_Boolfl

13、ag;_Bool是一个整型值(无符号整型),只能赋值为0或1。往_Bool变量中存储非零值会使值变为1:flag=5;/*flagisassigned1*/第5章: 选择语句C99中的布尔值C99提供了一个新头文件,该文件提供了bool宏。如果包括了,我们可以这样写:boolflag;/*sameas_Boolflag;*/头还提供了true和false两个宏表示1和0:flag=false;flag=true;第5章: 选择语句5.3 switch语句可以用级联式if语句,把表达式和一系列值比较:if(grade=4)printf(Excellent);elseif(grade=3)prin

14、tf(Good);elseif(grade=2)printf(Average);elseif(grade=1)printf(Poor);elseif(grade=0)printf(Failing);elseprintf(Illegalgrade);第5章: 选择语句switch语句C语言提供switch语句做为上页用法的替换switch(grade)case4:printf(Excellent);break;case3:printf(Good);break;case2:printf(Average);break;case1:printf(Poor);break;case0:printf(Fai

15、ling);break;default:printf(Illegalgrade);break;第5章: 选择语句switch语句switch语句比级联式if语句更容易阅读,执行速度也快。其格式如下:switch(表达式)case常量表达式1:语句1case常量表达式2:语句2case常量表达式n:语句ndefault:语句n+1第5章: 选择语句lswitch语句一般形式:switch(表达式)caseE1:语句组1;break;caseE2:语句组2;break;.caseEn:语句组n;break;default:语句组;break;第5章: 选择语句switch语句控制表达式:switc

16、h后边的表达式要求是整型(表达式要求是整型(C语言字符也是当成整语言字符也是当成整数处理),数处理),不能用浮点数和字符串不能用浮点数和字符串。分支标号:case常量表达式常量表达式常量表达式不能包含变量和函数调用。语句:每个分支标号后可以跟任意数量的语句,不需要花括号每个分支标号后可以跟任意数量的语句,不需要花括号语句最后通常是break语句第5章: 选择语句switch语句多个分支共用一组语句:多个分支共用一组语句:switch(grade)case4:case3:case2:case1:printf(Passing);break;case0:printf(Failing);break;d

17、efault:printf(Illegalgrade);break;第5章: 选择语句switch语句为了节省空间,可把多个分支放一行。switch(grade)case4:case3:case2:case1:printf(Passing);break;case0:printf(Failing);break;default:printf(Illegalgrade);break;不要求必须有不要求必须有default,如果没有,控制表达式的值和任何分支都不匹配,就会传给switch后面的语句。第5章: 选择语句break的作用执行执行break语句,就可以跳出语句,就可以跳出switch语句,继

18、续执行语句,继续执行switch后面的语句。后面的语句。如果没有break语句,就会从一个分支继续到下一个分支。例子:switch(grade)case4:printf(Excellent);case3:printf(Good);case2:printf(Average);case1:printf(Poor);case0:printf(Failing);default:printf(Illegalgrade); 如果grade等于3,结果为:GoodAveragePoorFailingIllegalgrade第5章: 选择语句例子:显示法定格式的日期要求按下列格式显示日期:Datedthis_

19、dayof_,20_.要求用户以mm/dd/yy方式录入日期,然后按上面方式显示Enterdate(mm/dd/yy):7/19/14Datedthis19thdayofJuly,2014.用switch语句为日添加“th”(或“st”、“nd”、“rd”)。第5章: 选择语句date.c#includeintmain(void)intmonth,day,year;printf(Enterdate(mm/dd/yy):);scanf(%d/%d/%d,&month,&day,&year);printf(Datedthis%d,day);switch(day)case1:case21:case3

20、1:printf(st);break;case2:case22:printf(nd);break;case3:case23:printf(rd);break;default:printf(th);break;第5章: 选择语句printf(dayof);switch(month)case1:printf(January);break;case2:printf(February);break;case3:printf(March);break;case4:printf(April);break;case5:printf(May);break;case6:printf(June);break;ca

21、se7:printf(July);break;case8:printf(August);break;case9:printf(September);break;case10:printf(October);break;case11:printf(November);break;case12:printf(December);break;printf(,20%.2d.n,year);return0;第5章: 选择语句表达式语句键盘上的误操作容易造成“什么也不做”表达式:比如输入:i=j;误输入为:i+j;某些编译器会检查无意义表达式,显示“statementwithnoeffect.”警告。第5章: 选择语句程序算法的描述通过本章和下一章的学习,应体会到程序设计的核心是算法。因此学习描述算法的工具是很重要的,常用的算法描述工具有传统流程图、N-S流程图、伪代码等。详见课程参考书籍C程序设计(第4版)(谭浩强著)第2章内容。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号