ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:59.54KB ,
资源ID:8487668      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8487668.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c语言 第4章 选择结构程序设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

c语言 第4章 选择结构程序设计.docx

1、c语言 第4章 选择结构程序设计第4章 选择结构程序设计4.1关系运算符和关系表达式在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。4.1.1 关系运算符在语言中有以下关系运算符:1) 小于2) 大于4)= 大于或等于5)= 等于6)!= 不等于4.1.2 关系表达式关系表达式的一般形式为: 表达式 关系运算符 表达式例如:a+bc-dx3/2a+1(bc)a!=(c=d)关系表达式的值是真”和“假”,用“1”和“0”表示。如:50的值为“真”,即为1。(a=3)(b=5)由于35不成立,故其值为假,即为0。关系运算符都是双目运算符,其结合性均为

2、左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。,=的优先级相同,高于=和!=;=和!=的优先级相同。ca+bc(a+b)ab=c(ab)=ca=bca=(bca=(bc)例:#includevoid main() char c=k; int i=1,j=2,k=3; double x=3e+5,y=0.85; printf(%d %dn,(a+5=k+1); printf(%d %dn,(1j5),(x-5.25b & cd 等价于 (ab)&(cd)!b=c|da 等价于 (!b)=c)|(dc&x+yc)&(x+y)0 & 42由于50为真,42也为真,相与的结果也为真。或运算

3、|:参与运算的两个量只要有一个为真,结果就为真。 两个量都为假时,结果为假。例如:50|58由于50为真,相或的结果也就为真。非运算!:参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(50)的结果为假。注意:各种类型的数据量都可以参加逻辑运算,在判断一个量是为“真”还是为“假”时,以“0”代表“假”,以非“0”的数值作为“真”。例如:由于5和3均为非“0”因此5&3的值为“真”,即为1。又如:5|0的值为“真”,即为1。例:#includevoid main() int i=0,j=5,z; z=!i*j; /!的优先级高于算术运算 printf(%dn,z);4.2.2 逻

4、辑表达式逻辑表达式的一般形式为:表达式 逻辑运算符 表达式表达式可以又是逻辑表达式,从而组成了嵌套的情形。例如:(a&b)&c根据逻辑运算符的左结合性,上式也可写为: a&b&c逻辑表达式的值是式中各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。例:#includevoid main() char c=k; int i=1,j=2,k=3; double x=3e+5,y=0.85; printf(%d,%dn,(!x*!y),(!x); printf(%d,%dn,(x|i&j-3),(ij&xy); printf(%d,%dn,(i=5&c&(j=8),(x+y|i+j+k)

5、;程序运行后输出:0,01,00,1注意:若f()是一个任意的表达式,返回一个确定的值,由于有: 0&f()=0 1|f()=1所以C+遇到这类情况不会对f()中的操作进行处理,而直接给出该逻辑运算的最终结果0或1。例: #includevoid main() int a=-1,b=4,k; k=(+a0)&(!(b-=0); printf(%d %d %dn,k,a,b);程序运行后输出:0 0 4因为当计算到(+a0)为假后,可以确定整个表达式的值为0,所以没有对&之后的表达式进行处理。4.3 if语句if语句的三种形式1.if(条件表达式)语句单分支结构 if(条件表达式) 语句其语义是

6、:如果条件表达式的值为真,则执行其后的语句,否则不执行该语句。其过程可表示为下图。例:输入两个数,输出较大者。#includevoid main() int a,b,max; printf(input two numbers:); scanf(%d %d,&a,&b); max=a; if(ab)max=b; printf(Max=%dn,max);2.if(条件表达式)语句1 else 语句2双分支结构if(条件表达式)语句1;else 语句2;其语义是:如果条件表达式的值为真,则执行语句1,否则执行语句2。其执行过程可表示为右图。例4.2: 输入两个整数,输出其中的大数。#includev

7、oid main() int a,b; printf(input two numbers:); scanf(%d %d,&a,&b); if(ab) printf(Max=%dn,a); else printf(Max=%dn,b);改用if-else语句判别a,b的大小,若a大,则输出a,否则输出b。例: 输入三个数,找出最小数。可以只使用简单的if语句实现。#includevoid main() int a,b,c,min; printf(input a,b,cn); scanf(%d%d%d,&a,&b,&c); if(ab|ac)min=a; if(ba|bc)min=b; if(ca

8、|cb)min=c; printf(The Minmun is %dn,min);3.if.elseif语句多分支结构前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:if(条件表达式1) 语句1; else if(条件表达式2) 语句2; else if(条件表达式3) 语句3; else if(条件表达式m) 语句m; else 语句n;其语义是:依次判断条件表达式的值当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序。 if-else-if

9、语句的执行过程如下图所示。例: 判别键盘输入字符的是控制符、数字字符、大写字母或小写字母类别。#includevoid main() char c; printf(input a character: ); c=getchar(); if(c=0&c=A&c=a&cb) a+; b+; else a=0; b=10; 例:求三角形的面积。#include#include /为了引用函数要sqrt()main() float a,b,c; printf(please enter a,b,c:); scanf(%f %f %f,&a,&b,&c); if(a+bc & b+ca & c+ab) d

10、ouble s,area; s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(area=%4.4fn,area); else printf(it is not a trilateral!n); return 0;运行程序:please enter a,b,c:4 5 6area=9.92165if语句的嵌套当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。其一般形式可表示如下: if(条件表达式) if(条件表达式)语句1; else 语句2; elseif(条件表达式)语句3; else 语句4;注意:在嵌套内的if语句可

11、能又是if-else型的,这将会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。例如: if(表达式1) if(表达式2) 语句1; else语句2;其中的else究竟是与哪一个if配对呢?应该理解为: if(表达式1) if(表达式2) 语句1; else 语句2;还是应理解为: if(表达式1) if(表达式2) 语句1; else 语句2;为了避免这种二义性,C/+语言规定,else 总是与它前面最近的if配对,因此对上述例子应按前一种情况理解。在实现编程中,可以借且缩格形式或来确定else与if的配对关系,以提高程序的可读性。 例:用if语句嵌套实现比较两

12、个数的大小关系。#includemain() int a,b; printf(please input A,B:); scanf(%d %d,&a,&b); if(a!=b) if(ab) printf(ABn); else printf(ABn); else printf(A=Bn); return 0;说明:这种问题用if-else-if语句也可以完成。而且程序更加清晰。因此,在一般情况下较少使用if语句的嵌套结构。以使程序更便于阅读理解。例:用if-else-if结构实现比较两个数的大小关系。#includemain() int a,b; printf(please input A,B:

13、); scanf(%d %d,&a,&b); if(a=b)printf(A=Bn); else if(ab)printf(ABn); else printf(ABn); return 0;例: 写一个程序,从键盘输入年份year,判断其是否是闰年。闰年条件:能被4整除,但不能被100整除的年份是闰年,或者能被400整除的年份是闰年,即year是闰年要满足的条件是:year % 4=0 & year % 100 !=0 | year % 400=0从而可以写出如下的程序:#includemain() int year; printf(Please input the year:); scanf

14、(%d,&year); if(year % 4=0 & year % 100 !=0 | year % 400=0) printf(%d is a leap yearn,year); else printf(%d is not a leap yearn,year); return 0;注意:简单的分支结构可以用条件表达式替代。例如条件语句: if(ab) max=a; else max=b;可用条件表达式写为max=(ab)?a:b;例:将输入的大写字母转换为小写字母输出。#includemain() char ch; printf(Input a character:); scanf(%c,

15、&ch); ch=ch=A & ch=Z? ch+32:ch; printf(%cn,ch); return 0;4.4 switch语句开关语句语言还提供了另一种用于多分支选择的switch语句, 其一般形式为: switch(表达式) case常量表达式1: 语句1; case常量表达式2: 语句2; case常量表达式n: 语句n; default : 语句n+1; 语义:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执

16、行default后的语句。例:#includemain() int a; printf(input integer number:); scanf(%d,&a); switch(a) case 1:printf(Mondayn); case 2:printf(Tuesdayn); case 3:printf(Wednesdayn); case 4:printf(Thursdayn); case 5:printf(Fridayn); case 6:printf(Saturdayn); case 7:printf(Sundayn); default:printf(errorn); return 0

17、;程序运行情况:input integer number:3WednesdayThursdayFridaySaturdaySundayerror说明:本程序是要求输入一个数字,输出一个英文单词。但是当输入3之后,却执行了case3以及以后的所有语句,输出了Wednesday 及以后的所有单词。在switch语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case语句的情况。 这是与前面介绍的if语句完全不同的,应特别注意。语言还提供了一种break语句,专用于跳

18、出switch语句,break 语句只有关键字break,没有参数。例:#includemain() int a; printf(input integer number:); scanf(%d,&a); switch(a) case 1:printf(Mondayn);break; case 2:printf(Tuesdayn);break; case 3:printf(Wednesdayn);break; case 4:printf(Thursdayn);break; case 5:printf(Fridayn);break; case 6:printf(Saturdayn);break;

19、 case 7:printf(Sundayn);break; default:printf(errorn);break; return 0;程序运行情况:input integer number:3Wednesday在使用switch语句时还应注意以下几点:1)在case后的各常量表达式的值不能相同,否则会出现错误。表达式和各case后面的常量表达式的类型为字符型、整型或枚举型表示地址标号。 2)在case后,允许有多个语句,可以不用括起来。3)若在每个case子句后都设置有break语句,则各case和default子句的先后顺序可以变动,而不会影响程序执行结果。4)default子句可以省

20、略不用。5)switch语句允许嵌套使用。4.5 选择结构程序设计举例例1:任意顺序输入三个整数,按从大到小的顺序输出这三个数。#includemain() int a,b,c,temp; printf(input three numbers:); scanf(%d %d %d,&a,&b,&c); if(ab)temp=a;a=b;b=temp; if(ac)temp=a;a=c;c=temp; if(bc)temp=b;b=c;c=temp; printf(%d %d %dn,a,b,c); return 0;例4.6 根据学生成绩判断等级。#includevoid main() int

21、score; printf(Input score:); scanf(%d,&score); switch(score/10) case 10: case 9: printf(%d:An,score); break; case 8: case 7: printf(%d:Bn,score); break; case 6: printf(%d:Cn,score); break; default: printf(%d:Dn,score); 例4.7:求ax2+bx+c=0方程的根,a,b,c由键盘输入,设b2-4ac0。求根公式为: 令,则x1=p+q,x2=p-q源程序如下:#include#in

22、cludevoid main() float a,b,c; /输入带小数点的数,宜定义为float double disc,x1,x2,p,q; printf(Please input three numbers:); scanf(%f %f %f,&a,&b,&c); disc=b*b-4*a*c; p=-b/(2*a); if(fabs(a)=0) printf(The equation is not a quadratic.n); else if(disc=0) printf(The equation has two equal roots:); printf(%8.4fn,p); else if(disc0) printf(The equation has distinct real roots:n); q=sqrt(disc)/(2*a); x1=p+q;x2=p-q; printf(%8.4f,%8.4fn,x1,x2); else if(disc0) printf(The equation has distinc image roots:n); q=sqrt(-disc)/(2*a);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1