C语言课件:第5章 选择语句_第1页
C语言课件:第5章 选择语句_第2页
C语言课件:第5章 选择语句_第3页
C语言课件:第5章 选择语句_第4页
C语言课件:第5章 选择语句_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第5章选择语句 本章要点逻辑表达式if语句switch语句语句现在我们见过了return语句和表达式语句。C语言的语句:选择语句:if和switch语句。循环语句:while,do和for语句。跳转语句:break,continue和goto语句,return语句也算此类。复合语句:把几条语句组合成一条语句。空语句:不执行任何操作。5.1 逻辑表达式包括If语句在内的一些C语句必须测试表达式的值为“真(true)”或“假(false)”。例如if语句要检测表达式ij,真值表明i小于j。在许多编程语言里面类似ij的表达式具有“布尔”类型或“逻辑”类型,值为真或假。而C语言的运算产生整数:0(假

2、)或1(真)5.1.1 关系运算符C的关系运算符如下: 大于 =大于等于关系运算符应用于表达式中的结果: 0(假)或 1(真)。关系运算符可用于比较整数和浮点数,也允许比较混合类型操作数。关系运算符关系运算符的优先级低于算术运算符。 i + j k - 1 意味着:(i + j) (k - 1 )关系运算符是左结合。表达式i j k是合法的,等价于: (i j) k,ij的结果(1或0)再与k比较大小。如果想检测j的值是否在i和k之间,得用逻辑表达式,单纯的关系运算是不行的,如下: i j & j k 5.1.2 判等运算符C的判等运算符如下: = 等于 !=不等于判等运算符和关系运算符一样是

3、左结合,结果也是0(假)或 1(真)。判等运算符的优先级低于关系运算符。 表达式 i j = j k 相当于 (i j) = (j y & x+ = y-; 结果:b=0,x = 3,y = 5短路计算例子1:int b, x = 3, y = 5;b = x y & x+ = y-; 结果:b=0,x = 3,y = 5例子2:int b,x = 9, y = 5;b = x y | x+ = y-; 结果:b=1,x = 9,y = 5若程序中出现两个例子的语句,对程序有什么影响?不要出现类似写法!若x=5,y=3则结果变成:b=0,x=6, y=2优先级名称符号结合性1(后缀)自增、自减

4、+ -左结合2(前缀)自增、自减+ -右结合一元正号、负号+ -右结合一元逻辑运算符非!右结合3乘法类* / %左结合4加法类+ -左结合5关系运算符 = =左结合6判等运算符= !=左结合7二元逻辑运算符与&左结合二元逻辑运算符或 |左结合8赋值= *= /= %= += -=右结合例:判断闰年 闰年的条件是:(1)能被4整除,但不能被100整除的年份都是闰年,如1996,2004年是闰年;(2)能被100整除,又能被400整除的年份是闰年。如1600,2000年是闰年。不符合这两个条件的年份不是闰年。问:如何利用逻辑表达式描述“某年是闰年”这个条件? 答: year%4=0 & year%

5、100!=0 | year%400=0如果优先级结合性记不住,可以用括号:5.2 if语句if 语句最简单的格式:if (表达式) 语句语句假(0)表达式真(非0)计算 (表达式)的值if语句的表达式能判定变量是否落在某个数值范围内,如判定 0 i n 是否成立:if (0 = i & i n) 相反情况判定:if (i = n) 5.2.1 复合语句为了让if语句处理多条语句,就需要引入复合语句(compound statement):多条语句例子:if (line_num = MAX_LINES) line_num = 0; page_num+; 复合语句也出现在循环和其他需要多条语句,但

6、C语言语法却要求是一条语句的地方。5.2.2 else子句if (表达式) 语句1else 语句2 语句1 语句2非00表达式例子:if (i j) max = i;else max = j;if语句的嵌套/找出i、j和k中的最大值if (i j) if (i k) max = i; else max = k;else if (j k) max = j; else max = k;/增加花括号,增强可读性if (i j) if (i k) max = i; else max = k; else if (j k) max = j; else max = k;5.2.3 级联式if语句if (表达

7、式1 )语句1else if(表达式2)语句2else if(表达式3)语句3else if(表达式m)语句melse 语句n级联式if语句if (n 0) printf(n is less than 0n);else if (n = 0) printf(n is equal to 0n);else printf(n is greater than 0n);例子:计算股票经纪人的佣金股票经纪人的佣金计算表:交易额范围佣金费用低于$2,500$30 + 1.7%$2,500$6,250$56 + 0.66%$6,250$20,000$76 + 0.34%$20,000$50,000$100 +

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

9、ion = 30.00f + .017f * value;else if (value 6250.00f) commission = 56.00f + .0066f * value;else if (value 20000.00f) commission = 76.00f + .0034f * value;else if (value 50000.00f) commission = 100.00f + .0022f * value;else if (value 500000.00f) commission = 155.00f + .0011f * value;else commission =

10、 255.00f + .0009f * value;if (commission j ? i : j;/* k is now 2 */k = (i = 0 ? i : 0) + j;/* k is now 3 */条件运算符的优先级,只比赋值运算符高,比其他的都低。例子例:if(ab) max=a; else max=b;替换为:max=(ab)?a:b;可以应用于return语句:return i j ? i : j;可以应用于printf语句:printf(%dn, i j ? i : j); 5.2.6 C89中的布尔值C89没有定义布尔值类型。可以定义一个int变量,赋值为0或1:in

11、t flag;flag = 0;flag = 1;5.2.6 C89中的布尔值为了程序更便于理解,可以定义宏:#define TRUE 1#define FALSE 0使用上述的宏:flag = FALSE;flag = TRUE;例子判定flag为真if (flag = TRUE) 或:if (flag) 判定flag为假if (flag = FALSE) 或:if (!flag) 定义类型的宏定义一个int型的宏:#define BOOL int#define TRUE 1#define FALSE 0声明布尔型时就用BOOL代替intBOOL flag=TRUE;5.2.7 C99中的布

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

13、 printf(Excellent);else if (grade = 3) printf(Good);else if (grade = 2) printf(Average);else if (grade = 1) printf(Poor);else if (grade = 0) printf(Failing);else printf(Illegal grade);switch语句C语言提供switch语句做为上页用法的替换 switch (grade) case 4: printf(Excellent); break; case 3: printf(Good); break; case 2:

14、 printf(Average); break; case 1: printf(Poor); break; case 0: printf(Failing); break; default: printf(Illegal grade); break;switch语句switch语句比级联式if语句更容易阅读,执行速度也快。其格式如下:switch (表达式) case 常量表达式1: 语句1case 常量表达式2: 语句2case 常量表达式n: 语句ndefault :语句n + 1switch语句一般形式:switch( 表达式) case E1: 语句组 1; break; case E2

15、: 语句组 2; break; . case En: 语句组 n; break; default: 语句组 ; break; switch语句控制表达式: switch后边的表达式要求是整型(C语言字符也是当成整数处理),不能用浮点数和字符串。分支标号: case 常量表达式常量表达式不能包含变量和函数调用。语句:每个分支标号后可以跟任意数量的语句,不需要花括号语句最后通常是break语句switch语句多个分支共用一组语句: switch (grade) case 4: case 3: case 2: case 1: printf(Passing); break; case 0: print

16、f(Failing); break; default: printf(Illegal grade); break;switch语句为了节省空间,可把多个分支放一行。switch (grade) case 4: case 3: case 2: case 1:printf(Passing);break;case 0: printf(Failing);break;default: printf(Illegal grade);break;不要求必须有default,如果没有,控制表达式的值和任何分支都不匹配,就会传给switch后面的语句。break的作用执行break语句,就可以跳出switch语句

17、,继续执行switch后面的语句。如果没有break语句,就会从一个分支继续到下一个分支。例子:switch (grade) case 4: printf(Excellent); case 3: printf(Good); case 2: printf(Average); case 1: printf(Poor); case 0: printf(Failing); default: printf(Illegal grade);如果grade等于3,结果为:GoodAveragePoorFailingIllegal grade例子:显示法定格式的日期要求按下列格式显示日期:Dated this

18、_ day of _ , 20_.要求用户以mm/dd/yy方式录入日期,然后按上面方式显示Enter date (mm/dd/yy): 7/19/14Dated this 19th day of July, 2014.用switch语句为日添加“th” (或“st”、 “nd” 、“rd”) 。date.c#include int main(void) int month, day, year; printf(Enter date (mm/dd/yy): ); scanf(%d /%d /%d, &month, &day, &year); printf(Dated this %d, day); switch (day) case 1: case 21: case 31: printf(st); break; case 2: case 22: printf(nd); break; case 3: case 23: printf(rd); break; default: printf(th); break; printf( day of ); switch (month

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论