第5章选择结构程序设计.ppt

上传人:本田雅阁 文档编号:2535545 上传时间:2019-04-05 格式:PPT 页数:101 大小:1.18MB
返回 下载 相关 举报
第5章选择结构程序设计.ppt_第1页
第1页 / 共101页
第5章选择结构程序设计.ppt_第2页
第2页 / 共101页
第5章选择结构程序设计.ppt_第3页
第3页 / 共101页
亲,该文档总共101页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第5章选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章选择结构程序设计.ppt(101页珍藏版)》请在三一文库上搜索。

1、第5章 选择结构程序设计,5.1 选择结构的概念,56-3,5.1 选择结构的概念,到目前为止,所介绍的程序都属于顺序结构,顺序结构 程序中的所有语句都将被按照书写的顺序执行一次。但是在 实际应用中,常常需要根据不同情况选择不同的执行语句, 这时需要设计分支结构。 例如:在第4章例4.11中,我们介绍了用海伦公式求三条边 长a、b、c分别为3、4、5的三角形的面积s。这个程序的局限 性很大,它不能判别三边长度是否满足构成三角形的条件。 为此,将该问题的算法用流程图和N-S图描述如图5.1所示。,56-4,5.1 选择结构的概念,56-5,基于图5.1编写的程序如下: #include #inc

2、lude void main() float a,b,c,p,s; printf(“input a,b,c=“); /*输出提示字符串input a,b,c= */ scanf(“%f,%f,%f“, ,5.1 选择结构的概念,56-6,程序运行结果: input a,b,c=3,4,5 s= 6.00 input a,b,c=0,2,3 data error! input a,b,c=9,2,4 data error!,5.1 选择结构的概念,56-7,此程序在执行时,由用户键入三角形的三边长度,通过程 序第7行“if()”判断输入数据是否满足构成三角形的条件:所有 的边长大于0,并且所有两

3、边之和均要大于第三边。若满足, 则计算并输出结果;反之,只要其中有一个条件不满足,就不 能构成三角形,程序输出“data error!”出错信息。 在图5.1和上述程序中包含有分支结构。在C语言中,当需 要根据选择条件来确定程序的执行流程,选择某一个分支来执 行,这样的程序结构被称为选择结构(分支结构)。C语言提 供了两种控制语句来实现这种选择结构:if条件语句和switch开 关语句。,5.1 选择结构的概念,5.2 关系运算符和关系表达式,56-9,5.2 关系运算符和关系表达式,在选择结构中,需要根据选择条件进行判断,然后执行 不同的分支。而选择条件在C语言中一般是由关系表达式组 成的。

4、所谓“关系运算”实际上是“比较运算”,那么比较两个 量的运算符称为关系运算符,由关系运算符组成的式子称为 关系表达式。 关系表达式有且只有两个值:“真”或“假”。由于C语言 中没有逻辑型数据,因此用数值1代表逻辑真,用数值0代表 逻辑假。,56-10,5.2 关系运算符和关系表达式,5.2.1 关系运算符及其优先次序 C语言提供了以下6种关系运算符,这些关系运算符分成两 个优先级。 (大于) = (大于等于) ,=,=)。 后两种关系运算符的优先级别相同(=,!=)。 前四种关系运算符的优先级高于后两种关系运算符。 关系运算符的优先级低于算术运算符。 关系运算符的优先级高于赋值运算符。,56-

5、11,5.2 关系运算符和关系表达式,算术运算符、关系运算符和赋值运算符的运算次序为: 算术运 算符关系运算符赋值运算符 例如: xa+b 等价于 x(a+b) x=a=b 等价于 x=(a=b) x=y53,在C语言中,先计算85的结果为1,也 就是为真,接着再来计算13的结果为0,也就是为假。当然这 个计算过程与原式在数学中的含义(85并且53)是不一样的, 这一点值得我们注意。,56-12,5.2 关系运算符和关系表达式,5.2.2 关系表达式 用关系运算符将两个表达式连接起来的表达式,称为关系 表达式。表达式可以是算术表达式、关系表达式、逻辑表达式 、赋值表达式以及字符表达式。 其一般

6、形式为:表达式 关系运算符 表达式 例如: a+bc+d ab=cd x!=d (x=2)=(b=a) 等都是合法的关系表达式。,56-13,5.2 关系运算符和关系表达式,关系表达式的值是一个逻辑值,即“真”或“假”。C语言中 没有逻辑型数据,以1表示“真”,0表示“假”。C语言在判断一 个量是否为真时,只要不是0就认为是真,只有等于0才认为是 假。 例如:a=1,b=2,c=3, 则:cba : “cb”是真的,值为1,1a是假的,值为0, 因此整个表达式的值为0。 a-b=b-c : 表达式的值为1。a90+3*c : a的ASCII码 值是97,因此表达式的值是0。,56-14,5.2

7、 关系运算符和关系表达式,例5.1 输出各表达式的值。 #include void main() char ch=k; int a=1,b=2,c=3; float x=1E+2,y=6.5; printf(“%d %d %dn“,a+5=c+1,ch-10=97); printf(“%d %dn“,2E+2x=y+0.5); ,56-15,5.2 关系运算符和关系表达式,程序运行结果: 1 0 1 1 0 程序说明: 在程序中计算并输出了各种关系运算符的值。字符变量 是以它对应的ASC码参与运算的,97+5=c+1,根 据运算符的从左向右结合性,先算数后关系,而算数运算符 也要按照先乘除,后

8、加减,即-1-2*2=-5,该式不成立,其值 为0。而2E+2x1E+2值为1,然后13值为1。,5.3 逻辑运算符和逻辑表达式,56-17,5.3 逻辑运算符和逻辑表达式,选择条件在C语言中不仅是由关系表达式组 成的,还可 以由逻辑表达式组成。逻辑运算与关系运算结果相同,有且 只有两个值:“真”或“假”,分别是“1”和“0”。当某一事件由 两个或两个以上条件来约束时,就得使用逻辑运算。 例如:显示班级里总平均成绩大于80的男生,这就有两 个条件约束,既得总平均成绩大于80,而且是男生的人。,56-18,5.3 逻辑运算符和逻辑表达式,5.3.1 逻辑运算符及其优先次序 C语言提供了3种逻辑运

9、算符: &(与运算符)、|(或运算符)、!(非运算符)。 &相当于AND、 |相当于OR、 !相当于NOT。 与其他运算符的优先次序如下: !(非运算符) 算术运算符 优先级别由高到低 算术运算符 &(与运算符)、|(或运算符) 赋值运算符 逗号运算符,优先级别由高到低,56-19,5.3 逻辑运算符和逻辑表达式,例如: (a+b)c)&(x+y)c&x+y7) 可以写成 x7 (!x)&y=z) 可以写成 !x&y=z “&”和“|”是双目运算符,要求有两个运算量(操作数)。具有从左向右的结合性。如,(y%=440) & (y%100!=0)。 非运算符“!”是单目运算符,具有从右向左的结合

10、性。 例如,!a。,56-20,5.3 逻辑运算符和逻辑表达式,5.3.2 逻辑表达式 用逻辑运算符连接起来的表达式,称为逻辑表达式。其一 般形式为: 表达式 逻辑运算符 表达式 其中的表达式又可以是逻辑表达式,从而组成了嵌套的情形 例如:(a&b)|(!c&d) 逻辑表达式的值是一个逻辑值,即1或0。逻辑运算符两侧 的运算对象不但可以是0或1,或者是0或非0的整数,也可以是 任何类型的数据。可以是实型、字符型和指针类型的数据。系 统最终以0和非0来判断它们属于“真”或“假”。例如:a & d ,a和d的ASCII码值均不是0,按“真”处理,因此表达式的值 为1。,56-21,5.3 逻辑运算

11、符和逻辑表达式,5.3.3 逻辑表达式的求值规则 1与运算求值规则 与运算“&”参与运算的两个量都为真时,结果才为真,否则为假。 例如:逻辑表达式53&85,由于53为真,85也为真,其结 果也为真。逻辑表达式53&59,由于53为真,510为假,其结 果为假。 2或运算求值规则 或运算“|”参与运算的两个量只要有一个为真时,结果就为真。 两个量都为假时,结果才为假。 例如:逻辑表达式515,由于515也为假,其结 果也就为假。 3非运算求值规则 非运算“!”参与运算量为真时,结果为假;参与量为假时,结果为真 。例如:逻辑表达式!55的结果为假,因为55的值为真,所以!55的值 为假。,56-

12、22,5.3 逻辑运算符和逻辑表达式,这3种逻辑运算符的运算规则,可用表5-1表示。 表5-1 逻辑运算真值表,56-23,5.3 逻辑运算符和逻辑表达式,由逻辑表达式的求值规则可以总结如下: (1)逻辑运算符两侧的运算对象,除可以是0和非0的整数外, 也可以是其他任何类型的数据。如是实型和字符型等。 (2)在计算逻辑表达式时,只有在必须执行下一个表达式才能 求解时,才求解该表达式,即并不是所有的表达式都被求解。 逻辑与运算表达式中,只要前面有一个表达式被判定为“假”系统不再判定或求解其后的表达式,整个表达式的值为0。 逻辑或运算表达式中,只要前面有一个表达式被判定为“真”系统不再判定或求解其

13、后的表达式,整个表达式的值为1。,例如:对于逻辑表达式: a|&b|c 当a=1(非0)时,表达式的值为1,不必计算判断 b、c; 当a=0时,才判断b,如b=1,则表达式的值为1, 不必计算判断c; 只有当a=0、b=0时,才判断c。,56-24,5.3 逻辑运算符和逻辑表达式,例5.2 输出各逻辑表达式的值。 #include void main() char c=k; int i=1,j=2,k=3; float x=3e+3,y=0.95; printf(“%d, %dn“,!x*!y,!x); printf(“%d, %dn“,x|i 程序运行结果: 0,0 1,0 0,1,56-2

14、5,5.3 逻辑运算符和逻辑表达式,程序说明: 在程序中计算并输出了各种逻辑运算符的值。!x和!y分别为“0”,!x*!y也为“0”,因此输出的值为“0”。由于x为“非0”,所以!x的逻辑值为“0”。对x|i&j-3式,先计算j-3的值为非“0”,再求i&j-3的逻辑值为“1”,所以x|i&j-3的逻辑值为“1”。对ij&xy式,由于ij的值为“1”,而xy为“0”,即表达式的值为“1”和“0”相与的结果,最后为“0”。 对于i=5&c&(j=8)式,由于i=5为假,即值为“0”,该表达式由两个与运算组成,所以整个表达式的值为“0”。对于x+y|i+j+k,由于x+y的值为“非0”,所以整个或

15、表达式的值为“1”。,56-26,5.3 逻辑运算符和逻辑表达式,例5.3 分析下面程序执行后的输出结果 #include void main() int a=1,b=1,c=1; printf(“%dn“,+a|+b ,56-27,5.3 逻辑运算符和逻辑表达式,程序运行结果: 1 2 1 1 1 3 2 1 1 2 2 1 0 1 1 0 0 0 0 0,56-28,5.3 逻辑运算符和逻辑表达式,分析: 根据在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式的方法,在第一个printf()函数中,首先计算“|”的左边部分。如果“|”的左值为非0,则不再求右值。因此,

16、+a的值为2,所以不再求+b&+c的值了,因而,不执行+b和+c。 由此得知,整个逻辑表达式的值为1,a、b、c的值分别为2、1、1。故第一个printf()函数的输出结果为:1,而第二个printf()函数的输出结果为:2 1 1。按照此法,可以求出其他的结果。,5.4 if语句,56-30,5.4 if语句,选择结构程序设计中条件语句的作用是,使程序按某种条件有选择地执行一条或多条语句。用if语句可以构成选择(分支)结构。它根据给定的条件进行判断,以决定执行某个分支程序段。C语言的if语句有3 种基本形式。,56-31,5.4 if语句,5.4.1 if语句的3种形式 1 第一种形式(单分

17、支选择结构) 语句格式: if(表达式) 语句; 语句功能:首先计算表达式的值,若表达式的值为非0 ,则执行语句;若表达式的值为0,则该语句不起作用,继 续执行下面的语句。,56-32,5.4 if语句,56-33,例5.4 任意输入两个整数,输出其中的大数。,5.4 if语句,56-34,5.4 if语句,#include void main() int a,b,max; printf(“input a,b=“); scanf(“%d %d“, ,程序运行结果: input a,b=5 3 max=5,56-35,5.4 if语句,2第二种形式(双分支选择结构) 语句格式: if(表达式)

18、语句1; else 语句2; 语句功能:首先计算表达式的值,若表达式的值为非0, 则执行语句1,否则执行语句2。,56-36,5.4 if语句,56-37,5.4 if语句,例5.5 任意输入两个整数,输出其中的大数。,56-38,5.4 if语句,#include void main() int a,b; printf(“input a,b=“); scanf(“%d %d“, 程序运行结果: input a,b=33 55 max=55,56-39,5.4 if语句,3 第三种形式(多分支选择结构) 前两种形式的if语句一般用于两个分支的情况。当有多个分支选择时,可采用下列多分支选择结构。

19、 语句格式: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式n) 语句n; else 语句n+1;,语句功能: 首先计算表达式1的值,若表达式1的值为非0,则执行语 句1,否则计算表达式2的值,若表达式2的值为非0,则执行语句2,否则计算表达式3的值,若表达式3的值为非0,则执行语句3,所有的表达式的值都是0时,执行语句n+1。,56-40,5.4 if语句,56-41,5.4 if语句,56-42,5.4 if语句,例5.6 晨光小区要举行跳棋比赛,比赛要根据居民的岁数分组。 编写程序输入一个居民的岁数,然后根据表5-2将其分组,输出分组的结果(姓名

20、用编号代替)。,56-43,5.4 if语句,56-44,5.4 if语句,56-45,5.4 if语句,#include void main() int age,numb; char group; printf(“input Number:“); scanf(“%d“, ,程序运行结果: input Number:3 input age:61 The No.3 is in the group 4 input Number:55 input age:26 The No.55 is in the group 2,56-46,5.4 if语句,说明: 1、表达式一般为关系表达式或逻辑表达式,C语言

21、在判断时只要不 是0,就认为是真,只有0时才认为是假,因此表达式可以是任意 类型的表达式,这是C语言与其它高级语言的不同之处。 例如: if(c=getchar( ) printf(“%c”,c); 输入一个字符,赋给变量c只要输入的不是0,就输出输入的字符。 2、分号是C语句必备的成分,因此if和else后面的语句都必须有分号。 例如: if(ab) printf(“%d,%dn”,a,b); else printf(“%d,%dn”,a,b);,56-47,5.4 if语句,3、语句可以是一个简单语句,也可以是复合语句。当条件成立或 不成立时,执行的语句不止一条语句时,必须使用复合语句。

22、例如:将变量a,b中大的放到a中,小的放到b中。 a=5,b=9或a=9,b=5 if(ab) t=a; a=b; b=t; 执行后都可得到:a=9,b=5 如果写成: if(ab) t=a;a=b;b=t; a=5,b=9执行后可得到:a=9,b=5 a=9,b=5执行时“ab”为假,“t=a”不执行,但“a=b”和“b=t”要执行,若t没有赋过值,则会出错。,56-48,5.4 if语句,例5.7 任意输入两个整数,按代数值从小到大的顺序输出这2 个整数。 #include void main() int a,b,t; printf(“input a,b=“); scanf(“%d %d“

23、, 程序运行结果: input a,b=55 33 33 55,56-49,5.4 if语句,例5.8 任意输入三个整数,按代数值从小到大的顺序输出。 #include void main() int a,b,c,t; printf(“input a,b,c=“); scanf(“%d %d %d“, 程序运行结果: input a,b=55 33 66 33 55 66,56-50,5.4 if语句,5.4.2 if语句的的嵌套 在if语句中又包含一个或多个if语句,称为if语句的嵌套。 一般形式如下: 1. if(表达式) if(表达式) 语句1; else 语句2; else if(表达

24、式) 语句3; else 语句4;,2. if(表达式) if(表达式) 语句1; else 语句2; else 语句3;,56-51,5.4 if语句,3. if(表达式) 语句1; else if(表达式) 语句2; else 语句3; 注意:else 总是与它上面最近的尚未与else匹配的if配对。 一般情况下,if与else的数目相同。如果if与else的数目不相同,为实现程序设计者的目的,可以用花括号来确定配对关系。 例如:if(表达式1) if(表达式2) 语句1; else 语句2; 这时 限定了内嵌的if语句的范围,因此else与第一个if匹 配。如果没有 ,则else与第二个

25、if匹配。,56-52,5.4 if语句,例5.9 修改例5.6,排除不可能的岁数。 例5.6 并不是一个完整的程序,它要求输入的岁数应该是 普通人的年龄,否则不能给出正确结果。例如输入-5岁或150岁 ,都将被认为是正确的。使用嵌套的if语句则可以排除不可能 的岁数。 例5.6 晨光小区要举行跳棋比赛,比赛要根据居民的岁数分组。 编写程序输入一个居民的岁数,然后根据表5-2将其分组,输出 分组的结果(姓名用编号代替)。,56-53,5.4 if语句,#include void main( ) int age,numb; char group; printf(“input number:“);

26、 scanf(“%d“, /* 提示输入数据有误 */ ,程序运行结果: input number:3 input age:61 The No.3 is in the group 4 input number:-3 Data error! input number:151 Data error!,56-54,5.4 if语句,56-55,5.4 if语句,#include #include void main() float x,y; printf(“input x=“); scanf(“%f“, ,程序运行结果: input x=1 x= 1.000 y= 0.500 input x=8 x

27、= 8.000 y= 1.000,5.5 条件运算符和条件表达式,56-57,5.5 条件运算符和条件表达式,条件运算符为?和:,它是C语言提供的惟一一个三目运算符,即有三个参与运算的量。由条件运算符连接的式子称为条件表达式。其一般形式为: 表达式1 ?表达式2 :表达式3 其求值规则为:先求解表达式1的值,若表达式1的值非0(真),则表达式2的值为整个条件表达式的值,否则表达式3的值为整个条件表达式的值。 例如: 53?6:20的值6, 5b) max=a; else max=b; 可用条件表达式写为:max=(ab)?a:b;,56-58,5.5 条件运算符和条件表达式,使用条件表达式时,

28、还应注意以下几点: 条件运算符的优先级高于赋值运算符,低于关系运算符和算术运算符。 例如:max=ab ? a:(b+1); 可以去掉括号而写为max=ab ? a: b+1; 条件运算符的结合方向为“自右至左”。 例如:ab ? a: cd ? c:d 相当于:ab ? a:(cd ? c:d)。这也是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。 条件表达式不能取代一般的if语句,只有if语句中内嵌的语句为赋值语句且两个分支都给同一个变量赋值时才能代替if语句。,56-59,5.5 条件运算符和条件表达式,条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不一致。 例如

29、:a ? x: y 表达式2和表达式3的类型也可以不一致(例如,a为整型或实型变量,而x、y为字符型变量),此时条件表达式的值为二者中较高的类型。 例如: ab ? 2: ? 2.5 此时如果ab为真,则条件表达式的值应为2,但由于2.5是实 型,比整型高,因此,把表达式1转成实型2.0。 条件运算符为?和:是一对运算符,不能分开单独使用。,56-60,5.5 条件运算符和条件表达式,例5.11 输入一个字符,如果是小写字母,则转成对应的大写 字母,其它字符和大写字母原样不变。 #include void main() char ch; printf(“input one char:“); c

30、h=getchar(); /* 输入一个字符 */ ch=ch=a ,程序运行结果: input one char:h H input one char:A A,56-61,5.5 条件运算符和条件表达式,例5.12 根据输入的百分制成绩,输出相应的分数等 级A、B、C。即输入成绩,成绩大于等于80分的同 学,用A表示,6079 分的用B表示,60 分以下的 用C表示。,56-62,5.5 条件运算符和条件表达式,#include void main() int score; char grade; printf(“input score=“); scanf(“%d“, 程序运行结果: inp

31、ut score=55 The 55 is belong to C input score=95 The 95 is belong to A,5.6 switch语句,56-64,5.6 switch语句,前面介绍的if语句,常用于两种情况的选择结构,要表示两种以 上条件的选择结构,则要用if语句的嵌套形式,但如果嵌套的if语句 比较多时,程序比较冗长且可读性降低。 在C语言中,可直接用switch语句来实现多种情况的选择结构。其 一般形式如下: switch(表达式) case 常量表达式1:语句1; case 常量表达式2:语句2; case 常量表达式3:语句3; case 常量表达式n

32、:语句n; default 语句n+1; /* 根据需要可有可无 */ ,56-65,5.6 switch语句,switch语句的执行过程: 首先计算表达式的值,并逐个与case后面的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后面的语句。如表达式的值与所有case后面的常量表达式的值均不相等时,则执行default后面的语句(如果没有default部分,则不执行switch语句中的任何语句,而直接去执行switch后面的语句)。,56-66,5.6 switch语句,例如: switch(class) case A

33、: printf(“GREAT!n”); case B: printf(“GOOD!n”); case C: printf(“OK!n”); case D: printf(“NO!n”); default: printf(“ERROR!n”); ,若class的值为B,则输出的结果是: GOOD! OK! NO! ERROR! 若class的值为D,则输出的结果是: NO! ERROR! 若class的值为A,则输出的结果是: GREAT! GOOD! OK! NO! ERROR!,switch语句的功能是:根据switch后面表达式的值找到匹配的入口处,就从此入口处开始执行下去,不再进行判断

34、。,56-67,5.6 switch语句,说明: (1)switch后面常量表达式的类型,可以是整型或字符型,也 可以是枚举类型,不能是上述3种类型以外的类型。 (2)常量表达式的类型应与switch后面表达式的类型一致。 (3)case后面常量表达式的值必须互不相同,否则会出现相互 矛盾的现象。 例如: switch(ch) case 2+3: 语句m; case 8-3: 语句n; 是不允许的。,56-68,5.6 switch语句,(4)多个case可以共用一组执行语句。 例如: switch(ch) case A: case B: case C: case D: printf(“=60

35、n”); 本switch语句表示当ch的值为A、B、C、D时,都会执行printf(“=60n”)。,56-69,5.6 switch语句,(5)switch结构可以嵌套,即在一个switch语句中嵌套另一个 switch语句,这时可以用break语句使流程跳出switch结 构,但是要注意break只能跳出最内层的switch语句。 int x=1,y=0; switch(x) case 1: switch(y) case 0: printf (“x=1 y=0n”); break; case 1: printf (“y=1n”); break; case 2: printf (“x=2n”

36、); ,程序段的运行结果: x=1 y=0 x=2,56-70,5.6 switch语句,例5.13 从键盘上输入一个数字,输出一个有关星期几的 英文单词。 #include void main() int a; printf(“input integer number: “); scanf(“%d“,56-71,5.6 switch语句,switch(a) /* a逐个与case后面的常量比较 */ case 1: printf(“Mondayn“); /* 如果a=1则输出Monday */ break; /* 跳出switch语句 */ case 2: printf(“Tuesdayn“

37、); break; case 3: printf(“Wednesdayn“); break; case 4: printf(“Thursdayn“); break; case 5: printf(“Fridayn“); break; case 6: printf(“Saturdayn“); break; case 7: printf(“Sundayn“); break; default: printf(“Input error!n“); /*如果输入不是1到7的数字,显示错误信息*/ ,56-72,5.6 switch语句,程序运行结果: input integer number: 5 Fri

38、day input integer number: 55 Input error!,5.7 程序举例,56-74,5.7 程序举例,例5.14 编写一个程序,求一元二次方程的根。,56-75,5.7 程序举例,56-76,5.7 程序举例,56-77,5.7 程序举例,#include #include void main() float a,b,c,d,r,p; float x1,x2; printf(“input a,b,c=“); scanf(“%f,%f,%f“, /* 直接输出一个实根 */ else,56-78,5.7 程序举例, d=b*b-4*a*c; if(fabs(d)1e

39、-6) x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf(“x1=%ftx2=%fn“,x1,x2); /* 输出两个不相等的实根 */ else r=-b/(2*a); p=sqrt(-d)/(2*a); printf(“x1=%f+%finx2=%f-%fin“,r,p,r,p); /* 输出两个共轭复根 */ ,56-79,5.7 程序举例,程序运行结果: input a,b,c=2,6,1 x1=-0.177124 x2=-2.822876 input a,b,c=1,3,5 x1=-1.500000 + 1.658312i x1=-

40、1.500000 - 1.658312i input a,b,c=2,4,2 x1=x2=-1.000000 input a,b,c=0,0,1 No answer!,56-80,5.7 程序举例,例5.15 编写一个程序,从键盘上输入一个用整数表示的年份 ,判断该年份是否为闰年。 判断一个用整数表示的年份是不是闰年的条件是,该年份满 足下面两个条件之一: (1)年份能被400整除; (2)年份能被4整除、但不能被100整除。,56-81,5.7 程序举例,56-82,5.7 程序举例,56-83,5.7 程序举例,#include void main() int year,flag; pri

41、ntf(“input a year:“); /* 提示输入年份 */ scanf(“%d“, /* 置为闰年 */ ,56-84,5.7 程序举例,else flag=0; /* 置为非闰年 */ else /* 如果被400整除 */ flag=1; /* 置为闰年 */ if(flag=0) printf(“%d is not leap year.n“,year); /* 输出不是闰年信息 */ else printf(“%d is leap year.n“,year); /* 输出是闰年信息 * ,56-85,5.7 程序举例,程序运行结果: input a year:2004 2004

42、 is not leap year. input a year:2005 2005 is not leap year.,56-86,5.7 程序举例,判断一个用整数表示的年份是不是闰年,用逻辑表达式可编 写程序如下: #include void main( ) int year,flag; printf(“input a year:“); scanf(“%d“, ,56-87,5.7 程序举例,例5.16 输入某年某月,输出该月的天数。 讨论:每年的1、3、5、7、8、10、12月都有31天;4、6、 9、11月都有30天;2月闰年有29天,平年28天。 根据上述分析编写的程序如下: #inc

43、lude void main() int year,month,days; printf(“input year and month:“); scanf(“%d,%d“,56-88,5.7 程序举例,switch(month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31; break; case 4: case 6: case 9: case 11: days=30; break; case 2: if(year%400=0)|(year%4=0 ,程序运行结果: input year and month:

44、2008,2 days=29,56-89,5.7 程序举例,例5.17 某运输公司对外承担货运,计算运费时,运输距离(s) 越长,折扣越多。标准如下: s250km 没有折扣 250s500km 2%折扣 500s1000km 5%折扣 1000s2000km 8%折扣 2000s3000km 10%折扣 s3000km 15%折扣 设吨公里基本运费p,距离s,货物重量w,折扣率d,总运费 f,计算公式为:f=p*s*w*(1-d)。,56-90,#include void main() float p,w,d,f; int c,s; printf(“input p,w,s=“); scanf

45、(“%f,%f,%d“, ,5.7 程序举例,程序运行结果: input p,w,s=5,8,1555 f=572240.00,56-91,5.7 程序举例,如果我们把折扣的标准用图5.9表示,从图中我们可以看出:折扣的变化点都是250的倍数。如果引进一个代表250的倍数的中间变量c,那么折扣率d与距离s的关系可以表示为:当c1时,表示s250,没有折扣;1c2时,表示250s500,折扣d=2%;2c4时,d=5%;4c8时,d=8%;8c12时,d=10%;c12时,d=15%。,56-92,5.7 程序举例,#include void main() float p,w,d,f; int

46、c,s; printf(“input p,s,w=“); scanf(“%f,%f,%d“,56-93,5.7 程序举例,switch(c) case 0: d=0; break; case 1: d=0.02; break; case 2: case 3: d=0.05; break; case 4: case 5: case 6: case 7: d=0.08; break; case 8: case 9: case 10: case 11: d=0.10; break; case 12: d=0.15; f=p*s*w*(1-d); printf(“f=%10.2fn“,f); ,56-

47、94,5.7 程序举例,例5.18 四则运算程序。用户输入两个运算量及一个运算符,输出运算结果。 首先输入参加运算的两个数和一个运算符号,然后根据运算符号来做相应的运算,但是在做除法运算时,应判别除数是否为0,如果为0,运算非法,给出错误提示。如果运算符号不是+、-、*、/,则同样是非法的,也给出错误提示。其他情况,输出运算的结果。 #include void main( ) float a,b,result; int flag; char ch; flag=0; /*运算合法的标志,置0为合法,置1为非法*/ printf(“input expressin: a +(-,*,/) bn“);

48、 scanf(“%f %c %f“,56-95,5.7 程序举例,switch(ch) /* 根据运算符来进行相关的运算 */ case +: result=a+b; /* 加法运算 */ break; case -: result=a-b; /* 减法运算 */ break; case *: result=a*b; /* 乘法运算 */ break; case /: if(!b) printf(“divisor is zero!n“); /* 显示除数为0 */ flag=1; /* 置为运算非法标志 */ else result=a/b; /* 除法运算 */ break; default: printf(“input error!n“); /* 显示非法运算符 */ flag=1; /* 置为运算非法标志 *

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1