版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 选择结构程序设计,C语言中选择结构是通过if 语句来实现的,if语句的常用格式为: if (关系表达式) 语句1 else 语句2 例:if (x0) y=1; else y=-1; 5.1 关系运算符和关系表达式 “关系运算”实际上是“比较运算”。将两个值进行比较,判断其比较的结果是否符合给定的条件。 5.1.1 关系运算符及其优先次序 (大于)、=(大于等于) =(等于)、!=(不等于) 优先次序:算术运算符关系运算符赋值运算符 例如:ca+b 等效于 c(a+b) ab=c 等效于 (ab)=c a=bc 等效于 a=(bc),5.1.2 关系表达式,用关系运算符将两个表达式连接
2、起来的式子,称为关系表达式。 例:ab,a+bb+c,(a=3)(b=5),ab)(bb则d的值为1 f=abcf的值为0 (因为“”运算符是自左至右的结合方向,先执行“ab”得值为1, 再执行关系运算“1c”,得值0,赋给f)。,5.2 逻辑运算符和逻辑表达式,用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。 5.2.1. 逻辑运算符及其优先级 !(非) 2. if (表达式) 语句1 else 语句2 例:if (xy) printf(“%d”,x); else print(“%d”,y); 3. if (表达式1) 语句1 else if (表达式2) 语句2 else i
3、f (表达式3) 语句3 else if (表达式n) 语句n else 语句n+1,表达式,语句,表达式,语句1,语句2,真,真,假,假,例:,if (number500) cost=0.15; else if (number300) cost=0.10; else if (number100) cost=0.75; else if (number50) cost=0.05; else cost=0;,关于 if 语句三种形式的说明,(1) 三种 if 语句后面都有逻辑表达式,若表达式值为“0”,按“假”处理,若表达式值为非“0”,按“真”处理,执行指定语句。 例:if (3) printf
4、 (“O.K.”); (2) 第二和第三种形式的 if 语句中,在每个 else 前面有一个分号。 if (x0) printf(“%f”,x); else printf(“%f”,-x); (3) 当if 和else后面含有多个操作语句时,用“ ”将多个语句括起来成为一个复合语句。如: if (a+bc else printf(“ 不满足三角形条件”);,例5.3 输入两个实数,按代数值由小到大顺序输出。,#include void main() float a,b,t; scanf(“%f,%f”, ,运行情况如下: 3.6,-3.2 -3.20, 3.60,例5.2 输入3个数a、b、c
5、,要求按由小到大的顺序输出。,#include void main() float a,b,c,t; scanf(“%f,%f,%f”, ,运行情况如下: 3,7,1 1.00,3.00, 7.00,5.3.2 if 语句的嵌套,一般形式: if ( ) if ( ) 语句1 if ( ) else 语句2 if ( ) 语句1 else else if ( ) 语句3 if ( ) 语句2 else 语句4 else 语句3 注:如果 if 与 else 数目不一样,应该用 来确定配对关系,否则与最近的if 配对。正确的表示为: if ( ) if ( ) 语句1 (内嵌 if ) else
6、 语句2,内嵌 if,内嵌 if,例5.3 求下列函数的值。,开始,输入x,X0,X=0,Y=-1,Y=0,Y=1,输出y,结束,Y,Y,N,N,if 语句三种形式使用中的有关说明,例5.3的三种编程方法 (1) 使用if-else语句 #include void main() int x,y; scanf(“%d”, ,if 语句三种形式使用中的有关说明,(2) 使用if语句 #include void main() int x,y; scanf(“%d”, ,if 语句三种形式使用中的有关说明,(3) 使用if-else if-else语句 #include void main() int
7、 x,y; scanf(“%d”, 说明:1. 三种if语句可以完成同一功能,但从可读性来分析,(2)和(3)优 于(1),因此在编程中尽量避免使用嵌套。 2. 从结构性和运算速度考虑,(3)优于(2)。,5.3.3 条件运算符,若if语句中,在表达式为“真”和“假”时,而且都执行一个赋值语句给同一个变量时,可以用简单的条件运算符来处理,例如: if (ab) max=a; else max=b; 可以用条件运算符来处理: max=(ab) ? a:b; 条件为“真”取a值,否则取b值。 条件表达式的一般形式: 表达式1 ?表达式2:表达式3 注:表达式1可以是非条件表达式,若表达式值为“0”
8、 取“表达式3”值,若表达式值为“1”取“表达式2”值。,关于条件运算符的有关说明:,(1) 条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。 max=(ab)?ab (2) 条件运算符优先于赋值运算符,因此上面赋值表达式中括号可省略 (3) 条件运算符的结合方向为“自右至左”。如果有以下条件表达式: ab?acd?cd相当于ab?a(cd?cd) (4) 条件表达式不能取代一般的if语句,只有在if语句中内嵌的语句为赋值语句时才能使用。 (5) 条件表达
9、式中,表达式1的类型可以与表达式2和表达式3的类型不同。 如:x? abx是整型变量,例5.4 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。,#include void main() char ch; scanf(“%c”, 运行结果如下: A b a b,5.4 switch 语句,switch语句是多分支选择语句,处理这类问题如果使用 if 嵌套来实现,不仅嵌套层次多,程序冗长而且可读性降低。而使用switch则一目了然。 一般形式为: switch (表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 ca
10、se 常量表达式n:语句n default: 语句n+1 ,例如:要求按照考试成绩的等级打印出百分制分数段。,switch (grade) /* grade是字符型变量 */ case A:printf(“85100n”);break; case B:printf(“7084n”);break; case C:printf(“6069n”);break; case D;printf(“60n”);break; default:printf(“errorn”); ,grade,输出 “85100”,输出 “7084”,输出 “6069”,输出 “60”,输出 “error”,A,B,C,其他,D
11、,使用switch语句的有关说明:,(1) switch后面括弧内的“表达式”, ANSI标准允许它为任何类型。 (2) 当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。 (3) 每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象。 (4) 各个case和default的出现次序不影响执行结果。 (5) 执行完一个case后面的语句后,流程控制转移到下一个case继续执行。“case常量表达式”只是起语句标号作用,不进行条件判断。因此,在执行一个c
12、ase分支后,使用一个break语句终止switch语句的执行。 (6) 多个case可以共用一组执行语句,如: casea caseb casecprintf(60n);break;,5.5 程序举例,例5.5 判断某一年是否闰年(方法1) #include void main() int year,leap; scanf(“%d”, ,运行结果: 1989 1989 is not leap year. 2000 2000 is leap year. 1980 1980 is leap year. 1900 1900 is not leap year.,判断某一年是否闰年(方法2),#inc
13、lude void main() int year,leap; scanf(%d, ,例5.6 求ax2+bx+c=0方程的根。,编程中应考虑以下几种可能: 1.a=0,不是二次方程。 2.b2-4ac=0,有两个相等实根。 3.b2-4ac0,有两个不等实根。 4.b2-4ac0,有两个共轭复根。 程序如下:,#include #include void main() float a,b,c,disc,x1,x2,realpart,imagpart; scanf(%f,%f,%f“, else realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); pr
14、intf(“有两个共轭复根:n); printf(%8.4f+%8.4fin,realpart,imagpart); printf(%8.4f-%8.4fin,realpart,imagpart); ,运行情况如下 1,2,1 方程有两个相等实根:-1.000 1,2,2 方程有两个共轭复根: -1.0000+1.0000i -1.0000-1.0000i 2,6,1 方程有两个不等实根:-0.1771和-2.8229,例5.7 运输公司对用户计算运费。路程越远,每吨千米运费越低。标准如下:,s250没有折扣 250s5002%折扣 500s10005%折扣 1000s20008%折扣 2000s300010%折扣 3000s15%折扣 设每吨千米货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费f的计算公式为: f=p x w x s x (1-d) 程序如下:,#incl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论