《《高级语言程序设计教学课件》第3章选择结构.ppt》由会员分享,可在线阅读,更多相关《《高级语言程序设计教学课件》第3章选择结构.ppt(50页珍藏版)》请在三一办公上搜索。
1、第三章 选择结构,C语言程序设计,2,学习目标,if语句switch语句关系运算与逻辑运算,3,3.1 选择结构概述,【例3-1】输入x的值,求分段函数y=f(x)的值,函数表示如下:,if(x0)y=x*x;else y=0;,4,#include void main(void)int x,y;printf(请输入x的值:);scanf(%d,请输入x的值:0y=0Press any key to continue,选择结构,5,3.2 关系运算与逻辑运算,学习运算符应注意的问题功能运算量要求运算量个数(单目运算符?双目运算符?)要求运算量类型(整型?实型?其它类型?)优先级别(优先级高?优
2、先级低?)结合方向(从左向右?从右向左?)结果的类型,6,3.2.1 关系运算,种类:=!=结合方向自左向右优先级别关系表达式的值是逻辑值真或假,用1和0表示,例ca+b ab!=ca=bc,例int a=3,b=2,c=1,d,f;ab(ab)=cb+cbf=abc,/*32,结果为1*/*1=1,结果为1*/*b+c=3,a=3,结果为0*/*ab结果为1;d=1*/*f=0*/,c(a+b)(ab)!=c a=(bc),7,注 意,应避免对实数作相等或不等的判断注意区分=与=,int a=0,b=1;if(a=b)printf(a equal to b);else printf(a no
3、t equal to b);,1.0/3.0*3.0=1.0 结果为将x=a的判断修改为:|x-a|可改写为:fabs(1.0/3.0*3.0-1.0)=1e-6,/应该为 a=b,假,8,【例3-3】x是float型变量,判断x是否等于 1/3,#include#include void main(void)float x;x=1/3.0;if(x=1/3.0)printf(x等于1/3n);elseprintf(x不等于1/3n);,x不等于1/3,x 等于1/3,(fabs(x-1/3.0)=1e-6),?,应避免对实数作相等或不等的判断,9,3.2.3 逻辑运算,种类:!&|逻辑运算真
4、值表,C语言中,运算量:0 表示假,非0 表示真,运算结果:0 表示假,1 表示真,1,1,0,0,1,0,1,0,1,0,0,1,0,0,1,1,10,优先级!算术运算关系运算&|赋值运算结合性,例 ab&xy a=b|x=y!a|ab,(ab)&(xy)(a=b)|(x=y)(!a)|(ab),例 a=4;b=5;!a a&b a|b!a|b 4&0|2 53&2|84-!0 c&d,/值为0/值为1/值为1/值为1/值为1/值为1/值为1,11,问题 在C语言中,能正确地表示数学关系0 x5 的表达式是:(A)x=0&x=0 AND x=0&x=5,12,短路特性 逻辑表达式求解时,并非
5、所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例 a(m=ab)&(n=cd)/结果m=0,n=1,13,【例3-2】逻辑运算举例,#include void main(void)int c,x=0,y=-5;printf(%d,%dn,!x*y,x,-5,02,1,11,0,0,如果表达式x+的逻辑值为1则不用再计算y+因此 c=1 x=x+1,+x:先执行x=x+1,再将x的值作为表达式+x的值。x+:先将x的值作为表达式x+的值,再执行x=x+1。,如果表达式x+的逻辑值为0则不用再计算y+因此 c=0 x=x+1,14,【常用的条件判断表
6、达式】,(1)int x;判断x是偶数:x%2=0;(2)char c;判断 c 是否为数字:c=0,15,3.3 两个分支的if语句,ifelse语句的基本形式格式 if(表达式)语句1else 语句2执行过程,16,说明:if后面的表达式类型任意语句可以是任意类型的语句,最好使用复合语句,考虑下面程序的输出结果:#include main()int x,y;scanf(%d,%d,Compile Error!,if(a=b,error C2181:illegal else without matching if,17,【例3-4】随机输入两个数,输出其中的大数,#include void
7、main(void)int a,b;printf(input two numbers:);scanf(%d%d,input two numbers:0 33 是最大数Press any key to continue,18,【例3-5】输入三角形的三边的边长,输出三角形的面积,三角形面积公式,19,#include#include void main(void)float a,b,c,p,s;printf(请输入三角形的三边:n);scanf(%f%f%f,三角形三边定理及推论:三角形任意两边之和大于第三边,任意两边之差小于第三边。,顺序结构,20,【例3-5】输入三角形的三边的边长,输出三角
8、形的面积,#include#include void main(void)float a,b,c,p,s;printf(请输入三角形的三边:n);scanf(%f%f%f,请输入三角形的三边:3 4 5area=6.000000Press any key to continue,请输入三角形的三边:1 2 3输入数据错误!Press any key to continue,21,3.4 一个分支的语句,if语句格式 if(表达式)语句执行过程,22,【例3-6】从键盘上随机的输入三个数,输出最大数,10,62,313456722,23445676,323238,max,a,b,c,max,ma
9、x,23,【例3-6】从键盘上随机的输入三个数,输出最大数,#include void main(void)int a,b,c,max;printf(输入三个数:);scanf(%d%d%d,输入三个数:3 5 88 是最大数Press any key to continue,24,【例3-7】从键盘上随机的输入三个数,从大到小输出三个数,a,b,c,if ab abif ac acif bc bcabt=a;a=b;b=t;,A,B,T,25,【例3-7】从键盘上随机的输入三个数,从大到小输出三个数,#include void main(void)int a,b,c,t;printf(输入三
10、个数:);scanf(%d%d%d,输入三个数:3 5 77,5,3Press any key to continue,26,3.5 多个分支的if语句,ifelse if语句的形式if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3else 语句n执行过程,27,【例3-8】从键盘上输入一个字符,判断该字符是数字、大写字母、小写字母或其它字符。,ASCII码表 0 9为数字 A Z为大写字母 a z为小写字母,0c9 48c57AcZ 65c90acz 97c122,c=0&c=A&c=a&c=z,28,【例3-8】从键盘上输入一个字符,判断该字符是数字、大
11、写字母、小写字母或其它字符。,#include void main(void)char c;printf(请输入一个字符:);c=getchar();if(c=0,请输入一个字符:bb是小写字母Press any key to continue,scanf(“%c”,29,【例3-9】从键盘上输入学生的成绩,输出学生成绩的等级,#include stdio.hvoid main(void)int score;printf(请输入学生的成绩:);scanf(%d,请输入学生的成绩:88良好Press any key to continue,else if(score=80),思考对于 score
12、100和score0的情况,可以认为是输入数据错误。那么程序将如何改写?,30,3.6 if语句的嵌套,在if语句中又包含一个或多个if语句,称为if语句嵌套一般形式,if(表达式1)if(表达式2)语句1 else 语句2else if(表达式3)语句3 else 语句4,31,if.else配对原则 当缺省时,else总是与前面最近的 未配对的 if配对,if(exp1)if(exp2)statement1 else statement2,if(exp1)if(exp2)statement1else statement2,if(exp1)if(exp2)statement1else sta
13、tement2,32,y=0;if(b!=0)if(a!=0)y=a/b;else printf(数据错误b=0!);,y=0;if(b!=0)if(a!=0)y=a/b;else printf(数据错误b=0!);,y=0;if(b!=0)if(a!=0)y=a/b;else printf(数据错误b=0!);,计算机理解为,改写为,【例】计算y=a/b的值,33,书写程序的缩进规则,同一级别的语句要对齐else语句应与其配对的if语句垂直对齐。大括号放在单独的一行中,以表明其包含的语句是一个语句块。每行只放一条语句。,34,总结,if语句的语法规则表达式必须用括号括起来通常是逻辑表达式或关
14、系表达式,但也可以是其它任意表达式。非0即为真,0则为假else子句,必须与if配对使用语句可以为五种语句中的任何一种,if(表达式)语句1 else 语句2,35,If语句常见的编程错误,在不该出现分号的地方加了分号复合语句的花括号后不应再加分号,否则将会画蛇添足对于复合语句,忘记加花括号。,if(xy);printf(x is larger than y.n);,if(ba)t=a;a=b;b=t;,推荐都使用复合语句,36,if(表达式)语句1 else 语句2,if(表达式)语句,if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3else 语句n,i
15、f语句格式小结,两个分支一个分支多分支,37,格式执行过程,switch(表达式)case E1:语句组 1;case E2:语句组 2;.case En:语句组 n;default:语句组 n+1;,3.7 switch语句,default子句可以省略不用,38,要每次只执行一个分支使用break语句,switch(表达式)case E1:语句组 1;break;case E2:语句组 2;break;.case En:语句组 n;break;default:语句组 n+1;break;,39,注意,switch语句的使用规则E1,E2,En是整型或字符型的常量表达式,且值必须互不相同cas
16、e语句起到标号的作用,必须用break跳出case后可包含多个可执行语句,且不必加 switch可嵌套多个case可共用一组执行语句,case A:case B:case C:printf(score=60n);break;.,40,【例3-10】输入数字(1-7),输出对应的英文单词MondaySunday,#include void main(void)int a;printf(input integer number(1-7):);scanf(%d,41,switch(a)case 1:printf(Mondayn);case 2:printf(Tuesdayn);case 3:prin
17、tf(Wednesdayn);case 4:printf(Thursdayn);case 5:printf(Fridayn);case 6:printf(Saturdayn);case 7:printf(Sundayn);default:printf(Errorn);,input integer number:5FridaySaturdaySundayError,break;break;break;break;break;break;break;break;,input integer number:5Friday,42,【例3-11】计算器程序。用户输入两个运算数和一个四则运算符,输出计算结
18、果,#include#include void main(void)float a,b;char c;printf(输入表达式:运算数运算数n);scanf(%f%c%f,43,switch(c)case+:printf(%fn,a+b);break;case-:printf(%fn,a-b);break;case*:printf(%fn,a*b);break;case/:if(fabs(b)=1e-6)printf(数据错误,除数不能为0!n);else printf(%fn,a/b);break;default:printf(运算符只能是+,-,*,/!n);,输入表达式:运算数运算数3.
19、5+5.69.100000,输入表达式:运算数运算数10%3运算符只能是+,-,*,/!,输入表达式:运算数运算数2.5/0数据错误,除数不能为0!,输入表达式:运算数运算数5/2.52.000000,44,【例3-12】从键盘上输入百分制的学生成绩,输出学生成绩的等级(优秀、良好、中等、及格、不及格),#include void main(void)int score;printf(请输入学生的成绩:);scanf(%d,/*利用switch语句判断并输出成绩的等级*/,45,if(score=0,方案一:,switch(表达式)case E1:语句组 1;case E2:语句组 2;.ca
20、se En:语句组 n;default:语句组 n+1;,46,switch(score)case 100:case 99:case 98:case 97:case 96:case 95:case 94:case 93:case 92:case 91:case 90:printf(优秀n);break;case 89:,方案二:,47,最优方案:,if(score=0,case 10:printf(优秀n);break;case 9:printf(优秀n);break;,等价,请输入学生的成绩:96优秀Press any key to continue,48,3.8 小结,1关系运算符和关系表
21、达式 关系运算符:,=,=,=高于=和!=和其他运算符比较:算术运算符 关系运算符 赋值运算符,49,2逻辑运算符和逻辑表达式逻辑运算符:&,|,!结合方向:&和|从左至右,!从右至左运算结果:逻辑值(0为假,1为真)逻辑运算的优先级逻辑运算符中:!&|和其他运算符比较:!算术运算符 关系运算符&|赋值运算符,50,if(表达式)语句1 else 语句2,switch(表达式)case E1:语句组 1;break;case E2:语句组 2;break;.case En:语句组 n;break;default:语句组 n+1;break;,if(表达式)语句,if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3else 语句n,if语句和switch语句,