C语言(第五章If).ppt_第1页
C语言(第五章If).ppt_第2页
C语言(第五章If).ppt_第3页
C语言(第五章If).ppt_第4页
C语言(第五章If).ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、1,选择结构是三种基本结构之一, 特点:根据指定条件,成立时执行一组操作,不成立时执行另一组操作。 C中实现选择结构的语句:if 语句和switch语句。,条件语句 格式:if (表达式) 语句 ; 表达式可以是常量、变量、表达式。 表达式值的类型可以是整、实、字符型。 语句可以是一句或复合语句。 例:if(a0) aa;,第五章 分支(选择)结构程序设计,2,5.1.1 关系表达式 1. 关系运算符 关系运算是比较运算(判断两个表达式间的关系) ,结果: 逻辑值“真” ,即true,用非0表示; “假” ,即false,用0表示 关系运算符有6种: 、 = :优先级为6级 = 、!= :优先

2、级为7级 关系运算符的优先级低于算术运算符,高于赋值运算符; 结合性为从左到右,5.1 关系表达式和逻辑表达式,3,关系运算符和其它运算符优先级的比较: 高 算术运算符:* 、/、%(3) +、- (4) 关系运算符:、 =(6) = 、!=(7 ) 逻辑运算符:! (2) scanf(“%d”, ,13,例: main( ) int a, b=0, c=0, d=0; scanf(“ %d”, ,14,在C中,巧妙地使用逻辑表达式,可以表示一个复杂的问题 如:关于闰年问题:符合下列条件之一,均为闰年。 (1)能被4整除并且不能被100整除 (2)能被4整除并且能被400整除 其逻辑表达式为:

3、 (year % 4= =0 else 语句2 ; 3. if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式m) 语句m; else 语句 n;,17,5.2 if 语句 选择结构语句。 5.2.1 if 语句的三种形式 1.第一种形式的条件语句 格式:if (表达式) 语句 ; 表达式可以是常量、变量、表达式。 类型可以是整、实、字符型。 语句可以是一句或 复合语句。,18,例: main( ) int x=0; float y=-5.6; if(x) printf (“x=%dn”,x); if(y) printf

4、 (“y=%fn”, y); if(0) printf(“ 0=%dn”, 0); if(xy) printf (“x-y=%fn”, x-y); if(y -100) x+; y+; printf(“x=%d, y=%fn”, x, y); ,运行结果: y= -5.600000 0=48 x- y=5.600000 x=1, y=-4.600000,19,2. 第二种形式的条件语句 if(表达式) 语句1; else 语句2 ; 例: main( ) int x,y; printf (“please input x, yn”); scanf (“%d %d”, 运行结果:please in

5、put x,y 2 _ 5 输出:y=5 34 _ 28 x=34,20,例: main( ) int x=20; float y=25.6; if(yx) x+; printf(“x=%d, n”, x); else x-; printf(“x=%d”, x); ,21,3. 第三种形式的条件语句 if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式m) 语句m; else 语句 n; 假定:m=4,n=5,所示框图,22,例: 商店售货按购物的款数分别给予不同的优惠折扣。 超过500元打8.5折,300-500打9折

6、,100-300打9.25折,50-100打9.5折,50以下不打折 设变量:n:购物款数, c:优惠折扣百分比, a:优惠后的实际款数,输入: 输出: 800 680.000000 480 432.000000 200 185.000000 80 76.000000 30 30.000000,main( ) float n, c, a; scanf (“%f”, ,23,总结说明: 1. 执行if语句时,先判断表达式的值,为真时(非0),执行其后语句,为假(0)时不执行其后的语句,表达式可以是常量、变量、表达式(关系、逻辑、算术、赋值)。 2. if的各内嵌语句用“ ; ”号结束。 3. i

7、f和else后面的内嵌语句若有多句,用 括起构成复合语句。 例: 输入两个实数,按代数值由小到大输出。 main( ) float a, b, t; scanf(“%f, %f”, ,输入: 输出: 3.6,-3.2 -3.20, 3.60 2.5,8.9 2.50, 8.90,24,例: 输入三个数,按从小到大的顺序输出,t a b c 7 5 3 5 7 3 3 7 5 7 3 5 7,输入: 输出: 7,5,3 3.00,5.00,7.00 1,8,6 1.00,6.00,8.00,main( ) float a, b, c, t; scanf(“%f, %f, %f”, ,25,5.2

8、.2 if 语句的嵌套 嵌套(nested):在if语句中,可以包含多个if 语句 一般形式: if(表达表1) if(表达表2) 语句1 else 语句2 else if(表达表3) 语句3 else 语句4,总体上是哪种形式?,26,使用内嵌的if语句时,应区分表面形式与实际作用 如: if( ) if( ) 语句1 else if( ) 语句2 else 语句3 编程者希望把中间的else与第一行的 if 匹配,虽然书写时排得很整齐,但编译后程序的执行效果如何呢?,27,在C语言中,if与else 的配对原则是: 从最内层开始,else总是与它上面最近的,未曾配对的if配对。 因此,上述

9、问题在编译时的真正效果是: if( ) 等价于下述表示: 当条件成立时执行下面虚框中的内容,28,为了使程序清晰,不至出错,采取的方法是: (1) 使内嵌的if也包含else,如上面的问题可进行如下描述: if( ) if( ) else else if( ) else .,29,(2) 若if和else数目不等,为实现设计者的企图,可用 实现,如上述问题可进行如下描述: if( ) if( ) 语句1 else if( ) 语句2 else 语句3 ,30,main( ) int x, y; scanf(“%d”, ,输入: -1234 0 756 输出:x= -1234, y= -1 x=

10、0, y=0 x=756, y=1,例: 有一符号函数,31,例: main( ) int x, y; scanf(“%d”, ,输入:12 -24 0 输出:x=12, y=1 x= -24, y= -1 x= 0, y =0,32,main( ) int x, y; scanf(%d”, ,输入: 输出: -5 x= -5, y=0 0 x=0, y= -1 8 x=8, y=1,33,main( ) int x, y; scanf(%d”, ,输入: 输出: -5 x= -5, y=0 0 x=0, y=-1 8 x=8, y=1,34,5.2.3 条件运算符 条件表达式的一般形式:表达

11、式1 ? 表达式2 : 表达式3 其中: ? : 是条件运算符号 在if语句中,给同一变量赋值时,可用语句: if(a b) max=a; else max=b; 在C语言中提供了条件运算符及相应的条件表达式,上述问 题用条件运算符实现如下: max= a b ? a : b,35,说明: 1.条件运算符的优先级为13级 max=(a b) ? a : b max= a b ? a : b (=为14级) max=a b ? a : (b+1) max=ab ? a: b+1 (+为4级) (为6级),条件表达式的执行过程是:,36,2.条件运算符的结合方向:从右向左 如有表达式: a b ?

12、 a : c d ? c : d a,b,c,d的取值如下: 表达式值如下 : a b c d 1 2 3 4 4 5 8 6 2 6 3 2 20 30 3,37,3. 若if语句内嵌的是赋值语句,且两分支给同一变量赋值时,才可用条件表达式代替,38,例: main( ) int a,b; scanf(“%d%d”, 输入:3 5 输出:max=5,39,4. 表达式1,2,3类型可以相同,也可不同,不同时,低类型向高类型转换 例 main( ) int x=-1, y=5, z=6; printf (“%cn” , x ? a : b ); printf (“%f n”, yz ? 1 :

13、 1. 5); ,输出:a 1.000000,40,例: 输入一字符,若是大写字母则将其转换为小写字母 main( ) char ch; scanf (“%c”, A的ASCII码值是65 Z的ASCII码值是90,输入: A 输出:a a a 1 1,41,5.3 switch 语句 一种多分支选择结构,可用于统计各种量。 一般形式: switch(表达式) case 常量表达式1: 语句1;break; case 常量表达式2: 语句2; break; case 常量表达式n: 语句n; break; default : 语句n+1; ,42,说明: (1) Switch(表达式) :表达

14、式的值可以是字符、整(ANSI新标准规定允许使用实型数据, 若是实型数据,则将其转换为整型数据。) (2)常量表达式必须是整型或字符型数据(包括表达式常量)。 (3)执行过程: 先计算表达式的值, 依次与case后的常量表达式比较: 若有相等的值, 从这点开始执行; 若无相等的值,则执行default后面的语句,若无default, 则无任何操作。 每个常量表达式的值不能相等; case出现的顺序无关; case中若有break语句,则使控制流程跳出switch; 若无break,则顺序执行下一个case; case后可有多个语句,不必加 ,系统顺序执行;,43,多个case可用一组执行语句

15、如: case a : case b : case c : printf (ok);,44,例: 从键盘输入不同等级,打印相应的分数段 main( ) char n; scanf(“%c”, 问题的提出: (1)若无break语句,情况将如何; (2)case 顺序颠倒是否可以? (3)case 后有多句,不加 是否行?,输入:a c e 输出:85100 6069 input error !,45,例: main( ) double a; scanf(“%lf”, ,输入: 输出: 1.23456 abc 2.56789 123 5 2+3 456.789 other,46,5.4 程序举例

16、 例: 判某年是否是闰年 main( ) int year, leap; scanf(“ %d”, ,输入: 1999 2000 1972 输出: 1999 is not a leap year 2000 is a leap year 1972 is a leap year,47,例: 求ax2+bx+c=0 方程的解 几种可能的情况: a=0:不是二次方程; b2 - 4ac=0 :有两个相等的实根 b2 - 4ac0 :有两个不等的实根 b2 - 4ac 0 :有两个共轭复根,48,#inlude “math.h” main( ) float a, b, c, disc, x1, x2,

17、re, im; scanf(“%f, %f, %f”, ,49,输入: 0, 2, 1 1, 2, 1 2, 6, 1 1, 2, 2 输出: The equation is not quadratic The equation has two equal roots: - 1.0000 The equation has distinct real roots: - 0.1771 and - 2 .8229 The equation has complex roots: - 1. 0000 + 1 . 0000 i - 1 . 0000 - 1 . 0000 i,50,例: 运输费的计算 设: s: 距离 w: 货物重量 d: 折扣 p: 基本运费 f: 总运费 f=p*w*s*(1-d) s250km 没有折扣 250=s500 2%折扣 500 =s1000 5%折扣 1000 =s2000 8%折扣 2000 =s3000 10%折扣 3000 =s 15%折扣,51

温馨提示

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

最新文档

评论

0/150

提交评论